Funciones de Adaptive Planning
Probar función de conexión
La función Probar conexión se utiliza para determinar si la integración puede conectarse a un sistema externo. La función Probar conexión debe devolver verdadero o falso para indicar el resultado.
- Parámetro de contexto
- La conexión de prueba se proporciona con un parámetro, "context".MétodoParámetrosTipo de valor devueltoDescripcióngetDataSource()ai.dataSourceDevuelve el origen de datos activo.getCalendar()ai.calendarDevuelve elAdaptive PlanningCalendario
- Ejemplo
- 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; } }
Importar función de estructura
La función Importar estructura se utiliza para crear o actualizar el esquema del origen de datos (es decir, tablas y columnas) definido por un sistema externo. La función Importar estructura debe devolver un objeto ai.structure.structureBuilder.
- Parámetro de contexto
- La función Importar estructura se proporciona con un parámetro, "contexto".MétodoParámetrosTipo de valor devueltoDescripcióngetDataSource()ai.dataSourceDevuelve el origen de datos activo.getProgressManager()ai.progressManagerDevuelve un objeto que se puede utilizar para actualizar el valor de porcentaje completado de la tarea Importar estructura.getStructureBuilder()ai.structure.structureBuilderDevuelve un objeto que se utiliza para crear la estructura del origen de datos: tablas, columnas, parámetros, etc.getCalendar()ai.calendarDevuelve elAdaptive PlanningCalendario
- Ejemplo
- function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
- ai.progressManager
- El objeto ai.progressManager permite a un usuario definir manualmente el porcentaje completado de la tarea que ejecuta su secuencia de comandos Importar estructura. La ejecución de la secuencia de comandos representa el 70 % del porcentaje total de tareas completadas. Por lo tanto, los valores de progreso definidos mediante ai.progressManager se escalan para representar el progreso de la tarea global. Ejemplo: establecer el porcentaje completado de ai.progressManager en 100 % equivaldría al 70 % de la tarea en ejecución, el 50 % equivaldría al 35 % de la tarea en ejecución, etc.
- Funciones
- MétodoParámetrosTipo de valor devueltoDescripcióngetProgress()NúmeroDevuelve el porcentaje completado de la secuencia de comandos definido por el usuario. Si el usuario no ha definido previamente el porcentaje completado, esta función devolverá 0.setProgress( value )
- value: Valor numérico para establecer el porcentaje de secuencia de comandos completado
Establece el porcentaje de finalización de la secuencia de comandos. Esto funciona de la siguiente manera:- Solo se aceptan valores numéricos como 0, 10, 22,5, 100 y 110.
- Los valores superiores a 100 se tratan como 100.
- Se ignoran los valores inferiores al progreso de la secuencia de comandos actual. Ejemplo: llame a setProgress(50) seguido de setProgress(40). Esto da como resultado que el porcentaje de secuencia de comandos se complete en un 50 %.
- El resto de tipos de entrada para "valor" no afectarán al progreso de la secuencia de comandos.
- Ejemplo
- 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
- FuncionesMétodoParámetrosDevolucionesDescripciónaddTable( tableId )
- tableId : ID exclusivo de cadena de la tabla
ai.structure.editableTableCrea y devuelve una nueva tabla para el origen de datos. - Ejemplo
- Permite definir las tablas y la estructura de columnas que se rellenarán con datos.function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
- ai.structure.editableTable
- FuncionesMétodoParámetrosDevolucionesDescripciónsetDisplayName( displayName )displayName : valor de cadena en el que establecer la propiedad de nombre de visualización de la tabla.ai.structure.editableTableEstablece el nombre de visualización de la tabla.addColumn( columnId )columnId : cadena RemoteId de la columnaai.structure.editableColumnCrea y devuelve una nueva columna secundaria de la tabla.addRequiredParameter( parámetroId )ParameterId : ID de cadena del parámetroai.structure.editableParameterCrea y devuelve un nuevo parámetro obligatorio para la tabla. Se debe establecer un parámetro asignable como valor de Parámetro obligatorio cuando esta tabla se utiliza como parte de ImportData o ImportStructure.
- ai.structure.editableColumn
- FuncionesMétodoParámetrosDevolucionesDescripciónsetDisplayName( value )
- value : Valor de cadena para establecer la propiedad displayName de las columnas en
ai.structure.editableColumnEstablece el nombre de visualización de la columna.setDisplayOrder( value )- value : Valor de cadena para establecer la propiedad displayOrder de las columnas en
ai.structure.editableColumnEstablece el orden de visualización de la columna.setIncludeByDefault( value )- value : valor booleano para establecer la propiedad IsEnabled de las columnas en
ai.structure.editableColumnEstablece la columna que se activará para la importación de datos.setIncludeInKey( value )- value : valor booleano para establecer la propiedad includeInKey de las columnas en
ai.structure.editableColumnIndica si la columna forma parte de la clave de tabla.setMandatoryForImports( value )- value : valor booleano para indicar si esta columna está activada para importaciones de datos por
ai.structure.editableColumnEstablece la columna que se activará para la importación de datos de forma obligatoria.setNonFilterable( value )- value : valor booleano para establecer la propiedad nonFilterable de las columnas en
ai.structure.editableColumnIndica si la columna se puede incluir en una consulta remota.setRemoteColumnType( value )- value : valor de cadena para establecer la propiedad remoteColumnType de las columnas en
ai.structure.editableColumnEstablece el tipo de datos remotos de la columna, por ejemplo, "cadena", "entero", etc.setTextColumnType( length )- length : longitud máxima de valores enteros que puede contener esta columna
ai.structure.editableColumnConvierte la columna en una columna de texto.setIntegerColumnType()ai.structure.editableColumnConvierte la columna en una columna de enteros.setFloatColumnType()ai.structure.editableColumnConvierte la columna en una columna de doble precisión.setBooleanColumnType()ai.structure.editableColumnConvierte la columna en una columna booleana.setDateTimeColumnType()ai.structure.editableColumnConvierte la columna en una columna de fecha y hora. - ai.structure.editableParameter
- FuncionesMétodoParámetrosDevolucionesDescripciónsetDisplayName( value )
- value : Valor de cadena para establecer la propiedad displayName de los parámetros en
Establece el nombre de visualización del parámetro.setForDataImport( value )- value : valor booleano que indica si se podrá acceder al parámetro en una secuencia de comandos de ImportData
Activa el parámetro para la importación de datos.setTypePeriodRange()Cambia el tipo del parámetro a un rango de periodo - Ejemplo
- 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); .............. }
Función de importación de datos
La función Importar datos se utiliza para traer filas de un origen externo e importarlas a tablas de almacenamiento provisional de integración. El mecanismo para importar filas es el objeto ai.rowset, que se proporciona a través del parámetro "context" que se pasa a la función Import Data.
- Parámetro de contexto
- La función Import Data se proporciona con un parámetro, "context".MétodoParámetrosTipo de valor devueltoDescripcióngetRowset()Genera un aviso de desactivación de API en los registros después de que el servicio de asistencia técnica active getRowset(ColumnIds) a petición suya con la versión 2021R1. El método getRowset() seguirá funcionando, pero ignorará los parámetros.ai.rowsetDevuelve el objeto Rowset al que se añaden las filas. El conjunto de filas define la tabla, las columnas y MaxRows.getRowset([columnIds])Abra un caso en el Centro de atención al cliente de Workday para activar el indicador de función "losservicios en la nube personalizados leen la tabla de almacenamiento provisional por columnas especificadas".[Column Ids]ai.rowsetDevuelve el objeto Rowset al que se añaden las filas, en el orden de columnas especificado. El conjunto de filas define la tabla, las columnas y MaxRows.getDataSource()ai.dataSourceDevuelve el origen de datos activo.getCalendar()ai.calendarDevuelve elAdaptive PlanningCalendario
- Ejemplo
- En este ejemplo se supone que el conjunto de filas contiene una columna Integer y una columna Text en orden.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- El objeto Rowset es el mecanismo mediante el cual las "filas" dentro de la secuencia de comandos de un usuario se transportan a la pila de integración. Un Rowset modela la forma (nombres de columna y sus tipos de datos, maxRows y tableId) de la tabla en la que un usuario ejecuta su secuencia de comandos PreviewData o ImportData.
- Funciones
- MétodoParámetrosTipo de valor devueltoDescripciónaddRow(celdas)celdas : Array<Primitive Types> Matriz de valores para cada columna, en ordenAñade una matriz de valores de celda como una fila al conjunto de filas. Los valores de celda deben ser un objeto válido de cadena (puede ser nulo), numérico (entero finito o decimal), booleano o de fecha. Cada tipo de valor de celda debe coincidir con su tipo de datos de columna correspondiente en el orden definido por getColumnNames. El número de valores de celda debe coincidir con el número de columnas definidas.getTableId()CadenaDevuelve el ID de tabla de la tabla de la que se está obteniendo una vista previa.getMaxRows()Valor enteroDevuelve el número máximo de filas permitidas en este conjunto de filas. 0 significa desconocido, tal como lo utiliza ImportData.getColumns()Array<ai.dataSource.table.column>Devuelve las columnas de la tabla seleccionadas para la vista previa.setSmartParsingEnabled( val )
- val : valor booleano que indica si se debe activar o desactivar esta función.
Si es posible, al activar este parámetro se analizará automáticamente cada valor de celda de cadena en el tipo de datos obligatorio de las columnas de destino durante la función addRow(). Esto evita que el usuario tenga que buscar el tipo de datos de las columnas de destino y realizar un análisis manual si el tipo de datos del valor de la celda actual no coincide con el tipo de datos de las columnas de destino. Esto es especialmente útil cuando se trata de API de terceros que devuelven todos los valores de fila como cadenas a través de JSON o XML, y cada valor de celda se puede analizar correctamente en valores Integer, Float, Boolean o DateTime.getSmartParsingEnabled()BooleanoDevuelve verdadero si este parámetro está activado. El valor por defecto es falso.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); } } }
Función de vista previa de datos
La función Vista previa de datos se utiliza para consultar un sistema externo en busca de filas de datos para la tabla y las columnas especificadas. Está limitado por el máximo de filas que el sistema externo permite ver a un usuario durante una vista previa en ese sistema.
- Parámetro de contexto
- La función de vista previa de datos se proporciona con un parámetro, "context".MétodoParámetrosTipo de valor devueltoDescripcióngetDataSource()ai.dataSourceDevuelve el origen de datos activo.getRowset()ai.rowsetDevuelve el objeto Rowset al que se añaden las filas. El conjunto de filas define la tabla, las columnas y MaxRows.getCalendar()ai.calendarDevuelve elAdaptive PlanningCalendario
- Ejemplo
- Ofrece la posibilidad de obtener una vista previa de los datos almacenados en el origen de la nube.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); } } }
Ejemplo combinado de prueba de conexión, importación y vista previa de datos
//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); } } }
Función de exportación de datos (solo cargador en la nube personalizada)
La función Exportar datos se utiliza para exportar filas al crear secuencias de comandos de creación de cargadores en la nube personalizados . El mecanismo para exportar filas es el
ai.rowset
objeto, que se proporciona a través del context
parámetro pasado a la función de exportación.context.createTableReader()
devuelve un lector. Utilizar reader.readRow()
para leer las filas de datos de la tabla de origen.reader.readRow()
devuelve las columnas de datos en el orden por defecto. Si context.createTableReader()
se llama con una matriz de IDs de columna, las columnas se organizan por el orden de las columnas en el parámetro.- Parámetro de contexto
- La función de exportación de datos se proporciona con un parámetro, "context".MétodoParámetrosTipo de valor devueltoDescripcióncreateTableReader()matriz opcional de nombres de columna de tabla de origenTableReaderDevuelve el origen de datos activo. El orden de las columnas es el mismo que el proporcionado en el parámetro.Objeto TableReaderMétodoParámetrosTipo de valor devueltoDescripciónreadRow()matriz de valoresUna matriz de valores del origen de datos.
- Ejemplo
- // 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)); } }