cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

Write expression for conditional check

Sahil
Contributor

Hi,
I want to write this code in expression snaplogic.
I need to map TestID.

<xsl:variable name=โ€œTestIDโ€>
<xsl:if test=โ€œexists(node()/IDOC/A1[VW=โ€˜Fโ€™]/NO)โ€>
<xsl:copy-of select=โ€œnode()/IDOC/A1[VW=โ€˜Fโ€™]/NOโ€>
</xsl:copy-of>
</xsl:if>
<xsl:if test=โ€œnot(exists(node()/IDOC/A1[VW=โ€˜Fโ€™]/NO))โ€>
<xsl:copy-of select=โ€œnode()/IDOC/A1[VW=โ€˜Fโ€™]/NPโ€>
</xsl:copy-of>
</xsl:if>
</xsl:variable>

How do I do it?

1 ACCEPTED SOLUTION

viktor_n
Contributor II

Hi @Sahil,

Here are two expressions, I was not sure because it is array does always will have only one VW that contains โ€˜Fโ€™ in the value.

First expression. Finds all NO or NP that contains โ€˜Fโ€™ in VW field.
$Data.IDOC.A1.filter(e => e.get('VW').contains('F')).map(x => x.get('NO') != null ? x.NO : x.NP)

But I think that the second expression is more correct. This expression finds the first one element in the array that contains โ€˜Fโ€™ in VW, and returns NO if exist or else NP.
$Data.IDOC.A1.find(e => e.get('VW').contains('F')).get('NO', $Data.IDOC.A1.find(e => e.get('VW').contains('F')).get('NP'))

By default this expression return null, and if you want something else you can add second parameter in the get method for default values.
Ex: .get('NP', "Default")

Regards,
Viktor

View solution in original post

10 REPLIES 10

viktor_n
Contributor II

Hi @Sahil,

You can map attributes like that: $variable['@TestID'].

Regards.

hi Viktor,

I need to translate the whole logic which was done in SAP to snaplogic.

viktor_n
Contributor II

Iโ€™ve misunderstood, I see now what you want to do.

So, I donโ€™t have problem with writing expressions, but I am not good at reading xslt schemas.
Some of the syntax I understand, but โ€œnode()/IDOC/A1[VW=โ€˜Fโ€™]/NO)โ€ can you explain this to me. Is this a path ?
And what are node() and copy-of ?

Hi
so basically in snaplogic terms it would be:-
$Data.IDOC.A1[VW=โ€˜Fโ€™].NO