JavaScript-Beispiele für gängige Szenarien mit Benutzerdefinierten Aktivitäten — OAuth, externe Exporte, Feldänderungen, Tabellenbearbeitung und JSON-Generierung.
Use this file to discover all available pages before exploring further.
Die folgenden JavaScript-Beispiele zeigen gängige Muster für Skripte in Benutzerdefinierten Aktivitäten — OAuth-Autorisierung, das Senden von Exporten an externe Dienste, das Ändern extrahierter Felder, das Bearbeiten von Tabellen, das Generieren von benutzerdefiniertem JSON und das Abrufen von Dateinamen der Quelldateien. Kopieren Sie sie und passen Sie sie an Ihre eigenen Feldnamen und Endpunkte an.
Über OAuth authentifizieren und Exportdaten an einen externen Dienst senden
Das folgende Skript authentifiziert sich mit einem Token, das über den Resource Owner Password Flow bezogen wurde, und sendet anschließend die Exportdaten an einen externen Dienst:
// Dieses Beispiel für ein benutzerdefiniertes Export-Skript zeigt, wie eine Autorisierungsanfrage für OAuth 2.0 Resource Owner Password Flow gesendet wird, das Token empfangen wird,// und dann Exportergebnisse an das externe System im JSON-Format gesendet werden// Bereiten Sie den Schlüssel-Wert-Body für die Autorisierungsanfrage vor (Parameter und ihre Werte können unterschiedlich sein). Die entsprechende Umgebungsvariable sollte vorher erstellt werden.var authDataContent = {};authDataContent.grant_type = Context.GetSecret("password_secretName");authDataContent.scope = "openid permissions";// Übertragen Sie sensible Daten über Umgebungsvariablen. Die entsprechenden Variablen sollten vorher erstellt werden.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");// Erstellen Sie die Anfrage und senden Sie die Datenvar request = Context.CreateHttpRequest();request.Url = "https://my_auth_service.com/auth2/connect/token"request.Method = "POST";// Erstellen Sie Inhaltsdaten für die Autorisierungsanfragerequest.SetUrlFormEncodedContent(authDataContent);request.Send();var authResponseObject = JSON.parse(request.ResponseText);// Alle Exporte aus dem Dokument abrufenvar exports = Context.Transaction.Documents[0].Exports;// Das JSON-Exportergebnis auswählenvar extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);// Inhaltsdaten für die Anfrage erstellenvar 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";// Extrahierte Daten zum Exportergebnis hinzufügenmultiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// Die exportierte PDF hinzufügenmultiPartRequest.AppendFileContent(pdfExportResult, "binaryData");// Eine Anfrage an den Service sendenmultiPartRequest.Send();// Ein deserialisiertes Antwortergebnis abrufenvar responseObject = JSON.parse(multiPartRequest.ResponseText);
Das folgende Skript benennt die exportierte Datei nach der Rechnungsnummer und sendet die Exportdaten anschließend an einen externen Dienst (in diesem Fall Dropbox):
// Dieses benutzerdefinierte Export-Beispielskript zeigt, wie eine Datei an Dropbox gesendet// und der Dateiname anhand des Werts eines extrahierten Datenfelds festgelegt wird.// Exportergebnis des Dokuments abrufenvar exports = Context.Transaction.Documents[0].Exports;var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);// Zugriffstoken für die DropBox-API abrufen (https://developers.dropbox.com/en-us/oauth-guide). Die entsprechende Umgebungsvariable muss vorab erstellt werden.var token = Context.GetSecret("access_token_secretName");// „Rechnungsnummer" aus den extrahierten Daten abrufenvar invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");var invoiceNumber = invoiceNumberField.Value;// Dateinamen für die Ergebnisdatei erstellenvar jsonFileName = `ExtractedData_${invoiceNumber}.json`;// JSON-Datei mit den extrahierten Daten an DropBox sendenvar 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();
Das folgende Skript ändert den Wert eines vorhandenen Felds und fügt mithilfe von Informationen aus der Antwort eines externen Dienstes neue Werte für ein Wiederholungsfeld hinzu:
// Dieses Beispielskript für eine benutzerdefinierte Aktivität zeigt, wie ein vorhandenes Feld geändert// und ein neuer Feldwert basierend auf den Ergebnissen eines externen Aufrufs erstellt wird.// Alle Exporte aus dem Dokument abrufenvar exports = Context.Transaction.Documents[0].Exports;// Das JSON-Exportergebnis aus den Exporten abrufenvar extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);// Das PDF-Exportergebnis aus den Exporten abrufenvar pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);// Eine HTTP-Anfrage erstellen und die erforderlichen Anfrageeigenschaften angebenvar multipartFormDataRequest = Context.CreateMultipartFormDataRequest();multipartFormDataRequest.Url = "http://my_service/api/v1.0/apimethod/"multipartFormDataRequest.Method = "POST";// Extrahierte Daten aus dem JSON-Exportergebnis zur Anfrage hinzufügenmultipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");// Das PDF aus den Exportergebnissen zur Anfrage hinzufügenmultipartFormDataRequest.AppendFileContent(pdfExportResult, "binaryData");// Das Timeout für den Abschluss der HTTP-Anfrage festlegen (in Minuten).// Standardmäßig ist das Timeout auf 1 Minute festgelegt.multipartFormDataRequest.Timeout = 1;// Eine Anfrage an den Dienst sendenmultipartFormDataRequest.Send();// Das Antwortergebnis abrufenvar newJsonDataObject = JSON.parse(multipartFormDataRequest.ResponseText);// Angenommen, folgendes JSON wurde im Antwortergebnis zurückgegeben:/* { "DocumentData": { "Fields": { "InvoiceNumber": "706-222-3151", "InvoiceDate": "15.05.2020", "PurchaseOrder": [ { "OrderNumber": "25646788", "Total": "540.54" }, { "OrderNumber": "24516684", "Total": "138.43" } ] } }}*/// Den Wert eines vorhandenen Vantage-Dokumentfelds basierend auf Daten aus einem externen Aufruf ändernvar 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;// Neue Vantage-Dokumentfeldwerte basierend auf Daten aus einem externen Aufruf hinzufügenvar 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;});
Das folgende Skript löscht alle Zeilen einer Tabelle:
// Das erste Dokument in einem Vorgang abrufenvar document = Context.Transaction.Documents[0];// Das Tabellenobjekt abrufenvar table = document.GetField("Line Items");var indexCount = table.Instances.length - 1;// Alle Zeilen anhand ihrer Indizes löschenfor (var i = indexCount; i >= 0 ; i--) { table.Instances[i].Remove();}// Oder die gesamte Tabelle löschentable.Remove();
Eine bestimmte Instanz eines wiederholten Feldes löschen
Das folgende Skript löscht die letzte Instanz eines wiederholten Feldes:
// Erstes Dokument in einem Vorgang abrufenvar document = Context.Transaction.Documents[0];// Objekt des Wiederholungsfelds abrufenvar rField = document.GetField("First Name");// Prüfen, ob dieses Feld ein Wiederholungsfeld istif (rField.IsRepeatable) { // Letzte Instanz dieses Felds löschen if (rField.Instances.length >= 1) { rField.Instances[rField.Instances.length-1].Remove(); } }else { Context.LogMessage(rField.Name + " is not repeating.");}
Eine JSON-Datei erzeugen und an ein System eines Drittanbieters senden
Das folgende Skript erzeugt eine JSON-Datei in einem benutzerdefinierten Format und sendet sie an ein System eines Drittanbietiers:
// Dieses Beispiel für ein benutzerdefiniertes Export-Skript zeigt, wie eine JSON-Zeichenkette erstellt wird// unter Verwendung extrahierter Invoice US-Feldwerte und diese an einen externen Endpunkt gesendet wird.// Get the first document in the transaction.var document = Context.Transaction.Documents[0];// Create a JSON object and set its key/value pairs.var extractedValues = {};extractedValues.Total = document.GetField("Total").Value;extractedValues.Currency = document.GetField("Currency").Value;extractedValues.Date = document.GetField("Invoice Date").Value;// Get repeating field values and set them as array JSON values.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);}// The received JSON file is of the following format:/* { "Total": 1819.14, "Currency": "USD", "Date": "2019-05-23T00:00:00.000Z", "PurchaseOrderNumber": [ "012345678", "4500123466" ]}*/// Send a multipart/form-data request with the JSON created previously as the string content of that request.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();
Das folgende Skript schreibt den ursprünglichen Dateinamen in das Feld MyField:
// Den Namen der Quelldatei abrufen und als Wert des angegebenen Felds ("MyField") festlegenContext.Transaction.Documents.forEach( doc => { // Bei der Scanning Station wird der Name der Quelldatei in einen Registrierungsparameter geschrieben var param = doc.RegistrationParameters["SourceFileName"]; doc.GetField("MyField").Value = param != null ? param.Value : doc.SourceFiles[0].FileName;});