Funzioni di Adaptive Planning
Funzione di verifica connessione
La funzione Verifica connessione viene utilizzata per determinare se l'integrazione può connettersi a un sistema esterno. La funzione Test Connection deve restituire true o false indicando il risultato.
- Parametro di contesto
- La connessione di test include un parametro, "context".MetodoParametriTipo resoDescrizionegetDataSource()ai.dataSourceRestituisce l'origine dati attiva.getCalendar()ai.calendarRestituisceAdaptive PlanningCalendario
- Esempio
- function testConnection(context) { // Step 1: Create a https request to send to Earthquake USGS API var url = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.atom'; var method = 'GET'; var body = ``; var headers = {}; // Step 2: Send request and receive response try{ var response = ai.https.request(url, method, body, headers); ai.log.logInfo("Test Connection Successful"); } catch(e) { ai.log.logInfo("Test Connection Failed"); } // Step 3: Interrogate response to see if it was successful. Return true or false depending on the result. if (response.getHttpCode() == '200') { var body = response.getBody(); return true; } else { return false; } }
Funzione di importazione struttura
La funzione Import Structure viene utilizzata per creare/aggiornare lo schema dell'origine dati (ad esempio tabelle e colonne) definito da un sistema esterno. La funzione Import Structure deve restituire un oggetto ai.structure.structureBuilder.
- Parametro di contesto
- La funzione Import Structure include un parametro, "context".MetodoParametriTipo resoDescrizionegetDataSource()ai.dataSourceRestituisce l'origine dati attiva.getProgressManager()ai.progressManagerRestituisce un oggetto che può essere utilizzato per aggiornare il valore della percentuale di completamento dell'attività Importazione struttura.getStructureBuilder()ai.structure.structureBuilderRestituisce un oggetto utilizzato per creare la struttura dell'origine dati: tabelle, colonne, parametri e così via.getCalendar()ai.calendarRestituisceAdaptive PlanningCalendario
- Esempio
- function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
- ai.progressManager
- L'oggetto ai.progressManager consente a un utente di impostare manualmente la percentuale di completamento dell'attività che esegue lo script Import Structure. L'esecuzione dello script rappresenta il 70% della percentuale complessiva di completamento dell'attività. Pertanto, i valori di avanzamento definiti tramite ai.progressManager vengono ridimensionati per rappresentare lo stato di avanzamento dell'attività complessiva. Esempio: l'impostazione della percentuale di completamento di ai.progressManager su 100% equivale al 70% dell'attività in esecuzione, al 50% equivale al 35% dell'attività in esecuzione e così via.
- Funzioni
- MetodoParametriTipo resoDescrizionegetProgress()NumeroRestituisce la percentuale di completamento dello script definita dall'utente. Se l'utente non ha impostato in precedenza la percentuale di completamento, questa funzione restituirà 0.setProgress( value )
- value: Number Valore su cui impostare la percentuale di completamento dello script
Imposta la percentuale di completamento dello script. Funziona come segue:- Sono accettati solo valori numerici come 0, 10, 22,5 100, 110.
- I valori superiori a 100 vengono considerati come 100.
- I valori inferiori all'avanzamento dello script corrente vengono ignorati. Esempio: chiamare setProgress(50) seguito da setProgress(40). In questo modo la percentuale di completamento dello script è del 50%.
- Tutti gli altri tipi di input per "valore" non influiranno sull'avanzamento dello script,
- Esempio
- function importStructure(context) { .......... var progressManager = context.getProgressManager(); // Set script progress % to 10 progressManager.setProgress(10); // Increase script progress % to 50 progressManager.setProgress(50.0); // Set progress to 100 by using value greater than 100 progressManager.setProgress(230); progressManager.getProgress(); // returns 100 // Increase progress by 10% based on current progress progressManager.setProgress(progressManager.getProgress() + 10); .......... return builder; }
- ai.structure.structureBuilder
- FunzioniMetodoParametriResiDescrizioneaddTable( tableId )
- tableId : ID univoco stringa della tabella
ai.structure.editableTableCrea e restituisce una nuova tabella per l'origine dati. - Esempio
- Consente di definire le tabelle e la struttura delle colonne che verranno popolate dai dati.function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
- ai.structure.editableTable
- FunzioniMetodoParametriResiDescrizionesetDisplayName( displayName )displayName : String Valore su cui impostare la proprietà del nome visualizzato della tabella.ai.structure.editableTableImposta il nome visualizzato della tabella.addColumn( columnId )columnId : String RemoteId della colonnaai.structure.editableColumnCrea e restituisce una nuova colonna figlio della tabella.addRequiredParameter( parameterId )parameterId : ID stringa del parametroai.structure.editableParameterCrea e restituisce un nuovo parametro obbligatorio per la tabella. È necessario impostare un parametro assegnabile come valore di un Parametro obbligatorio quando la tabella viene utilizzata come parte di ImportData o ImportStructure.
- ai.structure.editableColumn
- FunzioniMetodoParametriResiDescrizionesetDisplayName( value )
- value : String Valore su cui impostare la proprietà displayName delle colonne
ai.structure.editableColumnImposta il nome visualizzato della colonna.setDisplayOrder( value )- value : String Valore su cui impostare la proprietà displayOrder delle colonne
ai.structure.editableColumnImposta l'ordine di visualizzazione della colonna.setIncludeByDefault( value )- value : valore booleano su cui impostare la proprietà IsEnabled delle colonne
ai.structure.editableColumnImposta la colonna da abilitare per l'importazione dei dati.setIncludeInKey( value )- value : valore booleano su cui impostare la proprietà includeInKey delle colonne
ai.structure.editableColumnIndica se la colonna fa parte della chiave della tabella.setMandatoryForImports( value )- value : valore booleano per indicare se questa colonna è abilitata per l'importazione di dati in base a un valore obbligatorio
ai.structure.editableColumnImposta la colonna in modo che sia abilitata per l'importazione dei dati come obbligatoria.setNonFilterable( value )- value : valore booleano su cui impostare la proprietà nonFilterable delle colonne
ai.structure.editableColumnIndica se la colonna può essere inclusa in una query remota.setRemoteColumnType( value )- value : String Valore su cui impostare la proprietà remoteColumnType delle colonne
ai.structure.editableColumnImposta il tipo di dati remoti della colonna, ad esempio 'string', 'integer' e così viasetTextColumnType( length )- length : Intero Lunghezza massima dei valori che questa colonna può contenere
ai.structure.editableColumnTrasforma la colonna in una colonna di testo.setIntegerColumnType()ai.structure.editableColumnRende la colonna una colonna di numeri interi.setFloatColumnType()ai.structure.editableColumnRende la colonna una colonna a precisione doppia.setBooleanColumnType()ai.structure.editableColumnRende la colonna una colonna booleana.setDateTimeColumnType()ai.structure.editableColumnTrasforma la colonna in una colonna data e ora. - ai.structure.editableParameter
- FunzioniMetodoParametriResiDescrizionesetDisplayName( value )
- value : String Valore su cui impostare la proprietà displayName dei parametri
Imposta il nome visualizzato del parametro.setForDataImport( value )- value : valore booleano che indica se il parametro sarà accessibile in uno script ImportData
Abilita il parametro per l'importazione dei dati.setTypePeriodRange()Modifica il tipo del parametro in un Intervallo di periodi - Esempio
- function importStructure(context) { ............... //addColumn var valueColumn= table.addColumn('Value'); //setDisplayName valueColumn.setDisplayName('Value'); // Set the data type for the column - Can be Integer, Float, DateTime or Boolean values valueColumn.setFloatColumnType(); //setDisplayOrder valueColumn.setDisplayOrder('0'); //setIncludeByDefault valueColumn.setIncludeByDefault(true); //setRemoteColumnType valueColumn.setRemoteColumnType('float'); // setIncludeInKey valueColumn.setIncludeInKey(false); //setMandatoryForImports valueColumn.setMandatoryForImports(false); .............. }
Funzione di importazione dati
La funzione Import Data viene utilizzata per importare righe da un'origine esterna e importarle nelle tabelle di gestione temporanea dell'integrazione. Il meccanismo per l'importazione delle righe è l'oggetto ai.rowset, fornito tramite il parametro "context" passato alla funzione Import Data.
- Parametro di contesto
- La funzione Import Data dispone di un parametro, "context".MetodoParametriTipo resoDescrizionegetRowset()Genera un avviso di deprecazione dell'API nei registri dopo che il supporto ha abilitato getRowset(ColumnIds) su richiesta con la versione 2021R1. Il metodo getRowset() continuerà a funzionare ma ignorerà i parametri.ai.rowsetRestituisce l'oggetto Rowset a cui vengono aggiunte le righe. Il Rowset definisce la Tabella, le Colonne e MaxRows.getRowset([columnIds])Aprire un ticket nel Workday Customer Center per abilitare il flag della funzionalità "servizi cloud personalizzati legge la tabella di gestione temporanea in base a colonne specificate".[Column Ids]ai.rowsetRestituisce l'oggetto Set di righe a cui vengono aggiunte le righe, nell'ordine delle colonne specificato. Il Rowset definisce la Tabella, le Colonne e MaxRows.getDataSource()ai.dataSourceRestituisce l'origine dati attiva.getCalendar()ai.calendarRestituisceAdaptive PlanningCalendario
- Esempio
- Questo esempio presuppone che il set di righe contenga una colonna Intero e una colonna Testo in ordine.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- L'oggetto Rowset è il meccanismo mediante il quale le "righe" all'interno dello script di un utente vengono trasportate nello stack di integrazione. Un Rowset modella la forma (nomi delle colonne e relativi tipi di dati, maxRows e tableId) della tabella in base alla quale un utente esegue lo script PreviewData o ImportData.
- Funzioni
- MetodoParametriTipo resoDescrizioneaddRow( cells)cell : Array<Primitive Types> Matrice di valori per ogni colonna, in ordineAggiunge una matrice di valori di cella sotto forma di riga al Set di righe. I valori delle celle devono essere un oggetto String (può essere null), Number (Intero finito o Decimale), Boolean o Date. Ogni tipo di valore di cella deve corrispondere al tipo di dati della colonna corrispondente nell'ordine definito da getColumnNames. Il numero di valori cella deve corrispondere al numero di colonne definito.getTableId()StringRestituisce l'ID della tabella visualizzata in anteprima.getMaxRows()InteroRestituisce il numero massimo di righe consentite in questo set di righe. 0 significa sconosciuto, in quanto utilizzato da ImportData.getColumns()Array<ai.dataSource.table.column>Restituisce le colonne della tabella selezionate per l'anteprima.setSmartParsingEnabled( val )
- val : valore booleano che indica se attivare o disattivare questa funzionalità
Se possibile, l'abilitazione di questa impostazione analizzerà automaticamente ogni valore di cella della stringa nel tipo di dati obbligatorio delle colonne di destinazione durante la funzione addRow(). In questo modo, l'utente non deve cercare il tipo di dati di una colonna di destinazione e eseguire l'analisi manuale se il tipo di dati del valore per la cella corrente non corrisponde al tipo di dati delle colonne di destinazione. Ciò è particolarmente utile quando si gestiscono API di terze parti che restituiscono tutti i valori di riga come stringhe tramite JSON o XML e ogni valore di cella può essere analizzato correttamente in valori Integer, Float, Boolean o DateTime.getSmartParsingEnabled()BooleanoRestituisce vero se questa impostazione è abilitata. Il valore predefinito è false.function importData(context) { var dataSource = context.getDataSource(); var settings = dataSource.getSettings(); var rowset = context.getRowset(); //Set and Get SmartParsingEnabled() value rowset.setSmartParsingEnabled(true); ai.log.logInfo(getSmartParsingEnabled()); //true //Set a Start date and End date in the Designer Settings tab with the name "Period Range" var startDateString = dataSource.getSetting("Period Range").getValue().getFromPeriodStartDateTime().substring(0, 10); var endDateString = dataSource.getSetting("Period Range").getValue().getToPeriodEndDateTime().substring(0, 10); //get columns var columns = rowset.getColumns(); for (var i = 0; i < dataSample.rows.length; i++) { var colName; var cells = []; for (var j = 0; j < columns.length; j++) { var colValue; var re = /\\\-/g; if ((new Date(dataSample.rows[i]["Effective Date"]) >= new Date(startDateString)) && (new Date(dataSample.rows[i]["Effective Date"]) < new Date(endDateString))) { colName = columns[j].getId(); colValue = dataSample.rows[i][colName]; cells.push(colValue.toString().replace(re, '.')); } } if (cells.length == columns.length) { //add rows rowset.addRow(cells); } } }
Funzione di anteprima dati
La funzione Anteprima dati viene utilizzata per eseguire query su un sistema esterno per le righe di dati per la tabella e le colonne specificate. È limitato dal numero massimo di righe che il sistema esterno consente a un utente di visualizzare durante un'anteprima in quel sistema.
- Parametro di contesto
- La funzione Preview Data include un parametro, 'context'.MetodoParametriTipo resoDescrizionegetDataSource()ai.dataSourceRestituisce l'origine dati attiva.getRowset()ai.rowsetRestituisce l'oggetto Rowset a cui vengono aggiunte le righe. Il Rowset definisce la Tabella, le Colonne e MaxRows.getCalendar()ai.calendarRestituisceAdaptive PlanningCalendario
- Esempio
- Consente di visualizzare in anteprima i dati archiviati nell'origine cloud.function previewData(context) { var dataSource = context.getDataSource(); var settings = dataSource.getSettings(); var rowset = context.getRowset(); //Set and Get SmartParsingEnabled() value rowset.setSmartParsingEnabled(true); ai.log.logInfo(getSmartParsingEnabled()); //true //Set a Start date and End date in the Designer Settings tab with the name "Period Range" var startDateString = dataSource.getSetting("Period Range").getValue().getFromPeriodStartDateTime().substring(0, 10); var endDateString = dataSource.getSetting("Period Range").getValue().getToPeriodEndDateTime().substring(0, 10); //get columns var columns = rowset.getColumns(); for (var i = 0; i < dataSample.rows.length; i++) { var colName; var cells = []; for (var j = 0; j < columns.length; j++) { var colValue; var re = /\\\-/g; if ((new Date(dataSample.rows[i]["Effective Date"]) >= new Date(startDateString)) && (new Date(dataSample.rows[i]["Effective Date"]) < new Date(endDateString))) { colName = columns[j].getId(); colValue = dataSample.rows[i][colName]; cells.push(colValue.toString().replace(re, '.')); } } if (cells.length == columns.length) { //add rows rowset.addRow(cells); } } }
Esempio di connessione di test, importazione e anteprima dati combinati
//Consider a static JSON Data Sample set dataSample = { rows: [ {"Value": 10, "Measure": "", "Test": "Palo Alto", "Effective Date": "2018-11-01"}, {"Value": 20, "Measure": " ", "Test": "Palo Alto", "Effective Date": "2018-11-01"}, {"Value": 30, "Measure": " ", "Test": "Palo Alto", "Effective Date": "2018-11-01"}, {"Value": 40, "Measure": " ", "Test": "Palo Alto", "Effective Date": "2018-11-01"}, {"Value": 50, "Measure": "1 ", "Test": "Pleasanton", "Effective Date": "2018-11-01"}, {"Value": 10, "Measure": "2 ", "Test": "Pleasanton", "Effective Date": "2018-12-01"}, {"Value": 20, "Measure": "3 ", "Test": "Pleasanton", "Effective Date": "2018-12-01"}, {"Value": 30, "Measure": "4 ", "Test": "Pleasanton", "Effective Date": "2018-12-01"}, {"Value": 40, "Measure": "5 ", "Test": "Pleasanton", "Effective Date": "2018-12-01"} ] }; //Table Definition ExternalMetadataDefinition = { Tables: [{ name: "dataSample", displayName: "Sample", columns: [{ name: "Value", displayName: "Value", type: "float", includeByDefault: true }, { name: "Measure", displayName: "Measure", includeByDefault: true }, { name: "Test", displayName: "Test", includeByDefault: true }, { name: "Effective Date", displayName: "Date", type: "datetime", includeByDefault: true }] }] }; //Since this example uses a static data source,testConnection() function can return true function testConnection(context) { return true; } //Import Structure function importStructure(context) { var addColumn = function(table, column, order) { var recordColumn = table.addColumn(column.name); recordColumn.setDisplayName(column.displayName); switch (column.type) { case "text": recordColumn.setTextColumnType(column.length); break; case "int": recordColumn.setIntegerColumnType(); break; case "float": recordColumn.setFloatColumnType(); break; case "boolean": recordColumn.setBooleanColumnType(); break; case "datetime": recordColumn.setDateTimeColumnType(); break; default: recordColumn.setTextColumnType(200); break; } recordColumn.setDisplayOrder(order); recordColumn.setIncludeByDefault(column.includeByDefault || false); recordColumn.setIncludeInKey(column.includeInKey || false); recordColumn.setMandatoryForImports(column.mandatoryForImport || false); recordColumn.setRemoteColumnType(column.remoteColumnType || "String"); }; var builder = context.getStructureBuilder(); for (var i = 0; i < ExternalMetadataDefinition.Tables.length; i++) { var externalTable = ExternalMetadataDefinition.Tables[i]; var table = builder.addTable(externalTable.name); table.setDisplayName(externalTable.displayName); for (var j = 0; j < externalTable.columns.length; j++) { addColumn(table, externalTable.columns[j], j + 1); } } } function previewData(context) { //Since the data is static, previewData() function can invoke importData() importData(context); } function importData(context) { var dataSource = context.getDataSource(); var settings = dataSource.getSettings(); var rowset = context.getRowset(); //Set and Get SmartParsingEnabled() value rowset.setSmartParsingEnabled(true); ai.log.logInfo(getSmartParsingEnabled()); //true //Set a Start date and End date in the Designer Settings tab with the name "Period Range" var startDateString = dataSource.getSetting("Period Range").getValue().getFromPeriodStartDateTime().substring(0, 10); var endDateString = dataSource.getSetting("Period Range").getValue().getToPeriodEndDateTime().substring(0, 10); //get columns var columns = rowset.getColumns(); for (var i = 0; i < dataSample.rows.length; i++) { var colName; var cells = []; for (var j = 0; j < columns.length; j++) { var colValue; var re = /\\\-/g; if ((new Date(dataSample.rows[i]["Effective Date"]) >= new Date(startDateString)) && (new Date(dataSample.rows[i]["Effective Date"]) < new Date(endDateString))) { colName = columns[j].getId(); colValue = dataSample.rows[i][colName]; cells.push(colValue.toString().replace(re, '.')); } } if (cells.length == columns.length) { //add rows rowset.addRow(cells); } } }
Funzione di esportazione dati (solo caricatore cloud personalizzato)
La funzione Esporta dati viene utilizzata per esportare le righe quando si creano script di caricatori cloud personalizzati . Il meccanismo per l'esportazione delle righe è il
ai.rowset
oggetto, fornito tramite context
parametro passato alla funzione di esportazione.context.createTableReader()
restituisce un lettore. Utilizzare reader.readRow()
per leggere le righe di dati della tabella di origine.reader.readRow()
restituisce le colonne di dati nell'ordine predefinito. Se context.createTableReader()
viene chiamato con una matrice di ID colonna, le colonne vengono disposte in base all'ordine delle colonne nel parametro.- Parametro di contesto
- La funzione di esportazione dati include un parametro, "context".MetodoParametriTipo resoDescrizionecreateTableReader()matrice facoltativa dei nomi delle colonne della tabella di origineTableReaderRestituisce l'origine dati attiva. L'ordine delle colonne è uguale a quello specificato nel parametro.TableReader ObjectMetodoParametriTipo resoDescrizionereadRow()matrice di valoriMatrice di valori dall'origine dati.
- Esempio
- // Manually invoke this method via 'Run manually' function exportData(context) { // Step 1: Get the data var reader = context.createTableReader(); // Step 2: Process and export the data var row = null; // If reader.readRow() returns null, then there are no more records. while ((row = reader.readRow()) !== null) { // Send the row to the external system or process it for a subsequent bulk update. ai.log.logInfo(JSON.stringify(row)); } }