This blog explains how to do Append for Complex Elements in Data Stitch
In order to append instances into an unbounded (aka repeating) Complex Content Element, the instance has to be created in another variable, and then the instance can be appended into the variable having the unbounded complex content element.
I'll explain in more detail, so do not get spook by the nutshell.... Expect some humor along the way.... Perfection is boring; l laugh of my mistakes.
There are two types of complex types:
Who came up with this twisted word play, eh? :-0
An example of Complex Type Simple Content Element: The names by language for an Item of the international store is one easy to grasp. Here's the Schema code snippet
On the OIC Orchestration Editor you will see the Schema Tree rendering the name node. On Context Menu (right click) the Node Info will tell you these information. Here's how the schema looks like
Each name is in a specific language. The name is a scalar type: xsd:string. And it is complex because it has an attribute: lang
To Append a name into the item, you can use the coding pattern for Complex Content (described below in this blog) or use the coding pattern shown in my blog called "Data Stitch Append and Assign for repeating elements"
An example of a Complex Type Complex Content Element can be the items of an international store (following the above example). Here is the Schema code snipped. I'm not showing all the xsd details, just the needed to get the idea that item is unbounded ()aka repeating) and it has many child elements.
On ICS Orchestration editor it looks like
As you may notice, item element is complex content: item has name, quantity, prices, addedDate elements as children.
Note: I'll use the following Syntax For Data Stitch Sentences
(TO XPath expression).OPERATION(FROM XPath expression)
Example: ($v1/ns0:customer/ns0:name).ASSIGN(“Jorge Herreria”)
Finally we are in business!
Now that you and I are experts (yeah, right!) on differentiating Complex Content versus Simple Content on Complex Elements, let me walk you on an example on how to add/append content to a Complex Content element:
I'll append 2 items into the $vc/cart variable of International Store schema (above): a MacBook, and a never gets obsolete, good fashion Pencil
First will I declare "vc" variable in Global Variables. vc will be based on the "cart" element . To lear to declare global variables see "Use Global Variables and Data Stitch ..."
Next will I declare a "v1" variable in Global variables. v1 will be based on the item element (cart/item).
Now will I create a Stitch action and do the following statements (In tailor terms: cuts, folds and stitches):
|($v1/ns1:item/ns1:name).ASSIGN("MacBook")||Creates the MacBook item instance|
|($v1/ns1:item/ns1:quantity).ASSIGN(2)||continue building the MacBook item instance. (One MacBook you and another for me :-)|
|($v1/ns1:item/ns1:prices/ns1:price).ASSIGN(799.89)||continue building the MacBook item instance|
|// Now I'm going to append the item instance|
Appends Macbook instance to $vc/cart/item. Be aware the APPEND happens by value and not by reference.
|($v1/ns1:item/ns1:name).ASSIGN("Pencil")||Building the pencil instance. Because the MacBook instance was appended by value, then $vc/cart will not be affected, it is safe to reuse the $vi variable.|
|($v1/ns1:item/ns1:quantity).ASSIGN(5)||continue building Pencil instance|
|($v1/ns1:item/ns1:prices/ns1:price).ASSIGN(5.45)||continue building Pencil instance|
Appends Pencil instance to $vc/cart/item.
At this point the $vc/cart has 2 item instances.
*Note: To keep the list short I did not assign item/name/@lang and item/addedDate.
Unfortunately nope. Reason being, if you try to append/assign indicating instance 1 in the predicate the runtime understands you want to append the item after the instance 1 or assign on instance 1, so if instance does not exists, then it will throw an exception.
If you know Java is similar dealing with a List<T>
For the not that experts, here's the explanation on our expert's question:
Our expert is trying to do the following. The following will NOT work if the instances does not exist on the $vc variable :
Yes!!! If the instances exists in the variable, then changing the data can be done by using predicates to identify the instance.
For example, after executing above sentences, the $vc ha the two instances, So now to change the number of MacBooks from 2 to 3, because my wife just asked me why she was not included, and to change the Pencil price to 4.99, here one way to do it:
Here's a more elegant one
oh, oh, I'm getting into predicates... predicates is a whole new blog and I'm ready for a tequila!
All right, I hope I did a good job explaining it. If not, please let me know (you can use the comment section or other means)