====== 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 [[kommunikation:kanal:start]] 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. {{:images:sign_warning.png?nolink|}}**Hinweis:** Für eine korrekte Partnererkennung sind gültiger Einstellungen beim [[prozessdefinition:repositorien:analysator:start|Analysator]] und der [[prozessdefinition:repositorien:erkennungskomponenten:start|]]((Wichtig ist die Richtung der Nachrichten!)) des [[prozessdefinition:repositorien:entitaetstyp:start|Entitätstyps]] im entsprechenden [[prozessdefinition:repositorien:start|Repositorium]] notwendig. ===== EDIFACT ===== Im [[http://www.gefeg.com/jswg/v4/se/sed.htm|EDIFACT UNB]]((Interchange Header)) 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 [[prozessdefinition:repositorien:analysator:anlegen|Analysatoren]] ist hier bei **Partnererkennung = By Interchange address** festgelegt und in der [[prozessdefinition:repositorien:erkennungskomponenten:start]] bei **Erkenner Typ = eBiss.ClassLib.Analyzers.EdifactTypeRecognizer** definiert. Alternativen zur GLN sind möglich und können mit den entsprechenden [[http://www.gefeg.com/jswg/cl/v4/40007/cl3.htm|Qualifier]] bestimmt werden.\\ **Beispiele:** * **[[http://egate.pranke.com|eGate]] Teilnehmernummer** mit Qualifier **53** * Telefonnumer mit Qualifier **12** * eigene ID mit Qualifier **ZZZ** D.h. diese IDs müssen als Edifact UNB [[partnerverwaltung:kommunikation:start]] beim System, bzw. Handelspartner angelegt sein. ===== Eigene Nachrichtenformate ===== Bei kundenspezifischen Objekten wird diese vorzugsweise in der [[transformation:mappings:objektdefinition:start]] mit entsprechenden [[transformation:mappings:objektdefinition:attribute]]((**MapFrameDocumentSender** und **MapFrameDocumentReceiver**)) 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; [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; public List CustTableOrder; public List 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; } {{:images:sign_warning.png?nolink|}}**Hinweis:** Hierbei wird anstatt mit dem Datenelement Attribut [[[transformation:mappings:objektdefinition:attribute|MapListType]](typeof(...))] die **LIST** Klasse verwendet, welche es ermöglicht mit der Methode **FirstOrDefault()** das jeweils erst Element zu lesen. {{:images:sign_warning.png?nolink|}}**Hinweis:** Die Einstellung der [[prozessdefinition:repositorien:erkennungskomponenten:start]] ist sehr flexibel und erlaubt im Prinzip alle möglichen Identifikationsmerkmale, welche beim Partner als **Backend-Reference**, **GLN**, **TNr** oder [[partnerverwaltung:kommunikation:start]] entsprechend hinterlegt werden((Siehe auch [[prozessdefinition:repositorien:analysator:anlegen|]].)). ===== 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.