Adaptive Planning-functies
Verbindingsfunctie testen
De functie Verbinding testen wordt gebruikt om te bepalen of Integratie verbinding kan maken met een extern systeem. De functie Verbinding testen moet waar of onwaar retourneren om het resultaat aan te geven.
- Contextparameter
- De testverbinding is voorzien van één parameter, 'context'.MethodeParametersRetourtypeOmschrijvinggetDataSource()ai.dataSourceRetourneert de actieve gegevensbron.getCalendar()ai.calendarRetourneert deAdaptive PlanningKalender
- Voorbeeld
- 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; } }
Functie voor importeren van structuur
De functie Structuur importeren wordt gebruikt voor het maken/bijwerken van het schema van de gegevensbron (dat wil zeggen tabellen en kolommen) dat is gedefinieerd door een extern systeem. De functie Structuur importeren moet een ai.structure.structureBuilder-object retourneren.
- Contextparameter
- De functie Structuur importeren is voorzien van één parameter, 'context'.MethodeParametersRetourtypeOmschrijvinggetDataSource()ai.dataSourceRetourneert de actieve gegevensbron.getProgressManager()ai.progressManagerRetourneert een object dat kan worden gebruikt om de waarde voor het percentage voltooid van de taak Structuur importeren bij te werken.getStructureBuilder()ai.structure.structureBuilderRetourneert een object dat wordt gebruikt om de gegevensbronstructuur te maken - tabellen, kolommen, parameters, enzovoort.getCalendar()ai.calendarRetourneert deAdaptive PlanningKalender
- Voorbeeld
- function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
- ai.progressManager
- Met het object ai.progressManager kan een gebruiker handmatig het voltooiingspercentage instellen van de taak waarop het importstructuurscript wordt uitgevoerd. De uitvoering van het script is goed voor 70% van het totale percentage voltooide taken. Daarom worden voortgangswaarden die via ai.progressManager zijn gedefinieerd, geschaald om de voortgang van de algehele taak weer te geven. Voorbeeld: als u het percentage voltooid van ai.progressManager instelt op 100%, komt dit neer op 70% van de actieve taak, 50% is gelijk aan 35% van de actieve taak, enzovoort.
- Functies
- MethodeParametersRetourtypeOmschrijvinggetProgress()GetalRetourneert het voltooiingspercentage van het script zoals gedefinieerd door de gebruiker. Als de gebruiker het percentage voltooid niet eerder heeft ingesteld, retourneert deze functie 0.setProgress( value )
- waarde: Getal Waarde om scriptpercentage voltooid in te stellen op
Hiermee stelt u het scriptpercentage voltooid in. Dit werkt als volgt:- Alleen numerieke waarden worden geaccepteerd, zoals 0, 10, 22,5, 100, 110.
- Waarden groter dan 100 worden behandeld als 100.
- Waarden die kleiner zijn dan de huidige scriptvoortgang worden genegeerd. Voorbeeld: roep setProgress(50) aan gevolgd door setProgress(40). Dit resulteert in het percentage voltooid van het script op 50%.
- Alle andere invoertypen voor waarde hebben geen invloed op de voortgang van het script.
- Voorbeeld
- 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
- FunctiesMethodeParametersRetourenOmschrijvingaddTable( tableId )
- tableId : Unieke tekenreeks-ID van de tabel
ai.structure.editableTableHiermee maakt en retourneert u een nieuwe tabel voor de gegevensbron. - Voorbeeld
- Biedt de mogelijkheid om de tabellen en kolomstructuur te definiëren die met gegevens worden gevuld.function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
- ai.structure.editableTable
- FunctiesMethodeParametersRetourenOmschrijvingsetDisplayName( displayName )displayName: tekenreekswaarde om de weergavenaameigenschap van de tabel in te stellen.ai.structure.editableTableHiermee stelt u de weergavenaam van de tabel in.addColumn( columnId )columnId : Tekenreeks RemoteId van de kolomai.structure.editableColumnHiermee wordt een nieuwe onderliggende kolom van de tabel gemaakt en geretourneerd.addRequiredParameter( parameterId )parameterId : tekenreeks-ID van de parameterai.structure.editableParameterHiermee wordt een nieuwe vereiste parameter voor de tabel gemaakt en geretourneerd. Er moet een toewijsbare parameter worden ingesteld als de waarde van een vereiste parameter wanneer deze tabel wordt gebruikt als onderdeel van ImportData of ImportStructure.
- ai.structure.editableColumn
- FunctiesMethodeParametersRetourenOmschrijvingsetDisplayName( value )
- value : Tekenreekswaarde om de eigenschap displayName van de kolommen in te stellen op
ai.structure.editableColumnHiermee stelt u de weergavenaam van de kolom in.setDisplayOrder( value )- value : Tekenreekswaarde om de eigenschap displayOrder van de kolommen in te stellen op
ai.structure.editableColumnHiermee stelt u de weergavevolgorde van de kolom in.setIncludeByDefault( value )- value : Boole-waarde om de eigenschap IsEnabled voor kolommen in te stellen op
ai.structure.editableColumnHiermee stelt u de kolom in die moet worden ingeschakeld voor gegevensimport.setIncludeInKey( value )- value : Boole-waarde om de eigenschap includeInKey van de kolommen in te stellen op
ai.structure.editableColumnHiermee wordt aangegeven of de kolom deel uitmaakt van de tabelsleutel.setMandatoryForImports( value )- value : Boole-waarde om aan te geven of deze kolom is ingeschakeld voor gegevensimport door verplicht
ai.structure.editableColumnHiermee stelt u de kolom in die voor gegevensimport moet worden ingeschakeld door verplicht.setNonFilterable( value )- value : Boole-waarde om de niet-filterbare eigenschap van de kolommen in te stellen op
ai.structure.editableColumnHiermee wordt aangegeven of de kolom kan worden opgenomen in een externe query.setRemoteColumnType( value )- value : Tekenreekswaarde om de eigenschap remoteColumnType van de kolommen in te stellen op
ai.structure.editableColumnHiermee stelt u het externe gegevenstype van de kolom in, bijvoorbeeld 'string', 'integer', enzovoortsetTextColumnType( length )- lengte : Geheel getal Maximumlengte van de waarden die deze kolom kan bevatten
ai.structure.editableColumnHiermee maakt u van de kolom een tekstkolom.setIntegerColumnType()ai.structure.editableColumnHiermee maakt u van de kolom een kolom met een geheel getal.setFloatColumnType()ai.structure.editableColumnHiermee maakt u van de kolom een kolom met dubbele precisie.setBooleanColumnType()ai.structure.editableColumnHiermee maakt u van de kolom een Boole-kolom.setDateTimeColumnType()ai.structure.editableColumnHiermee maakt u van de kolom een datum-tijdkolom. - ai.structure.editableParameter
- FunctiesMethodeParametersRetourenOmschrijvingsetDisplayName( value )
- value : Tekenreekswaarde om de eigenschap displayName van de parameters in te stellen op
Hiermee stelt u de weergavenaam van de parameter in.setForDataImport( value )- value : Boole-waarde die aangeeft of de parameter toegankelijk is in een ImportData-script
Hiermee wordt een parameter voor het importeren van gegevens ingeschakeld.setTypePeriodRange()Wijzigt het type van de parameter in een periodebereik - Voorbeeld
- 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); .............. }
Functie voor importeren van gegevens
De functie Gegevens importeren wordt gebruikt om rijen uit een externe bron te halen en deze te importeren in faseringstabellen voor integratie. Het mechanisme voor het importeren van rijen is het object ai.rowset, dat wordt geleverd via de parameter 'context' die wordt doorgegeven aan de functie Gegevens importeren.
- Contextparameter
- De functie Gegevens importeren is voorzien van één parameter, 'context'.MethodeParametersRetourtypeOmschrijvinggetRowset()Genereert een API-afschaffingswaarschuwing in de logboeken nadat de ondersteuning getRowset(ColumnIds) op uw verzoek heeft ingeschakeld met de 2021R1-release. De methode getRowset() blijft werken, maar negeert eventuele parameters.ai.rowsetRetourneert het Rowset-object waaraan rijen worden toegevoegd. De rijset definieert de tabel, kolommen en max. rijen.getRowset([columnIds])Open een case in het Workday Customer Center om de functiemarkering 'aangepaste cloudservices leest faseringstabel op basis van opgegeven kolommen' in te schakelen.[Column Ids]ai.rowsetRetourneert het Rijenset-object waaraan rijen worden toegevoegd, in de opgegeven kolomvolgorde. De rijset definieert de tabel, kolommen en max. rijen.getDataSource()ai.dataSourceRetourneert de actieve gegevensbron.getCalendar()ai.calendarRetourneert deAdaptive PlanningKalender
- Voorbeeld
- In dit voorbeeld wordt ervan uitgegaan dat de rijenset op volgorde een kolom met een geheel getal en een tekstkolom bevat.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- Het Rowset-object is het mechanisme waarmee rijen in een gebruikersscript naar de integratiestack worden getransporteerd. Een rijset modelleert de vorm (kolomnamen en de bijbehorende gegevenstypen, maxRows en tableId) van de tabel waarop een gebruiker het script PreviewData of ImportData uitvoert.
- Functies
- MethodeParametersRetourtypeOmschrijvingaddRow( cells )cellen: Matrix<Primitive Types> Matrix met waarden voor elke kolom, in volgorde:Hiermee wordt een matrix met celwaarden als rij aan de rijset toegevoegd. Celwaarden moeten een geldig object Tekenreeks (kan null zijn), Getal (eindig geheel getal of decimaal), Boole-object of Datumobject zijn. Elk celwaardetype moet overeenkomen met het bijbehorende kolomgegevenstype in de volgorde die is gedefinieerd door getColumnNames. Het aantal celwaarden moet overeenkomen met het aantal gedefinieerde kolommen.getTableId()StringRetourneert de tabel-ID van de tabel waarvan een voorbeeld wordt weergegeven.getMaxRows()Geheel getalRetourneert het maximum aantal toegestane rijen in deze rijset. 0 betekent onbekend, zoals gebruikt door ImportData.getColumns()Array<ai.dataSource.table.column>Retourneert de tabelkolommen die voor het voorbeeld zijn geselecteerd.setSmartParsingEnabled( val )
- val : Boole-waarde die aangeeft of deze functie moet worden in- of uitgeschakeld
Als u deze instelling inschakelt, wordt elke tekenreekscelwaarde indien mogelijk automatisch geparseerd in het vereiste gegevenstype voor doelkolommen tijdens de functie addRow(). Dit voorkomt dat een gebruiker het gegevenstype van een doelkolom hoeft op te zoeken en handmatig moet parseren als het gegevenstype van de waarde voor de huidige cel niet overeenkomt met het gegevenstype van de doelkolom. Dit is met name handig als u te maken hebt met API's van derden die alle rijwaarden als tekenreeksen retourneren via JSON of XML, en elke celwaarde kan worden geparseerd in waarden voor gehele getallen, zwevend, Boole-waarden of DateTime.getSmartParsingEnabled()Boole-waardeRetourneert waar als deze instelling is ingeschakeld. De standaardwaarde is onwaar.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); } } }
Voorbeeld van gegevensfunctie
De functie Voorbeeld van gegevens wordt gebruikt om een extern systeem op te vragen voor rijen met gegevens voor de opgegeven tabel en kolommen. Het wordt beperkt door het maximum aantal rijen dat een gebruiker kan zien tijdens een voorbeeld in dat systeem.
- Contextparameter
- De functie Voorbeeld van gegevens heeft één parameter, 'context'.MethodeParametersRetourtypeOmschrijvinggetDataSource()ai.dataSourceRetourneert de actieve gegevensbron.getRowset()ai.rowsetRetourneert het Rowset-object waaraan rijen worden toegevoegd. De rijset definieert de tabel, kolommen en max. rijen.getCalendar()ai.calendarRetourneert deAdaptive PlanningKalender
- Voorbeeld
- Biedt de mogelijkheid om een voorbeeld van gegevens te bekijken die zijn opgeslagen in de cloudbron.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); } } }
Voorbeeld van gecombineerde verbinding testen, importeren en voorbeeld van gegevens bekijken
//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); } } }
Functie voor exporteren van gegevens (alleen aangepast cloudlaadprogramma)
De functie Gegevens exporteren wordt gebruikt om rijen te exporteren wanneer u aangepaste scripts voor cloudlaadprogramma's maakt . Het mechanisme voor het exporteren van rijen is:
ai.rowset
object, dat wordt geleverd via de context
parameter doorgegeven aan de exportfunctie.context.createTableReader()
retourneert een lezer. Gebruiken reader.readRow()
om gegevensrijen van de brontabel te lezen.reader.readRow()
retourneert gegevenskolommen in de standaardvolgorde. Als context.createTableReader()
wordt aangeroepen met een matrix met kolom-ID's, worden de kolommen gerangschikt op de volgorde van de kolommen in de parameter.- Contextparameter
- De functie Gegevens exporteren is voorzien van één parameter, 'context'.MethodeParametersRetourtypeOmschrijvingcreateTableReader()optionele matrix met kolomnamen in brontabelTableReaderRetourneert de actieve gegevensbron. De kolomvolgorde is hetzelfde als de volgorde die in de parameter is opgegeven.TableReader ObjectMethodeParametersRetourtypeOmschrijvingreadRow()matrix met waardenEen matrix met waarden uit de gegevensbron.
- Voorbeeld
- // 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)); } }