Passer au contenu principal

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.

Les exemples JavaScript suivants illustrent des cas courants pour les scripts d’activité personnalisée — autorisation OAuth, envoi d’exports vers des services externes, modification des champs extraits, manipulation de tables, génération de JSON personnalisé et récupération des noms de fichiers source. Copiez-les et adaptez-les à vos propres noms de champs et points de terminaison.

S’authentifier via OAuth et envoyer les données d’export à un service externe

Le script suivant effectue l’authentification à l’aide d’un jeton obtenu via le flux Resource Owner Password, puis envoie les données d’export à un service externe :
// Cet exemple de script d'exportation personnalisé montre comment envoyer une requête d'autorisation pour OAuth 2.0 Resource Owner Password Flow, recevoir le jeton,
// et ensuite envoyer les résultats d'exportation au système externe au format JSON

// Préparer le corps clé-valeur pour la requête d'autorisation (les paramètres et leurs valeurs peuvent être différents). La variable d'environnement correspondante doit être créée au préalable.
var authDataContent = {};
authDataContent.grant_type = Context.GetSecret("password_secretName");
authDataContent.scope = "openid permissions";

// Transmettre les données sensibles en utilisant des variables d'environnement. Les variables correspondantes doivent être créées au préalable.
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");

// créer la requête et envoyer les données
var request = Context.CreateHttpRequest();
request.Url = "https://my_auth_service.com/auth2/connect/token"
request.Method = "POST";

// créer les données de contenu pour la requête d'autorisation
request.SetUrlFormEncodedContent(authDataContent);
request.Send();
var authResponseObject = JSON.parse(request.ResponseText);

// obtenir toutes les exportations du document
var exports = Context.Transaction.Documents[0].Exports;

// sélectionner le résultat d'exportation JSON
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Créer les données de contenu pour la requête
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";

// ajouter les données extraites au résultat d'exportation
multiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");

// ajouter le PDF exporté
multiPartRequest.AppendFileContent(pdfExportResult, "binaryData");

// envoyer une requête au service
multiPartRequest.Send();

// Obtenir un résultat de réponse désérialisé
var responseObject = JSON.parse(multiPartRequest.ResponseText);

Envoyer des données d’export vers un service externe

Le script suivant attribue au fichier exporté un nom basé sur le numéro de facture, puis envoie les données d’export vers un service externe (Dropbox, dans ce cas) :
// Cet exemple de script d'export personnalisé montre comment envoyer un fichier vers Dropbox
// et définir le nom du fichier à partir de la valeur d'un champ de données extrait.

// Récupérer le résultat d'export du document
var exports = Context.Transaction.Documents[0].Exports;
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);

// Récupérer le jeton d'accès à l'API DropBox (https://developers.dropbox.com/en-us/oauth-guide). La variable d'environnement correspondante doit être créée au préalable.
var token = Context.GetSecret("access_token_secretName");

// Récupérer le « Numéro de facture » depuis les données extraites
var invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");
var invoiceNumber = invoiceNumberField.Value;

// Créer le nom du fichier de résultat
var jsonFileName = `ExtractedData_${invoiceNumber}.json`;

// Envoyer le fichier JSON contenant les données extraites vers 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();

Modifier les données extraites

Le script suivant modifie la valeur d’un champ existant et ajoute de nouvelles valeurs à un champ répétable à l’aide d’informations contenues dans une réponse d’un service externe :
// Cet exemple de script d'activité personnalisée montre comment modifier un champ existant
// et créer une nouvelle valeur de champ à partir des résultats d'un appel externe.

// Récupérer tous les exports du document
var exports = Context.Transaction.Documents[0].Exports;

// Récupérer le résultat d'export JSON parmi les exports
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);

// Récupérer le résultat d'export PDF parmi les exports
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Créer une requête HTTP et spécifier les propriétés requises
var multipartFormDataRequest = Context.CreateMultipartFormDataRequest();
multipartFormDataRequest.Url = "http://my_service/api/v1.0/apimethod/"
multipartFormDataRequest.Method = "POST";

// Ajouter les données extraites du résultat d'export JSON à la requête
multipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");
// Ajouter le PDF des résultats d'export à la requête
multipartFormDataRequest.AppendFileContent(pdfExportResult, "binaryData");

// Définir le délai d'expiration de la requête HTTP (en minutes).
// Par défaut, le délai d'expiration est fixé à 1 minute.
multipartFormDataRequest.Timeout = 1;

// Envoyer une requête au service
multipartFormDataRequest.Send();

// Récupérer le résultat de la réponse
var newJsonDataObject = JSON.parse(multipartFormDataRequest.ResponseText);

// En supposant que le JSON suivant a été obtenu dans le résultat de la réponse :
/* {
    "DocumentData": {
        "Fields": {
            "InvoiceNumber": "706-222-3151",
            "InvoiceDate": "15.05.2020",
            "PurchaseOrder": [
                {
                    "OrderNumber": "25646788",
                    "Total": "540.54"
                },
                {
                    "OrderNumber": "24516684",
                    "Total": "138.43"
                }
            ]
        }
    }
}*/

// Modifier la valeur d'un champ de document Vantage existant à partir des données reçues d'un appel externe
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;

// Ajouter de nouvelles valeurs de champ de document Vantage à partir des données reçues d'un appel externe
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;
});

Récupérer des données depuis une colonne spécifique d’un tableau

Le script suivant consigne toutes les valeurs (lignes) de la colonne de tableau Description dans le journal des événements de la transaction :
// Récupérer le premier document dans une transaction
var document = Context.Transaction.Documents[0];
var descriptionFieldId = document.GetField("Line Items/Description").Id;

// Récupérer l'objet tableau
var table = document.GetField("Line Items");

for (var i = 0; i < table.Instances.length; i++) {
  // Récupérer l'objet de la colonne 'Description' pour chaque ligne du tableau et écrire ses valeurs dans le journal des événements de la transaction
  var columnDescription = table.Instances[i].Children.find(x => x.Id === descriptionFieldId);
  Context.LogMessage("Description. Row " + i + ": " + columnDescription.Value);
}

Récupérer les données de toutes les colonnes du tableau

Le script suivant consigne dans le journal des événements de la transaction toutes les valeurs (lignes) de toutes les colonnes du tableau :
// Récupérer le premier document d'une transaction
var document = Context.Transaction.Documents[0];

// Récupérer l'objet tableau
var table = document.GetField("Line Items");

// Écrire toutes les données du tableau dans le journal d'événements de la 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);
    }
}

Ajouter des lignes dans un tableau

Le script suivant ajoute de nouvelles lignes dans le tableau et définit les valeurs des colonnes Description et Quantité :
// Récupérer le premier document dans une transaction
var document = Context.Transaction.Documents[0];

// Récupérer l'objet tableau
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;

// Créer une fonction pour ajouter une ligne au tableau et définir les valeurs des colonnes Description et 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;
}

// Ajouter trois lignes et définir les valeurs
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++);

Supprimer les lignes d’un tableau

Le script suivant supprime toutes les lignes d’un tableau :
// Obtenir le premier document dans une transaction
var document = Context.Transaction.Documents[0];

// Obtenir l'objet tableau
var table = document.GetField("Line Items");
var indexCount = table.Instances.length - 1;

// Supprimer toutes les lignes par leurs indices
for (var i = indexCount; i >= 0 ; i--) {
  table.Instances[i].Remove();
}

// Ou supprimer l'intégralité du tableau
table.Remove();

Supprimer une occurrence précise d’un champ répétable

Le script suivant supprime la dernière occurrence d’un champ répétable :
// Récupérer le premier document d'une transaction
var document = Context.Transaction.Documents[0];

// Récupérer l'objet champ répétable
var rField = document.GetField("First Name");

// Vérifier si ce champ est répétable
if (rField.IsRepeatable) {
    // Supprimer la dernière instance de ce champ
    if (rField.Instances.length >= 1) {
        rField.Instances[rField.Instances.length-1].Remove();
    }  
}
else {
    Context.LogMessage(rField.Name + " is not repeating.");
}

Générer un fichier JSON et l’envoyer à un système tiers

Le script suivant génère un fichier JSON dans un format personnalisé et l’envoie à un système tiers :
// Cet exemple de script d'exportation personnalisé montre comment créer une chaîne JSON
// en utilisant les valeurs des champs extraits de facture US et l'envoyer à un point de terminaison externe.
// Récupérer le premier document de la transaction.
var document = Context.Transaction.Documents[0];

// Créer un objet JSON et définir ses paires clé/valeur.
var extractedValues = {};
extractedValues.Total = document.GetField("Total").Value;
extractedValues.Currency = document.GetField("Currency").Value;
extractedValues.Date = document.GetField("Invoice Date").Value;

// Récupérer les valeurs des champs répétitifs et les définir comme valeurs de tableau JSON.
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);
}

// Le fichier JSON reçu est au format suivant :
/* {
   "Total": 1819.14,
   "Currency": "USD",
   "Date": "2019-05-23T00:00:00.000Z",
   "PurchaseOrderNumber": [
      "012345678",
      "4500123466"
   ]
}*/

// Envoyer une requête multipart/form-data avec le JSON créé précédemment comme contenu de chaîne de cette requête.
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();

Récupérer les noms des fichiers d’origine

Le script suivant insère le nom d’origine d’un fichier dans le champ MyField :
// Récupérer le nom du fichier source et le définir comme valeur du champ spécifié ("MyField")
Context.Transaction.Documents.forEach( doc => {
    // Pour Scanning Station, le nom du fichier source est stocké dans un paramètre d'enregistrement
    var param = doc.RegistrationParameters["SourceFileName"]; 
    doc.GetField("MyField").Value = param != null ?
        param.Value : doc.SourceFiles[0].FileName;
});

Activité personnalisée

Ajoutez aux compétences une logique scriptée et des intégrations tierces.

Modèle objet

Référence complète des objets JavaScript pour les scripts de l’activité personnalisée.

Contexte

Objet global pour les données de transaction, les requêtes HTTP et les secrets.

HttpRequest

Envoyez des requêtes HTTP encodées en URL, en texte, en JSON ou binaires depuis un script.

MultipartFormDataRequest

Effectuez des requêtes HTTP multipart/form-data à partir des scripts de l’activité personnalisée.

ExportFormat

Formats disponibles pour les fichiers exportés depuis une activité personnalisée ou une activité Output.