Inhaltsverzeichnis

Partnererkennung

Damit in einem definierten Prozess die an einer Nachricht beteiligten Partner eindeutig erkannt werden können müssen i.d.R entsprechende Identifikationen in den Nachrichten vorhanden sein. Ausnahmen sind Kommunikationskanäle mit fest hinterlegten Partnern.

Die Erkennung dieser Partneridentifikationen sind abhängig vom Nachrichtentyp. Bei EDIFACT, AnsiX12 oder anderen(standardisierten) Nachrichten ist es eindeutig über die entsprechenden Datenelemente definiert.

Hinweis: Für eine korrekte Partnererkennung sind gültiger Einstellungen beim Analysator und der Erkennungskomponenten1) des Entitätstyps im entsprechenden Repositorium notwendig.

EDIFACT

Im EDIFACT UNB2) Segment sind Sender und Empfänger der Nachricht definiert.
I.d.R. wird in Deutschland dafür die GLN/ILN verwendet und mit dem Qualifier 14 ausgewiesen.
Beispiel:

UNB+UNOB:2+4399901889996:14+4032055000007:14+170404:0920+37108006'

D.h. für Analysatoren ist hier bei Partnererkennung = By Interchange address festgelegt und in der Erkennungskomponenten bei Erkenner Typ = eBiss.ClassLib.Analyzers.EdifactTypeRecognizer definiert.

Alternativen zur GLN sind möglich und können mit den entsprechenden Qualifier bestimmt werden.

Beispiele:

D.h. diese IDs müssen als Edifact UNB Kommunikationsadressen beim System, bzw. Handelspartner angelegt sein.

Eigene Nachrichtenformate

Bei kundenspezifischen Objekten wird diese vorzugsweise in der Objektdefinition mit entsprechenden Datentyp Attribute3) festgelegt.

Beispiel C# Code für die Partnererkennung bei Datenelementen welche tiefer in der Struktur eingebettet sind.

In folgendem Beispiel wird die Headquarter GLN im Pfad EDI_InvList/CustInvoiceJour/CustTableInvoice/EDI_GLN bedient.

using System;
using System.ComponentModel;
using System.Collections;
using System.Collections.Generic;
using eBiss.Api;
using System.Linq;
 
namespace Axd.SInvList
{
    public class EDI_SInvList : IMapObjectRoot
    {
        [MapFrameDocumentRecipient, MapIgnore(MapIgnoreScope.OnRead)]
        public string RecipientGLN
        {
            get
            {
                string returnValue = String.Empty;
                if (EDI_InvoiceList != null)
                {
                    EDI_InvoiceList firstEDI_InvoiceList = EDI_InvoiceList.FirstOrDefault();
                    if (firstEDI_InvoiceList != null)
                    {
                        CustInvoiceJour firstCustINvoiceJour = firstEDI_InvoiceList.CustInvoiceJour.FirstOrDefault();
                        if (firstCustINvoiceJour != null)
                        {
                            CustTableInvoice firstCustTableInvoice = firstCustINvoiceJour.CustTableInvoice.FirstOrDefault();
                            if (firstCustTableInvoice != null)
                            {
                                returnValue = firstCustTableInvoice.EDI_GLN;
                            }
                        }
                    }
                }
                return returnValue;
            }
        }
        ...
 
    public class EDI_InvoiceList : IMapObjectItem
    {
        [MapSize(50)]
        public String CurrencyCode;
        [MapSize(20)]
        public String ExternalInvoiceListId;
        [MapSize(15)]
        public String GLNNumber;
        [MapSize(20)]
        public String InvoiceListId;
        public List<CustInvoiceJour> CustInvoiceJour;
        [MapExternalName("class"), MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String _class;
        [MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String action;
    }
 
    public class CustInvoiceJour : IMapObjectItem
    {
        public String CashDisc;
        [MapSize(50)]
        public String CurrencyCode;
        [MapSize(10)]
        public String CustGroup;
        public DefaultDimension DefaultDimension;
        public String EndDisc;
        [MapSize(50)]
        public String InvoiceAccount;
        public String InvoiceAmount;
        public String InvoiceDate;
        [MapSize(20)]
        public String InvoiceId;
        [MapSize(7)]
        public String LanguageId;
        public String NetAmount;
        [MapSize(50)]
        public String OrderAccount;
        public String SumMarkup;
        public String SumTax;
        [MapListType(typeof(CustInvoiceTrans))]
        public ArrayList CustInvoiceTrans;
        [MapListType(typeof(TaxTrans))]
        public ArrayList TaxTrans;
        [MapListType(typeof(FormLetterRemarks))]
        public ArrayList FormLetterRemarks;
        public List<CompanyInfo> CompanyInfo;
        public List<CustTableOrder> CustTableOrder;
        public List<CustTableInvoice> CustTableInvoice;
        [MapListType(typeof(LogisticsPostalAddress))]
        public ArrayList LogisticsPostalAddress;
        [MapListType(typeof(PackingSlips))]
        public ArrayList PackingSlips;
        [MapExternalName("class"), MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String _class;
        [MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String action;
    }       
 
    public class CustTableInvoice : IMapObjectItem
    {
        [MapSize(10)]
        public String CustGroup;
        public DefaultDimension DefaultDimension;
        [MapSize(15)]
        public String EDI_GLN;
        [MapExternalName("class"), MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String _class;
        [MapXmlHandlingAttribute(MapXmlHandlingAttribute.HandlingType.AsAttribute)]
        public String action;
    }

Hinweis: Hierbei wird anstatt mit dem Datenelement Attribut MapListType(typeof(…))] die LIST Klasse verwendet, welche es ermöglicht mit der Methode FirstOrDefault() das jeweils erst Element zu lesen.

Hinweis: Die Einstellung der Erkennungskomponenten ist sehr flexibel und erlaubt im Prinzip alle möglichen Identifikationsmerkmale, welche beim Partner als Backend-Reference, GLN, TNr oder Kommunikationsadressen entsprechend hinterlegt werden4).

Fixe Festlegung über Kommunikationskanal

Für diese Variante kann auf eine Erkennung innerhalb der Nachricht verzichtet werden. Allerdings ist dann ein entsprechender Kanal dediziert nur für eine Kombination Sender-Empfänger möglich.

1)
Wichtig ist die Richtung der Nachrichten!
2)
Interchange Header
3)
MapFrameDocumentSender und MapFrameDocumentReceiver