I am trying to query the contact and another data extension and then upsert a third data extension called customerETL.
Everything works if I hardcode values into the function but when I pass values through a for loop, I get the following error:
{"message":"Length cannot be less than zero.\r\nParameter name: length","description":"System.ArgumentOutOfRangeException: Length cannot be less than zero.\r\nParameter name: length – from Jint\r\n\r\n"}
Here is the code:
<script runat="server" language="JavaScript">
Platform.Load("core", "1.1.1");
function getPreferences(subkey, email, deName, fieldname){
var dataExt = DataExtension.Init(deName);
var dataFilter = {Property:"Subscriberkey",SimpleOperator:"equals",Value:subkey};
var data = dataExt.Rows.Retrieve(dataFilter);
data = data[0]
var dataConcatList = "";
var dataTrueFields = [];
for (var key in data){
if(data[key] === "True"){
dataTrueFields.push(key);
}
}
for (var i = 0; i < dataTrueFields.length; i++) {
dataConcatList += dataTrueFields[i] + "|";
}
var result = dataConcatList.slice(0, -1);
var attribute = Stringify(result);
attribute = attribute.replace(/"/g, '');
var deName = "customerETL";
whereColumnArr = ["attribute:sfmcContactKey","attribute:emailAddress"];
whereColumValueArr = [subkey, email];
upsertColumnArr = [fieldname];
upsertColumnValueArr = [attribute];
var upsertedRowCount = Platform.Function.UpsertDE(
deName,
whereColumnArr,
whereColumValueArr,
upsertColumnArr,
upsertColumnValueArr
);
}
try {
var contactDE = DataExtension.Init("Contact");
var contactData = contactDE.Rows.Retrieve();
var listOfsubkeys = [];
var listOfemails = [];
for (var n = 0; n < contactData.length; n++){
listOfsubkeys.push(contactData[n]["Subscriberkey"]);
listOfemails.push(contactData[n]["EmailAddress"]);
}
for (var i = 0; i < contactData.length; i++){
getPreferences(listOfsubkeys[i],listOfemails[i],"travel_reasons","attribute:reasons")
}
}
catch (error){
var err = Stringify(error);
Write(err);
}
</script>
Thanks in advance.
Best Answer
Seems like the version of JavaScript running in MC, does not support negative parameters in the
slice()
method:Replace it with something like this:
Keep in mind that SSJS is an ancient version of JavaScript. As the documentation states:
The Core library currently stands at version 1.1.1 and supports ECMAscript 3.0. This version represents the current, original version of the server-side JavaScript library and contains no revisions.