Search all the data extension from your MC account as you type. Diplays information about the DE such as the folder Id, or the fields infomations. There is also a .csv
option for exporting records. You can host this into a cloud page.
Form that retrieves all the data extension from you marketing cloud account and display it into a html list
input.
<form action="" method="get">
<label>
<input list="deNameToSearch" name="deNameInput" class="slds-input">
</label>
<script runat="server">
Platform.Load("Core", "1.1.1");
try {
// get all DEs names for the dropdown input
var searchItem = Platform.Request.GetQueryStringParameter('deNameInput');
var prox2 = new Script.Util.WSProxy();
var objectType2 = "DataExtension";
var cols2 = ["Name"];
var filter2 = {
Property: "Name",
SimpleOperator: "notEquals",
Value: "All Subscribers"
};
var allDes = prox2.retrieve(objectType2, cols2, queryAllAccounts);
// generates htnl input
Write('<datalist id="deNameToSearch">');
for (var l = 0; l < allDes.Results.length; l++) {
Write('<option value="' + allDes.Results[l].Name + '">');
}
Write('</datalist>');
// create an AMPscript value to pass the variable values to the next SSJS code block
Variable.SetValue("@searchItem", searchItem);
} catch (ex) {
Write("error message: " + ex);
}
</script>
<input class="slds-button slds-button_brand slds-m-top_large" id="deButtonToSearch" type="submit" value="Search">
</form>
Once enter
key or the submit button pressed this will genereate a AMPscript varialble that will be used by the next SSJS script.
Searches the returned data extension properties and output it into HTML tables.
<script runat="server">
Platform.Load("Core", "1.1.1");
try {
var prox1 = new Script.Util.WSProxy();
var searchItemVal1 = Variable.GetValue("@searchItem");
// indicating the properties of the DE according to the SOAP API data extension object
var cols1 = ["Name", "CustomerKey", "CategoryID", "IsSendable", "IsTestable", "CreatedDate", "ModifiedDate", "Description"];
var filter1 = {
Property: "Name",
SimpleOperator: "equals",
Value: searchItemVal1
};
// retrieve the fields informations
var desc = prox1.retrieve("DataExtension", cols1, filter1);
var CustKeyStr = Platform.Function.Stringify(desc.Results[0].CustomerKey);
var myDe = DataExtension.Init(desc.Results[0].CustomerKey);
var fields = myDe.Fields.Retrieve();
// ROWS retrieve for the CSV export
var deRecords = myDe.Rows.Retrieve();
var stringDeRecords = Stringify(deRecords);
Variable.SetValue("@ampDeRecords", stringDeRecords);
// Get the DE name, for the csv file too
var deName = desc.Results[0].Name;
Variable.SetValue("@ampDeName", deName);
// outputs the results into HTML tables using SLDS
Write('<table class="slds-table slds-table_cell-buffer slds-table_bordered"> <thead> <tr class="slds-line-height_reset"> <th class="" scope="col"> <div class="slds-truncate" title="Name">Name</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="CustomerKey">CustomerKey</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="Folder Id">Folder Id</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="Description">Description</div> </th> </tr> </thead> <tbody>');
Write('<tr class="slds-hint-parent">');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].Name + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].CustomerKey + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].CategoryID + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].Description + '</div></td>');
Write('</tr>');
Write('</table>');
Write('<br><br>');
Write('<table class="slds-table slds-table_cell-buffer slds-table_bordered"> <thead> <th class="" scope="col"> <div class="slds-truncate" title="Created Date">CreatedDate</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="Modified Date">ModifiedDate</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="Is Sendable">IsSendable</div> </th> <th class="" scope="col"> <div class="slds-truncate" title="Is Testable">IsTestable</div> </th> </thead> <tbody>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].CreatedDate + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].ModifiedDate + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].IsSendable + '</div></td>');
Write('<td data-label=""><div class="slds-truncate" title="">' + desc.Results[0].IsTestable + '</div></td>');
Write('</tr>');
Write('</table>');
Write('<br><br>');
Write('<table class="slds-table slds-table_cell-buffer slds-table_bordered"><thead><tr class="slds-line-height_reset"><th class="" scope="col"><div class="slds-truncate" title="">Name</div></th><th class="" scope="col"><div class="slds-truncate" title="">Field Type</div></th><th class="" scope="col"><div class="slds-truncate" title="">Max length</div></th><th class="" scope="col"><div class="slds-truncate" title="">IsPrimaryKey</div></th><th class="" scope="col"><div class="slds-truncate" title="">DefaultValue</div></th></tr></thead><tbody>');
for (var i = 0; i < fields.length; i++) {
Write("<tr>");
Write("<td>" + fields[i].Name + "</td>");
Write("<td>" + fields[i].FieldType + "</td>");
Write("<td>" + fields[i].MaxLength + "</td>");
Write("<td>" + fields[i].IsPrimaryKey + "</td>");
Write("<td>" + fields[i].DefaultValue + "</td>");
Write("</tr>");
}
Write('</tbody></table>');
} catch (ex) {
Write("error message: " + ex);
}
</script>
Get the data extensions rows thanks to the ampDeRecords
variable and generates a .csv
file with the searched data extension name
<script>
// set the DE rows out put as JSON
var json = %%=v(@ampDeRecords)=%% ;
var fields = Object.keys(json[0])
var replacer = function(key, value) { return value === null ? '' : value }
var csv = json.map(function(row) {
return fields.map(function(fieldName) {
return JSON.stringify(row[fieldName], replacer)
}).join(',')
})
// add header column
csv.unshift(fields.join(','))
console.log(csv.join('\r\n'))
// Download function
function downloadcsv() {
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI((csv.join('\r\n')));
hiddenElement.target = '_blank';
// set the name of the file according to the name of the DE
hiddenElement.download = '%%=v(@ampDeName)=%%.csv';
hiddenElement.click();
}
</script>
<button class="slds-button slds-button_neutral" onclick="downloadcsv()"><b>Download the data extension in .csv</b></button>