...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<Find Status="Success" Format="all"> <Result> <VendorInfo QName="Atomiton.Sensors.VendorInfo"> <vendorId>vendorA</vendorId> <vendorCity Value="Calgary" Known="Calgary" Version="1" Timestamp="1489093271736" DateTime="2017-03-09 13:01:11.736" QName="Atomiton.Sensors.VendorInfo.vendorCity" FName="vendorCity"/> <vendorName Value="Phidget" Known="Phidget" Version="1" Timestamp="1489093271734" DateTime="2017-03-09 13:01:11.734" QName="Atomiton.Sensors.VendorInfo.vendorName" FName="vendorName"/> </VendorInfo> </Result> <Result> <VendorInfo QName="Atomiton.Sensors.VendorInfo"> <vendorId>vendorB</vendorId> <vendorCity Value="Calgary" Known="Calgary" Version="1" Timestamp="1489093277295" DateTime="2017-03-09 13:01:17.295" QName="Atomiton.Sensors.VendorInfo.vendorCity" FName="vendorCity"/> <vendorName Value="Phidget" Known="Phidget" Version="1" Timestamp="1489093277294" DateTime="2017-03-09 13:01:17.294" QName="Atomiton.Sensors.VendorInfo.vendorName" FName="vendorName"/> </VendorInfo> </Result> <Result> <VendorInfo QName="Atomiton.Sensors.VendorInfo"> <vendorId>vendorC</vendorId> <vendorCity Value="Calgary" Known="Calgary" Version="1" Timestamp="1489093282311" DateTime="2017-03-09 13:01:22.311" QName="Atomiton.Sensors.VendorInfo.vendorCity" FName="vendorCity"/> <vendorName Value="Phidget" Known="Phidget" Version="1" Timestamp="1489093282311" DateTime="2017-03-09 13:01:22.311" QName="Atomiton.Sensors.VendorInfo.vendorName" FName="vendorName"/> </VendorInfo> </Result> </Find> |
# | Question |
---|
Explaination |
---|
1 | How do I determine the number of iterations of a for loop?
|
|
|
Number of iterations is always determined by the Number of Containers from the specified source and Each is a single variable format. Example: Here Source is: $Response.Message.Value.Find
| |||||||||||
2 | What happens if I do not specify value in Each i.e Each="k:v"
|
| |||||||||
3 | What happens if we provide only one variable in key/value format i.e either k: or :v
|
|
Tips and Caveats
- If you use $LocalData your loop variables will NOT be available after the loop (they are defined in the scope of iteration only)
We are manipulating structures, so the general idea is to assign a STRUCTURE to a loop variable so you can manipulate the CONTENT of the structure through the variable. That is, <For each=”val” in=”Find.Result.VendorInfo.VendorTitle.Value”> will allow you to do if/select on the val, but will NOT allow you to change the VendorTitle, only the value of loop variable which is a simple value in this case.
Caveat Example
Code Block language xml theme Eclipse title Assign STRUCTURE <Query> <Find format="Version"> <VendorInfo> <vendorTitle eq="Sensor Provider"/> </VendorInfo> </Find> <For each="val" in="Find.Result.VendorInfo.VendorTitle.Value"> <IF Condition="/'[:$LocalData.val:]' eq 'Sensor Provider'"> <!-- This is simply to show how if can be used --> <Log Message="Found Sensor Provider"/> </IF> <SetLocalData Key="val" Value="Actuator Provider"/> <!-- This will change <Value> only --> </For> <!-- Do an Update --> <Update> <From>Result</From> <Include>$Response.Message.Value.Find</Include> </Update> </Query> <!-- Result is.. --> <Find Status="Success" Format="version"> <Result> <VendorInfo> <VendorSysId>KQN7B5X7AAAAUAABBN7HUYCE</VendorSysId> <vendorTitle Value="Sensor Provider" Version="1"/> <vendorName Value="Libelium" Version="2"/> </VendorInfo> </Result> <Result> <VendorInfo> <VendorSysId>KQN7BUUZAAAAUAABBPXOPXWG</VendorSysId> <vendorTitle Value="Sensor Provider" Version="1"/> <vendorName Value="Phidget" Version="1"/> </VendorInfo> </Result> <Result> <VendorInfo> <VendorSysId>KQN7CBXVAAAAUAABBNFHWPBK</VendorSysId> <vendorTitle Value="Sensor Provider" Version="1"/> <vendorName Value="Phidget3" Version="1"/> </VendorInfo> </Result> </Find> <Update Status="Success" Format="version"> <VendorInfo> <VendorSysId>KQN7B5X7AAAAUAABBN7HUYCE</VendorSysId> <vendorName Status="Success_NoAction:2:1460829683086;" Value="Libelium" Version="2"/> <vendorTitle Status="Success_NoAction:1:1460757657344;" Value="Sensor Provider" Version="1"/> <!-- Note there is no change in value --> </VendorInfo> <VendorInfo> <VendorSysId>KQN7BUUZAAAAUAABBPXOPXWG</VendorSysId> <vendorName Status="Success_NoAction:1:1460757648025;" Value="Phidget" Version="1"/> <vendorTitle Status="Success_NoAction:1:1460757648027;" Value="Sensor Provider" Version="1"/> <!-- Note there is no change in value --> </VendorInfo> <VendorInfo> <VendorSysId>KQN7CBXVAAAAUAABBNFHWPBK</VendorSysId> <vendorName Status="Success_NoAction:1:1460757661429;" Value="Phidget3" Version="1"/> <vendorTitle Status="Success_NoAction:1:1460757661429;" Value="Sensor Provider" Version="1"/> <!-- Note there is no change in value --> </VendorInfo> </Update>
Correct way is to point val → Find.Result.VendorInfo
Code Block language xml theme Eclipse title Assign to STRUCTURE <Query> <Find format="Version"> <VendorInfo> <vendorTitle eq="Sensor Provider"/> </VendorInfo> </Find> <For each="val" in="Find.Result.VendorInfo"> <IF Condition="/'[:$LocalData.val.vendorTitle.Value:]' eq 'Sensor Provider'"> <Log Message="Found Sensor Provider"/> </IF> <SetLocalData Key="val.vendorTitle.Value" Value="Actuator Provider"/> </For> <!-- Do an Update --> <Update> <From> Result </From> <Include> $Response.Message.Value.Find </Include> </Update> </Query> <!-- Result is --> <Find Status="Success" Format="version"> <Result> <VendorInfo> <VendorSysId>KQN7B5X7AAAAUAABBN7HUYCE</VendorSysId> <vendorTitle Version="3" Value="Actuator Provider"/> <vendorName Value="Libelium" Version="2"/> </VendorInfo> </Result> <Result> <VendorInfo> <VendorSysId>KQN7BUUZAAAAUAABBPXOPXWG</VendorSysId> <vendorTitle Version="3" Value="Actuator Provider"/> <vendorName Value="Phidget" Version="1"/> </VendorInfo> </Result> <Result> <VendorInfo> <VendorSysId>KQN7CBXVAAAAUAABBNFHWPBK</VendorSysId> <vendorTitle Version="3" Value="Actuator Provider"/> <vendorName Value="Phidget3" Version="1"/> </VendorInfo> </Result> </Find> <Update Status="Success" Format="version"> <VendorInfo> <VendorSysId>KQN7B5X7AAAAUAABBN7HUYCE</VendorSysId> <vendorName Status="Success_NoAction:2:1460829683086;" Value="Libelium" Version="2"/> <vendorTitle Status="Success=Updated:4:1460935288963;" Value="Actuator Provider" Version="4"/> <!-- Title is updated --> </VendorInfo> <VendorInfo> <VendorSysId>KQN7BUUZAAAAUAABBPXOPXWG</VendorSysId> <vendorName Status="Success_NoAction:1:1460757648025;" Value="Phidget" Version="1"/> <vendorTitle Status="Success=Updated:4:1460935288964;" Value="Actuator Provider" Version="4"/> <!-- Title is updated --> </VendorInfo> <VendorInfo> <VendorSysId>KQN7CBXVAAAAUAABBNFHWPBK</VendorSysId> <vendorName Status="Success_NoAction:1:1460757661429;" Value="Phidget3" Version="1"/> <vendorTitle Status="Success=Updated:4:1460935288964;" Value="Actuator Provider" Version="4"/> <!-- Title is updated --> </VendorInfo> </Update>
...