Concetto: Progettazione
L'API origine dati cloud personalizzata è progettata per assistere l'operatore di integrazione nella connessione all'origine dati, nella creazione di oggetti all'interno dell'origine dati, nelle analisi XML, nella conversione delle date e nell'utilizzo frequente di elementi durante la creazione di un'origine dati.
Spazi dei nomi
Il motore JavaScript fornisce l'accesso a built-in
Adaptive Planning
Integrazione tramite gli spazi dei nomi "adaptive" o "ai" (Adaptive Planning
) (Alias) Si tratta di qualcosa di simile alle librerie JavaScript più comuni, come ad esempio 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');
Sotto lo spazio dei nomi radice "
ai
", sono esposte alcune funzioni principali per consentire a JavaScript di interagire con Internet e Adaptive Planning
Funzionalità di individuazione/integrazione Queste API JavaScript pubbliche sono modellate utilizzando come guida le API Node.js (https://nodejs.org/).Funzioni
Le funzioni ottengono e impostano i dati per rendere coerente l'API, fornire l'incapsulamento e consentire in modo esplicito setter e getter. Inoltre, le funzioni forniscono l'incapsulamento di oggetti C# per esporre solamente le funzionalità del linguaggio JavaScript e impedire che venga inutilmente superato il limite JavaScript/C#, così da migliorare le performance. I getter hanno il prefisso get, mentre i setter hanno il prefisso set.
var isEnabled= item.getIsEnabled(); item.setIsEnabled(true);
Contesto delle funzioni
Ogni funzione chiamata da un'origine dati cloud personalizzata accetta un oggetto Contesto. Per facilitare l'elaborazione, il contesto contiene oggetti di sola lettura.
function importData(context) { var tableId = context.getTableId(); var tables = context.getDataSource().getTables(); var setting = context.getDataSource().getSetting('password'); }
Il contesto è composto da oggetti passati da C#. Per migliorare le performance, si evita di esporre oggetti C# in JavaScript, incapsulandoli singolarmente in un oggetto JavaScript. In questo modo, è possibile gestire la comunicazione superando il limite JavaScript/C#. Ad esempio, quando si richiede il contesto per le tabelle, l'oggetto C# viene restituito incapsulato in un oggetto JavaScript. Se è presente una gerarchia di oggetti, ogni livello viene incapsulato in un oggetto JavaScript. Se si richiedono le colonne in una tabella, viene restituito un elenco di oggetti JavaScript incapsulati.
Limitazioni
A una sessione di elaborazione script dell'origine dati cloud personalizzata in esecuzione si applicano i seguenti limiti:
Impostazione | Descrizione | Valore predefinito | AppSetting configurabile? | Impostazione tenant configurabile? |
|---|---|---|---|---|
Max megabyte heap | Quantità di RAM utilizzabile dal motore V8. | 800 | Sì | Sì |
Limite di tempo CPU | Lasso di tempo durante il quale il motore V8 può utilizzare le risorse della CPU. | 10 minuti | Sì | Sì |
Limite durata esecuzione | Lasso di tempo per cui può funzionare il motore V8, indipendentemente dall'utilizzo delle risorse della CPU. | 60 minuti | Sì | Sì |
Ritardo tra chiamate di rete | 1 secondo | Sì | Sì | |
Limite di registri per secondo | Numero massimo di registri che è possibile creare da script al secondo. | 5 | Sì | Sì |
Limite di registri per ora | Numero massimo di registri che è possibile creare da script all'ora. | 1.000 | Sì | Sì |
Megabyte limite di utilizzo rete | Limite massimo di megabyte che uno script può inviare e ricevere sulla rete. | 5 gigabyte | Sì | Sì |
Milliseconds Between Async Script Service Requests | Parametro utilizzato per limitare il traffico tra il servizio di attività e un processo di esecuzione dello script. Se il processo di esecuzione dello script è in grado di soddisfare la richiesta del servizio di attività, il tempo di attesa scende a 0 millisecondi. | 200 millisecondi | No | No |
Max Script Result Pages Per Request | Numero di pagine di dati che il servizio di attività può richiedere al repository di un processo di esecuzione dello script. | 50 | No | No |
Max Page size | Numero di righe di dati richieste dal servizio di attività in ogni pagina di dati. | 10.000 | Sì | Sì |
I limiti seguenti si applicano al gestore del pool di script dell'origine dati cloud personalizzata.
Impostazione
| Descrizione
| Valore predefinito
| AppSetting configurabile?
| Impostazione tenant configurabile?
|
|---|---|---|---|---|
Max Script Pool Size | Numero massimo di processi di script in esecuzione contemporaneamente. | 100 | Sì | No |
Min Script Pool Size | Numero minimo di processi di script da eseguire contemporaneamente (utilizzati per il pre-avvio dei processi di esecuzione dello script). | 0 | Sì | No |
Script Pool Wait Timeout | Tempo massimo per il quale una richiesta per un processo di esecuzione dello script può rimanere in coda. | 180 secondi | Sì | No |
Max Script Pool Queue Size | Numero massimo di richieste in attesa per un processo di esecuzione dello script. | 1.000 | No | No |
Altri limiti
- Senza utilizzare il metodo ai.https.sax.parser nello script, esiste un limite alle dimensioni di un file XML per l'analisi. Le dimensioni massime non sono note, tuttavia, a scopo di riferimento, è possibile analizzare un file di 10 MB con una dimensione dell'heap di 100 MB. Per file di grandi dimensioni, si consiglia di utilizzare ai.https.sax.parser.
- Gli script non possono accedere agli IP all'interno diAdaptive Planningrete
- Il protocollo HTTP non è supportato, è supportato solo HTTPS.
Problemi noti
- Durante importData/importStructure, un'origine dati chiamerà testConnection. Nell'origine dati cloud personalizzata, ciò significa avere due processi di esecuzione dello script separati. È possibile che il primo processo sia stato creato correttamente per eseguire testConnection. Il secondo processo, creato per eseguire importData/importStructure, può essere messo in coda nel gestore del pool, andare in timeout e, infine, non riuscire.
- Impostazioni flessibili di pari livello possono avere lo stesso nome visualizzato. Pertanto, negli script che accedono a un'impostazione tramite getSetting(displayName), viene restituita un'unica istanza e non è garantito quale verrà restituita. Agli utenti deve essere impedito di creare impostazioni flessibili di pari livello con lo stesso nome visualizzato.