0

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>

0

You must log in to answer this question.

Browse other questions tagged .