Monitoraggio degli schemi per il monitoraggio dei messaggi B2B in App per la logica di Azure
Si applica a: App per la logica di Azure (consumo + Standard)
App per la logica di Azure include il rilevamento predefinito che è possibile abilitare per parti del flusso di lavoro. Per monitorare il recapito o la ricezione, gli errori e le proprietà per i messaggi B2B (Business To Business), è possibile creare e usare gli schemi di rilevamento as2, X12 e personalizzati nell'account di integrazione. Questa guida di riferimento descrive la sintassi e gli attributi per questi schemi di rilevamento.
AS2
- Schema di rilevamento messaggi AS2
- Schema di rilevamento di AS2 Message Disposition Notification (MDN)
Schema di rilevamento messaggi AS2
La sintassi seguente descrive lo schema di rilevamento per un messaggio AS2:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"as2To": "",
"as2From": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"messageId": "",
"dispositionType": "",
"fileName": "",
"isMessageFailed": "",
"isMessageSigned": "",
"isMessageEncrypted": "",
"isMessageCompressed": "",
"correlationMessageId": "",
"incomingHeaders": {},
"outgoingHeaders": {},
"isNrrEnabled": "",
"isMdnExpected": "",
"mdnType": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un messaggio AS2:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio AS2 |
receiverPartnerName | No | string | Nome partner del ricevitore di messaggi AS2 |
as2To | Sì | string | Nome del ricevitore di messaggi AS2 dalle intestazioni del messaggio AS2 |
as2From | Sì | string | Nome del mittente del messaggio AS2 dalle intestazioni del messaggio AS2 |
agreementName | No | string | Nome del contratto AS2 in base al quale vengono risolti i messaggi. |
direction | Sì | string | Direzione del flusso del messaggio, ovvero receive o send |
messageId | No | string | ID messaggio AS2 dalle intestazioni del messaggio AS2 |
dispositionType | No | string | Valore del tipo di eliminazione della notifica di eliminazione del messaggio (MDN) |
fileName | No | string | Nome file dall'intestazione del messaggio AS2 |
isMessageFailed | Sì | Boolean | Se il messaggio AS2 non è riuscito |
isMessageSigned | Sì | Boolean | Se il messaggio AS2 è stato firmato |
isMessageEncrypted | Sì | Boolean | Se il messaggio AS2 è stato crittografato |
isMessageCompressed | Sì | Boolean | Se il messaggio AS2 è stato compresso |
correlationMessageId | No | string | ID messaggio AS2 per correlare i messaggi con MDN |
incomingHeaders | No | Dizionario di JToken | Dettagli dell'intestazione del messaggio AS2 in ingresso |
outgoingHeaders | No | Dizionario di JToken | Dettagli dell'intestazione del messaggio AS2 in uscita |
isNrrEnabled | Sì | Boolean | Se usare il valore predefinito se il valore non è noto |
isMdnExpected | Sì | Boolean | Se usare il valore predefinito se il valore non è noto |
mdnType | Sì | Enumerazione | Valori consentiti: NotConfigured , Sync e Async |
Schema di rilevamento MDN AS2
La sintassi seguente descrive lo schema di rilevamento per un messaggio MDN AS2:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"as2To": "",
"as2From": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"messageId": "",
"originalMessageId": "",
"dispositionType": "",
"isMessageFailed": "",
"isMessageSigned": "",
"isNrrEnabled": "",
"statusCode": "",
"micVerificationStatus": "",
"correlationMessageId": "",
"incomingHeaders": {
},
"outgoingHeaders": {
}
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un messaggio MDN AS2:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio AS2 |
receiverPartnerName | No | string | Nome partner del ricevitore di messaggi AS2 |
as2To | Sì | string | Nome partner che riceve il messaggio AS2 |
as2From | Sì | string | Nome partner che invia il messaggio AS2 |
agreementName | No | string | Nome del contratto AS2 in base al quale vengono risolti i messaggi. |
direction | Sì | string | Direzione del flusso del messaggio, ovvero receive o send |
messageId | No | string | ID messaggio AS2 |
originalMessageId | No | string | ID messaggio originale AS2 |
dispositionType | No | string | Valore del tipo di eliminazione MDN |
isMessageFailed | Sì | Boolean | Se il messaggio AS2 non è riuscito |
isMessageSigned | Sì | Boolean | Se il messaggio AS2 è stato firmato |
isNrrEnabled | Sì | Boolean | Se usare il valore predefinito se il valore non è noto |
statusCode | Sì | Enumerazione | Valori consentiti: Accepted , Rejected e AcceptedWithErrors |
micVerificationStatus | Sì | Enumerazione | Valori consentiti:NotApplicable , Succeeded e Failed |
correlationMessageId | No | string | ID di correlazione, ovvero l'ID per il messaggio originale con l'MDN configurato |
incomingHeaders | No | Dizionario di JToken | Dettagli dell'intestazione del messaggio in ingresso |
outgoingHeaders | No | Dizionario di JToken | Dettagli dell'intestazione del messaggio in uscita |
X12
- Schema di rilevamento del set di transazioni X12
- Schema di rilevamento del rilevamento del set di transazioni X12
- Schema di rilevamento interscambio X12
- Schema di rilevamento dell'interscambio X12
- Schema di rilevamento del gruppo funzionale X12
- Schema di rilevamento del gruppo funzionale X12
Schema di rilevamento X12 per set di transazioni
La sintassi seguente descrive lo schema di rilevamento per un set di transazioni X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"functionalGroupControlNumber": "",
"transactionSetControlNumber": "",
"CorrelationMessageId": "",
"messageType": "",
"isMessageFailed": "",
"isTechnicalAcknowledgmentExpected": "",
"isFunctionalAcknowledgmentExpected": "",
"needAk2LoopForValidMessages": "",
"segmentsCount": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un set di transazioni X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del destinatario di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Invia identificatore partner |
receiverQualifier | Sì | string | Qualificatore partner di ricezione |
receiverIdentifier | Sì | string | Identificatore del partner di ricezione |
agreementName | No | string | Nome del contratto X12 in base al quale vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ovvero receive o send |
interchangeControlNumber | No | string | Numero di controllo interscambio |
functionalGroupControlNumber | No | string | Numero di controllo funzionale |
transactionSetControlNumber | No | string | Numero di controllo set transazioni |
CorrelationMessageId | No | string | ID messaggio di correlazione, che è una combinazione di {AgreementName}{GroupControlNumber}{TransactionSetControlNumber} |
messageType | No | string | Set di transazioni o tipo di documento |
isMessageFailed | Sì | Boolean | Se il messaggio X12 non è riuscito |
isTechnicalAcknowledgmentExpected | Sì | Boolean | Se il riconoscimento tecnico è configurato nel contratto X12 |
isFunctionalAcknowledgmentExpected | Sì | Boolean | Se il riconoscimento funzionale è configurato nel contratto X12 |
needAk2LoopForValidMessages | Sì | Boolean | Se il ciclo AK2 è necessario per un messaggio valido |
segmentsCount | No | Integer | Numero di segmenti nel set di transazioni X12 |
Schema di rilevamento del rilevamento del set di transazioni X12
La sintassi seguente descrive lo schema di rilevamento per un riconoscimento del set di transazioni X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"functionalGroupControlNumber": "",
"isaSegment": "",
"gsSegment": "",
"respondingfunctionalGroupControlNumber": "",
"respondingFunctionalGroupId": "",
"respondingtransactionSetControlNumber": "",
"respondingTransactionSetId": "",
"statusCode": "",
"processingStatus": "",
"CorrelationMessageId": "",
"isMessageFailed": "",
"ak2Segment": "",
"ak3Segment": "",
"ak5Segment": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un riconoscimento del set di transazioni X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del destinatario di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Invia identificatore partner |
receiverQualifier | Sì | string | Qualificatore partner di ricezione |
receiverIdentifier | Sì | string | Identificatore del partner di ricezione |
agreementName | No | string | Nome del contratto X12 in base al quale vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ovvero receive o send |
interchangeControlNumber | No | string | Numero di controllo interscambio del riconoscimento funzionale. Il valore popola solo per il lato invio in cui viene ricevuto il riconoscimento funzionale per i messaggi inviati al partner. |
functionalGroupControlNumber | No | string | Numero di controllo del gruppo funzionale del riconoscimento funzionale. Il valore viene popolato solo per il lato di invio in cui viene ricevuto il riconoscimento funzionale per i messaggi inviati al partner |
isaSegment | No | string | Segmento ISA del messaggio. Il valore viene popolato solo per il lato di invio in cui viene ricevuto il riconoscimento funzionale per i messaggi inviati al partner |
gsSegment | No | string | Segmento GS del messaggio. Il valore viene popolato solo per il lato di invio in cui viene ricevuto il riconoscimento funzionale per i messaggi inviati al partner |
respondingfunctionalGroupControlNumber | No | string | Numero di controllo interscambio che risponde |
respondingFunctionalGroupId | No | string | ID del gruppo funzionale che corrisponde a AK101 nel riconoscimento |
respondingtransactionSetControlNumber | No | string | Numero di controllo del set di transazioni che risponde |
respondingTransactionSetId | No | string | ID set di transazioni che risponde, che esegue il mapping a AK201 nel riconoscimento |
statusCode | Sì | Boolean | Codice di stato del riconoscimento del set di transazioni |
segmentsCount | Sì | Enumerazione | Codice di stato di riconoscimento con questi valori consentiti: Accepted , Rejected e AcceptedWithErrors |
processingStatus | Sì | Enumerazione | Stato di elaborazione del riconoscimento con questi valori consentiti: Received , Generated e Sent |
CorrelationMessageId | No | string | ID messaggio di correlazione, che è una combinazione di {AgreementName}{GroupControlNumber}{TransactionSetControlNumber} |
isMessageFailed | Sì | Boolean | Indica se il messaggio X12 non è riuscito |
ak2Segment | No | string | Riconoscimento per un set di transazioni all'interno del gruppo funzionale ricevuto |
ak3Segment | No | string | Segnala errori in un segmento di dati |
ak5Segment | No | string | Segnala se il set di transazioni identificato nel segmento AK2 viene accettato o rifiutato e perché |
Schema di rilevamento X12 per interscambio
La sintassi seguente descrive lo schema di rilevamento per un interscambio X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"isaSegment": "",
"isTechnicalAcknowledgmentExpected": "",
"isMessageFailed": "",
"isa09": "",
"isa10": "",
"isa11": "",
"isa12": "",
"isa14": "",
"isa15": "",
"isa16": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un interscambio X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del ricevitore di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Inviare l'identificatore del partner |
receiverQualifier | Sì | string | Ricevere il qualificatore del partner |
receiverIdentifier | Sì | string | Ricevere l'identificatore del partner |
agreementName | No | string | Nome del contratto X12 in base al quale vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ovvero receive o send |
interchangeControlNumber | No | string | Numero di controllo interscambio |
isaSegment | No | string | Segmento ISA del messaggio |
isTechnicalAcknowledgmentExpected | Boolean | Indica se il riconoscimento tecnico è configurato nel contratto X12 | |
isMessageFailed | Sì | Boolean | Indica se il messaggio X12 non è riuscito |
isa09 | No | string | Data interscambio documento X12 |
isa10 | No | string | Tempo di interscambio documenti X12 |
isa11 | No | string | Identificatore degli standard di controllo interscambio X12 |
isa12 | No | string | Numero di versione del controllo interscambio X12 |
isa14 | No | string | Richiesta di riconoscimento X12 |
isa15 | No | string | Indicatore per test o produzione |
isa16 | No | string | Separatore elementi |
Schema di rilevamento del riconoscimento dell'interscambio X12
La sintassi seguente descrive lo schema di rilevamento per un riconoscimento dell'interscambio X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"isaSegment": "",
"respondingInterchangeControlNumber": "",
"isMessageFailed": "",
"statusCode": "",
"processingStatus": "",
"ta102": "",
"ta103": "",
"ta105": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un riconoscimento dell'interscambio X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del ricevitore di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Inviare l'identificatore del partner |
receiverQualifier | Sì | string | Ricevere il qualificatore del partner |
receiverIdentifier | Sì | string | Ricevere l'identificatore del partner |
agreementName | No | string | Nome del contratto X12 in base al quale vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ovvero receive o send |
interchangeControlNumber | No | string | Numero di controllo interscambio del riconoscimento tecnico ricevuto dai partner |
isaSegment | No | string | Segmento ISA per il riconoscimento tecnico ricevuto dai partner |
respondingInterchangeControlNumber | No | string | Numero di controllo interscambio per il riconoscimento tecnico ricevuto dai partner |
isMessageFailed | Sì | Boolean | Indica se il messaggio X12 non è riuscito |
statusCode | Sì | Enumerazione | Codice di stato di riconoscimento dell'interscambio con questi valori consentiti: Accepted , Rejected e AcceptedWithErrors |
processingStatus | Sì | Enumerazione | Stato di riconoscimento con questi valori consentiti: Received , Generated e Sent |
ta102 | No | string | Data interscambio |
ta103 | No | string | Tempo di interscambio |
ta105 | No | string | Codice nota interscambio |
Schema di rilevamento X12 per gruppi funzionali
La sintassi seguente descrive lo schema di rilevamento per un gruppo funzionale X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"functionalGroupControlNumber": "",
"gsSegment": "",
"isTechnicalAcknowledgmentExpected": "",
"isFunctionalAcknowledgmentExpected": "",
"isMessageFailed": "",
"gs01": "",
"gs02": "",
"gs03": "",
"gs04": "",
"gs05": "",
"gs07": "",
"gs08": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un gruppo funzionale X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del destinatario di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Invia identificatore partner |
receiverQualifier | Sì | string | Qualificatore partner di ricezione |
receiverIdentifier | Sì | string | Identificatore del partner di ricezione |
agreementName | No | string | Nome del contratto X12 a cui vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ricevere o inviare |
interchangeControlNumber | No | string | Numero di controllo interscambio |
functionalGroupControlNumber | No | string | Numero di controllo funzionale |
gsSegment | No | string | Segmento GS del messaggio |
isTechnicalAcknowledgmentExpected | Sì | Boolean | Se il riconoscimento tecnico è configurato nel contratto X12 |
isFunctionalAcknowledgmentExpected | Sì | Boolean | Se il riconoscimento funzionale è configurato nel contratto X12 |
isMessageFailed | Sì | Boolean | Se il messaggio X12 non è riuscito |
gs01 | No | string | Codice identificatore funzionale |
gs02 | No | string | Codice del mittente dell'applicazione |
gs03 | No | string | Codice del ricevitore dell'applicazione |
gs04 | No | string | Data gruppo funzionale |
gs05 | No | string | Tempo di gruppo funzionale |
gs07 | No | string | Codice dell'agenzia responsabile |
gs08 | No | string | Codice identificatore per la versione, la versione o il settore |
Schema di rilevamento del gruppo funzionale X12
La sintassi seguente descrive lo schema di rilevamento per un riconoscimento del gruppo funzionale X12:
{
"agreementProperties": {
"senderPartnerName": "",
"receiverPartnerName": "",
"senderQualifier": "",
"senderIdentifier": "",
"receiverQualifier": "",
"receiverIdentifier": "",
"agreementName": ""
},
"messageProperties": {
"direction": "",
"interchangeControlNumber": "",
"functionalGroupControlNumber": "",
"isaSegment": "",
"gsSegment": "",
"respondingfunctionalGroupControlNumber": "",
"respondingFunctionalGroupId": "",
"isMessageFailed": "",
"statusCode": "",
"processingStatus": "",
"ak903": "",
"ak904": "",
"ak9Segment": ""
}
}
La tabella seguente descrive gli attributi in uno schema di rilevamento per un riconoscimento del gruppo funzionale X12:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
senderPartnerName | No | string | Nome partner del mittente del messaggio X12 |
receiverPartnerName | No | string | Nome partner del destinatario di messaggi X12 |
senderQualifier | Sì | string | Invia qualificatore partner |
senderIdentifier | Sì | string | Invia identificatore partner |
receiverQualifier | Sì | string | Qualificatore partner di ricezione |
receiverIdentifier | Sì | string | Identificatore del partner di ricezione |
agreementName | No | string | Nome del contratto X12 in base al quale vengono risolti i messaggi |
direction | Sì | Enumerazione | Direzione del flusso del messaggio, ovvero receive o send |
interchangeControlNumber | No | string | Numero di controllo dell'interscambio, che popola il lato invio quando viene ricevuto un riconoscimento tecnico dai partner |
functionalGroupControlNumber | No | string | Numero di controllo del gruppo funzionale del riconoscimento tecnico, che popola per il lato invio quando viene ricevuto un riconoscimento tecnico dai partner |
isaSegment | No | string | Uguale al numero di controllo dell'interscambio, ma popolato solo in casi specifici |
gsSegment | No | string | Uguale al numero di controllo del gruppo funzionale, ma popolato solo in casi specifici |
respondingfunctionalGroupControlNumber | No | string | Numero di controllo del gruppo funzionale originale |
respondingFunctionalGroupId | No | string | Esegue il mapping a AK101 nell'ID del gruppo funzionale di riconoscimento |
isMessageFailed | Boolean | Se il messaggio X12 non è riuscito | |
statusCode | Sì | Enumerazione | Codice di stato di riconoscimento con questi valori consentiti: Accepted , Rejected e AcceptedWithErrors |
processingStatus | Sì | Enumerazione | Stato di elaborazione del riconoscimento con questi valori consentiti: Received , Generated e Sent |
ak903 | No | string | Numero di set di transazioni ricevuti |
ak904 | No | string | Numero di set di transazioni accettati nel gruppo funzionale identificato |
ak9Segment | No | string | Se il gruppo funzionale identificato nel segmento AK1 viene accettato o rifiutato e perché |
Personalizzato
È possibile configurare il rilevamento personalizzato che registra gli eventi dall'inizio alla fine del flusso di lavoro dell'app per la logica. Ad esempio, è possibile registrare eventi da livelli che includono il flusso di lavoro, SQL Server, BizTalk Server o qualsiasi altro livello. La sezione seguente fornisce codice dello schema di rilevamento personalizzato che è possibile usare nei livelli esterni al flusso di lavoro.
{
"sourceType": "",
"source": {
"workflow": {
"systemId": ""
},
"runInstance": {
"runId": ""
},
"operation": {
"operationName": "",
"repeatItemScopeName": "",
"repeatItemIndex": ,
"trackingId": "",
"correlationId": "",
"clientRequestId": ""
}
},
"events": [
{
"eventLevel": "",
"eventTime": "",
"recordType": "",
"record": {}
}
]
}
La tabella seguente descrive gli attributi in uno schema di rilevamento personalizzato:
Proprietà | Obbligatoria | Tipo | Descrizione |
---|---|---|---|
sourceType | Sì | string | Tipo dell'origine di esecuzione con questi valori consentiti: Microsoft.Logic/workflows , custom |
source | Sì | Stringa o JToken | Se il tipo di origine è Microsoft.Logic/workflows , le informazioni sull'origine devono seguire questo schema. Se il tipo di origine è custom , lo schema è un JToken. |
systemId | Sì | string | ID del sistema dell'app per la logica |
runId | Sì | string | ID di esecuzione dell'app per la logica |
operationName | Sì | string | Nome dell'operazione, ad esempio azione o trigger |
repeatItemScopeName | Sì | string | Ripetere il nome dell'elemento se l'azione si trova all'interno di un foreach ciclo o until |
repeatItemIndex | Sì | Integer | Indica che l'azione si trova all'interno di un foreach ciclo o until ed è il numero di indice dell'elemento ripetuto. |
trackingId | No | string | ID rilevamento per correlare i messaggi |
correlationId | No | string | ID correlazione per correlare i messaggi |
clientRequestId | No | string | Il client può popolare questa proprietà per correlare i messaggi |
eventLevel | Sì | string | Livello dell'evento |
eventTime | Sì | Datetime | Ora dell'evento in formato UTC: AAAA-MM-GGTHH:MM:SS.00000Z |
recordType | Sì | string | Tipo del record di traccia solo con questo valore consentito: custom |
record | Sì | JToken | Tipo di record personalizzato solo con formato JToken |