Hintergund
Neben der Messpunktermittlung aus dem SAP-Umfeld oder von anderen 3rd Party Systemen soll es ebenfalls möglich sein, Messpunkte aus der B2B abzugreifen. Diese Messpunkte werden typischerweise bei der Marktkommunikation ermittelt und dann dem CCM Prozessmonitor zur Verfügung gestellt.
Extension B3P_CCM_PM_RULES
In der Extension B3P_CCM_PM_RULES wird ein Regelwerk hinterlegt, anhand desssen für jede verabeitete Nachricht entschieden wird, ob hieraus ein Messpunkt generiert wird. Das Regelwerk soll nun anhand des folgenden Beispiels eingehender erklärt werden.
RULE rule1 XML_DMIN1_BIL_ALOCAT[
"$PROCTYPE$"=DMIN1BILAN,
"$PROCIDTYPE$"=MANDT,
"$DATE$"="${edipath(UNB[1]+4+0)}",
"$TIME$"="${edipath(UNB[1]+4+1)}",
"$PROCID$"=150,
"$CPID$"=060,
"$SENDER_ILN_ALOCAT$"="${edipath(UNB[1]+2+0)}",
"$RECEIVER_ILN_ALOCAT$"="${edipath(UNB[1]+3+0)}",
"$FORMAT$"=ALOCAT,"$EDI_REF$"="${edipath(UNB[1]+5+0)}",
"$CPSTATUS$"="${template(&(this.B3P_OBJ_MESSAGE.state))}",
"$OBJTYPE$"=MSGID_ALOCAT,
"$OBJKEY$"="${template(&(this.B3P_OBJ_MESSAGE.messageId))}" ]
<=
equalsEdi("UNH+2+0", ORDRSP) AND
equalsEdi("BGM+1+0", "X1G") AND
execute("org.b2bbp.functions.rules.TemplateRule", "${template(&(this.FORMAT.direction))}","1") AND
execute("org.b2bbp.functions.rules.TemplateRule", "${template(&(this.FORMAT.senderCode))}","9999999999999") AND
(execute("org.b2bbp.functions.rules.TemplateRule", "${template(&(this.FORMAT.partnerCode))}","9999999999998") OR
execute("org.b2bbp.functions.rules.TemplateRule", "${template(&(this.FORMAT.partnerCode))}","9999999999997"));
Eine Regel besteht immer aus 2 Teilbereichen, die durch ein Zuweisungssymbol (<=) voneinander getrennt sind. Im Bereich recht (oder in diesem Fall unterhalb) des Zuweisungszeichens werden die Relgeln definiert anhand deren entschieden wird, ob ein Messpunkt getroffen wurde. Im Teilbereich links (oder hier oberhalb) des Zuweisungszeichens werden Werte ermittelt, die dann in die Messpunktdefiition miteinfließen sollen.
Regelteil
Wie ersichtlich sind die Regeln selbst mit Und-Operatoren (AND) oder Oder-Operatoren (OR) miteinander verknüpft. Auch das Verschachteln von Regeln mittels Klammersetzung ist möglich. Es macht also Sinn, die Regeln so zu gestalten, dass man die Einschränkungen erst recht grob und später immer feiner definiert. Falls der linke Teil einer Und-Verknüpfung bereits false zurückgibt, wird der rechte Operand nicht mehr ausgewertet (Short Circuit Evaluation).
Letzlich kann man für die Anwedung einer Regel auf alle Informationen in der zu überprüfenden EDIFACT-Nachricht oder dem damit einhergehenden MessageContext zugreifen.
Für die oben aufgeführte Regel würde ein Messpunkt generiert werden, falls
-
Die Nachricht vom Format ORDERSP ist (also im UNH Segment ORDRSP genannt wird)
-
Im BGM Segment X1G genannt wird
-
Es sich um eine ausgehende Nachricht (Direction = 1) handelt
-
Die Absender-ILN 9999999999999 lautet
-
Die Empfänger ILN entwerder 9999999999998 oder 9999999999997 lautet.
Messpunktdefinitionsteil
Sollten nun alle Bedingungen innerhalb der Regel zutreffen, so werden die Funktionen innerhalb des ersten Teils zur Messpunktausgestaltung ausgeführt. Falls keine Funktionen hinterlegt sind handelt es sich um statische Ausdrücke. Die ermittelten Werten werden nun in ein XML-Konstrukt überführt, wo es Platzhalternamen für diese Werte gibt. Ein Beispiel eines solche XML-Konstrukts findet man weiter unten im Anhang. Auch im Messpunktdefinitionsteil kann man auf dynamische Funktionen zurückgreifen, um gewisse Informationen aus der EDIFACT-Nachricht bzw. dem MessageContext zu extrahieren. Welches XML-Konstrukt als Extension geladen werden soll, wird im vorderen Teil des Abschnitts refrenziert (hier XML_DMIN1_BIL_ALOCAT). Die Regel-Id (hier rule1) kann beliebig gewählt werden.
XML-Konstrukt einer Messpunktkonfiguration
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<CT_DATA>
<PROCTYPE>$PROCTYPE$</PROCTYPE>
<SYSID>B2B</SYSID>
<MANDT/>
<AEDAT>${convertdate($DATE$,yyMMdd,dd.MM.yyyy)}</AEDAT>
<AETIME>${convertdate($TIME$,HHmm,HH:mm:ss)}</AETIME>
<PROCIDENTS>
<PROCIDENT>
<PROCIDTYPE>$PROCIDTYPE$</PROCIDTYPE> <PROCID>$PROCID$</PROCID>
</PROCIDENT>
<PROCIDENT>
<PROCIDTYPE>DATE</PROCIDTYPE>
<PROCID>${convertdate($DATE$,yyMMdd,yyyyMMdd)}</PROCID>
</PROCIDENT>
</PROCIDENTS>
<CPID_TAB>
<CP>
<CPID>$CPID$</CPID>
<CPSTATUS>$CPSTATUS$</CPSTATUS>
<CPSTATUS_TXT/>
<AEDAT>${convertdate($DATE$,yyMMdd,dd.MM.yyyy)}</AEDAT>
<AETIME>${convertdate($TIME$,HHmm,HH:mm:ss)}</AETIME>
</CP>
</CPID\_TAB>
<OBJECT\_TAB>
<OBJECT>
<OBJTYPE>$OBJTYPE$</OBJTYPE>
<OBJKEY>$OBJKEY$</OBJKEY>
<OBJSTATUS/>
<AEDAT>${convertdate($DATE$,yyMMdd,dd.MM.yyyy)}</AEDAT> <AETIME>${convertdate($TIME$,HHmm,HH:mm:ss)}</AETIME>
<POBJTYPE/>
<POBJKEY/>
</OBJECT>
</OBJECT\_TAB>
</CT\_DATA>
</DATA>