Funzionamento dell'assembler EDI
BizTalk Server esegue la maggior parte dell'elaborazione degli interscambi con codifica EDI da inviare nella pipeline di trasmissione EDI (Microsoft.BizTalk.DefaultPipelines.EDISendPipeline
). Tale pipeline include il componente della pipeline assembler EDI, che esegue l'elaborazione seguente:
Serializza l'interscambio EDI, conversione dei messaggi con codifica XML in set di transazioni EDI nell'interscambio.
Esecuzione della convalida dello schema EDI, della convalida incrociata campi per messaggi con codifica X12 (se configurato), della convalida strutturale EDI e della convalida estesa dello schema, se lo schema è stato personalizzato con un nodo con tipo di dati non EDI.
Applicazione di una busta al messaggio EDI.
Elaborazione dei riconoscimenti tecnici e funzionali ricevuti in risposta a messaggi EDI, con la scomposizione dei batch dei riconoscimenti, se tale opzione è configurata.
Applicazione di una busta a un messaggio EDI in uscita
Quando la pipeline di trasmissione EDI compila un messaggio EDI in uscita da un file XML intermedio, applica al messaggio una busta contenente l'interscambio e le intestazioni di gruppo sulla base delle proprietà EDI definite per l'accordo sul lato ricezione. Se la pipeline di trasmissione non è stata in grado di determinare l'accordo di ricezione dalla porta di trasmissione, utilizzerà l'accordo di fallback per applicare la busta.
Se la EdiOverride.OverrideEdiHeader
proprietà di contesto è impostata su true, la pipeline di invio EDI userà i valori specificati nell'insieme di proprietà EdiOverride per costruire la busta. Se nella raccolta non è presente alcun valore, verrà utilizzato il valore EDI corrispondente nelle proprietà dell'accordo. Se non è disponibile alcun valore nella raccolta EdiOverride o nelle proprietà dell'accordo, verranno utilizzate le proprietà disponibili nell'accordo EDI di fallback.
Se il file XML intermedio dispone di un tag riservato o della proprietà di contesto ReuseEnvelope, il messaggio è un batch mantenuto e non verrà applicata alcuna logica applicativa della busta.
Origini per i valori busta 12 X
Nella tabella seguente vengono mostrate le posizioni in cui la pipeline di trasmissione EDI ottiene le informazioni necessarie per ogni parte di una busta X12:
Intestazione | Source (Sorgente) |
---|---|
Intestazione di controllo interscambio (ISA) | - Proprietà del contesto EdiOverride (se EdiOverride.OverrideEdiHeader è true).- Se viene definito un contratto, le definizioni di segmento ISA da pagine diverse nella sezione Impostazioni interscambio nella finestra di dialogo Proprietà contratto unidirezionale. - Se non viene definito alcun contratto, le definizioni di segmento ISA provenienti da pagine diverse nella sezione Impostazioni interscambio nella finestra di dialogo Impostazioni di fallback EDIFACT . |
Intestazioni gruppo funzionale (GS) | - Proprietà del contesto EdiOverride (se EdiOverride.OverrideEdiHeader è true)- Se viene definito un contratto, le definizioni di segmento GS dalla pagina Buste (nella sezione Impostazioni set di transazioni) nelle proprietà del contratto unidirezionale nella finestra di dialogo Proprietà contratto - Se non viene definito alcun contratto, le definizioni di segmento GS dalla pagina Buste (nella sezione Impostazioni set di transazioni) nella finestra di dialogo Impostazioni di fallback X12 Se è stato definito un accordo, i valori degli elementi di dati GS vengono determinati in base alla combinazione dell'identificatore set transazioni (ST1), della versione e dello spazio dei nomi di destinazione. Questi valori vengono confrontati con la griglia nella pagina Buste (nella sezione Impostazioni set di transazioni ) delle proprietà del contratto (se è definito un contratto) o le proprietà del contratto di fallback (se non è definito alcun contratto): - Se è presente una riga corrispondente, i valori contenuti nella riga corrispondente vengono usati per l'intestazione GS. - Se non è presente alcuna corrispondenza, ma viene definita una riga predefinita, tutti gli elementi dati GS tranne GS01 vengono popolati dalla riga predefinita. GS01 viene determinato dinamicamente in base al valore di ST1. - Se non è presente alcuna riga corrispondente e nessuna riga predefinita, il messaggio viene sospeso. Nota: Affinché un gruppo sia univoco da altri gruppi, non tutti questi valori possono essere uguali a quelli di un altro gruppo. Se non è stato definito alcun accordo, gli elementi di dati GS verranno popolati dalle proprietà dell'accordo di fallback. |
Origini per i valori della busta EDIFACT
Nella tabella seguente vengono mostrate le posizioni in cui la pipeline di trasmissione EDI ottiene le informazioni necessarie per ogni parte di una busta EDIFACT:
Intestazione | Source (Sorgente) |
---|---|
Service String Advice (UNA) | - Proprietà del contesto EdiOverride (se EdiOverride.OverrideEdiHeader è true).- Se viene definito un contratto, le definizioni di segmento UNA dalla pagina Charset e Separatori nelle proprietà del contratto unidirezionale nella finestra di dialogo Proprietà contratto . - Se non viene definito alcun contratto, le definizioni di segmento UNA dalla pagina Charset e Separatori nella finestra di dialogo Impostazioni di fallback EDIFACT . |
Intestazione di controllo interscambio (UNB) | - Proprietà del contesto EdiOverride (se EdiOverride.OverrideEdiHeader è true).- Se viene definito un contratto, le definizioni di segmento UNB provenienti da pagine diverse nella sezione Impostazioni interscambio nella finestra di dialogo Proprietà contratto . - Se non viene definito alcun contratto, le definizioni di segmento UNB provenienti da pagine diverse nella sezione Impostazioni interscambio nella finestra di dialogo Impostazioni di fallback EDIFACT . |
Intestazione di gruppo funzionale (UNG) | - Proprietà del contesto EdiOverride (se EdiOverride.OverrideEdiHeader è true).- Se viene definito un contratto, le definizioni di segmento UNG e UNH dalla pagina Buste (nella sezione Impostazioni set di transazioni) nella finestra di dialogo Proprietà contratto - Se non viene definito alcun contratto, le definizioni di segmento UNG e UNH dalla pagina Buste (nella sezione Impostazioni set di transazioni) nella finestra di dialogo Proprietà contratto nella finestra di dialogo Proprietà contratto nella finestra di dialogo Impostazioni di fallback EDIFACT Se è stato definito un accordo, i valori per gli elementi di dati UNG vengono determinati in base alla combinazione di tipo di messaggio (UNH2.1), numero di rilascio messaggio (UNH2.3), codice assegnato (UNH2.5), versione e spazio dei nomi di destinazione. Nota: Affinché un gruppo sia univoco da altri gruppi, non tutti questi valori possono essere uguali a quelli di un altro gruppo. |
Applicazione di segmenti di intestazione e trailer del set di transazioni
Un set transazioni XML in fase di serializzazione in un interscambio EDI in uscita deve disporre di un'intestazione e un trailer del set transazioni. Qualora non includa un'intestazione o un trailer del set transazioni, il messaggio verrà tuttavia elaborato dall'assembler EDI. I segmenti di intestazione e trailer del set transazioni negli schemi X12 ed EDIFACT sono facoltativi per un set transazioni XML. Se una transazione non include un'intestazione o un trailer, l'assembler EDI nella pipeline di trasmissione EDISend o AS2EDISend aggiungerà alla transazione i valori di intestazione e trailer del set transazioni. Questi valori saranno basati su mapping o calcoli. L'assembler EDI eseguirà questa operazione per XML dell'interscambio (un batch mantenuto), XML del set transazioni in modalità batch e XML del set transazioni.
Se il mapping provoca un errore di convalida, il set di transazioni XML o l'interscambio XML verrà sospeso con un errore appropriato nel visualizzatore eventi, ad esempio lunghezza o tipo di dati non valido oppure codice di agenzia di controllo non valido.
Segmenti di intestazione e trailer del set di transazioni X12
Per i set di transazioni con codifica X12 che non dispongono di segmenti di intestazione e trailer, l'assembler EDI imposterà i segmenti ST e SE sui valori seguenti:
Segmento di intestazione/piè di pagina | Valore |
---|---|
ST01 (Codice identificatore set transazioni) | Mappato agli ultimi tre caratteri del nome RootNode dal set di transazioni XML in arrivo. Ad esempio, "855" da "X12_00401_855". Per i reclami HIPAA con codice identificatore set di transazioni pari a 837P, 837D o 837I, verrà utilizzato "837". |
ST02 (Numero di controllo set transazioni) | Il valore di EdiOverride.ST02 (se EdiOveride.OverrideEdiHeader è true) o mappato al valore del numero di controllo set di transazioni (ST02) nella pagina Impostazioni host locali (in Impostazioni interscambio) della scheda contratto unidirezionale nella finestra di dialogo Proprietà contratto .Viene applicato un numero di controllo nuovo o incrementato indipendentemente dall'impostazione della proprietà Applica nuovo ID . |
ST03 (Identificatore di versione) | Mappato al valore di ST03 dal set di transazioni XML in arrivo. Ad esempio, “005010X218” per un documento 820 HIPAA 5010 (Deduzione retribuzioni). ST03 viene convalidato rispetto allo schema utilizzato per convalidare il set di transazioni. Nota: ST03 è obbligatorio per tutte le transazioni HIPAA versione 5010 ad eccezione di 835. |
SE01 (Numero di segmenti inclusi) | Impostare sul numero totale di segmenti nel set di transazioni, inclusi i segmenti ST e SE. |
SE02 (Numero di controllo set transazioni) | Mappato al valore di ST02 nel set di transazioni. |
Altri elementi di dati nell'intestazione del set di transazioni, ad esempio ST03, sono facoltativi e non vengono pertanto valutati nei segmenti generati.
Segmenti di intestazione e trailer del set di transazioni EDIFACT
Per i set di transazioni con codifica EDIFACT che non dispongono di segmenti di intestazione e trailer, l'assembler EDI imposterà i segmenti UNH e UNT sui valori seguenti:
Segmento di intestazione/piè di pagina | Valore |
---|---|
UNH01 (Numero di controllo riferimenti messaggio) | Valore di EdiOverride.UNH1 (se EdiOverride.OverrideEdiHeader è true) o mappato al valore di Numero di riferimento (UNH1) nella pagina Impostazioni host locali (in Impostazioni interscambio) della scheda contratto unidirezionale nella finestra di dialogo Proprietà contratto . Viene applicato un numero di controllo nuovo o incrementato indipendentemente dall'impostazione della proprietà Applica nuovo ID . |
UNH2.1 (Tipo messaggio) | Mappato agli ultimi sei caratteri del nome RootNode dal set di transazioni XML in arrivo. Ad esempio, "INVOIC" da "EFACT_D96A_INVOIC". |
UNH2.2 (Numero versione messaggio) | Mappato al settimo carattere del nome RootNode dal set di transazioni XML in arrivo. Ad esempio, "D" da "EFACT_D96A_INVOIC". |
UNH2.3 (Numero rilascio messaggio) | Mappato all'ottavo, nono e decimo carattere del nome RootNode dal set di transazioni XML in arrivo. Ad esempio, "96A" da "EFACT_D96A_INVOIC". |
UNH2.4 (Codice agenzia di controllo) | Sempre mappato alla stringa 'UN'. |
UNT01 (Numero di segmenti inclusi) | Impostare sul numero totale di segmenti nel set di transazioni, inclusi i segmenti UNH e UNT. |
UNT02 (Numero di controllo riferimenti messaggio) | Mappato al valore di Numero di riferimento (UNH1) nella pagina Impostazioni host locali (in Impostazioni dell'interscambio) della scheda contratto unidirezionale nella finestra di dialogo Proprietà contratto |
Altri elementi di dati nell'intestazione del set di transazioni UNH, ad esempio da UNH3 a UNH6, sono facoltativi e non vengono pertanto valutati nei segmenti generati. Se alcuni di questi campi sono obbligatori, sarà necessario impostarli su un valore disponibile nel set di transazioni XML in arrivo.
Ulteriore elaborazione sulla busta di un messaggio in uscita
La pipeline di trasmissione EDI esegue l'elaborazione seguente sulla busta di un messaggio in uscita.
Numeri di controllo
La pipeline di trasmissione EDI immetterà un numero di controllo di interscambio, un numero di controllo di gruppo e un numero di controllo (o riferimento) del set di transazioni nei segmenti della busta di ogni interscambio in uscita. Tali numeri vengono mostrati nella tabella seguente:
Numero di controllo | Campo X12 | Campo EDIFACT |
---|---|---|
Numero di controllo interscambio | ISA13 | UNB5 |
Numero di controllo gruppo | GS6 | UNG5 |
Numero di controllo set di transazioni (X12) Numero di riferimento set di transazioni (EDIFACT) |
ST2 | UNH1 |
BizTalk Server imposta il numero di controllo interscambio per l'interscambio successivo inviato in base all'intervallo di valori immessi nella proprietà Numero di controllo interscambio (ISA13) nella pagina Impostazioni host locali (in Impostazioni interscambio) della scheda contratto unidirezionale nella finestra di dialogo Proprietà contratto. Questo numero verrà incrementato per ogni interscambio successivo, fino al raggiungimento del numero massimo consentito.
Se il numero di controllo dell'interscambio viene specificato utilizzando le proprietà di contesto EdiOverride, il valore specificato verrà utilizzato per questo interscambio e non influirà sul numero di controllo dell'interscambio specificato nell'accordo.
Nota
Il numero di controllo del gruppo in EDIFACT viene incrementato solo se è selezionata la proprietà Applica segmenti UNG nella pagina Buste delle proprietà del contratto EDIFACT. Il secondo campo (numero di riferimento) viene incrementato. I campi relativi a prefisso e suffisso non vengono incrementati. I numeri di controllo del set di transazioni vengono incrementati solo se è selezionata la proprietà Applica nuovo ID .
Nota
In un interscambio batch mantenuto è possibile creare un numero di controllo di interscambio personalizzato utilizzando l'esempio Message Enrichment. Per altre informazioni, vedere Esempio di arricchimento dei messaggi (BizTalk Server esempio).
Se non è stato definito alcun accordo, i numeri verranno presi dalla stessa pagina dell'accordo di fallback. La pipeline di trasmissione memorizza il numero di controllo utilizzato per ultimo e quindi immette un numero incrementato per l'interscambio, il gruppo e il set di transazioni successivo.
Nota
Se un numero di controllo raggiunge il valore massimo dell'intervallo specificato, BizTalk Server genererà un errore e sospende l'interscambio. È possibile reimpostare manualmente il numero di controllo o configurare BizTalk Server per reimpostare automaticamente il limite inferiore, nella pagina Impostazioni host locali nella finestra di dialogo Proprietà contratto per i messaggi X12 ed EDIFACT.
Nota
I numeri di controllo vengono salvati nella tabella dbo.EdiSequenceNumbers del database MessageBox BizTalk. È necessario gestire questa tabella di database eliminando i numeri di controllo dalla tabella oppure archiviandoli a seconda dei casi.
In EDIFACT i numeri di controllo sono costituiti da valori alfanumerici. Sono supportati i formati seguenti:
Numbers (ad esempio, "1")
PrefixNumbersSuffix (ad esempio, "WA1A")
PrefixNumbers (ad esempio, "AA1")
NumbersSuffix (ad esempio, "1AA")
In tali formati, i caratteri numerici possono essere compresi tra "0" e "9"e i caratteri per prefisso e suffisso possono essere tutti i caratteri diversi dai numeri. Solo il numero viene incrementato fino al raggiungimento del valore massimo.
Numero di segmenti
Per ogni set di transazioni in un interscambio la pipeline di trasmissione EDI verificherà il numero di segmenti nel set di transazioni, come indicato nell'elemento di dati SE01 per X12 e nell'elemento di dati UNT01 per EDIFACT. Se il valore dell'elemento di dati appropriato non corrisponde al numero effettivo, la pipeline di trasmissione aggiornerà tale valore per riflettere il numero effettivo dei segmenti. Il set di transazioni non verrà rifiutato a causa di un conteggio errato. L'aggiornamento del conteggio verrà registrato in un avviso nel Visualizzatore eventi. Ciò non è applicabile all'elaborazione dei batch mantenuti.
Ulteriori operazioni nella serializzazione di un interscambio EDI
La pipeline di trasmissione EDI esegue inoltre i passaggi seguenti durante la serializzazione.
Serializzazione dell'indicatore di rilascio
Durante la serializzazione di un messaggio EDIFACT, la pipeline di trasmissione EDI inserirà eventuali indicatori di rilascio necessari nell'interscambio EDI. Si presuppone che il documento XML intermedio indirizzato alla pipeline di trasmissione non includa dati con codice di escape. Ad esempio, se un indicatore di rilascio è presente nei dati XML indirizzati alla pipeline di trasmissione, la pipeline di trasmissione aggiungerà un altro indicatore di rilascio davanti all'indicatore di rilascio esistente per inserire codice di escape.
L'indicatore di rilascio non verrà incluso nella convalida EDI. La pipeline di trasmissione EDI non includerà l'indicatore di rilascio nel calcolo delle limitazioni di lunghezza.
Aggiunta di zero finali per soddisfare i requisiti relativi al decimale implicito
Se l'assembler EDI rileva un numero con un numero di cifre insufficiente dopo la virgola decimale, verranno aggiunti degli zero finali dopo la virgola decimale, in modo da soddisfare i requisiti relativi al decimale implicito. Ad esempio, se l'assembler EDI rileva il numero "4,5" quando per il numero è previsto il formato N2, tale numero verrà cambiato automaticamente in "4,50".
Sostituzione di separatori nei dati del payload
Se i dati nel messaggio in uscita includono caratteri configurati anche come separatori di dati, segmenti o componenti, la pipeline di trasmissione EDI potrà sostituire tali caratteri. Ad esempio, se il messaggio contiene un valore pari a "test*data" e il separatore degli elementi di dati è configurato come '*', è possibile che si verifichino problemi di analisi nel sistema ricevente.
La pipeline di invio EDI può essere configurata per sostituire questo carattere abilitando i separatori Sostituisci nel payload con la proprietà e specificando un carattere sostitutivo. Questa proprietà si trova nella pagina Charset e Separatori nella scheda contratto unidirezionale della finestra di dialogo Proprietà contratto .
Trasformare i record HIPAA in base ai campi trigger
Se il documento in uscita è un set di transazioni HIPAA, l'assembler EDI trasforma qualsiasi record XML univoco che contiene un campo trigger nel segmento EDI generico corrispondente (vedere Annotazioni di campo trigger DIA schema HIPAA). Per ottenere tale risultato, viene eliminato il suffisso del nome del record XML dopo il carattere “_”.
Ad esempio, entrambi gli elementi <N1_PayerIdentification_TS835W1_1000A> e <N1_PayeeIdentification_TS835W1_1000B> diventeranno segmenti N1.