Esempi di script JavaScript per scenari comuni di Attività personalizzata: OAuth, esportazioni esterne, modifica dei field, manipolazione delle tabelle e generazione di JSON.
Use this file to discover all available pages before exploring further.
I seguenti esempi di script JavaScript illustrano pattern comuni per gli script di Attività personalizzata: autorizzazione OAuth, invio delle esportazioni a servizi esterni, modifica dei field estratti, manipolazione delle tabelle, generazione di JSON personalizzato e recupero dei nomi dei file di origine. Copiali e adattali ai nomi dei tuoi field e ai tuoi endpoint.
Autenticarsi tramite OAuth e inviare i dati di esportazione a un servizio esterno
Il seguente script esegue l’autenticazione utilizzando un token ottenuto tramite il Resource Owner Password Flow e quindi invia i dati di esportazione a un servizio esterno:
// Questo script di esportazione personalizzato di esempio mostra come inviare una richiesta di autorizzazione per OAuth 2.0 Resource Owner Password Flow, ricevere il token,// e quindi inviare i risultati di esportazione al sistema esterno in formato JSON// Preparare il corpo chiave-valore per la richiesta di autorizzazione (i parametri e i loro valori potrebbero essere diversi). La variabile d'ambiente corrispondente deve essere creata in precedenza.var authDataContent = {};authDataContent.grant_type = Context.GetSecret("password_secretName");authDataContent.scope = "openid permissions";// Passare i dati sensibili utilizzando le variabili d'ambiente. Le variabili corrispondenti devono essere create in precedenza.authDataContent.client_id = Context.GetSecret("client_id_secretName");authDataContent.client_secret = Context.GetSecret("client_secret_secretName");authDataContent.password = Context.GetSecret("password_secretName");authDataContent.username = Context.GetSecret("username_secretName");// creare la richiesta e inviare i dativar request = Context.CreateHttpRequest();request.Url = "https://my_auth_service.com/auth2/connect/token"request.Method = "POST";// creare i dati del contenuto per la richiesta di autorizzazionerequest.SetUrlFormEncodedContent(authDataContent);request.Send();var authResponseObject = JSON.parse(request.ResponseText);// ottenere tutte le esportazioni dal documentovar exports = Context.Transaction.Documents[0].Exports;// selezionare il risultato di esportazione JSONvar extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);// Creare i dati del contenuto per la richiestavar multiPartRequest = Context.CreateMultipartFormDataRequest();multiPartRequest.Url = "https://my_service.com/api/v1.0/process_method"multiPartRequest.Method = "POST";multiPartRequest.AuthToken = authResponseObject.access_token;multiPartRequest.AuthScheme = "Bearer";// aggiungere i dati estratti al risultato di esportazionemultiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// aggiungere il PDF esportatomultiPartRequest.AppendFileContent(pdfExportResult, "binaryData");// inviare una richiesta al serviziomultiPartRequest.Send();// Ottenere un risultato di risposta deserializzatovar responseObject = JSON.parse(multiPartRequest.ResponseText);
Inviare i dati di esportazione a un servizio esterno
Lo script seguente assegna un nome al file esportato in base al numero della fattura e poi invia i dati di esportazione a un servizio esterno (in questo caso Dropbox):
// Questo sample di script di esportazione personalizzato mostra come inviare un file a Dropbox// e impostare il nome del file utilizzando il valore del field dei dati estratti.// Ottieni il risultato dell'esportazione del documentovar exports = Context.Transaction.Documents[0].Exports;var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);// Ottieni il token di accesso all'API di DropBox (https://developers.dropbox.com/en-us/oauth-guide). La variabile d'ambiente corrispondente deve essere creata in anticipo.var token = Context.GetSecret("access_token_secretName");// Ottieni il "Numero della fattura" dai dati estrattivar invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");var invoiceNumber = invoiceNumberField.Value;// Crea il nome del file risultantevar jsonFileName = `ExtractedData_${invoiceNumber}.json`;// Invia il file JSON con i dati estratti a DropBoxvar httpRequest = Context.CreateHttpRequest();httpRequest.Url = "https://content.dropboxapi.com/2/files/upload"httpRequest.Method = "POST";httpRequest.AuthScheme = "Bearer";httpRequest.AuthToken = token;httpRequest.SetHeader("Dropbox-API-Arg", `{"path": "/Files/${jsonFileName}", "mode": "add", "autorename": true, "mute": false, "strict_conflict": false}`);httpRequest.SetFileContent(extractedDataExportResult, "application/octet-stream");httpRequest.Send();
Lo script seguente modifica il valore di un field esistente e aggiunge nuovi valori a un field ripetibile utilizzando le informazioni contenute nella risposta di un servizio esterno:
// Questo script di esempio per attività personalizzata mostra come modificare un field esistente// e creare un nuovo valore di field in base ai risultati di una chiamata esterna.// Recupera tutti i risultati dell'esportazione dal documentovar exports = Context.Transaction.Documents[0].Exports;// Recupera il risultato dell'esportazione JSON dai risultati dell'esportazionevar extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);// Recupera il risultato dell'esportazione PDF dai risultati dell'esportazionevar pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);// Crea una richiesta HTTP e specifica le proprietà necessarievar multipartFormDataRequest = Context.CreateMultipartFormDataRequest();multipartFormDataRequest.Url = "http://my_service/api/v1.0/apimethod/"multipartFormDataRequest.Method = "POST";// Aggiunge i dati estratti dal risultato dell'esportazione JSON alla richiestamultipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// Aggiunge il PDF dai risultati dell'esportazione alla richiestamultipartFormDataRequest.AppendFileContent(pdfExportResult, "binaryData");// Imposta il timeout per il completamento della richiesta HTTP (in minuti).// Per impostazione predefinita, il timeout è impostato a 1 minuto.multipartFormDataRequest.Timeout = 1;// Invia una richiesta al serviziomultipartFormDataRequest.Send();// Recupera il risultato della rispostavar newJsonDataObject = JSON.parse(multipartFormDataRequest.ResponseText);// Si presuppone che il seguente JSON sia stato ottenuto come risultato della risposta:/* { "DocumentData": { "Fields": { "InvoiceNumber": "706-222-3151", "InvoiceDate": "15.05.2020", "PurchaseOrder": [ { "OrderNumber": "25646788", "Total": "540.54" }, { "OrderNumber": "24516684", "Total": "138.43" } ] } }}*/// Modifica il valore di un field documento Vantage esistente in base ai dati ricevuti da una chiamata esternavar document = Context.Transaction.Documents[0];var invoiceNumber = document.GetField("Invoice Number");if (invoiceNumber.InstanceId === undefined || invoiceNumber.InstanceId === null) invoiceNumber.AddInstance();invoiceNumber.Value = newJsonDataObject.DocumentData.Fields.InvoiceNumber;// Aggiunge nuovi valori di field documento Vantage in base ai dati ricevuti da una chiamata esternavar poOrder = Context.Transaction.Documents[0].GetField("Purchase Order");let orderNumberFieldId = document.GetField("Purchase Order/Order Number").Id;let totalFieldId = document.GetField("Purchase Order/Total").Id;newJsonDataObject.DocumentData.Fields.PurchaseOrder.forEach(function (elem) { var newOrder = poOrder.AddInstance(); var orderNumber = newOrder.Children.find(x => x.Id === orderNumberFieldId); orderNumber.Value = elem.OrderNumber; var total = newOrder.Children.find(x => x.Id === totalFieldId); total.Value = elem.Total;});
Recuperare i dati da una specifica colonna della tabella
Lo script seguente scrive tutti i valori (righe) della colonna della tabella Description nel registro eventi della transaction:
// Ottieni il primo documento in una transactionvar document = Context.Transaction.Documents[0];var descriptionFieldId = document.GetField("Line Items/Description").Id;// Ottieni l'oggetto tabellavar table = document.GetField("Line Items");for (var i = 0; i < table.Instances.length; i++) { // Ottieni l'oggetto colonna 'Description' per ogni riga della tabella e scrivi i valori nel log eventi della transaction var columnDescription = table.Instances[i].Children.find(x => x.Id === descriptionFieldId); Context.LogMessage("Description. Row " + i + ": " + columnDescription.Value);}
Recuperare i dati da tutte le colonne della tabella
Lo script seguente scrive nel registro eventi della transaction tutti i valori (righe) di tutte le colonne della tabella:
// Ottieni il primo documento in una transactionvar document = Context.Transaction.Documents[0];// Ottieni l'oggetto tabellavar table = document.GetField("Line Items");// Scrivi tutti i dati della tabella nel registro eventi della transactionfor (var i = 0; i < table.Instances.length; i++) { for (var j = 0; j < table.Instances[i].Children.length; j++) { Context.LogMessage("Table row "+i+". Column "+table.Instances[i].Children[j].Name+": "+table.Instances[i].Children[j].Value); }}
Lo script seguente aggiunge nuove righe alla tabella e imposta i valori nelle colonne Descrizione e Quantità della tabella:
// Ottieni il primo documento in una transactionvar document = Context.Transaction.Documents[0];// Ottieni l'oggetto tabellavar table = document.GetField("Line Items");var descriptionFieldId = document.GetField("Line Items/Description").Id;var quantityFieldId = document.GetField("Line Items/Quantity").Id;var tableRowCount = table.Instances.length;// Crea una funzione per aggiungere una riga alla tabella e impostare i valori per le colonne Description e Quantityfunction addRow(valueDescription, valueQuantity, index) { table.AddInstance(); var columnDescription = table.Instances[index].Children.find(x => x.Id === descriptionFieldId); columnDescription.Value = valueDescription; var columnQuantity = table.Instances[index].Children.find(x => x.Id === quantityFieldId); columnQuantity.Value = valueQuantity;}// Aggiungi tre righe e imposta i valoriaddRow("49910 - Gloves or mittens, NOI, in boxes", 4, tableRowCount++);addRow("15560 - Bulk, NOI, inflated", 42, tableRowCount++);addRow("15520 - Athletic or Sporting Goods, NOI", 24, tableRowCount++);
Lo script seguente elimina tutte le righe di una tabella:
// Ottieni il primo documento in una transactionvar document = Context.Transaction.Documents[0];// Ottieni l'oggetto tabellavar table = document.GetField("Line Items");var indexCount = table.Instances.length - 1;// Elimina tutte le righe tramite i loro indicifor (var i = indexCount; i >= 0 ; i--) { table.Instances[i].Remove();}// In alternativa, è possibile eliminare l'intera tabellatable.Remove();
Lo script seguente elimina l’ultima istanza di un field ripetuto:
// Ottieni il primo documento in una transactionvar document = Context.Transaction.Documents[0];// Ottieni l'oggetto field ripetutovar rField = document.GetField("First Name");// Verifica se questo field è ripetutoif (rField.IsRepeatable) { // Elimina l'ultima istanza di questo field if (rField.Instances.length >= 1) { rField.Instances[rField.Instances.length-1].Remove(); } }else { Context.LogMessage(rField.Name + " is not repeating.");}
Generare un file JSON e inviarlo a un sistema di terze parti
Lo script seguente genera un file JSON in un formato personalizzato e lo invia a un sistema di terze parti:
// Questo script di esportazione personalizzato di esempio mostra come creare una stringa JSON// utilizzando i valori dei field estratti da Invoice US e inviarla a un endpoint esterno.// Ottieni il primo documento nella transaction.var document = Context.Transaction.Documents[0];// Crea un oggetto JSON e imposta le sue coppie chiave/valore.var extractedValues = {};extractedValues.Total = document.GetField("Total").Value;extractedValues.Currency = document.GetField("Currency").Value;extractedValues.Date = document.GetField("Invoice Date").Value;// Ottieni i valori dei field ripetuti e impostali come valori JSON array.extractedValues.PurchaseOrderNumber = [];var poGroup = document.GetField("Purchase Order");var orderNumberFieldId = document.GetField("Purchase Order/Order Number").Id;for (var i = 0; i < poGroup.Instances.length; i++) { var poNumber = poGroup.Instances[i].Children.find(x => x.Id === orderNumberFieldId); extractedValues.PurchaseOrderNumber.push(poNumber.Value);}// Il file JSON ricevuto ha il seguente formato:/* { "Total": 1819.14, "Currency": "USD", "Date": "2019-05-23T00:00:00.000Z", "PurchaseOrderNumber": [ "012345678", "4500123466" ]}*/// Invia una richiesta multipart/form-data con il JSON creato precedentemente come contenuto string di quella richiesta.var httpRequest = Context.CreateMultipartFormDataRequest();httpRequest.Method = "POST";httpRequest.Url = "https://external-endpoint.com/api/v1.0/tasks/1495c913-17bb-48d4-8041-a240e05ca9a4/process";httpRequest.AppendStringContent(JSON.stringify(extractedValues), "jsonData");httpRequest.Send();
Lo script seguente inserisce il nome originale di un file nel field MyField:
// Ottieni il nome del file sorgente e impostalo come valore del field specificato ("MyField")Context.Transaction.Documents.forEach( doc => { // Per Scanning Station, il nome del file sorgente viene inserito in un parametro di registrazione var param = doc.RegistrationParameters["SourceFileName"]; doc.GetField("MyField").Value = param != null ? param.Value : doc.SourceFiles[0].FileName;});