Kalkulationsparameter übertragen
Technische Dokumentation
Komponentenübersicht
Prozesse
C12SYNKalkulation
Beim Einspielen des Moduls werden die Prozesse automatisch veröffentlicht, dennoch ist eine Prüfung des Veröffentlichungsstatus empfehlenswert. Entsprechende Hinweise werden auch beim Import des Moduls ausgegeben.
Skriptbibliothek
SC12SYNUtils
SC12SYNTests
Globale Variablen
C12SYN_ClientID
C12SYN_URL_requestToken
C12SYN_ClientCredentials
C12SYN_URL
Administrationsmöglichkeiten
Administrationsmöglichkeiten durch folgende globale Variablen:
Die Werte für diese Variablen sind bei Syneco zu erfragen/beantragen.
Globale Variable | Beschreibung |
---|---|
C12SYN_URL_requestToken | URL zur Abfrage des Tokens |
C12SYN_ClientID | ClientID zur Abfrage des Tokens |
C12SYN_ClientCredentials | Passwort zur Abfrage des Tokens |
C12SYN_URL | URL zum Zugriff auf Synection |
Übersteuerungsmöglichkeiten
Grundsätzlich können die mit dem Modul bereitgestellten Komponenten wie BPM-Prozesse, -teilprozesse, Suchen und Skriptbibliotheksmethoden übersteuert werden, um diese an individuelle Anforderungen und Bedürfnisse anzupassen.
Nach dem Einspielen eines Moduls sollte geprüft werden, ob bereits Skriptmethoden im Projekt übersteuert wurden und ob die Methodenänderung aus dem Standard im Projekt übernommen werden soll.
Methoden, die den Prozessablauf beeinflussen können:
Skriptklasse | Methodenname | Funktionalität |
---|---|---|
SC12SYNUtils | addCustomFieldsCustomer | Diese Methode kann genutzt werden, um weitere Felder zu den bestehenden Standardfeldern des Customers hinzuzufügen. |
SC12SYNUtils | addCustomFieldsDeliveryPoint | Diese Methode kann genutzt werden, um weitere Felder zu den bestehenden Standardfeldern des DeliveryPoints hinzuzufügen. |
SC12SYNUtils | addCustomFieldsIntervall | Diese Methode kann genutzt werden, um weitere Felder zu den bestehenden Standardfeldern des Intervall hinzuzufügen. |
SC12SYNUtils | addCustomFieldsOver | Diese Methode kann genutzt werden, um weitere Felder zu den bestehenden Standardfeldern des Over hinzuzufügen. |
SC12SYNUtils | checkStartCalculation | Legt fest, ob das Angebot über Synection kalkuliert werden soll |
SC12SYNUtils | checkStartChangeStatus | Legt fest, ob die Statusänderung zum Angebot an Synection übergeben werden soll. |
Ablauf
Einstiegsmethoden
Skriptklasse | Methodenname | Funktionalität |
---|---|---|
SC12SYNUtils | getJSONCustomerData | Erzeugt eine (geschachtelte) Map mit einem Geschäftspartner und dazugehörigen Lieferstellen |
SC12SYNUtils | getJSONOfferData | Erzeugt eine (geschachtelte) Map mit einem Angebot |
SC12SYNUtils | getToken | Token zur Authentifizierung anfragen |
SC12SYNUtils | httpTransfer | Daten zu Synection durch Webservice übertragen |
SC12SYNUtils | storeCalculationResponse | Ergebnis in EVI eintragen |
Kurzfassung
Der Prozess C12SynCalculation startet bei der Neuanlage eines Events mit dem Namen "QUOTE_CALCULATION".
Aus dem Event wird das zu übertragende Angebot ermittelt.
Mit Hilfe der Methoden SC12SYNUtils.getJSONCustomerData() und SC12SYNUtils.getJSONOfferData() wird eine Struktur aus den Angebotsdaten erzeugt, die über einen Webservice an Synection übertragen wird.
Zum Übertragen ist ein Token notwendig, dass über die Methode SC12SYNUtils.getToken() ermittelt wird.
Die Methode authentifiziert sich bei einem Server der Syneco und liefert das von dort erhaltene Token zurück.
Mit Hilfe dieses Tokens können die Daten zu Synection übertragen werden. Dazu wird die Methode SC12SYNUtils.httpTransfer() verwendet.
Kalkulationsparameter übertragen
Start
Der Benutzer klickt im Angebot auf den Button "Angebot kalkulieren". Dadurch wird ein Event (C12EVENT) mit dem Namen QUOTE_CALCULATION und einem Verweis auf das Angebot erzeugt. Dies ist Teil des Moduls C12EVI_BASIS und für alle Kalkulationen gleich.
Im Modul C12SYNECTION reagiert der Prozess C12SYNKalkulation auf das Anlegen des Events und überträgt die Werte des Angebots über einen Webserviceaufruf an Synection.
Erweiterte Prüfung
Im ersten Schritt erfolgt eine erweiterte Prüfung der Startbedingungen. Dies erfolgt im Skripttask "erweiterte Prüfung der Startbedingung", da in der Startbedingung nicht alle Methoden von BPM zur Verfügung stehen.
Zur Prüfung wird die Methode SC12SYNUtils.checkStartCalculation() aufgerufen. Im Standard enthält diese Methode keine Prüfung und liefert immer true. Sie ist für eine erweiterte Prüfung in C2 gedacht.
Übertragen der Daten zu Synection
Die Übertragung der Daten zu Synection geschieht in 4 Schritten im Skripttask "Aufruf Synection Webservice"
1. Prüfen und sammeln der Daten
Hierzu werden die beiden Methoden SC12SYNUtils.getJSONCustomerData() und SC12SYNUtils.getJSONOfferData() aufgerufen. Diese Methoden ermitteln mit Hilfe von weiteren Methoden und Suchen die Daten aus den einzelnen Entitäten und liefern eine Map zurück, mit der ein JSON Objekt erstellt werden kann, dass dann an den Web-Service von Synection weitergegeben wird. Weiterhin machen diese Methoden eine Pflichtfeldprüfung aufgrund der Daten in den Entitäten Pflichtfeld-Bedingung(C12MANDCOND) und Schnittstellen-Pflichtfeld (C12MANDFIELD).
Werden dabei nicht gefüllte Pflichtfelder entdeckt, dann wird in der Logmap, die den Methoden als Parameter mitgegeben wird, ein Fehler eingetragen. Das führt dazu, dass die weiteren Schritte nicht ausgeführt werden und ein Eventresult mit dem Status "ERROR" erzeugt wird.
2. Token von Synection besorgen
Sind alle Pflichtfelder vorhanden, dann sind die zurückgelieferten Maps mit den entsprechenden Daten gefüllt und können zu Synection übertragen werden. Dazu ist ein Token notwendig, dass über eine andere URL beschafft wird, als die des eigentlichen Webservices. Dies geschieht durch den Aufruf SC12SYNUtils.getToken(), der in einer Map die Informationen zurückliefert.
Treten hier Fehler auf, dann stehen diese in der Logmap, die der Methode als Parameter mitgegeben wird. Die weiteren Schritte werden dann übersprungen und es wird ein Eventresult mit dem Status "ERROR" und dem Inhalt der Logmap erzeugt.
3. Webservice aufrufen
Durch den Aufruf der Methode SC12SYNUtils.httpTransfer() werden die in Schritt 1 ermittelten Maps dann per Webservice an Synection übertragen. Dazu werden sie in einer Map zusammengefasst, so dass aus dieser Map der entsprechende JSON-String erzeugt werden kann. Zur Authentifizierung wird das in Schritt 2 ermittelte Token verwendet. Die URL zum Webservice wird aus der globalen Variablen C12SYN_URL gelesen.
Auch hier wird bei einem Fehler der nächste Schritt übersprungen und es wird ein Eventresult mit dem Status "ERROR" und den Meldungen aus der Logmap erzeugt.
4. Ergebnis eintragen
Durch Aufruf der Methode SC12SYNUtils.storeCalculationResponse() wird das vom Webservice gelieferte Ergebnis im Angebot eingetragen. Die Methode ermittelt die Komponente "resultUrl" aus der Ergebnisstruktur und trägt sie im Feld Vorgangs-ID "C12InstanceID.Quote" ein. Außerdem wird der Status des Angebotes, der Preiskalkulation und der Varianten auf "IN KALKULATION" gesetzt.
Treten hier Fehler auf, dann wird ein Eventresult mit dem Status "ERROR" und den Meldungen aus der Logmap erzeugt. Bei erfolgreichem Abschließen des letzten Schrittes hat das Eventresult den Status "OK" und enthält die Meldungen aus den vorangegangenen Schritten, die in der Logmap gesammelt werden.
Pflichtfeldprüfung
Die Pflichtfeldprüfung erfolgt entitätsweise. Das bedeutet, dass es für jede Entität eine Pflichtfeld-Bedingung mit dem Namen SYNCETION_<Entität> gibt, die auf die zu prüfenden Pflichtfeld-Bedingungen verweist. Zusätzlich gibt es für die Entitäten PriceCalc und C12INSTACC spezielle Pflichtfeld-Bedingungen, die im Falle RLM/SLP und STROM/GAS geprüft werden. Folgende Tabelle enthält die Bedingungen und Felder, die im Standard geprüft werden:
Pflichtfeld-Bedingung | Schnittstellen-Pflichtfeld |
---|---|
SYNECTION_QUOTE | C12BindingPerio.Quote |
C12DeliveryUnt.Quote | |
C12Medium.Quote | |
C12Portfolio.Quote | |
Quoteno.Quote | |
QuoteStatusKey.Quote | |
Reference.Quote | |
SYNECTION_CUSTOMER | C12SyncId.Customer |
Name1.Customer | |
SYNECTION_C12INSTACC | MeasuringMethod.C12INSTACC |
Medium.C12INSTACC | |
SYNECTION_GAS_RLM_C12INSTACC | MeasuringMethod.C12INSTACC |
Medium.C12INSTACC | |
SyncId.C12INSTACC | |
SYNECTION_GAS_SLP_C12INSTACC | MeasuringMethod.C12INSTACC |
Medium.C12INSTACC | |
SyncId.C12INSTACC | |
LoadProfile.C12INSTACC | |
SYNECTION_STROM_RLM_C12INSTACC | MeasuringMethod.C12INSTACC |
Medium.C12INSTACC | |
SyncId.C12INSTACC | |
SYNECTION_STROM_SLP_C12INSTACC | MeasuringMethod.C12INSTACC |
Medium.C12INSTACC | |
SyncId.C12INSTACC | |
LoadProfile.C12INSTACC | |
SYNECTION_C12VARIANT | VARIANT_STATUS.C12VARIANT |
C12CalcStart.C12VARIANT | |
C12CalcEnd.C12VARIANT | |
SYNECTION_GAS_RLM_PRICECALC | C12Marktgebiet.PriceCalc |
SYNECTION_GAS_SLP_PRICECALC | C12Marktgebiet.PriceCalc |
C12MengeLZ.PriceCalc | |
C12MeteringCode.PriceCalc | |
SYNECTION_STROM_RLM_PRICECALC | C12RegArea.PriceCalc |
SYNECTION_STROM_SLP_PRICECALC | C12RegArea.PriceCalc |
C12MengeLZ.PriceCalc | |
C12MeteringCode.PriceCalc |
Felder, die übertragen werden
Die geforderten Felder, die zu übertragen sind werden durch die Struktur des Webservices von Synection bestimmt. Diese werden in zwei Teile untergliedert:
Customer
Daten zum Geschäftspartner und den Lieferstellen. Dieser Teil wird durch Aufruf von SC12SYNUtils.getJSONCustomerData() ermittelt. Die eigentlichen Daten zum Geschäftspartner selbst werden durch die Methode SC12SYNUtils.getJSONCustomer() und die zu den Lieferstellen durch SC12SYNUtils.getJSONDeliveryPoint() ermittelt.
Offer
Daten zum Angebot und den Varianten. Dieser Teil wird durch Aufruf von SC12SYNUtils.getJSONOfferData() ermittelt. Die Daten zum Angebot selbst werden durch die Methode SC12SYNUtils.getJSONOffer() und die zu den Lieferstellen durch SC12SYNUtils.getJSONInterval() ermittelt.
Bei diesen Methoden wird die Namensgebung verwendet, die sich auch in der Struktur für den Webservice findet (Customer, DeliveryPoint, Offer, Interval). Dabei werden die Daten wie folgt gefüllt:
Ziel Synection | Quelle EVI |
---|---|
Customer.externalId | C12SyncId.Customer |
Customer.name | Name1.Customer+" "+Name2.Customer |
Customer.customerNumber | C12SyncId.Customer |
Customer.DeliveryPoint.externalId | SyncId.C12INSTACC |
Customer.DeliveryPoint.commodity | Medium.C12INSTACC |
Customer.DeliveryPoint.profileType | MeasuringMethod.C12INSTACC |
Customer.DeliveryPoint.maLoId | C12MeteringCode.PriceCalc |
Customer.DeliveryPoint.meterNumber | - |
Customer.DeliveryPoint.edmId | C12MeteringCode.PriceCalc |
Customer.DeliveryPoint.postalCode | ZIP.Location oder wenn nicht gefüllt ZIP.C12INSTACC |
Customer.DeliveryPoint.state | State.Location oder wenn nicht gefüllt State.C12INSTACC |
Customer.DeliveryPoint.marketArea | C12Marktgebiet.PriceCalc (nur bei Gas) |
Customer.DeliveryPoint.controlZone | ShortName.C12REGULAREA zu C12RegArea.PriceCalc (nur bei Strom) |
Customer.DeliveryPoint.slpProfileCode | LoadProfile.C12INSTACC (nur bei SLP) |
Customer.DeliveryPoint.quantity | C12MengeLZ.PriceCalc |
Customer.DeliveryPoint.createdDate | FromDate.TimeSlicingIs |
Customer.DeliveryPoint.prosumer | - |
Offer.externalId | Quoteno.Quote |
Offer.externalCustomerId | C12SyncId.Customer |
Offer.commodity | C12Medium.Quote |
Offer.offerName | Reference.Quote |
Offer.offerDate | C12DeliveryUnt.Quote |
Offer.pricingType | Pricing.C12PORTFOLIO |
Offer.portfolioName | Shortcut.C12PORTFOLIO |
Offer.expirationDate | C12BindingPerio.Quote |
Offer.status | - |
Offer.Interval.externalId | Pk.C12VARIANT |
Offer.Interval.deliveryPeriod.startDate | C12CalcStart.C12VARIANT |
Offer.Interval.deliveryPeriod.endDate | C12CalcEnd.C12VARIANT |
Anzeigen des Ergebnisses der Übertragung
Nachdem die Übertragung stattgefunden hat - egal ob mit Fehler oder Erfolg - wird ein Eventresult (C12EVENTRES) mit einem entsprechenden Status erzeugt. Auf das Erzeugen dieses Datensatzes reagiert der Prozess C12SYNUserNotification. Er wertet dazu das Feld Subject.C12EVENTRES aus und erzeugt eine entsprechende Meldung, die dem Benutzer angezeigt wird.