srprks
16th April 2021, 13:48
Hi I have a Service Order BOD, where I need to pass a cost value which should populate into the Actual cost field(tssoc240.acpr). The problem is the field is not a part of standard BOD. I searched in the Inbound documentation and could not find the field tssoc240.acpr.

So I got to know we can use extensions in LN and get this done by sending that value in User Area. Can someone explain how it works? Is there any other way to do this?

Regards,
Soumya

OmeLuuk
10th May 2021, 15:30
Hi I have a Service Order BOD, where I need to pass a cost value which should populate into the Actual cost field(tssoc240.acpr). The problem is the field is not a part of standard BOD. I searched in the Inbound documentation and could not find the field tssoc240.acpr.
Done that been there, super duper easy.
So I got to know we can use extensions in LN and get this done by sending that value in User Area. Can someone explain how it works? Is there any other way to do this?

Regards,
Soumya

BDE / BOD SalesOrder(BOD) we added other unmentioned fields in the UserArea:

Tools - Application Extensibility - Extensions - +New - Extension Point BOD / BDE Component name - Zoom and select - Extension Modeler ...

(Left side) +New - Component Extension - add the "table" to add an extenion to
[ We did SalesOrder ]
Then select the added Component Extension (read table) and in the Property section you can find the Field List. There (zoom and) select the fields you need to add.

Note: The added fields will not be in the BOD definition but our field tdsls400.paym was passed on to the table when the field is filled in the incoming message, be it BOD or BDE. Standard is handling those fields.

This applies to standard fields and also (old style) table customizations.

You have to checkout / checkin and compile/generate code, (commit and) activate the extension and you can follow up its working via logging (loglevel to debug and you can see all send and received XML messages as well).

srprks
10th May 2021, 19:03
Thanks Luuk for this. This has worked pretty good for me. Has any one worked on any integration with Concur?

Regards,
Soumya

A.vhd7
25th October 2021, 17:49
Done that been there, super duper easy.


BDE / BOD SalesOrder(BOD) we added other unmentioned fields in the UserArea:

Tools - Application Extensibility - Extensions - +New - Extension Point BOD / BDE Component name - Zoom and select - Extension Modeler ...

(Left side) +New - Component Extension - add the "table" to add an extenion to
[ We did SalesOrder ]
Then select the added Component Extension (read table) and in the Property section you can find the Field List. There (zoom and) select the fields you need to add.

Note: The added fields will not be in the BOD definition but our field tdsls400.paym was passed on to the table when the field is filled in the incoming message, be it BOD or BDE. Standard is handling those fields.

This applies to standard fields and also (old style) table customizations.

You have to checkout / checkin and compile/generate code, (commit and) activate the extension and you can follow up its working via logging (loglevel to debug and you can see all send and received XML messages as well).


Hi,
I have a question related to this topic. I create a BOD extension in LN and added a field of a table to it ( the table does not exist in the standard BOD tables relation). I got all the fields successfully in the userArea of the standard BOD's XML in ION. But I cannot find them in BOD's structure to use it in dataflows or monitoring. Can you please help me to know how can I extract them and use in ION?

Many Thanks

OmeLuuk
26th October 2021, 16:16
... the table does not exist in the standard BOD tables relation... so, when you click on the ComponentExtensions you cannot see/select that field in the Field List of the BOD (as to add them as an extra field in the BOD)? Hint: you can add calculated fields from any table with any name with the standard addValue / addXML function in combination with the SQL select statement.... cannot find them in BOD's structure to use it in dataflows or monitoring...The BOD / document registration only knows its standard content. And you have or want to add an extra field (as an extra table field in the user area). So you will need to take the output of your extended BOD and upload it to IONdesk as a new File Template (named something like OwnExtendBod) with format type XML, then you can upload the BOD and generate metadata. After that use this extended document in your flows and mapper.

A.vhd7
26th October 2021, 20:44
The BOD / document registration only knows its standard content. And you have or want to add an extra field (as an extra table field in the user area). So you will need to take the output of your extended BOD and upload it to IONdesk as a new File Template (named something like OwnExtendBod) with format type XML, then you can upload the BOD and generate metadata. After that use this extended document in your flows and mapper.

I appreciate for your response. Yes, I already added new fields using add calculated field hook in LN extension.
For the extended BOD, I already have a data flow using that BOD, so I exported the XML file from oneview timeline, and import it again to file template. Still the userArea of custom BOD does not include the added fields!
And I cannot map the Sync standard BOD to the custom BOD.

I am not sure what steps are missing :confused:

OmeLuuk
27th October 2021, 10:28
... using add calculated field hook in LN extension. ... Still the userArea of custom BOD does not include the added fields!
When you read the output of the BOD extension in IONDesk OneView - click on document - use the </> button - search for UserArea --> Cannot find your extension either?

In that case: did you checkin your extension? Committed it? Activated it?

If you did, then you can try to debug the BOD (is it incoming for LN or outgoing)?

Can you share your Calculated Field section?

A.vhd7
27th October 2021, 14:45
When you read the output of the BOD extension in IONDesk OneView - click on document - use the </> button - search for UserArea --> Cannot find your extension either?


I don't have problem with extended BOD, it works properly and the added fields of the extension are there in the userArea section of the extended BOD's XML. (In the oneview of ION desk.)

The problem is that I want to use those fields of the userArea (which are available in the ION oneview document) in a dataflow and workflow to report an alert (alert should contain the extended fields). My problem is accessing them through the structure that is usable for dataflows.

Thanks

OmeLuuk
27th October 2021, 15:27
I don't have problem with extended BOD, it works properly and the added fields of the extension are there in the userArea section of the extended BOD's XML. (In the oneview of ION desk.)That is good.The problem is that I want to use those fields of the userArea (which are available in the ION oneview document) in a dataflow and workflow to report an alert (alert should contain the extended fields). My problem is accessing them through the structure that is usable for dataflows.A collegue of mine took care of that part, basically like this:
Right after the LN Application in the workflow we created an outlet based on the filter. Type: Attribute Existence - Attribute name: NameValue - check EXISTS.
In the Attributes under selection "From Content" you add Name: NameValue - Document: (BOD name) - Path: in our case this string ItemMaster/ItemMasterHeader/UserArea/Property/NameValue[@name="ln.SearchKey1']
The result is that a (customized) BOD without the (added by extension) ln.SearchKey1 (our articlenumber) is coming from LN, the filter is ignoring them.

In the mapper you can use it in a similar way, like in this situation<xsl:variable name="SkuIsNumeric">
<xsl:choose>
<xsl:when test="string(number(/*:SyncItemMaster/*:DataArea/*:ItemMaster/*:ItemMasterHeader/*:UserArea/*:Property/*:NameValue[@name='ln.SearchKey1']/text())) != 'NaN'">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Here the same attribute is tested on its content: when it is not a number (our article numbers have to be numeric) then the BOD will also be ignored for further processing. The real magic is in the mapper. It will not only "transfer format" from the XML output of LN to the input XML of the consuming web API, but also determine the content of XML nodes which can again be fed through a filter, to only pass legit content to the web API on the other end.

Hope this is useful to you.

A.vhd7
28th October 2021, 15:31
Here the same attribute is tested on its content: when it is not a number (our article numbers have to be numeric) then the BOD will also be ignored for further processing. The real magic is in the mapper. It will not only "transfer format" from the XML output of LN to the input XML of the consuming web API, but also determine the content of XML nodes which can again be fed through a filter, to only pass legit content to the web API on the other end.

Hope this is useful to you.

I really appreciate your help. I added the filter to my data flow and it works properly now.

Just one more question, I was wondering if there is a BOD for sale order line. Similar to adjustment order line BOD or I need to write a custom BOD for that.

Many Thanks again

vinceco252
28th October 2021, 16:38
There's a sales order line node in the SalesOrder BOD.

A.vhd7
28th October 2021, 18:00
There's a sales order line node in the SalesOrder BOD.

Yes, I worked with that. But the problem is that in the sale order session the BOD will trigger only once, for the first time that approval happen. After that, if a new line added (or modification happen) to an existing sale order and be approved again, the BOD will not be triggered and will not send information to ION.
( I think it is because salesOrder BOD works with approval of the header not line)

OmeLuuk
28th October 2021, 20:01
Yes, I worked with that. But the problem is that in the sale order session the BOD will trigger only once, for the first time that approval happen. After that, if a new line added (or modification happen) to an existing sale order and be approved again, the BOD will not be triggered and will not send information to ION.We have been struggling with that one as well. We thought we needed a SO BOD on every change, even when the order is not approved. But we found out that this caused an awful lot of BOD messages flying around with very little added value.
In case you want that/need that it is ok.
In that case you can extend the times the BOD is triggered by a table extension on tdsls400 in which you also trigger a BOD in case tdsls400.hdst < approved:function extern long after.save.object(long mode)
{
if tdsls400.hdst < tdsls.hdst.approved then
return (tdint.dlltcbod.publish.sales.order.replace(false,
tdsls400.orno, ""))
endif
return(0)
}

OmeLuuk
28th October 2021, 20:07
There's a sales order line node in the SalesOrder BOD.Here you can add the SO lines (amongst other Component Extension points). - see attachment -