Konzept: Design
Die CCDS-API soll den Integrationsoperator dabei unterstützen, eine Verbindung zur Datenquelle herzustellen, Objekte innerhalb der Datenquelle zu erstellen, XML zu parsen, Datumsangaben zu konvertieren und Elemente bei der Erstellung einer Datenquelle häufig zu nutzen.
Namespaces
Die JavaScript-Engine bietet Zugriff auf integriert
Adaptive Planning
Integration über die Namespaces „adaptive“ oder „ai“ (Adaptive Planning
) Namespace (Alias). Dies ist vergleichbar mit gängigen JavaScript-Bibliotheken wie jQuery (https://jquery.com/).// JavaScript short namespace example. ai.log.logError('this is a log'); // JavaScript long namespace example. adaptive.log.logError('this is a log');
Unterhalb des Root-Namespace
ai
ist eine Reihe von Kernfunktionen verfügbar, die die Interaktion von JavaScript mit dem Internet ermöglichen Adaptive Planning
Discovery/Integration-Features. Diese öffentlichen JavaScript-APIs werden mithilfe der Node.js-APIs (https://nodejs.org/) modelliert.Funktionen
Funktionen rufen Daten ab und legen sie fest, um die API-Konsistenz sicherzustellen, sie ermöglichen die Kapselung und lassen Setter und Getter explizit zu. Funktionen ermöglichen auch die Kapselung von C#-Objekten, um nur die Funktionen der JavaScript-Sprache verfügbar zu machen und ein unnötiges Überschreiten der JavaScript/C#-Grenze zu verhindern und so die Performance zu verbessern. Gettern wird das Präfix „get“ und Settern das Präfix „set“ vorangestellt.
var isEnabled= item.getIsEnabled(); item.setIsEnabled(true);
Kontext von Funktionen
Jede von einer CCDS aufgerufene Funktion verwendet ein Context-Objekt. Der Kontext enthält schreibgeschützte Objekte, die die Verarbeitung erleichtern.
function importData(context) { var tableId = context.getTableId(); var tables = context.getDataSource().getTables(); var setting = context.getDataSource().getSetting('password'); }
Der Kontext besteht aus Objekten, die von C# übergeben wurden. Zur Verbesserung der Performance wird vermieden, C#-Objekte in JavaScript bereitzustellen, indem jedes Objekt in einem JavaScript-Objekt gekapselt wird. Dies ermöglicht die Verwaltung der Kommunikation über die JavaScript/C#-Grenze hinweg. Wird zum Beispiel der Kontext für Tabellen abgefragt, wird das C#-Objekt in ein JavaScript-Objekt gekapselt zurückgegeben. Wenn eine Objekthierarchie vorhanden ist, wird jede Ebene in einem JavaScript-Objekt gekapselt. Werden die Spalten in einer Tabelle abgefragt, wird eine Liste der in JavaScript gekapselten Objekte zurückgegeben.
Einschränkungen
Die folgenden Grenzwerte gelten für eine laufende CCDS-Skriptverarbeitungssitzung.
Einstellung | Beschreibung | Standardwert | AppSetting konfigurierbar? | Mandanteneinstellung konfigurierbar? |
|---|---|---|---|---|
Maximale Anzahl von Heap-Megabytes | Menge an RAM, die die V8-Engine verbrauchen kann. | 800 | Ja | Ja |
CPU-Zeitbegrenzung | Zeitdauer, für die die V8-Engine CPU-Ressourcen verwenden kann. | 10 Minuten | Ja | Ja |
Maximale Ausführungsdauer | Zeitdauer, für die die V8-Engine ausgeführt werden kann, unabhängig davon, ob sie aktiv CPU-Ressourcen verwendet. | 60 Minuten | Ja | Ja |
Verzögerung zwischen Netzwerkaufrufen | 1 Sekunde | Ja | Ja | |
Maximale Protokollanzahl pro Sekunde | Maximale Anzahl von Protokollen, die pro Sekunde per Skript erstellt werden können. | 5 | Ja | Ja |
Maximale Protokollanzahl pro Stunde | Maximale Anzahl von Protokollen, die pro Stunde per Skript erstellt werden können. | 1.000 | Ja | Ja |
Megabyte-Begrenzung für Netzwerkverwendung | Maximale Anzahl von Megabytes, die ein Skript über das Netzwerk senden und empfangen kann. | 5 Gigabyte | Ja | Ja |
Milliseconds Between Async Script Service Requests | Wird verwendet, um den Datenverkehr zwischen Aufgabenservice und einem Script Runner-Prozess zu drosseln. Wenn der Script Runner-Prozess mit der Anforderung des Aufgabenservice Schritt halten kann, sinkt die Wartezeit auf 0 Millisekunden. | 200 Millisekunden | Nein | Nein |
Max Script Result Pages Per Request | Anzahl von Datenseiten, die der Aufgabenservice aus dem Repository eines Script Runner anfordern kann. | 50 | Nein | Nein |
Max Page size | Anzahl von Datenzeilen, die der Aufgabenservice auf jeder Datenseite anfordert. | 10.000 | Ja | Ja |
Die folgenden Grenzwerte gelten für den CCDS-Skriptpoolmanager.
Einstellung
| Beschreibung
| Standardwert
| AppSetting konfigurierbar?
| Mandanteneinstellung konfigurierbar?
|
|---|---|---|---|---|
Max Script Pool Size | Maximale Anzahl gleichzeitig ausgeführter Skriptprozesse. | 100 | Ja | Nein |
Min Script Pool Size | Minimale Anzahl von Skriptprozessen, die gleichzeitig ausgeführt werden können (wird zum „Vorwärmen“ von Script Runner-Prozessen verwendet). | 0 | Ja | Nein |
Script Pool Wait Timeout | Maximale Zeit, für die eine Anforderung eines Script Runner-Prozesses in die Warteschlange gestellt werden kann. | 180 Sekunden | Ja | Nein |
Max Script Pool Queue Size | Maximale Anzahl wartender Anforderungen für einen Script Runner-Prozess. | 1.000 | Nein | Nein |
Weitere Grenzwerte:
- Ohne die Verwendung der Methode ai.https.sax.parser in einem Skript gibt es einen Grenzwert für die Größe von XML-Dateien für das Parsing. Der obere Größengrenzwert ist nicht bekannt, aber als Referenz gilt: Es ist möglich, eine 10 MB große Datei mit einer Heap-Größe von 100 MB zu parsen. Wir empfehlen die Verwendung der Methode „ai.https.sax.parser“ für große Dateien.
- Skripte können nicht auf IPs innerhalb von zugreifenAdaptive Planning-Netzwerk.
- HTTP wird nicht unterstützt, nur HTTPS.
Bekannte Probleme
- Während der Ausführung der Funktion „importData“/„importStructure“ ruft eine Datenquelle die Funktion „testConnection“ auf. In der CCDS bedeutet dies zwei separate Script Runner-Prozesse. Es ist möglich, dass der erste Prozess erfolgreich erstellt wird, um „testConnection“ auszuführen. Der zweite Prozess für die Ausführung der Funktion „importData“/„importStructure“ kann sich in der Warteschlange des Poolmanagers befinden und möglicherweise zu einem Timeout führen und fehlschlagen.
- Flexible Einstellungen für gleichgeordnete Elemente können denselben Anzeigenamen haben. Daher wird in Skripten, die über „getSetting(displayName)“ auf eine Einstellung zugreifen, nur eine einzelne Instanz zurückgegeben und es gibt keine Garantie, welche zurückgegeben wird. Benutzer sollten daran gehindert werden, flexible Einstellungen für gleichgeordnete Elemente mit demselben Anzeigenamen zu erstellen.