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