abas és XML 2. rész: Megrendelések és beszerzés – cXML, UBL és az abas XML-import szabályai
Hogyan dolgozza fel az abas ERP a beérkező cXML és UBL Order üzeneteket? XSLT transzformáció EDP-XML-re, headless rendeléslétrehozás, ár- és tételszintű eltérések kezelése és FOP validációk.
Négyrészes sorozatunk első részében áttekintettük az abas ERP belső XML adatmodelljét, az EDP-XML interfész működését és az alapvető szintaktikai szabályokat. A második részben a vállalatok leggyakoribb B2B integrációs feladatát járjuk körül: hogyan fogadjunk és dolgozzunk fel beérkező vevői megrendeléseket modern XML szabványok (cXML, UBL / Peppol Order) használatával, és hogyan biztosítsuk a hibamentes, automatizált rendelésrögzítést az abasban.
A hagyományos EDIFACT ORDERS üzenetek mellett napjainkban a nagyvállalati és felhős beszerzési platformok (SAP Ariba, Coupa, Jaggaer) szinte kizárólag cXML formátumot használnak, míg az európai közbeszerzési és kormányzati szférában a Peppol BIS Order 3.0 (UBL 2.1) az egyeduralkodó. Az abas ERP rugalmassága révén mindkét világot natív módon képes kiszolgálni.
B2B XML szabványok: cXML és UBL összehasonlítása
Mielőtt az abas technikai folyamatait megvizsgálnánk, érdemes megérteni a két legelterjedtebb rendelési XML szabvány felépítését:
| Tulajdonság | cXML (commerce eXtensible Markup Language) | UBL (Universal Business Language) Order 2.1 |
|---|---|---|
| Fő alkalmazási terület | SAP Ariba, Coupa, közvetlen B2B e-procurement katalógusok | Peppol hálózat, európai B2G és B2B kereskedelem |
| Fejléc / Autentikáció | Beágyazott Shared Secret és Identity fejlécek (<Header><From>...</Header>) |
Szabványosított EndpointID és PartyIdentification elemek |
| Névtér (Namespace) | Többnyire DTD alapú vagy nincs alapértelmezett XML névtér | Szigorú névtér-hierarchia (urn:oasis:names:specification:ubl:schema:xsd:Order-2) |
| Visszaigazolás típusa | Szinkron HTTP válasz (200 OK + Status cXML) és aszinkron cXML Confirmation | UBL OrderResponse (Peppol BIS Order Response 3.0) |
Az integrációs folyamat architektúrája: Bejövő XML-től a rendelésig
Az abas ERP-be érkező XML rendelések feldolgozása egy többlépcsős, biztonságos csővezetéken (pipeline) halad végig:
- Fogadás és elővalidáció: A beérkező cXML vagy UBL állományt a kommunikációs réteg (AS2, HTTPS REST API vagy SFTP) fogadja, és azonnal lefuttat egy XSD sémavalidációt a szintaktikai hibák kiszűrésére.
- XSLT transzformáció: Egy testreszabott XSLT stíluslap lefordítja az idegen struktúrát az abas belső EDP-XML formátumára (Head és Table szintek).
- Törzsadat-feloldás és keresztreferenciák: Az abas Vartab tábláiban tárolt partner- és cikkspecifikus keresztreferenciák alapján az idegen vevőkódokat és cikkszámokat belső abas azonosítókká képezzük le.
- Headless EDP Import: Az EDP szerver tranzakciót indít, megnyitja a Vevői rendelés (Sales Order) maszkot a háttérben, lefuttatja az üzleti logikát és legenerálja az abas bizonylatot.
- Státusz-visszacsatolás és értesítés: Siker esetén lementi a belső azonosítót; áreltérés vagy hiányzó cikk esetén figyelmeztető státuszt állít be és értesíti a belső értékesítőt.
XSLT transzformáció: UBL / cXML átalakítása abas EDP-XML-re
Az integráció kulcsa a hatékony XSLT (Extensible Stylesheet Language Transformations) leképezés. Az alábbi leegyszerűsített példa bemutatja, hogyan alakítunk át egy UBL rendelést abas natív <abasDocument> formátumra:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Order-2"
exclude-result-prefixes="cac cbc ubl">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/ubl:Order">
<abasDocument type="SalesOrder" version="2026.1">
<head>
<!-- Külső rendelési azonosító és rendelési dátum -->
<bestellnr><xsl:value-of select="cbc:ID"/></bestellnr>
<vom><xsl:value-of select="cbc:IssueDate"/></vom>
<wtermin><xsl:value-of select="cac:Delivery/cac:RequestedDeliveryPeriod/cbc:EndDate"/></wtermin>
<!-- Vevő azonosítása GLN / EndpointID alapján -->
<ygln><xsl:value-of select="cac:BuyerCustomerParty/cac:Party/cbc:EndpointID"/></ygln>
<waehrung><xsl:value-of select="cbc:DocumentCurrencyCode"/></waehrung>
<!-- Integrációs státuszjelző mező -->
<yedistat>XML_IMPORT_NEW</yedistat>
</head>
<table>
<xsl:for-each select="cac:OrderLine">
<row n="{position()}">
<!-- Vevői cikkszám és beszállítói cikkszám feloldás -->
<ycustomerno><xsl:value-of select="cac:LineItem/cac:Item/cac:BuyersItemIdentification/cbc:ID"/></ycustomerno>
<yean><xsl:value-of select="cac:LineItem/cac:Item/cac:StandardItemIdentification/cbc:ID"/></yean>
<mge><xsl:value-of select="cac:LineItem/cbc:Quantity"/></mge>
<he><xsl:value-of select="cac:LineItem/cbc:Quantity/@unitCode"/></he>
<preis><xsl:value-of select="cac:LineItem/cac:Price/cbc:PriceAmount"/></preis>
</row>
</xsl:for-each>
</table>
</abasDocument>
</xsl:template>
</xsl:stylesheet>
A headless EDP import mechanizmusa az abasban
Miután az XSLT előállította a tiszta abas XML állományt, az EDP szerver a háttérben meghívja a megrendelés rögzítéséért felelős Vartab tranzakciót. Ennek lépései:
- Partnerkeresés
yglnvagy adószám alapján: Ha a vevő saját belső abas kódszáma nem ismert, a rendszer a fejszintű GLN (Global Location Number) vagy adószám alapján kikeresi a vevőtörzsből a rekordot. Ha nem található egyértelmű egyezés, a rendelés egy átmeneti "Gyűjtő vevő" (Clearing Account) alá kerül zárolt státusszal. - Cikk-keresztreferencia: A tételsorok feldolgozásakor az abas megvizsgálja az
yean(GTIN) ésycustomerno(vevői cikkszám) mezőket. A Vartab Cikk keresztreferenciák táblázatából automatikusan beemeli a belső abas cikkszámot (artikel). - Mértékegység konverzió (UoM Mapping): A nemzetközi UN/ECE kódokat (pl.
H87= darab,KGM= kilogramm,MTR= méter) az abas belső mértékegységeire (pl.db,kg,m) fordítja le.
Áreltérések és toleranciaszabályok kezelése
Az egyik leggyakoribb gyakorlati probléma a bejövő megrendeléseknél az áreltérés: a vevő XML rendelésében szereplő egységár nem egyezik meg az abas érvényes árlistájában vagy szerződésében rögzített árával.
Az abasban ezt egy FOP (Format Optimization Program) vagy FO-eseményvezérelt szabállyal kezeljük:
Ha
| XML_Egységár - abas_Listaár | > Toleranciaküszöb (pl. > 0.5% vagy > 0.01 EUR):
- A tétel ára az XML szerinti árral kerül rögzítésre, hogy megőrizzük a vevő eredeti szándékát.
- A tételsor és a rendelés feje "Ár jóváhagyásra vár" státuszt kap (
yedistat = 'PRICE_DISCREPANCY'). - A rendelés zárolásra kerül a szállítólevél-készítés (Lieferschein) elől, és automatikus feladat/értesítés keletkezik a felelős értékesítő felületén.
Gyakori buktatók az XML rendelésimport során
- Névtér kezelési hibák XSLT-ben (XML Namespaces): Az UBL dokumentumok szigorú névtereket használnak (pl.
xmlns:cac="..."). Ha az XSLT stíluslapban nem pontosan adjuk meg a névtereket, az XPath kifejezések (pl./Order/OrderLine) üres eredményt adnak, és egyetlen tétel sem fog betöltődni az abasba. - Duplikált tételsorok összevonása: Előfordul, hogy a vevő ugyanazt a cikket két külön tételsorban rendeli meg eltérő szállítási határidővel. Ha az import maszk automatikusan összevonja az azonos cikkszámú sorokat, elvész a megrendelő ütemezési struktúrája. Ezt a Vartab táblaillesztésnél kifejezetten tiltani kell.
- Kerekítési és tizedesjegy-hibák: Ha az idegen XML 4 tizedesjegyen adja meg az egységárat (pl.
0.1235 EUR), míg az abas mező csak 2 tizedesjegyre van konfigurálva, a kerekítés miatt a nettó végösszeg eltérhet a vevő elvárásától. - Nem kezelt backorder vagy törlési státusz: Ha a megrendelő egy korábbi rendelést módosít XML-en keresztül (pl. csökkenti a mennyiséget), a rendszernek fel kell ismernie a hivatkozott belső rendelést, és nem szabad új rendelést nyitnia.
Összegzés és a következő lépés
A bejövő cXML és UBL megrendelések XSLT- és EDP-alapú feldolgozása kiküszöböli a kézi adatrögzítést, felgyorsítja a rendelések visszaigazolását és garantálja a hibátlan adatbázis-integritást az abas ERP-ben.
A sorozat 3. részében a logisztikai folyamatokra térünk rá: bemutatjuk, hogyan exportálunk szállítólevelet és összetett csomagolási fát (Handling Units, SSCC) XML formátumban, valamint hogyan kötjük össze az abast WMS rendszerekkel és futárszolgálati (GLS, DPD, DHL) API-kkal.
Szeretné automatizálni vállalata cXML és UBL rendelésfeldolgozását abas ERP rendszerében? Kérjen szakértői konzultációt csapatunktól!