メインコンテンツにスキップ
Adaptive Planning
最終更新: 2023-06-23
Adaptive Planning 関数

Adaptive Planning 関数

接続テスト関数

"接続テスト" 機能は、インテグレーションが外部システムに接続できるかどうかを判断するために使用されます。"接続テスト" 関数は、結果を示す true または False を返す必要があります。
コンテキスト パラメータ
接続テストに、'コンテキスト' という 1 つのパラメータが指定されました。
方法
パラメータ
戻り値の型
説明
getDataSource()
ai.dataSource
アクティブなデータ ソースを返します。
getCalendar()
ai.calendar
以下を返します。
Adaptive Planning
カレンダー
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; } }

構造のインポート関数

構造のインポート機能は、外部システムによって定義されたデータ ソースのスキーマ (テーブルと列) を作成/更新するために使用されます。"構造のインポート" 関数は、ai. Structure. StructureBuilder オブジェクトを返す必要があります。
コンテキスト パラメータ
構造のインポート機能には、'コンテキスト' という 1 つのパラメータが用意されています。
方法
パラメータ
戻り値の型
説明
getDataSource()
ai.dataSource
アクティブなデータ ソースを返します。
getProgressManager()
ai.progressManager
"構造のインポート" タスクの完了率値の更新に使用できるオブジェクトを返します。
getStructureBuilder()
ai.structure.structureBuilder
テーブル、列、パラメータなど、データ ソース構造を作成するために使用されるオブジェクトを返します。
getCalendar()
ai.calendar
以下を返します。
Adaptive Planning
カレンダー
function importStructure(context) { //getDataSource var dataSource=context.getDataSource(); // getStructureBuilder var builder = context.getStructureBuilder(); //getCalendar var calendar= context.getCalendar(); }
ai.progressManager
ai.processManager オブジェクトを使用すると、ユーザーは構造のインポート スクリプトを実行しているタスクの完了率を手動で設定することができます。スクリプト実行は、タスク全体の完了率の 70% を占めます。そのため、ai.processManager によって定義される進捗状況の値は、タスク全体の進捗状況を表すように拡大縮小されます。例: ai.processManager の完了率を 100% に設定すると、実行中のタスクの 70% に相当し、50% は実行中のタスクの 35% に相当し、以下のようになります。
関数
方法
パラメータ
戻り値の型
説明
getProgress()
数値
ユーザーに対して定義されたスクリプトの完了率を返します。ユーザーがまだ完了率を設定していない場合、この関数は 0 を返します。
setProgress( value )
  • value: スクリプトの完了率を次の値に設定します
スクリプトの完了率を設定します。これは次のように機能します。
  • 0、10、22.5、100、110 などの数値のみを使用できます。
  • 100 を超える値は 100 として扱われます。
  • 現在のスクリプト進行状況より小さい値は無視されます。例: setProcess(50) の後に setProcess(40) を呼び出します。これにより、スクリプトの完了率は 50% になります。
  • "値" に関するその他の入力タイプはすべて、スクリプトの進行状況に影響しません。
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
関数
方法
パラメータ
返品
説明
addTable( tableId )
  • tableId: テーブルの文字列一意 ID
ai.structure.editableTable
データ ソースに対して新しいテーブルを作成して返します。
データが入力されるテーブルと列の構造を定義する機能を提供します。
function importStructure(context) { ........ //getStructureBuilder var builder = context.getStructureBuilder(); //Example addTable( tableId )-"Sample" var table = builder.addTable("Sample"); ....... }
ai.structure.editableTable
関数
方法
パラメータ
返品
説明
setDisplayName( displayName )
displayName: テーブルの表示名プロパティを設定する文字列値
ai.structure.editableTable
テーブルの表示名を設定します。
addColumn( columnId )
columnId: 列の文字列 RemoteId
ai.structure.editableColumn
テーブルの新しい子列を作成して返します。
addRequiredParameter( parameterId )
parameterId: パラメータの文字列 ID
ai.structure.editableParameter
テーブルの新しい必須パラメータを作成して返します。このテーブルを ImportData または ImportStructure の一部として使用する場合は、割当可能なパラメータを "必須パラメータ" の値に設定する必要があります。
ai.structure.editableColumn
関数
方法
パラメータ
返品
説明
setDisplayName( value )
  • value: 列の displayName プロパティを設定する文字列値
ai.structure.editableColumn
列の表示名を設定します。
setDisplayOrder( value )
  • value: 列の displayOrder プロパティを次のように設定する文字列値
ai.structure.editableColumn
列の表示順序を設定します。
setIncludeByDefault( value )
  • value: 列の IsEnabled プロパティを設定するブール値
ai.structure.editableColumn
データのインポートに対して有効化する列を設定します。
setIncludeInKey( value )
  • value: 列の includeIn Key プロパティを設定するブール値
ai.structure.editableColumn
列がテーブル キーの一部であるかどうかを示します。
setMandatoryForImports( value )
  • value: この列が必須によるデータのインポートに対して有効であるかどうかを示すブール値
ai.structure.editableColumn
列が必須でデータのインポートに対して有効になるように設定します。
setNonFilterable( value )
  • value: 列の nonFilterable プロパティを設定するブール値
ai.structure.editableColumn
列をリモート クエリに含めることができるかどうかを示します。
setRemoteColumnType( value )
  • value: 列の RemoteColumnType プロパティを設定する文字列値
ai.structure.editableColumn
列のリモート データ タイプを設定します。たとえば、'文字列'、'整数' などです。
setTextColumnType( length )
  • length: 整数この列が保持できる値の最大長
ai.structure.editableColumn
列をテキスト列にします。
setIntegerColumnType()
ai.structure.editableColumn
列を整数列にします。
setFloatColumnType()
ai.structure.editableColumn
列を倍精度列にします。
setBooleanColumnType()
ai.structure.editableColumn
列をブール値列にします。
setDateTimeColumnType()
ai.structure.editableColumn
列を日付時間列にします。
ai.structure.editableParameter
関数
方法
パラメータ
返品
説明
setDisplayName( value )
  • value: パラメータの displayName プロパティを設定する文字列値
パラメータの表示名を設定します。
setForDataImport( value )
  • value: パラメータが ImportData スクリプトでアクセス可能かどうかを示すブール値
データ インポートのパラメータを有効化します。
setTypePeriodRange()
パラメータのタイプを期間範囲に変更します
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); .............. }

"データのインポート" 関数

"データのインポート" 機能は、外部ソースから行を取得し、インテグレーション ステージング テーブルにインポートするために使用されます。行をインポートするメカニズムは ai.rowset オブジェクトです。このオブジェクトは、データのインポート関数に渡されるコンテキスト パラメータによって提供されます。
コンテキスト パラメータ
"データのインポート" 関数には、"context" という 1 つのパラメータが用意されています。
方法
パラメータ
戻り値の型
説明
getRowset()
2021R1 リリースでリクエストに応じて getRowset(ColumnIds) が有効化された後、ログに API 廃止警告を生成します。getRowset() メソッドは引き続き機能しますが、パラメータは無視されます。
ai.rowset
行の追加先の Rowset オブジェクトを返します。行セットはテーブル、列、最大行数を定義します。
getRowset([columnIds])
Workday カスタマー センターでケースを作成し、"
カスタム クラウド サービスが指定列でステージング テーブルを読み取る
" 機能フラグを有効にします。
[Column IDs]
ai.rowset
行の追加先の Rowset オブジェクトを指定した列順序で返します。行セットはテーブル、列、最大行数を定義します。
getDataSource()
ai.dataSource
アクティブなデータ ソースを返します。
getCalendar()
ai.calendar
以下を返します。
Adaptive Planning
カレンダー
この例では、行セットに整数列とテキスト列が順番に含まれていると想定しています。
function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
ai.rowset
Rowset オブジェクトは、ユーザーのスクリプト内の「行」をインテグレーション スタックに転送するメカニズムです。行セットは、ユーザーが PreviewData または ImportData スクリプトを実行しているテーブルの形状 (列名とそのデータ タイプ、maxRows と tableId) をモデル化します。
関数
方法
パラメータ
戻り値の型
説明
addRow( cells )
cells: 配列<プリミティブ タイプs>各列の値の配列 (順
セル値の配列を行として "行セット" に追加します。セル値は、有効な文字列 (ヌルでもかまいません)、数値 (整数または小数)、ブール値または日付のいずれかのオブジェクトである必要があります。各セル値のタイプは、対応する列のデータ タイプと、getColumnNames で定義された順序で一致している必要があります。セル値の数は、定義された列数と一致している必要があります。
getTableId()
String
プレビューされているテーブルのテーブル ID を返します。
getMaxRows()
整数
この Rowset で許可されている最大行数を返します。0 は不明を意味し、ImportData によって使用されます。
getColumns()
Array<ai.dataSource.table.column>
プレビュー用に選択されたテーブルの列を返します。
setSmartParsingEnabled( val )
  • val: この機能をオンにするかオフにするかを示すブール値
可能であれば、この設定を有効にすると、各文字列のセル値が、AddRow() 関数の実行中に、ターゲット列の必須データ タイプに自動的に解析されます。これにより、現在のセルの値のデータ タイプがターゲット列のデータ タイプと一致しない場合に、ユーザーがターゲット列のデータ タイプをルックアップして手動で解析を行う必要がなくなります。これは、JSON または XML ですべての行値を文字列として返すサードパーティ API を処理する場合に特に有用であり、各セル値を整数、浮動小数、ブール値、または日時値に正常に解析できます。
getSmartParsingEnabled()
ブール値
この設定が有効である場合に真を返します。デフォルトは 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); } } }

データ関数のプレビュー

データのプレビュー機能は、指定されたテーブルおよび列のデータの行について外部システムを照会するために使用されます。これは、外部システムがそのシステムのプレビュー中にユーザーに表示することを許可する最大行数によって制限されます。
コンテキスト パラメータ
データのプレビュー関数には、'コンテキスト' という 1 つのパラメータが用意されています。
方法
パラメータ
戻り値の型
説明
getDataSource()
ai.dataSource
アクティブなデータ ソースを返します。
getRowset()
ai.rowset
行の追加先の Rowset オブジェクトを返します。行セットはテーブル、列、最大行数を定義します。
getCalendar()
ai.calendar
以下を返します。
Adaptive Planning
カレンダー
クラウド ソースに保存されたデータをプレビューする機能を提供します。
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); } } }

接続テスト、データのインポート、プレビューの組み合わせの例

//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); } } }

データのエクスポート関数 (カスタム クラウド ローダのみ)

"データのエクスポート" 機能は 、カスタム クラウド ローダ スクリプトを作成する ときに行をエクスポートするために使用します。行をエクスポートするメカニズムは次のとおりです
ai.rowset
オブジェクト (
context
エクスポート関数に渡されたパラメータ
context.createTableReader()
リーダーを返す。用途
reader.readRow()
をクリックして、ソース テーブルのデータ行を読み取ります。
reader.readRow()
は、デフォルトの順序でデータ列を返します。条件
context.createTableReader()
が列 ID の配列で呼び出された場合、列はパラメータの列順序に従って配置されます。
コンテキスト パラメータ
データのエクスポート関数には、"context" という 1 つのパラメータが用意されています。
方法
パラメータ
戻り値の型
説明
createTableReader()
ソース テーブルの列名の任意の配列
TableReader
アクティブなデータ ソースを返します。列順序は、パラメータで指定された順序と同じです。
TableReader オブジェクト
方法
パラメータ
戻り値の型
説明
readRow()
値の配列
データ ソースの値の配列。
// 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)); } }