Exemples JavaScript pour des scénarios courants d’activité personnalisée — OAuth, exports externes, modification de champs, manipulation de tables, génération de JSON et récupération des noms de fichiers source.
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éesvar 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'autorisationrequest.SetUrlFormEncodedContent(authDataContent);request.Send();var authResponseObject = JSON.parse(request.ResponseText);// obtenir toutes les exportations du documentvar exports = Context.Transaction.Documents[0].Exports;// sélectionner le résultat d'exportation JSONvar 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êtevar 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'exportationmultiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// ajouter le PDF exportémultiPartRequest.AppendFileContent(pdfExportResult, "binaryData");// envoyer une requête au servicemultiPartRequest.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 documentvar 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 extraitesvar invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");var invoiceNumber = invoiceNumberField.Value;// Créer le nom du fichier de résultatvar jsonFileName = `ExtractedData_${invoiceNumber}.json`;// Envoyer le fichier JSON contenant les données extraites vers 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();
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 documentvar exports = Context.Transaction.Documents[0].Exports;// Récupérer le résultat d'export JSON parmi les exportsvar extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);// Récupérer le résultat d'export PDF parmi les exportsvar pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);// Créer une requête HTTP et spécifier les propriétés requisesvar 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êtemultipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// Ajouter le PDF des résultats d'export à la requêtemultipartFormDataRequest.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 servicemultipartFormDataRequest.Send();// Récupérer le résultat de la réponsevar 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 externevar 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 externevar 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 transactionvar document = Context.Transaction.Documents[0];var descriptionFieldId = document.GetField("Line Items/Description").Id;// Récupérer l'objet tableauvar 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 transactionvar document = Context.Transaction.Documents[0];// Récupérer l'objet tableauvar table = document.GetField("Line Items");// Écrire toutes les données du tableau dans le journal d'événements de la 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); }}
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 transactionvar document = Context.Transaction.Documents[0];// Récupérer l'objet tableauvar 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 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;}// Ajouter trois lignes et définir les valeursaddRow("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++);
Le script suivant supprime toutes les lignes d’un tableau :
// Obtenir le premier document dans une transactionvar document = Context.Transaction.Documents[0];// Obtenir l'objet tableauvar table = document.GetField("Line Items");var indexCount = table.Instances.length - 1;// Supprimer toutes les lignes par leurs indicesfor (var i = indexCount; i >= 0 ; i--) { table.Instances[i].Remove();}// Ou supprimer l'intégralité du tableautable.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 transactionvar document = Context.Transaction.Documents[0];// Récupérer l'objet champ répétablevar rField = document.GetField("First Name");// Vérifier si ce champ est répétableif (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();
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;});