Fonctions Adaptive Planning
Tester la fonction de connexion
La fonction Tester la connexion permet de déterminer si Integration peut se connecter à un système externe. La fonction Tester la connexion doit renvoyer Vrai ou Faux pour indiquer le résultat.
- Paramètre contextuel
- La tâche Tester la connexion est fournie avec un paramètre "contexte".MéthodeParamètresType de retourDescriptiongetDataSource()ai.dataSourceRenvoie la source de données active.getCalendar()ai.calendarRenvoieAdaptive PlanningCalendrier
- Exemple
- 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; } }
Fonction d'import de la structure
La fonction Importer la structure permet de créer/mettre à jour le schéma de la source de données (c.-à-d. tables et colonnes) défini par un système externe. La fonction Importer la structure doit renvoyer un objet ai.structure.structurebuilder.
- Paramètre contextuel
- La fonction Importer la structure est fournie avec 1 paramètre, "contexte".MéthodeParamètresType de retourDescriptiongetDataSource()ai.dataSourceRenvoie la source de données active.getProgressManager()ai.progressManagerRenvoie un objet qui peut être utilisé pour mettre à jour la valeur du pourcentage d'avancement de la tâche Importer la structure.getStructureBuilder()ai.structure.structurebuilderRenvoie un objet utilisé pour créer la structure de la source de données - tables, colonnes, paramètres, etc.getCalendar()ai.calendarRenvoieAdaptive PlanningCalendrier
- Exemple
- function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
- ai.progressManager
- L'objet ai.progressManager permet à un utilisateur de définir manuellement le pourcentage d'avancement de la tâche qui exécute son script Importer la structure. L'exécution du script représente 70 % du pourcentage d'avancement global de la tâche. Par conséquent, les valeurs d'avancement définies via ai.progressManager sont dimensionnées pour représenter la progression de la tâche dans son ensemble. Exemple : si vous définissez le pourcentage d'avancement de ai.progressManager à 100 %, cela correspond à 70 % de la tâche en cours d'exécution, 50 % correspond à 35 % de la tâche en cours d'exécution, etc.
- Fonctions
- MéthodeParamètresType de retourDescriptiongetProgress()NombreRenvoie le pourcentage d'avancement du script tel que défini par l'utilisateur. Si l'utilisateur n'a pas précédemment défini le pourcentage d'avancement, cette fonction renvoie 0.setProcess( value )
- value : valeur numérique à laquelle définir le pourcentage d'avancement du script
Définit le pourcentage d'avancement du script. Cela fonctionne comme suit :- Seules les valeurs numériques sont acceptées, telles que 0, 10, 22,5 100, 110.
- Les valeurs supérieures à 100 sont traitées comme des 100.
- Les valeurs inférieures à la progression du script en cours sont ignorées. Exemple : appelez setProcess(50) suivi de setProcess(40). Le pourcentage d'avancement du script est alors de 50 %.
- Tous les autres types de saisie pour 'valeur' n'auront aucun effet sur la progression du script.
- Exemple
- 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
- FonctionsMéthodeParamètresRetoursDescriptionaddTable(tableId)
- tableId : chaîne d'identifiant unique de la table
ai.structure.editableTableCrée et renvoie une nouvelle table pour la source de données. - Exemple
- Permet de définir la structure des tables et des colonnes qui seront renseignées par les données.function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
- ai.structure.editableTable
- FonctionsMéthodeParamètresRetoursDescriptionsetDisplayName( displayName )displayName : Valeur de chaîne pour définir la propriété du nom d'affichage de la table sur.ai.structure.editableTableDéfinit le nom d'affichage de la table.AddColumn( columnId)columnId : chaîne d'identifiant distant de la colonneai.structure.editableColumnCrée et renvoie une nouvelle colonne enfant de la table.addRequiredParameter(paramètreId )parameterId : chaîne d'identifiant du paramètreai.structure.editableParameterCrée et renvoie un nouveau paramètre obligatoire pour la table. Un paramètre affectable doit être défini comme valeur d'un paramètre obligatoire lorsque cette table est utilisée avec ImportData ou ImportStructure.
- ai.structure.editableColumn
- FonctionsMéthodeParamètresRetoursDescriptionsetDisplayName( value )
- value : valeurs de chaîne pour définir la propriété displayName des colonnes
ai.structure.editableColumnDéfinit le nom d'affichage de la colonne.setDisplayOrder( value )- value : valeurs de chaîne pour définir la propriété displayOrder des colonnes sur
ai.structure.editableColumnDéfinit l'ordre d'affichage de la colonne.setIncludeByDefault( value )- value : Valeur booléenne pour définir la propriété des colonnes IsEnabled sur
ai.structure.editableColumnPermet d'activer la colonne pour l'import de données.setIncludeInKey( value )- value : valeur booléenne pour définir la propriété includeInkey des colonnes
ai.structure.editableColumnIndique si la colonne fait partie de la clé de table.setMandatoryForImports( value )- value : valeur booléenne pour indiquer si cette colonne est activée pour les imports de données par obligatoire
ai.structure.editableColumnDéfinit la colonne pour qu'elle soit activée pour l'import de données obligatoire.setNonFilterable( value )- value : Valeur booléenne pour définir la propriété nonFilterable des colonnes sur
ai.structure.editableColumnIndique si la colonne peut être incluse dans une requête distante.setRemoteColumnType( value )- value : Valeur de chaîne pour définir la propriété RemoteColumnType des colonnes
ai.structure.editableColumnDéfinit le type de données distantes de la colonne, par exemple 'chaîne', 'entier', etc.setTextColumnType( length )- profile : longueur maximum des valeurs que cette colonne peut contenir
ai.structure.editableColumnLa colonne devient une colonne texte.setIntegerColumnType()ai.structure.editableColumnChange la colonne en colonne de nombre entier.setFloatColumnType()ai.structure.editableColumnChange la colonne en une colonne à double précision.setBooleanColumnType()ai.structure.editableColumnChange la colonne d'une colonne booléenne.setDateTimeColumnType()ai.structure.editableColumnFait de la colonne une colonne Date et heure. - ai.structure.editableParameter
- FonctionsMéthodeParamètresRetoursDescriptionsetDisplayName( value )
- value : Valeur de chaîne pour définir la propriété displayName des paramètres sur
Définit le nom d'affichage du paramètre.setForDataImport( value )- value : valeur booléenne indiquant si le paramètre sera accessible dans un script ImportData
Active le paramètre pour l'import des données.setTypePeriodRange()Remplace le type du paramètre par une Plage de périodes - Exemple
- 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); .............. }
Fonction Importer des données
La fonction Importer des données permet d'importer des lignes depuis une source externe et de les importer dans des tables temporaires Integration. Le mécanisme d'import des lignes est l'objet ai.rowset, qui est fourni via le paramètre 'context' transféré dans la fonction Importer des données.
- Paramètre contextuel
- La fonction Importer des données est fournie avec un paramètre "contexte".MéthodeParamètresType de retourDescriptiongetRowset()Génère un avertissement de dépréciation d'API dans les journaux une fois que le support a activé getRowset(ColumnIds) à votre demande avec la version 2021R1. La méthode getRowset() continue de fonctionner, mais ignore tous les paramètres.ai.rowsetRenvoie l'objet d'ensemble de lignes auquel sont ajoutées les lignes. L'ensemble de lignes définit la table, les colonnes et MaxRows.getRowset([columnIds])Ouvrez un cas dans Workday Customer Center pour activer l'indicateur de fonctionnalité "les services Cloud personnalisés lit le tableau de stockage par colonnes spécifiées".[Column Ids]ai.rowsetRenvoie l'objet Ligne auquel sont ajoutées les lignes, dans l'ordre des colonnes que vous avez indiqué. L'ensemble de lignes définit la table, les colonnes et MaxRows.getDataSource()ai.dataSourceRenvoie la source de données active.getCalendar()ai.calendarRenvoieAdaptive PlanningCalendrier
- Exemple
- Dans cet exemple, nous supposons que la ligne contient une colonne Entier et une colonne Texte dans l'ordre.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- L'objet d'ensemble de lignes est le mécanisme par lequel les "lignes" à l'intérieur du script utilisateur sont transportées dans la pile Integration. Un ensemble de lignes modélise la forme (noms de colonne et leurs types de données, maxRows et tableId) de la table sur laquelle un utilisateur exécute son script PreviewData ou ImportData.
- Fonctions
- MéthodeParamètresType de retourDescriptionaddRow( cells )Cellules :Array<Primive Types> Tableau de valeurs pour chaque colonne, dans l'ordreAjoute un tableau de valeurs de cellule sous forme de ligne à l'ensemble de lignes. Les valeurs de cellule doivent être un objet de type chaîne (peut être nul), numérique (entier fin ou décimal), booléen ou date valide. Chaque type de valeur de cellule doit correspondre à son type de données de colonne correspondant dans l'ordre défini par getColumnNames. Le nombre de valeurs de cellule doit correspondre au nombre de colonnes définies.getTableId()StringRenvoie l'identifiant de la table prévisualisée.getMaxRows()IntegerRenvoie le nombre maximum de lignes autorisées dans cet ensemble de lignes. 0 signifie inconnu, tel qu'il est utilisé par ImportData.getColumns()Array<ai.dataSource.table.column>Renvoie les colonnes de table sélectionnées pour l'aperçu.setSmarchParsingEnabled( val )
- val : valeur booléenne indiquant si cette fonctionnalité doit être activée ou désactivée
Si possible, l'activation de ce paramètre analysera automatiquement chaque valeur de cellule de chaîne dans le type de données obligatoires des colonnes cible pendant la fonction addRow(). Cela évite à un utilisateur de devoir rechercher un type de données de colonnes cible et d'effectuer une analyse manuelle si le type de données de la valeur de la cellule actuelle ne correspond pas au type de données de colonnes cible. Ceci est particulièrement utile lorsque vous traitez avec des API tierces qui renvoient toutes les valeurs de ligne sous forme de chaînes via JSON ou XML, et que chaque valeur de cellule peut être correctement analysée en valeurs Integer, Float, Booléen ou DateTime.getSmartParsingEnabled()BooleanRenvoie Vrai si ce paramètre est activé. La valeur par défaut est false (faux).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); } } }
Fonction de prévisualisation des données
La fonction Aperçu des données est utilisée pour interroger un système externe afin de recueillir des lignes de données pour la table et les colonnes indiquées. Il est limité au nombre maximum de lignes que le système externe permet à un utilisateur de voir lors d'un aperçu dans ce système.
- Paramètre contextuel
- La fonction Aperçu des données est fournie avec un paramètre, 'contexte'.MéthodeParamètresType de retourDescriptiongetDataSource()ai.dataSourceRenvoie la source de données active.getRowset()ai.rowsetRenvoie l'objet d'ensemble de lignes auquel sont ajoutées les lignes. L'ensemble de lignes définit la table, les colonnes et MaxRows.getCalendar()ai.calendarRenvoieAdaptive PlanningCalendrier
- Exemple
- Permet d'afficher un aperçu des données stockées dans la source 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); } } }
Exemple combiné de test de connexion, d'import et de prévisualisation de données
//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); } } }
Fonction Exporter des données (chargeur Cloud personnalisé uniquement)
La fonction Exporter des données est utilisée pour exporter des lignes lorsque vous créez des scripts de chargeurs Cloud personnalisés . Le mécanisme d'exportation des lignes est le
ai.rowset
objet , qui est fourni via l'objet context
Paramètre transféré dans la fonction d'export.context.createTableReader()
renvoie un lecteur. Utiliser reader.readRow()
pour lire les lignes de données de la table source.reader.readRow()
renvoie les colonnes de données dans l'ordre par défaut. Si context.createTableReader()
est appelé avec un tableau de codes de colonne, les colonnes sont organisées dans l'ordre des colonnes du paramètre.- Paramètre contextuel
- La fonction Exporter des données est fournie avec un paramètre "contexte".MéthodeParamètresType de retourDescriptioncreateTableReader()tableau facultatif de noms de colonne de la table sourceTableReaderRenvoie la source de données active. L'ordre des colonnes est identique à celui indiqué dans le paramètre.Objet TableReaderMéthodeParamètresType de retourDescriptionreadRow()tableau de valeursUn tableau de valeurs de la source de données.
- Exemple
- // 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)); } }