Adaptive Planning 함수
연결 기능 테스트
연결 테스트 기능은 Integration이 외부 시스템에 연결할 수 있는지 여부를 결정하는 데 사용됩니다. 연결 테스트 함수는 결과를 나타내는 true 또는 false를 반환해야 합니다.
- 컨텍스트 매개변수
- 연결 테스트에는 1개의 매개변수 'context'가 제공됩니다.방법매개변수반환 유형설명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.structural.structuralBuilder 오브젝트를 반환해야 합니다.
- 컨텍스트 매개변수
- 구조 가져오기 기능에는 1개의 매개변수 'context'가 제공됩니다.방법매개변수반환 유형설명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.progressManager 오브젝트를 사용하면 사용자가 구조 가져오기 스크립트를 실행하는 태스크의 완료율을 수동으로 설정할 수 있습니다. 스크립트 실행은 전체 태스크 완료율의 70%를 차지합니다. 따라서 ai.progressManager를 통해 정의된 진행률 값은 전체 태스크의 진행상황을 나타내도록 조정됩니다. 예를 들어 ai.progressManager 완료율을 100%로 설정하면 실행 중인 태스크의 70%에 해당하고, 50%를 지정하면 실행 중인 태스크의 35%에 해당하게 됩니다.
- 함수
- 방법매개변수반환 유형설명getProgress()숫자사용자로 정의된 스크립트의 완료율을 반환합니다. 사용자가 이전에 완료율을 설정하지 않은 경우 이 함수는 0을 반환합니다.setProgress( value )
- value: 스크립트 완료율을 다음으로 설정할 숫자 값
스크립트 완료율을 설정합니다. 이 작업은 다음과 같이 작동합니다.- 0, 10, 22.5 100, 110과 같은 숫자 값만 허용됩니다.
- 100보다 큰 값은 100으로 처리됩니다.
- 현재 스크립트 진행률보다 작은 값은 무시됩니다. 예: setProgress(50) 다음에 setProgress(40)를 호출합니다. 그러면 스크립트 완료율이 50%가 됩니다.
- 'value'에 대한 다른 모든 입력 유형은 스크립트 진행상황에 영향을 주지 않습니다.
- 예:
- 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: 열의 문자열 RemoteIdai.structure.editableColumn테이블의 새 child 열을 생성하고 반환합니다.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: 열의 includeInKey 속성을 다음으로 설정하는 부울 값
ai.structure.editableColumn열이 테이블 키의 일부인지 여부를 나타냅니다.setMandatoryForImports( value )- value: 이 열이 필수 항목에 따라 데이터 가져오기에 대해 활성화되어 있는지 여부를 나타내는 부울 값
ai.structure.editableColumn열을 필수 항목별로 데이터 가져오기에 사용할 수 있도록 설정합니다.setNonFilterable( value )- value: 열의 필터링불가 속성을 다음으로 설정하는 부울 값
ai.structure.editableColumn원격 쿼리에 열을 포함할 수 있는지 여부를 나타냅니다.setRemoteColumnType( value )- value: 열의 원격 열 유형 속성을 다음으로 설정하는 문자열 값
ai.structure.editableColumn열의 원격 데이터 유형을 설정합니다(예: 'string', 'integer' 등).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 오브젝트로, Import Data 함수에 전달되는 'context' 매개변수를 통해 제공됩니다.
- 컨텍스트 매개변수
- 데이터 가져오기 기능에는 1개의 매개변수 'context'가 제공됩니다.방법매개변수반환 유형설명getRowset()2021R1 릴리스에서 지원팀이 요청에 따라 getRowset(ColumnIds)를 활성화한 후 로그에 API 사용 중지 경고를 생성합니다. getRowset() 메서드는 계속 작동하지만 매개변수는 무시합니다.ai.rowset행이 추가되는 Rowset 오브젝트를 반환합니다. 행 세트는 테이블, 열 및 MaxRows를 정의합니다.getRowset([columnIds])Workday Customer Center에서 케이스를 오픈하여 '커스텀 클라우드 서비스에서 지정된 열로 스테이징 테이블 읽기' 기능 플래그를 활성화합니다.[열 ID]ai.rowset행이 추가되는 Rowset 오브젝트를 지정된 열 순서로 반환합니다. 행 세트는 테이블, 열 및 MaxRows를 정의합니다.getDataSource()ai.dataSource활성 데이터 소스를 반환합니다.getCalendar()ai.calendar반환값Adaptive Planning캘린더
- 예:
- 이 예에서는 행 세트에 정수 열과 텍스트 열이 순서대로 포함되어 있다고 가정합니다.function importData(context) { ........... var rowset = context.getRowset(); .......... var rowset= context.getRowset([ 'NAME', 'ID']); }
- ai.rowset
- 행 세트 오브젝트는 사용자 스크립트 내의 '행'을 통합 스택으로 전송하는 메커니즘입니다. 행 세트는 사용자가 PreviewData 또는 ImportData 스크립트를 실행하는 기준이 되는 테이블의 형태(열 이름 및 해당 데이터 유형, maxRows 및 tableId)를 모델링합니다.
- 함수
- 방법매개변수반환 유형설명addRow( cells )cells : Array<Primitive Types> 각 열에 대한 값의 배열(순서대로)셀 값의 배열을 행 세트에 행으로 추가합니다. 셀 값은 유효한 문자열(Null일 수 있음), 숫자(Finite Integer 또는 Decimal), 부울 또는 날짜 오브젝트여야 합니다. 각 셀 값 유형은 getColumnNames에 정의된 순서대로 해당 열 데이터 유형과 일치해야 합니다. 셀 값의 수는 정의된 열의 수와 일치해야 합니다.getTableId()String미리보기 중인 테이블의 테이블 ID를 반환합니다.getMaxRows()정수이 행 세트에 허용되는 최대 행 수를 반환합니다. 0은 ImportData에서 사용되는 알 수 없음을 의미합니다.getColumns()Array<ai.dataSource.table.column>미리보기를 위해 선택한 테이블 열을 반환합니다.setSmartParsingEnabled( val )
- val: 이 기능을 설정할지 여부를 나타내는 부울 값입니다.
가능한 경우 이 설정을 활성화하면 addRow() 함수 중에 각 문자열 셀 값을 대상 열의 필수 데이터 유형으로 자동 구문분석합니다. 이렇게 하면 사용자가 현재 셀에 대한 값의 데이터 유형이 대상 열의 데이터 유형과 일치하지 않는 경우 대상 열의 데이터 유형을 룩업하고 수동 파싱을 수행할 필요가 없습니다. 이는 JSON 또는 XML을 통해 모든 행 값을 문자열로 반환하는 3rd Party API를 처리할 때 특히 유용하며, 각 셀 값을 성공적으로 정수, 부동, 부울 또는 날짜/시간 값으로 파싱할 수 있습니다.getSmartParsingEnabled()부울이 설정이 활성화된 경우 true를 반환합니다. 기본값은 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개의 매개변수 'context'가 제공됩니다.방법매개변수반환 유형설명getDataSource()ai.dataSource활성 데이터 소스를 반환합니다.getRowset()ai.rowset행이 추가되는 Rowset 오브젝트를 반환합니다. 행 세트는 테이블, 열 및 MaxRows를 정의합니다.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 배열을 사용하여 호출된 경우 매개변수의 열 순서에 따라 열이 정렬됩니다.- 컨텍스트 매개변수
- 데이터 내보내기 기능에는 1개의 매개변수 'context'가 제공됩니다.방법매개변수반환 유형설명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)); } }