====== 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.