Po importu prodejní objednávky (nebo její změny) přes EDI kanál, se tato objednávka objeví v agendě Prodejní objednávky, jde s ní tedy pracovat jako s každou jinou.
Po importu se vygeneruje Upozornění. Uživatelům, kteří mají toto upozornění raregistrované, se zobrazí pod "zvonečkem".
Přílohou této objednávky je importovaný EDI XML dokument (nemazat, používá se pro potvrzování objednávky). Z importovaných EDI dokumentů se kromě dalších políček vyplní na položce objednávky také
Zákaznická objednávka č.
(toto pole se používá později pro další operace (párování položek v EDI komunikaci a je třeba ho neměnit!)Material number
(skryté, jen pro párování položek, neměnit!)Technická specifikace
Pokud některé políčko v listu položek není zobrazeno, můžete si ho přidat klasickým postupem konfigurace listu
Políčko Technická dokumentace obsahuje delší text. Pro jeho kompletní zobrazení klikněte v listu na pole pravým tlačítkem a v menu vyberte Otevřít v okně
.
V historii komunikace lze dohledat záznamy, kdy a co se událo. Na příkladu níže je vidět, že došlo, kromě odeslání potvrzení - viz. dále, i ke změně objednávky (byl přijatý EDI dokument ORDCHG). Některé požadované změny byly automaticky aplikovány, další vyžadují změnu uživatelem.
Pro odeslání potvrzení na EDI portál, použijte ruční spuštění BPM procesu. Na záložce PROCESY
, klikněte na akci Nastartovat nový proces
a vyberte příslušnou definici procesu.
Proces vytvoří XML dokument s potvrzením, odešle ho na EDI portál a udělá záznam do historie komunikace.
V potvrzení se posílá naposled přijatý XML dokument s objednávkou, ve kterém se provedou změny na položkách (pokud je třeba):
Po dokončení a odeslání objednávky lze odeslat na EDI portál potvrzení dodacího listu. Postup je stejný jako u potvrzení Prodejní objednávky.
Na záložce PROCESY
, klikněte na akci Nastartovat nový proces
a vyberte příslušnou definici procesu. Tentokrát jsou nabízeny procesy pro Dodací listy.
Proces vytvoří XML dokument s potvrzením, odešle ho na EDI portál a udělá záznam do historie komunikace.
V aplikaci je integrován endpoint pro příjem Idoc dokumentů (api/edi/idocxml)
Je přístupný přes Basic Autentifikaci, nastavuje se v application-production.properties
edi.username=.........
edi.password=......
Pro odeslání XML na EDI portál je určeno nastavení (aktuálně je podporován pouze jeden portál):
edi.portal.url=......
edi.portal.username=.....
edi.portal.password=.....
Aplikace zpracuje request a uloží přijatý dokument na disk do vyhrazené složky.
V aplikaci běží cyklický job, který kontroluje tuto složku a nalezené XML dokumenty se snaží zpracovat.
Při úspěšném zpracování přesune XML do podsložky, aby nedocházelo k opakovanému zpracování (v aplikaci jsou další kontroly duplicit).
Zpracovávají se ORDERS a ORDCHG dokumenty, kdy založí novou, případně upraví existující objednávku. Zpracovaný XML soubor je vložen jako příloha objednávky (používá se dále v procesu). Při zpracování se pro některé údaje používají volné atributy:
SalesOrder.APPROVED_ON (datum)
SalesOrderItem.CUSTOMER_MATERIAL_NUMBER (text)
SalesOrderItem.CUSTOMER_TECHSPEC (text)
DeliveryBill.DATE_OF_LOADING (datum)
Názvy volných atributů lze nastavit v properties souboru. Zde jsou uvedeny výchozí hodnoty.
edi.idocProcessor.fa.approvedOn = APPROVED_ON
edi.idocProcessor.fa.customerMaterialNumber = CUSTOMER_MATERIAL_NUMBER
edi.idocProcessor.fa.customerTechSpec = CUSTOMER_TECHSPEC
edi.idocProcessor.fa.dateOfLoading = DATE_OF_LOADING
Dále se používají typy entit (je nutné zadat v properties, bez jejich definice se nenačte idoc processor).
edi.idocProcessor.salesOrderTypeId = 2
edi.idocProcessor.goodsTypeId = 5
K objednávce založí do historie komunikace záznam s odkazem na zpracovanou XML přílohu.
V případě změny objednávky i doplnující informace ohledně provedených změn, případně změn čekajících na uživatelský zásah.
Po zpracování odešle Alert s kódem EDI_IMPORT, který můžou poslouchat příslušní zaměstnanci.
Spouští se ručně, po provedených úpravách na importované objednávce (ORDERS)
nebo importované změně objednávky (ORDCHG). V případě dodacího listu po jeho vytvoření/odeslání.
Příklad procesu nad entitou SalesOrder
// do FA nastaví aktuální cas potvrzení objednávky
entity.freeAttributes.putAnyValue("CONFIRMED_AT", now());
// vezme xml přílohy z prodejní objednávky setříděné od nejnovějšího
var urls = entity.attachments.stream()
.filter((item) -> {item.attachedFile.url =~ '.*\.xml'})
.sorted(comparator((o1, o2) -> {o2.createdAt.compareTo(o1.createdAt)}))
.map((item) -> {item.attachedFile.url})
.collect(Collectors.toList());
// pokud nenajde žádnou vhodnou přílohu, vyhodí chybu
if (urls.isEmpty()) {
throwException('No XML found in attachments.');
}
// vezme první (nejnovější XML)
var filename = urls[0];
// zavolá speciální funkci v aplikaci, která vytvoří nový XML soubor s potvrzením (ORDRSP).
// Prakticky jen upraví původní XML soubor do formátu ORDRSP
// (XML dokumenty ORDERS, ORDCHG, ORDRSP jsou az na drobnosti prakticky totožné)
var xmlFile = edi.createConfirmXml(filename, entity);
// zavolá specální funkci pro odeslání na EDI portál
edi.sendToPortal(xmlFile);
// vytvoří záznam do Historie komunikace na prodejní objednávce
// v něm bude přiložený ORDRSP xml soubor
var xmlFilename = files.pathOf(xmlFile).getFileName().toString();
var attachment = files.createAttachment('CommunicationHistoryAttachment', xmlFilename, xmlFile);
var history = createNew('CommunicationHistory');
history.context = getDocumentContext('SalesOrder');
history.type = 'EDI';
history.entityId = entity.id;
history.name = 'Bolo odoslané XML potvrzenie na EDI portál.';
history.communicatedAt = now();
history.attachments.add(attachment);
persist(history);
Příklad procesu nad entitou DeliveryBill
// vezme prodejní objednávku z polozky dodacího listu
var salesOrder = entity.getItems().get(0).getSalesOrderItem().getSalesOrder();
// vezme xml přílohy z prodejní objednávky setříděné od nejnovějšího
var urls = salesOrder.attachments.stream()
.filter((item) -> {item.attachedFile.url =~ '.*\.xml'})
.sorted(comparator((o1, o2) -> {o2.createdAt.compareTo(o1.createdAt)}))
.map((item) -> {item.attachedFile.url})
.collect(Collectors.toList());
// pokud nenajde žádnou vhodnou přílohu, vyhodí chybu
if (urls.isEmpty()) {
throwException('No XML found in attachments.');
}
// vezme první (nejnovější XML)
var filename = urls[0];
// zavolá speciální funkci v aplikaci, která vytvoří nový XML soubor
// s potvrzením (DESADV) data bere z dodacího listu a originálního XML
var xmlFile = edi.createConfirmXml(filename, entity);
// zavolá specální funkci pro odeslání na EDI portál
edi.sendToPortal(xmlFile);
// vytvoří záznam do Historie komunikace na dodacím listu,
// v něm bude přiložený DESADV xml soubor
var xmlFilename = files.pathOf(xmlFile).getFileName().toString();
var attachment = files.createAttachment('CommunicationHistoryAttachment', xmlFilename, xmlFile);
var history = createNew('CommunicationHistory');
history.context = getDocumentContext('DeliveryBill');
history.type = 'EDI';
history.entityId = entity.id;
history.name = 'Bolo odoslané XML potvrdenie na EDI portál.';
history.communicatedAt = now();
history.attachments.add(attachment);
persist(history);