How can we update the nested CDT values with IFM? I have used follow

Certified Lead Developer
How can we update the nested CDT values with IFM?

I have used following queries to update the nested CDT(as attached) values with IFM but no query is worked.

=UPDATE_PMI 144 SET PV test = [{five:1,test2: {three:2,four:3,test1: {one:4,two:5}}}]
It is updating the PV 'test' with null. And, I have also tried with many possible ways to update a nested CDT variable like
={"UPDATE_PMI 144 SET PV test.test2.test1.one = [10001234]"}
={"UPDATE_PMI 268435724 SET PV test.test2.test1[1].one = [10001234]"}

={"UPDATE_PMI 144 SET PV test.rndTest2.rndTest1 = [{id=10001234}]"}
In all these cases, it's throwing "class java.lang.ArrayIndexOutOfBoundsException" and "Expression evaluation error : Variable '!id' not found." execeptions.

And,

"UPDATE_PMI 536871922 SET PV test3 = [1,{2,3,{4,5}}]",
"UPDATE_PMI 536871922 SET PV test3 = ["&"""[five=1,test2=[three=2,four=3,test1=[one=4,two=5]]]"""&"]",
"UPDATE_PMI 536871922 SET PV test3 = [[five=1, te...

OriginalPostID-166188

OriginalPostID-166188

  Discussion posts and replies are publicly visible

  • 0
    Certified Lead Developer
    over 7 years ago
    ...st2=[three=2, four=3, test1=[one=4, two=5]]]]",
    "UPDATE_PMI 536871922 SET PV test3 = [{five=1,{three=2,four=3,{one=4,two=5}}}]",
    "UPDATE_PMI 536871922 SET PV test3.test2.test1.one = [5]"

    Is there any possible way to update a variable 'one' in the nested CDT 'test1' in above example using IFM or any? or Can I assume that we can't update a nested CDT PV's using IFM?
  • IFM Manager has limited support for CDTs, it doesn't work well with nested multiples. The way around it is to update the whole CDT, or a high level part of the CDT before nested multiples are used.

    In the process with the IFM node:
    1. Use a script task to create a version of "test" (the test3 top level CDT) that represents the values you want to set
    2. Use the externalize function on that CDT and save into pv!externTest3
    3. Then in the IFM node: UPDATE_PMI 536871922 SET PV test3 = [internalize(" + pv!externTest3 +")]

    It will cause the externalized string to be converted back to it's real CDT value and update the process with that value.
  • 0
    Certified Lead Developer
    over 7 years ago
    Hi James,

    I have tried with the way you have specified above and it is not working as expected. Following are the Queries and exception results.

    1. ="UPDATE_PMI 268436209 SET PV test = [internalize(" & pv!externTest3&")]"
    ={"UPDATE_PMI 268436209 SET PV test = [internalize("&pv!externTest3&")]"}
    Exception for these queries is,
    Expression evaluation error : Invalid operator 'FFFFFFFF010000006E1600004C7F000001000000B60B00000100000002000000', expecting '(' or ','

    2. ={"UPDATE_PMI 268436209 SET PV test = [internalize("+pv!externTest3+")]"}
    Exception for these queries is,
    ": Incorrect start of IFM Query"

    3. ={"UPDATE_PMI 268436209 SET PV test = [pv!test]"}
    No exception and no updation.

    4. ={"UPDATE_PMI 268436209 SET PV test = ["&pv!test&"]"}
    ="UPDATE_PMI 268436209 SET PV test = [" &internalize(pv!externTest3) &"]"
    Exception for these queries is,
    "UPDATE_PMI 268436209 SET PV test = [[id=1, rndTest2=[id=2, rndTest1=[id=5742]]]]: Unknown characters at index 77"

    5. ="UPDATE_PMI 268436209 SET PV test = [" &pv!externTest3 &"]"
    Exception is,
    "Expression evaluation error : Expression is invalid (1 token(s) remain after parsing)".

    Please find attached screenshots for script task input and outputs. Please give me any way of work around.

    Thank you.


  • The function value likely needs to be quoted as it expects a string. Could you try like this?
    ="UPDATE_PMI 268436209 SET PV test = [internalize(""" & pv!externTest3&""")]"
  • 0
    Certified Lead Developer
    over 7 years ago
    Great!!!! It's working fine as expected. Thank you very much James. :)