Vai al contenuto principale

Documentation Index

Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt

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 dati
var 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 autorizzazione
request.SetUrlFormEncodedContent(authDataContent);
request.Send();
var authResponseObject = JSON.parse(request.ResponseText);

// ottenere tutte le esportazioni dal documento
var exports = Context.Transaction.Documents[0].Exports;

// selezionare il risultato di esportazione JSON
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Creare i dati del contenuto per la richiesta
var 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 esportazione
multiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");

// aggiungere il PDF esportato
multiPartRequest.AppendFileContent(pdfExportResult, "binaryData");

// inviare una richiesta al servizio
multiPartRequest.Send();

// Ottenere un risultato di risposta deserializzato
var 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 documento
var 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 estratti
var invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");
var invoiceNumber = invoiceNumberField.Value;

// Crea il nome del file risultante
var jsonFileName = `ExtractedData_${invoiceNumber}.json`;

// Invia il file JSON con i dati estratti a DropBox
var 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();

Modificare i dati estratti

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 documento
var exports = Context.Transaction.Documents[0].Exports;

// Recupera il risultato dell'esportazione JSON dai risultati dell'esportazione
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);

// Recupera il risultato dell'esportazione PDF dai risultati dell'esportazione
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Crea una richiesta HTTP e specifica le proprietà necessarie
var 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 richiesta
multipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");
// Aggiunge il PDF dai risultati dell'esportazione alla richiesta
multipartFormDataRequest.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 servizio
multipartFormDataRequest.Send();

// Recupera il risultato della risposta
var 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 esterna
var 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 esterna
var 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 transaction
var document = Context.Transaction.Documents[0];
var descriptionFieldId = document.GetField("Line Items/Description").Id;

// Ottieni l'oggetto tabella
var 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 transaction
var document = Context.Transaction.Documents[0];

// Ottieni l'oggetto tabella
var table = document.GetField("Line Items");

// Scrivi tutti i dati della tabella nel registro eventi della transaction
for (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);
    }
}

Aggiungere righe a una tabella

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 transaction
var document = Context.Transaction.Documents[0];

// Ottieni l'oggetto tabella
var 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 Quantity
function 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 valori
addRow("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++);

Eliminare righe da una tabella

Lo script seguente elimina tutte le righe di una tabella:
// Ottieni il primo documento in una transaction
var document = Context.Transaction.Documents[0];

// Ottieni l'oggetto tabella
var table = document.GetField("Line Items");
var indexCount = table.Instances.length - 1;

// Elimina tutte le righe tramite i loro indici
for (var i = indexCount; i >= 0 ; i--) {
  table.Instances[i].Remove();
}

// In alternativa, è possibile eliminare l'intera tabella
table.Remove();

Elimina un’istanza specifica di un field ripetuto

Lo script seguente elimina l’ultima istanza di un field ripetuto:
// Ottieni il primo documento in una transaction
var document = Context.Transaction.Documents[0];

// Ottieni l'oggetto field ripetuto
var rField = document.GetField("First Name");

// Verifica se questo field è ripetuto
if (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();

Recuperare i nomi dei file originali

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;
});

Attività personalizzata

Estendi le skill con logica tramite script e integrazioni di terze parti.

Modello a oggetti

Riferimento completo agli oggetti JavaScript per gli script dell’Attività personalizzata.

Context

Oggetto globale per i dati della transaction, le richieste HTTP e i segreti.

HttpRequest

Invia richieste HTTP URL-encoded, di testo, JSON o binarie da uno script.

MultipartFormDataRequest

Effettua richieste HTTP multipart/form-data dagli script dell’Attività personalizzata.

ExportFormat

Formati disponibili per i file esportati da un’attività Custom o Output.