cancel
Showing results for 
Search instead for 
Did you mean: 

how to populate node with in node

Former Member
0 Kudos

Hi,

I have scnerio to populate a node which has Header and items.

For example Sales Order.

-> Order

!-> Order No.

|-> Items

-> Item_No

-> Material No

-> Quantity

-> Price

Order cardinality is 1..n

Order can have more than one item, so cardinality is 1..n for item.

How I can populate Order node, with a single order No. and multiple items.

Cheers,

Senthil

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

I doubt nobody has mentioned about singleton.

All have mentioned cardinality instead of Singleton

Sinlgeton property of the child node should be false;

the below is the code to fetch the child values

for(int i=0;i<wdContext.nodeParent.size();i++)

{

for(int j= 0;j< wdContext.nodePatent().getPrentElemtnAT(i).nodeChild().size();j++)

{

wdContext.nodepartent.getparentElementAt(i).nodeChild().getChildElemntAt(j).getVal1()

}

}

Like this way you can fetch the values

AM

Answers (4)

Answers (4)

Former Member
0 Kudos

Thank U for Ur answers Guys.. Solved.

Cheers,

Senthil

Former Member
0 Kudos

Hi senthilkumar,

If u use table then do like this in DoInit()

for(int i=0;i<4;i++)

{

IPrivateNewView.IOrderElement obj=wdContext.nodeOrder().createOrderElement();

obj.setOrdno(i+"");

}

u set the cardinality for node "order" is 1..n

vijayakhanna_raman
Active Contributor
0 Kudos

Hi,

Check this thread, i have given suggestion to add the drop down inside the table.

i.e node inside a node

Regards,

Vijai

Former Member
0 Kudos

HI Senthil,

First set the cardinality of Items Node as false. Then

Do like this

IPrivate<View>.IOrderNode parentNode=wdContext.nodeOrder();

IPrivate<View>.IOrderElement parentEl;

for(int i=0;i<5;i++)

{

parentEl=parentNode.createOrderElement();

parentNode.addElement(parentEl);

for(int j=0;j<3;j++)

{

IPrivate<View>.IItemsNode childNode=parentEl.nodeItems();

IPrivate<View>.IItemsElement childEl=childNode.createItemsElement();

childNode.addElement(childEl);

}

}

Former Member
0 Kudos

Hi,

ThanQ for Ur answer.

How this would be when I am reading from context.

How to relate Order Node with corresponding Item node.

Cheers,

Senthil

Former Member
0 Kudos

Senthil,

I can just repeat Fahad answer with comments:

<i>First set the cardinality of Items Node as false.</i>

Actually, I believe Fahad means "set singleton of child node to false"


/* Get Order node to populate */
final IPrivate<View>.IOrderNode nOrders=wdContext.nodeOrder();
for (int i=0; i<5; i++) { /* 5 here is a number of Orders to create */
  IPrivate<View>.IOrderElement elOrder = nOrders.createOrderElement();
  elOrderItem.setNo("00000000ABC"); 
  nOrders.addElement(elOrder);
  /* At this point Order is added to node */
  /* and we can add elements of child node -- Items */

    /* Here is how we relate Order with Items: */
    /* We get Items node from Order element */
  final IPrivate<View>.IItemsNode nOrderItems = elOrder.nodeItems();
  for(int j=0; j<3; j++) { /* 3 here is a number of Orders to create */
    IPrivate<View>.IItemsElement elOrderItem = nOrderItems.createItemsElement();
    elOrderItem.setItemNo("00000000010"); 
    nOrderItems.addElement(elOrderItem);
  }
} 

Valery Silaev

SaM Solutions

http://www.sam-solutions.net

Message was edited by:

Valery Silaev

Replace "cardinality" with "singleton"

Former Member
0 Kudos

HI Senthil,

Since one order can have more than one items, the best way is to create a node (<b>Order</b>) with cardinality 0.N or 1.N (Since it can contain 0..N records). Then each Order records will be having one OrderNo, so create a context atttribute(<b>OrderNumber</b>) inside node Order. For each Order(ie. for each Order No.), since there is more than one items, create a node(<b>Items</b>) inside Order with cardinality as false, sothat u will be able to create more than one Items Element for a particular Order element. Inside this Items node, u can create context attributes like <b>ItemsNumber</b>, <b>Price</b> etc. Then use the code below, which is similar to the code I posted. That code craeates 5 Order records(with order number myorder1,2,etc), with each OrderNo. will be having three Items entries(with itemnumber myitem1,2,3 and Price myPrice1,2,3)

IPrivate<View>.IOrderNode parentNode=wdContext.nodeOrder();

IPrivate<View>.IOrderElement parentEl;

for(int i=0;i<5;i++)

{

parentEl=parentNode.createOrderElement();

parentNode.addElement(parentEl);

<b>parentEl.setOrderNumber("myorder"(i1));</b>

for(int j=0;j<3;j++)

{

IPrivate<View>.IItemsNode childNode=parentEl.nodeItems();

IPrivate<View>.IItemsElement childEl=childNode.createItemsElement();

childNode.addElement(childEl);

<b>childEl.setItemsNumber("myitem"(j1));</b>

<b>childEl.setPrice("myPrice"(j1));</b>

}

}

Regards

Fahad Hamsa

Former Member
0 Kudos

hi,

Regards,

Naga

Former Member
0 Kudos

Hi Valery Silaev,

Thank U for the asnwer.

I am clear abt pouplating the node.

Now I am not sure how to read it from the context.

I mean relate the parent node with the child node..

Cheers,

Senthil

Former Member
0 Kudos

Senthil,

Can you explain what does it mean "read context" and "relate nodes" with some example?

Say, like this:

"I need to find Order element that corresponds to Item element":


final IPrivate<View>.IItemsElement elOrderItem = </* Receive it somehow -- from parameters for example*/>;
final IPrivate<View>.IOrderElement elOrder = (IPrivate<View>.IOrderElement)elOrderItem.node().parentElement();

Or:

"I need to get all Items of selected Order":


final IPrivate<View>.IOrderElement elOrder = wdContext.currentOrderElement();
final final IPrivate<View>.IItemsNode nOrderItems = elOrder.nodeItems();
for (int c = nOrderItems.size(), i = 0; i < c; i++) {
  final IPrivate<View>.IItemsElement elOrderItem = nOrderItems.getItemsElementAt(i);
}

Valery Silaev

SaM Solutions

http://www.sam-solutions.net