S’authentifier via OAuth et envoyer les données d’export à un service externe
Copy
Ask AI
// 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 les données d’export vers un service externe
Copy
Ask AI
// Cet exemple de script d'exportation personnalisé montre comment envoyer un fichier vers Dropbox
// et définir le nom du fichier en utilisant la valeur d'un champ de données extraites.
// Obtenir le résultat d'exportation du document
var exports = Context.Transaction.Documents[0].Exports;
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);
// Obtenir 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");
// Obtenir le "Numéro de facture" à partir des données extraites
var invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");
var invoiceNumber = invoiceNumberField.Value;
// Créer le nom du fichier résultat
var jsonFileName = `ExtractedData_${invoiceNumber}.json`;
// Envoyer le fichier JSON avec 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
Copy
Ask AI
// Cet exemple de script d'activité personnalisée montre comment modifier un champ existant
// et créer une nouvelle valeur de champ basée sur les résultats d'un appel externe.
// Récupérer toutes les exportations du document
var exports = Context.Transaction.Documents[0].Exports;
// Récupérer le résultat d'exportation JSON à partir des exportations
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);
// Récupérer le résultat d'exportation PDF à partir des exportations
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);
// Créer une requête HTTP et spécifier les propriétés de requête 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'exportation JSON à la requête
multipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");
// Ajouter le PDF des résultats d'exportation à la requête
multipartFormDataRequest.AppendFileContent(pdfExportResult, "binaryData");
// Définir le délai d'expiration pour que la requête HTTP soit terminée (en minutes).
// Par défaut, le délai d'expiration est défini à 1 minute.
multipartFormDataRequest.Timeout = 1;
// Envoyer une requête au service
multipartFormDataRequest.Send();
// Récupérer un résultat de réponse
var newJsonDataObject = JSON.parse(multipartFormDataRequest.ResponseText);
// En supposant qu'un tel JSON a été obtenu dans le résultat de 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 basé sur les données reçues d'un appel externe
var document = Context.Transaction.Documents[0];
var invoiceNumber = document.GetField("Numéro de facture");
if (invoiceNumber.InstanceId === undefined || invoiceNumber.InstanceId === null)
invoiceNumber.AddInstance();
invoiceNumber.Value = newJsonDataObject.DocumentData.Fields.InvoiceNumber;
// Ajouter de nouvelles valeurs de champ de document Vantage basées sur les données reçues d'un appel externe
var poOrder = Context.Transaction.Documents[0].GetField("Commande d'achat");
let orderNumberFieldId = document.GetField("Commande d'achat/Order Number").Id;
let totalFieldId = document.GetField("Commande d'achat/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 les données d’une colonne spécifique d’un tableau
Copy
Ask AI
// Obtenir le premier document d'une transaction
var document = Context.Transaction.Documents[0];
var descriptionFieldId = document.GetField("Line Items/Description").Id;
// Obtenir l'objet tableau
var table = document.GetField("Line Items");
for (var i = 0; i < table.Instances.length; i++) {
// Obtenir l'objet colonne 'Description' pour chaque ligne du tableau et écrire ses valeurs dans le journal d'événements de la transaction
var columnDescription = table.Instances[i].Children.find(x => x.Id === descriptionFieldId);
Context.LogMessage("Description. Ligne " + i + " : " + columnDescription.Value);
}
Récupérer les données de toutes les colonnes du tableau
Copy
Ask AI
// Obtenir le premier document d'une transaction
var document = Context.Transaction.Documents[0];
// Obtenir l'objet tableau
var table = document.GetField("Line Items");
// Écrire toutes les données du tableau dans le journal des é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("Ligne du tableau "+i+". Colonne "+table.Instances[i].Children[j].Name+": "+table.Instances[i].Children[j].Value);
}
}
Ajouter des lignes à un tableau
Copy
Ask AI
// Obtenir le premier document dans une transaction
var document = Context.Transaction.Documents[0];
// Obtenir l'objet table
var table = document.GetField("Lignes d'articles");
var descriptionFieldId = document.GetField("Lignes d'articles/Description").Id;
var quantityFieldId = document.GetField("Lignes d'articles/Quantity").Id;
var tableRowCount = table.Instances.length;
// Créer une fonction pour ajouter une ligne de table et définir les valeurs pour les 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 des lignes d’un tableau
Copy
Ask AI
// 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 index
for (var i = indexCount; i >= 0 ; i--) {
table.Instances[i].Remove();
}
// Ou vous pouvez supprimer l'ensemble du tableau
table.Remove();
Supprimer une instance précise d’un champ répétitif
Copy
Ask AI
// Obtenir le premier document d'une transaction
var document = Context.Transaction.Documents[0];
// Obtenir l'objet champ répétitif
var rField = document.GetField("First Name");
// Vérifier si ce champ est répétitif
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 + " n'est pas répétitif.");
}
Générer un fichier JSON et l’envoyer à un système tiers
Copy
Ask AI
// 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 de fichiers d’origine
Copy
Ask AI
// Obtenir 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 placé dans un paramètre d'enregistrement
var param = doc.RegistrationParameters["SourceFileName"];
doc.GetField("MyField").Value = param != null ?
param.Value : doc.SourceFiles[0].FileName;
});
