1

I have created a HTML landing page like below, which takes the input from the user for Data Extension name

<html>
  <body>
    <h1>
      Create a new Data Extension 
    </h1>
    <form action="{{URL_OF_SSJS_CODE_RESOURCE}}" method="post">
  <label for="dename">Data Extension Name:</label><br>
  <input type="text" name="dename">
      <input type="submit" value="Create & Copy">
</form> 
  </body>
</html>

Then on form submit the DE name is passed to SSJS code resource (in order to create a new DE entered by user) which looks like below

 <script runat="server">
    Platform.Load("Core","1");
    
    try{
    var deName = Request.GetFormField("dename");
    Write("DE Name is...." + deName);
    }

    catch(err)
    {
      Write("error is.."+err);
    }
      
        /*  fetch folder  */
  var FolderAttributes = Folder.Retrieve({ Property: "Name", SimpleOperator: "equals", Value:"Test_Create"});
  var FolderID = FolderAttributes[0].ID; 
    
    //create DE
   try{
   
   var obj1={ 
    "Name" :deName,
    "CustomerKey" : deName,
     "CategoryID": FolderID,
    "Fields": [
     { "Name" : "name", "FieldType" : "Text", "MaxLength" : 50 }
    ] 
    };
    
  /*  function*/ 
  var myDe=DataExtension.Add(obj1);
   }
    
    catch(err)
    {
    Write ("cannot create DE: "+err);
    }
  </script>

The DE Name is passed to the SSJS page but still I am not able to create a DE and get the caught error. Could anyone point where I am doing wrong and how to fix this code so that the DE gets created. When I try to create the DE in automation studio (by passing static values), I can successfully create the DE.

1 Answer 1

0

Upd. Just tested, Your code should work if You will use single try catch instead of two. Just copy this 2 lines of code to the second try and remove first try catch

var deName = Request.GetFormField("dename");
Write("DE Name is...." + deName);

The code below is same as Yours, but uses WSProxy functions and double check of the parent folder (contentType + name). Also it allows to add IsSendable and IsSendableSpecified options to Data Extensions.

<script runat="server">
    Platform.Load("Core", "1");
    var response;

    var soap = new Script.Util.WSProxy();

    /* DE Fields  */
    var TestDETemplate = [
        { Name: 'Test', FieldType: 'Text', IsPrimaryKey: true, IsRequired: true, MaxLength: 254 }
    ]

    try {
        var deName = Request.GetFormField("dename");
        Write("DE Name is...." + deName);

       /* Retrieve DE FolderID */
        response = soap.retrieve('DataFolder', ['ID'], {
            LeftOperand: {
                Property: 'Name',
                SimpleOperator: 'equals',
                Value: 'Test' // Change this value to Yours parent DE Folder Name
            },
            LogicalOperator: 'AND',
            RightOperand: {
                Property: 'ContentType',
                SimpleOperator: 'equals',
                Value: 'dataextension'
            }
        });
        var testDEFolderID = response.Results[0].ID;

        var testDEConfig = {
            Name: deName, // Name
            CustomerKey: deName, // Customer Key
            CategoryID: testDEFolderID, // FolderID
            Fields: TestDETemplate, // DE Fields
            IsSendable: false, // Sendable true/false
            IsSendableSpecified: false 
           // if Sendable true -> 
           // IsSendable: true,
           // IsSendableSpecified: true,
           // SendableDataExtensionField: { Name: 'SubscriberKey' }, 
           // SendableSubscriberField: { Name: 'Subscriber Key' }
        }
        response = soap.createItem('DataExtension', testDEConfig)
    } catch (err) {
        Write("error is.." + err);
    }

</script>
1
  • 2
    Welcome to Salesforce Stack Exchange (SFSE)! Thank you for your contribution. Here on SFSE the why (explanation) is often as or more important than the how (code) in an answer - especially since it can help future searchers/readers. Please edit your answer to explain - even briefly (but enough to understand) - what in your code is different from the code posted in the question, and why that solves the problem.
    – Moonpie
    Mar 15, 2022 at 14:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.