Zum Hauptinhalt springen

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.

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 Daten
var request = Context.CreateHttpRequest();
request.Url = "https://my_auth_service.com/auth2/connect/token"
request.Method = "POST";

// Erstellen Sie Inhaltsdaten für die Autorisierungsanfrage
request.SetUrlFormEncodedContent(authDataContent);
request.Send();
var authResponseObject = JSON.parse(request.ResponseText);

// Alle Exporte aus dem Dokument abrufen
var exports = Context.Transaction.Documents[0].Exports;

// Das JSON-Exportergebnis auswählen
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Inhaltsdaten für die Anfrage erstellen
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";

// Extrahierte Daten zum Exportergebnis hinzufügen
multiPartRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");

// Die exportierte PDF hinzufügen
multiPartRequest.AppendFileContent(pdfExportResult, "binaryData");

// Eine Anfrage an den Service senden
multiPartRequest.Send();

// Ein deserialisiertes Antwortergebnis abrufen
var responseObject = JSON.parse(multiPartRequest.ResponseText);

Exportdaten an einen externen Dienst senden

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 abrufen
var 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 abrufen
var invoiceNumberField = Context.Transaction.Documents[0].GetField("Invoice Number");
var invoiceNumber = invoiceNumberField.Value;

// Dateinamen für die Ergebnisdatei erstellen
var jsonFileName = `ExtractedData_${invoiceNumber}.json`;

// JSON-Datei mit den extrahierten Daten an DropBox senden
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();

Extrahierte Daten ändern

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

// Das JSON-Exportergebnis aus den Exporten abrufen
var extractedDataExportResult = exports.find(element => element.ExportFormat === ExportFormat.Json);

// Das PDF-Exportergebnis aus den Exporten abrufen
var pdfExportResult = exports.find(element => element.ExportFormat === ExportFormat.Pdf);

// Eine HTTP-Anfrage erstellen und die erforderlichen Anfrageeigenschaften angeben
var multipartFormDataRequest = Context.CreateMultipartFormDataRequest();
multipartFormDataRequest.Url = "http://my_service/api/v1.0/apimethod/"
multipartFormDataRequest.Method = "POST";

// Extrahierte Daten aus dem JSON-Exportergebnis zur Anfrage hinzufügen
multipartFormDataRequest.AppendStringContent(extractedDataExportResult.ToJson(), "jsonData");
// Das PDF aus den Exportergebnissen zur Anfrage hinzufügen
multipartFormDataRequest.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 senden
multipartFormDataRequest.Send();

// Das Antwortergebnis abrufen
var 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 ändern
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;

// Neue Vantage-Dokumentfeldwerte basierend auf Daten aus einem externen Aufruf hinzufügen
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;
});

Daten aus einer bestimmten Tabellenspalte abrufen

Das folgende Skript schreibt alle Werte (Zeilen) aus der Tabellenspalte Description in das Ereignisprotokoll des Vorgangs:
// Erstes Dokument in einem Vorgang abrufen
var document = Context.Transaction.Documents[0];
var descriptionFieldId = document.GetField("Line Items/Description").Id;

// Tabellenobjekt abrufen
var table = document.GetField("Line Items");

for (var i = 0; i < table.Instances.length; i++) {
  // 'Description'-Spaltenobjekt für jede Tabellenzeile abrufen und Werte in das Vorgangsereignisprotokoll schreiben
  var columnDescription = table.Instances[i].Children.find(x => x.Id === descriptionFieldId);
  Context.LogMessage("Description. Row " + i + ": " + columnDescription.Value);
}

Daten aus allen Tabellenspalten abrufen

Das folgende Skript schreibt alle Werte (Zeilen) aus allen Tabellenspalten in das Ereignisprotokoll des Vorgangs:
// Erstes Dokument in einem Vorgang abrufen
var document = Context.Transaction.Documents[0];

// Tabellenobjekt abrufen
var table = document.GetField("Line Items");

// Alle Tabellendaten in das Ereignisprotokoll des Vorgangs schreiben
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);
    }
}

Zeilen zu einer Tabelle hinzufügen

Das folgende Skript fügt neue Tabellenzeilen hinzu und legt Werte für die Tabellenspalten Beschreibung und Menge fest:
// Erstes Dokument in einem Vorgang abrufen
var document = Context.Transaction.Documents[0];

// Tabellenobjekt abrufen
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;

// Funktion erstellen, um eine Tabellenzeile hinzuzufügen und Werte für die Spalten „Description" und „Quantity" festzulegen
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;
}

// Drei Zeilen hinzufügen und Werte festlegen
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++);

Zeilen einer Tabelle löschen

Das folgende Skript löscht alle Zeilen einer Tabelle:
// Das erste Dokument in einem Vorgang abrufen
var document = Context.Transaction.Documents[0];

// Das Tabellenobjekt abrufen
var table = document.GetField("Line Items");
var indexCount = table.Instances.length - 1;

// Alle Zeilen anhand ihrer Indizes löschen
for (var i = indexCount; i >= 0 ; i--) {
  table.Instances[i].Remove();
}

// Oder die gesamte Tabelle löschen
table.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 abrufen
var document = Context.Transaction.Documents[0];

// Objekt des Wiederholungsfelds abrufen
var rField = document.GetField("First Name");

// Prüfen, ob dieses Feld ein Wiederholungsfeld ist
if (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();

Originale Dateinamen abrufen

Das folgende Skript schreibt den ursprünglichen Dateinamen in das Feld MyField:
// Den Namen der Quelldatei abrufen und als Wert des angegebenen Felds ("MyField") festlegen
Context.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;
});

Benutzerdefinierte Aktivität

Erweitern Sie Skills mit Skriptlogik und Integrationen von Drittanbietern.

Objektmodell

Vollständige JavaScript-Objektreferenz für Skripte der Benutzerdefinierten Aktivität.

Context

Globales Objekt für Vorgangsdaten, HTTP-Anfragen und Geheimnisse.

HttpRequest

Senden Sie URL-codierte, Text-, JSON- oder binäre HTTP-Anfragen aus einem Skript.

MultipartFormDataRequest

Senden Sie multipart/form-data-HTTP-Anfragen aus Skripten der Benutzerdefinierten Aktivität.

ExportFormat

Verfügbare Formate für Dateien, die aus einer Benutzerdefinierten Aktivität oder Ausgabeaktivität exportiert werden.