← Cikkek · abas és XML

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:

  1. 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.
  2. 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).
  3. 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.
  4. 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.
  5. 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 ygln vagy 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) és ycustomerno (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:

Automatikus árellenőrzési logika:
Ha | XML_Egységár - abas_Listaár | > Toleranciaküszöb (pl. > 0.5% vagy > 0.01 EUR):
  1. 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.
  2. A tételsor és a rendelés feje "Ár jóváhagyásra vár" státuszt kap (yedistat = 'PRICE_DISCREPANCY').
  3. 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!