I found an interesting question on stackoverflow in the BI-Publisher tag. At first I thought BIP could not handle this requirement, but a little bit of trial and error taught me something. cleartext.blogspot.com
With this xml:
<root>
<OrderEntry-Orders>
<CwaChannel>Customer Portal</CwaChannel>
<CwaOrderType>UT Sales</CwaOrderType>
<ListOfOrderEntry-LineItems>
<OrderEntry-LineItems>
<CwaLineTotalAmount2>1000</CwaLineTotalAmount2>
<CwaProductCode>001</CwaProductCode>
</OrderEntry-LineItems>
<OrderEntry-LineItems>
<CwaLineTotalAmount2>1000</CwaLineTotalAmount2>
<CwaProductCode>005</CwaProductCode>
</OrderEntry-LineItems>
</ListOfOrderEntry-LineItems>
</OrderEntry-Orders>
<OrderEntry-Orders>
<CwaChannel>Customer Portal</CwaChannel>
<CwaOrderType>UT Sales</CwaOrderType>
<ListOfOrderEntry-LineItems>
<OrderEntry-LineItems>
<CwaLineTotalAmount2>1000</CwaLineTotalAmount2>
<CwaProductCode>005</CwaProductCode>
</OrderEntry-LineItems>
</ListOfOrderEntry-LineItems>
</OrderEntry-Orders>
<OrderEntry-Orders>
<CwaChannel>Customer Portal</CwaChannel>
<CwaOrderType>UT Redemption</CwaOrderType>
<ListOfOrderEntry-LineItems>
<OrderEntry-LineItems>
<CwaLineTotalAmount2>1000</CwaLineTotalAmount2>
<CwaProductCode>005</CwaProductCode>
</OrderEntry-LineItems>
</ListOfOrderEntry-LineItems> cleartext.blogspot.com
</OrderEntry-Orders>
</root>
This BIP code :
<?for-each-group: OrderEntry-LineItems; CwaProductCode?>
<?CwaProductCode?>
<?if:../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal'?>
<?'True'?>
<?end if?>
<?../../CwaOrderType?>
<?count(current-group()/.)?>
<?end for-each-group?>
Produces this output:
001
True
UT Sales
1
005
True
UT Sales
3
The count function returns a value of 3, but it prints only one value of OrderType. So it looks like the if condition is not filtering at all and always returns True.
The count returning 3 gives us the clue that there are two more elements there which need to be processed.
This code:
<?for-each-group: OrderEntry-LineItems; CwaProductCode?>
<?CwaProductCode?>
<?for-each:current-group()?>
<?if:../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal'?>
<?'True'?>
<?end if?>
<?../../CwaOrderType?>
<?end for-each?>
<?count(current-group()/.)?>
<?end for-each-group?>
Returns the answer: cleartext.blogspot.com
001
True
UT Sales
1
005
True
UT Sales
True
UT Sales
UT Redemption
3
Here the second True is print only once, as it iterates through the parents of the grouped node. cleartext.blogspot.com
So when there is a grouping done, and you need to check if its parent satisfies a condition, one single if statement will not suffce. Instead one more “ for-each:current-group() “ is required to iterate through all the grouped elements , and then the if statement should be added after that.
So the original BIP code in the question: cleartext.blogspot.com
<?for-each-group: OrderEntry-LineItems; CwaProductCode?>
<?if:../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal'?>
<?for-each: current-group()?>
<?CwaProductCode?>
<?xdoxslt:set_variable($_XDOCTX, 'countFund', xdoxslt:get_variable($_XDOCTX, 'countFund')+1)?>
<?xdoxslt:set_variable($_XDOCTX, 'TotalCount', xdoxslt:get_variable($_XDOCTX, 'TotalCount')+1)?>
<?xdoxslt:get_variable($_XDOCTX, 'countFund')?>
<?xdoxslt:set_variable($_XDOCTX, 'countFund', 0)?>
<?end if?>
<?end for-each-group?>
<?xdoxslt:get_variable($_XDOCTX, 'TotalCount')?>
Returns:
001
1
1
005
1
005
1
005
1
4
Can be re-written as
<?for-each-group: OrderEntry-LineItems; CwaProductCode?>
<?CwaProductCode?>
<?for-each: current-group()?>
<?if:../../CwaOrderType='UT Sales' and ../../CwaChannel='Customer Portal'?>
<?xdoxslt:set_variable($_XDOCTX, 'countFund', xdoxslt:get_variable($_XDOCTX, 'countFund')+1)?>
<?xdoxslt:set_variable($_XDOCTX, 'TotalCount', xdoxslt:get_variable($_XDOCTX, 'TotalCount')+1)?>
<?xdoxslt:get_variable($_XDOCTX, 'countFund')?>
<?xdoxslt:set_variable($_XDOCTX, 'countFund', 0)?>
<?end if?>
<?end for-each-group?>
<?end for-each-group?>
<?xdoxslt:get_variable($_XDOCTX, 'TotalCount')?>
Which returns: cleartext.blogspot.com
cleartext.blogspot.comcleartext.blogspot.com
001
1
005
1
1
3
Brilliant blog I visit this blog it's incredibly awesome. Curiously, in this blog content formed doubtlessly and sensible. The substance of information is helpful.
ReplyDeleteWorkday HCM Online Training
Oracle Fusion HCM Online Training
Oracle Fusion SCM Online Training
Oracle Fusion Financials Online Training
Big Data and Hadoop Training In Hyderabad