Funções do Adaptive Planning
Testar função de conexão
A função Testar conexão é usada para determinar se a Integração pode se conectar a um sistema externo. A função Testar conexão deve retornar verdadeiro ou falso, indicando o resultado.
- Parâmetro de contexto
- A conexão de teste é fornecida com um parâmetro, "contexto".MétodoParâmetrosTipo de retornoDescriçãogetDataSource()ai.dataSourceRetorna a fonte de dados ativa.getCalendar()ai.calendarRetorna oAdaptive PlanningCalendário
- Exemplo
- 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; } }
Função de importação de estrutura
A função Importar estrutura é usada para criar/atualizar o esquema da fonte de dados (ou seja, tabelas e colunas) definido por um sistema externo. A função Importar estrutura deve retornar um objeto ai.structura.estruturaBuilder.
- Parâmetro de contexto
- A função Importar estrutura é fornecida com um parâmetro, "contexto".MétodoParâmetrosTipo de retornoDescriçãogetDataSource()ai.dataSourceRetorna a fonte de dados ativa.getProgressManager()ai.progressManagerRetorna um objeto que pode ser usado para atualizar o valor percentual de conclusão da tarefa Importar estrutura.getStructureBuilder()ai.structure.structureBuilderRetorna um objeto que é usado para criar a estrutura da fonte de dados - tabelas, colunas, parâmetros etc.getCalendar()ai.calendarRetorna oAdaptive PlanningCalendário
- Exemplo
- function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
- ai.progressManager
- O objeto ai.progressManager permite que um usuário defina manualmente o percentual de conclusão da tarefa que está executando o script de importação de estrutura. A execução do script é responsável por 70% do percentual geral de conclusão da tarefa. Portanto, os valores de progresso definidos por meio de ai.progressManager são dimensionados para representar o progresso da tarefa geral. Exemplo: definir o percentual de conclusão de ai.progressManager como 100% equivaleria a 70% da tarefa em execução, 50% equivaleria a 35% da tarefa em execução e assim por diante.
- Funções
- MétodoParâmetrosTipo de retornoDescriçãogetProgress()NúmeroRetorna o percentual de conclusão do script conforme definido pelo usuário. Se o usuário não definiu anteriormente o percentual de conclusão, essa função retornaria 0.setProgress( value )
- value: valor numérico para definir o percentual de conclusão do script como
Define o percentual de conclusão do script. Isso funciona da seguinte forma:- Somente valores numéricos são aceitos, como 0, 10, 22,5 100, 110.
- Valores maiores que 100 são tratados como 100.
- Valores inferiores ao andamento do script atual são ignorados. Exemplo: chame setProgress(50) seguido por setProgress(40). Isso resulta no percentual de conclusão do script em 50%.
- Todos os outros tipos de entrada para "valor" não terão efeito no andamento do script,
- Exemplo
- 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
- FunçõesMétodoParâmetrosDevoluçõesDescriçãoaddTable( tableId )
- tableId: cadeia de caracteres de ID exclusiva da tabela
ai.structure.editableTableCria e retorna uma nova tabela para a fonte de dados. - Exemplo
- Permite definir as tabelas e a estrutura de colunas que serão preenchidas por dados.function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
- ai.structure.editableTable
- FunçõesMétodoParâmetrosDevoluçõesDescriçãosetDisplayName( displayName )displayName : valor da cadeia de caracteres para definir a propriedade de nome de exibição da tabela.ai.structure.editableTableDefine o nome de exibição da tabela.addColumn( columnId )columnId: cadeia de caracteres RemoteId da colunaai.structure.editableColumnCria e retorna uma nova coluna filho da tabela.addRequiredParameter( parameterId )ParameterId: ID da cadeia de caracteres do parâmetroai.structure.editableParameterCria e retorna um novo parâmetro obrigatório para a tabela. Um parâmetro atribuível deve ser definido como o valor de um Parâmetro obrigatório quando essa tabela é usada como parte de ImportData ou ImportStructure.
- ai.structure.editableColumn
- FunçõesMétodoParâmetrosDevoluçõesDescriçãosetDisplayName( value )
- value: valor da cadeia de caracteres para definir a propriedade displayName das colunas como
ai.structure.editableColumnDefine o nome de exibição da coluna.setDisplayOrder( value )- value: valor da cadeia de caracteres para definir a propriedade displayOrder das colunas como
ai.structure.editableColumnDefine a ordem de exibição da coluna.setIncludeByDefault( value )- value: valor booliano para definir a propriedade IsEnabled das colunas como
ai.structure.editableColumnDefine a coluna a ser habilitada para importação de dados.setIncludeInKey( value )- value: valor booliano para definir a propriedade includeInKey das colunas como
ai.structure.editableColumnIndica se a coluna faz parte da chave da tabela.setMandatoryForImports( value )- value: valor booliano para indicar se esta coluna está habilitada para importações de dados por
ai.structure.editableColumnDefine a coluna a ser habilitada para importação de dados como obrigatória.setNonFilterable( value )- value: valor booliano para definir a propriedade nonFilterable das colunas como
ai.structure.editableColumnIndica se a coluna pode ser incluída em uma consulta remota.setRemoteColumnType( value )- value: valor da cadeia de caracteres para definir a propriedade remotaColumnType das colunas como
ai.structure.editableColumnDefine o tipo de dados remotos da coluna, por exemplo, "cadeia de caracteres", "inteiro" etc.setTextColumnType( length )- length: número inteiro - comprimento máximo dos valores que esta coluna pode conter
ai.structure.editableColumnTorna a coluna uma coluna de texto.setIntegerColumnType()ai.structure.editableColumnTorna a coluna uma coluna de números inteiros.setFloatColumnType()ai.structure.editableColumnTorna a coluna uma coluna de precisão dupla.setBooleanColumnType()ai.structure.editableColumnTorna a coluna uma coluna booliana.setDateTimeColumnType()ai.structure.editableColumnTorna a coluna uma coluna de data e hora. - ai.structure.editableParameter
- FunçõesMétodoParâmetrosDevoluçõesDescriçãosetDisplayName( value )
- value: valor da cadeia de caracteres para definir a propriedade displayName dos parâmetros como
Define o nome de exibição do parâmetro.setForDataImport( value )- value: valor booliano que indica se o parâmetro estará acessível em um script ImportData
Habilita o parâmetro para importação de dados.setTypePeriodRange()Altera o tipo do parâmetro para um Intervalo de períodos - Exemplo
- 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); .............. }
Função de importação de dados
A função Importar dados é usada para trazer linhas de uma fonte externa e importá-las para as tabelas de preparação da Integração. O mecanismo para importar linhas é o objeto ai.rowset, que é fornecido por meio do parâmetro "context" transmitido para a função Import Data.
- Parâmetro de contexto
- A função Importar dados é fornecida com um parâmetro, "contexto".MétodoParâmetrosTipo de retornoDescriçãogetRowset()Gera um aviso de suspensão de uso da API nos registros após a habilitação do suporte para getRowset(ColumnIds) conforme sua solicitação com a versão 2021R1. O método getRowset() continuará a funcionar, mas ignorará todos os parâmetros.ai.rowsetRetorna o objeto Rowset ao qual as linhas são adicionadas. O Rowset define a Tabela, Colunas e MaxRows.getRowset([columnIds])Abra um caso no Workday Customer Center para habilitar o indicador da funcionalidade "serviços em nuvem personalizados com leituras da tabela de preparação por colunas especificadas".[Column Ids]ai.rowsetRetorna o objeto Rowset ao qual as linhas são adicionadas, na ordem das colunas especificada. O Rowset define a Tabela, Colunas e MaxRows.getDataSource()ai.dataSourceRetorna a fonte de dados ativa.getCalendar()ai.calendarRetorna oAdaptive PlanningCalendário
- Exemplo
- Este exemplo pressupõe que o conjunto de linhas contém uma coluna de Número inteiro e uma coluna de Texto em ordem.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- O objeto Rowset é o mecanismo pelo qual as "linhas" dentro do script de um usuário são transportadas para a pilha de integrações. Um conjunto de linhas modela a forma (nomes das colunas e seus tipos de dados, maxRows e tableId) da tabela na qual um usuário está executando o script PreviewData ou ImportData.
- Funções
- MétodoParâmetrosTipo de retornoDescriçãoaddRow( cells )cells : Array<Primitive Types> Matriz de valores para cada coluna, em ordemAdiciona uma matriz de valores de célula como uma linha ao Conjunto de linhas. Os valores de célula devem ser um objeto String (pode ser nulo), Number (inteiro finito ou decimal), booliano ou de data válido. Cada tipo de valor de célula deve corresponder ao tipo de dados de coluna correspondente na ordem definida por getColumnNames. O número de valores de célula deve corresponder ao número de colunas definidas.getTableId()Cadeia de caracteresRetorna a ID da tabela que está sendo pré-visualizada.getMaxRows()Número inteiroRetorna o número máximo de linhas permitidas neste Rowset. 0 significa desconhecido, conforme usado por ImportData.getColumns()Array<ai.dataSource.table.column>Retorna as colunas da tabela selecionadas para a pré-visualização.setSmartParsingEnabled(val)
- val: valor booliano que indica se essa funcionalidade deve ser ativada ou desativada
Se possível, habilitar essa configuração analisará cada valor de célula de cadeia de caracteres nos tipos de dados obrigatórios das colunas de destino automaticamente durante a função addRow(). Isso evita que o usuário tenha que consultar o tipo de dados das colunas de destino e fazer uma análise manual se o tipo de dados do valor da célula atual não corresponder ao tipo de dados das colunas de destino. Isso é especialmente útil quando se lida com APIs de terceiros que retornam todos os valores de linha como cadeias de caracteres via JSON ou XML, e cada valor de célula pode ser analisado com êxito em valores inteiros, ponto flutuante, booliano ou de data e hora.getSmartParsingEnabled()BoolianoRetorna verdadeiro se essa configuração está habilitada. O valor por padrão é 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); } } }
Função de dados de pré-visualização
A função Preview Data é usada para consultar um sistema externo em busca de linhas de dados para a tabela e colunas especificadas. Ele é limitado pelo número máximo de linhas que o sistema externo permite que um usuário veja durante uma pré-visualização nesse sistema.
- Parâmetro de contexto
- A função de pré-visualização de dados é fornecida com um parâmetro, "contexto".MétodoParâmetrosTipo de retornoDescriçãogetDataSource()ai.dataSourceRetorna a fonte de dados ativa.getRowset()ai.rowsetRetorna o objeto Rowset ao qual as linhas são adicionadas. O Rowset define a Tabela, Colunas e MaxRows.getCalendar()ai.calendarRetorna oAdaptive PlanningCalendário
- Exemplo
- Permite pré-visualizar os dados armazenados na fonte em nuvem.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); } } }
Exemplo de combinação de teste de conexão, importação e pré-visualização de dados
//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); } } }
Função Exportar dados (somente no carregador em nuvem personalizado)
A função Exportar dados é usada para exportar linhas quando você cria scripts de carregadores em nuvem personalizados . O mecanismo para exportar linhas é o
ai.rowset
O objeto, que é fornecido por meio do context
O parâmetro é passado para a função de exportação.context.createTableReader()
retorna um leitor. Uso reader.readRow()
para ler as linhas de dados da tabela de origem.reader.readRow()
retorna colunas de dados na ordem por padrão. Se context.createTableReader()
é chamado com uma matriz de IDs de coluna, as colunas são organizadas pela ordem das colunas no parâmetro.- Parâmetro de contexto
- A função Exportar dados é fornecida com um parâmetro, "contexto".MétodoParâmetrosTipo de retornoDescriçãocreateTableReader()matriz opcional de nomes de colunas da tabela de origemTableReaderRetorna a fonte de dados ativa. A ordem das colunas é igual à ordem fornecida no parâmetro.Objeto TableReaderMétodoParâmetrosTipo de retornoDescriçãoreadRow()matriz de valoresUma matriz de valores da fonte de dados.
- Exemplo
- // 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)); } }