cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Scripting in SCP Workflow Cloud Foundry

vbalko-claimate
Contributor
0 Likes
1,872

Hello,

I am manipulating data in a script task in SCP Workflow on Cloud Foundry.

I got object stored in the context

$.context.myObj = {
                    key1: val1,
                    key2: val2,
                    key3: val3
};

Now I try to handle that object as a standard JS object

Object.keys($.context.myObj).forEach(.....)

I got an error

TypeError: [object ContextObject] is not an Object in <eval> at line number 2

Where can I find the specification of that special kind of object and how to handle them? Is there some specification, documentation or at least some information (beside that standard docu)

View Entire Topic
tobias_breyer
Product and Topic Expert
Product and Topic Expert

Hi Vladimir,

unfortunately, we inherit a bug from the underlying JavaScript engine that makes Object.keys fail on our kind of context objects.

Fortunately, there is a workaround that is quite simple in most cases. It just lacks the functional approach you have with forEach.

You can use the for-in loop:

for(var key in $.context.myObj) { 
// use key for something
}

The help pages are basically our specification. Due to restrictions and bugs of the underlying engine, it is more a "specification by example". For reading the context, see here:

https://help.sap.com/viewer/e157c391253b4ecd93647bf232d18a83/Cloud/en-US/36fa9a00893f42939fa17516a33...

I'll take care that the work-around is documented.

Thanks for bringing this up.

Best regards,

Tobias

vbalko-claimate
Contributor
0 Likes

Thank you tobias.breyer it is exactly what I needed.

Please put that info to the documentation, it is really worth it.

And just out of curiosity - what is that engine, which does not contains Object.keys prototype? And why it does not have it?

0 Likes

Hi Tobias.

I have tried with you suggested method to iterate over keys in context object and to delete any that includes specific text, but the returned error says key.includes is not a function. Is that also some limitation?

for(var keyin$.context.myObj){
if(key.includes("string") {
delete $.context[key]
}
}
tobias_breyer
Product and Topic Expert
Product and Topic Expert
0 Likes

Hi Shanir,

Array.includes is ES6, but we only support ES5.1

See

https://help.sap.com/viewer/e157c391253b4ecd93647bf232d18a83/Cloud/en-US/ca9a4381628a40908ffe1f74bde...

You can use indexOf which has slightly different behavior, but usually can do most of the same tasks. See for example:

https://betterprogramming.pub/array-includes-method-in-javascript-38d919b59c41

Regards,

Tobias