I am trying to create a page where I can paste a data schema and it will create a data extension rather than doing it all by hand. Here is what I have so far but its not working. Please advise.
EDIT: The issue seems to be around the date field type.
<head>
<title>Create Data Extension</title>
</head>
<body>
<h1>Create Data Extension from Schema</h1>
<form action="%%=RequestParameter('PAGEURL')=%%" method="post">
<label for="dataExtensionName">Data Extension Name:</label>
<input type="text" id="dataExtensionName" name="dataExtensionName" required><br><br>
<label for="schema">Paste your schema here:</label><br>
<textarea id="schema" name="schema" rows="10" cols="50" required></textarea><br><br>
<input type="submit" value="Create Data Extension">
</form>
<script runat="server">
Platform.Load("Core", "1.1.5");
try {
if (Request.Method == "POST") {
var dataExtensionName = Request.GetFormField("dataExtensionName");
var schema = Request.GetFormField("schema");
// Split the schema by lines
var lines = schema.split(/[\r\n]+/);
var dataExtensionFields = [];
for (var i = 0; i < lines.length; i++) {
var line = lines[i].replace(/^\s+|\s+$/g, ''); // Remove leading and trailing whitespaces
if (line === "") {
continue;
}
var tokens = line.split(/\s+/);
tokens[0] = tokens[0].replace(/,/g, ''); // Remove comma from the field name
var fieldName = tokens[0];
var fieldTypeTokens = tokens[1].split("(");
var fieldTypeRaw = fieldTypeTokens[0].toLowerCase();
var fieldLength = fieldTypeTokens.length > 1 ? fieldTypeTokens[1].slice(0, -1) : null;
var isRequired = (tokens[2] === "not" && tokens[3] === "null,");
var fieldType;
switch (fieldTypeRaw) {
case "string":
fieldType = "Text";
break;
case "date":
fieldType = "Date";
break;
case "integer":
fieldType = "Number";
break;
default:
Write("<p>Invalid field type: " + fieldTypeRaw + "</p>");
return;
}
var fieldDefinition = {
"Name": fieldName,
"FieldType": fieldType
};
if (fieldType === "Text") {
fieldDefinition.MaxLength = parseInt(fieldLength, 10);
}
if (isRequired) {
fieldDefinition.IsPrimaryKey = true;
fieldDefinition.IsRequired = true;
}
dataExtensionFields.push(fieldDefinition);
}
var dataExtensionObj = {
"CustomerKey": String(Platform.Function.GUID()).toUpperCase(),
"Name": dataExtensionName,
"CategoryID": 0,
"Fields": dataExtensionFields
};
var prox = new Script.Util.WSProxy();
var result = prox.createItem("DataExtension", dataExtensionObj);
if (result.Status == "OK") {
Write("<p>Data Extension created successfully.</p>");
} else {
Write("<p>Failed to create Data Extension.</p><pre>" + Stringify(result) + "</pre>");
}
}
} catch (e) {
Write("<p>Error: " + e.message + "</p><pre>" + Stringify(e) + "</pre>");
}
</script>
</body>