Выражение XPATH с отрицательным условием в SAP PI XSLT Mapping

Я должен поддерживать условия в определении интерфейса ICO в SAP PI. У меня есть несколько типов счетов, таких как L1, S1, G1, F1 и т. д. У меня есть два отдельных сопоставления в соответствии с требованиями.

Когда тип счета-фактуры — L1, S1 или G1, а LAND1 = IND, PARW= W и QUALF=015, я хочу выбрать 1-е сопоставление, а для остальных типов счетов я хочу выбрать 2-е сопоставление.

Выражения XPath в Редакторе условий для двух отображений:

1)

(/ZEINV_INVOIC02/IDOC/E1EDKA1[PARVW = 'W' and LAND1 = 'IND'])   EX   AND
(/ZEINV_INVOIC02/IDOC/E1EDK14[QUALF = 015 and ORGID = 'L1'])    EX   OR
(/ZEINV_INVOIC02/IDOC/E1EDKA1[PARVW = 'W' and LAND1 = 'IND'])   EX   AND 
(/ZEINV_INVOIC02/IDOC/E1EDK14[QUALF = 015 and ORGID = 'G1'])    EX   OR 
(/ZEINV_INVOIC02/IDOC/E1EDKA1[PARVW = 'W' and LAND1 = 'IND'])   EX   AND
(/ZEINV_INVOIC02/IDOC/E1EDK14[QUALF = 015 and ORGID = 'S1'])    EX

2) (у меня проблема со второй строкой о выражении ORGID)

(/ZEINV_INVOIC02/IDOC/E1EDKA1[PARVW = 'W' and LAND1 = 'IND'])                                    EX AND
(/ZEINV_INVOIC02/IDOC/E1EDK14[QUALF = 015 and ( ORGID ≠ 'L1' or ORGID ≠ 'G1' or ORGID ≠ 'S1' )]) EX

Проблема в том, что когда ICO запускается, он выбирает оба сопоставления, удовлетворяя обоим условиям со следующими значениями:

ORGID = 'L1'
QALF  = 015
PARW  = 'W' 
LAND1 = 'IND'

Каково выражение XPath для второго условия, когда у нас есть значения ORGID, отличные от L1, G1 и S1?


person Kaushik    schedule 02.01.2020    source источник


Ответы (1)


К сожалению, выражение ORGID ≠ 'L1' or ORGID ≠ 'G1' or ORGID ≠ 'S1' является тавтологией, т. е. оно истинно, если ORGID равно 'L1' и true, если ORGID не равно L1, поэтому все выражение всегда истинно, каким бы ни было значение ORGID.

Что вы хотите, так это:

not( ORGID = 'L1' or ORGID = 'G1' or ORGID = 'S1' )

Обратите внимание, что вы также можете использовать эквивалентное выражение без not, используя закон де Моргана , здесь вы должны переключить и/или и отменить условия:

ORGID != 'L1' and ORGID != 'G1' and ORGID != 'S1'

NB: действительно ли работает? Разве вы не должны использовать !=?

person Sandra Rossi    schedule 02.01.2020