Прочие функции

Добавить поля структуры

Метод предназначен для динамического создания и удаления полей структуры через кубик JS SDK.

$D.store.alter = function(structName, options:[alter:List[AddOptions], drop:List[DropOptions])

,где AddOptions подразумевает список объектов, описываемых параметры добавляемого поля. Это sysname, name, тип данных, группу, к которой будет относиться это поле, а также целевая структура, если поле имеет тип link.

{ "sysName":"sysname_field", "name":"field_name", "dataType":"link", "group":"Link_Group", "link":"storeAlter_linked" }

DropOptions — список объектов, состоящих из sysName удаляемых полей.

{ "sysName":"stringF" }

Нельзя удалить поля, настроенные из интерфейса редактирования структуры

//example code
DirectualEngine.addEventListener(AppEvents.START, function(context){
// Добавить в структуру storeAlter поле addColumn и удалить поле stringF
$D.store.alter("storeAlter", {"alter":[
{
"sysName":"addColumn",
"name":"add_field_storeAlter",
"dataType":"string",
"group":"addColumn_Group"
}
],
"drop":[
{
"sysName":"stringF"
}
});
return true;
});

Поставить лок

$D.tryLock = function(key, ttlMillis, isGlobalLock)

$D.tryLock = function(key, ttlMillis, isGlobalLock)

key: ключ очереди; ttlMillis: время жизни лока в миллисекундах; Внутри одного сценария: isGlobalLock == false; Глобальный лок (виден во всех сценариях): isGlobalLock == true;

Снять лок

$D.unlock = function(key, isGlobalLock)

$D.unlock = function(key, isGlobalLock)
//example code
DirectualEngine.addEventListener(AppEvents.START, function(context){
//получаем значение ID текущего объекта
var templateID = null;
templateID = $D.getValueFromTemplate("{{id}}");
$D.unlock("key1",false)
//добавляем в текущий объект значение в поле getValueSpace
$D.saveObject("unlock",{"id":templateID,"unlockResult":"true"});
return true;
});

GET запрос по URL

httpGet(URL:String, context:Object) , где params - js object:

httpGet(URL:string, context:object)
//httpGet("http://ya.ru", {
//readTimeoutMs:20000, connectTimeoutMs:1000,
//headers:{"Cookie": "cookieValue"}});
//example code
DirectualEngine.addEventListener(AppEvents.START, function(context){
//получаем значение глобальной переменной
var httpGetURL = $D.getValueByID("GlobalVariables","httpGetURL","value")
var httpGetResult;
httpGetResult = httpGet(httpGetURL);

В Response вернётся сообщение с заголовками и телом ответа:

{headers={Access-Control-Allow-Credentials=Vector(true), Access-Control-Allow-Headers=Vector(Origin, Accept, x-amz-acl, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, network-sys-name), Access-Control-Allow-Methods=Vector(POST, PUT, GET, HEAD, OPTIONS), Access-Control-Allow-Origin=Vector(*), Cache-Control=Vector(no-cache, no-store, max-age=0, must-revalidate), Connection=Vector(keep-alive), Content-Type=Vector(application/json;charset=UTF-8), Date=Vector(Tue, 28 May 2019 13:54:43 GMT), Expires=Vector(0), Pragma=Vector(no-cache), Server=Vector(nginx), Status=Vector(HTTP/1.1 200 OK), Transfer-Encoding=Vector(chunked), X-Content-Type-Options=Vector(nosniff), X-Frame-Options=Vector(allow-from *), X-XSS-Protection=Vector(1; mode=block)}, data={"payload":[{"httpGetSpace":"httpGet test value"}],"pageInfo":{"currentPage":0,"pageSize":30,"totalPage":1,"tableSize":1,"currentPageSize":1},"status":"OK"}, statusCode=200}

POST запрос по URL

httpPost(URL:String, data:Object, context:Object)

httpPost(URL:string, data:Object, context:Object)
//var response;
//var data = {id:templateID,"httpPostResult":"httpPost value true"};
//var address = "https://directual.com/good/api/v5/data/httpPost/httpPost_space_field?appID=7c07de9e-40ce-4476-9d80-ea1554321a87&sessionID=";
//response = httpPost(address, data);
// One more sample
// var data = "_csrf_token=token&_username=nikita%40directual.com&_submit=on";
// var options = {readTimeoutMs:1000, headers:{"Content-Type":"application/x-www-form-urlencoded", "Cookie":"cookie"}}
// response = httpPost("https://guardsaas.com/login_check", data, options);

В Response вернётся сообщение с заголовками и телом ответа.

{headers={Access-Control-Allow-Credentials=Vector(true), Access-Control-Allow-Headers=Vector(Origin, Accept, x-amz-acl, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, network-sys-name), Access-Control-Allow-Methods=Vector(POST, PUT, GET, HEAD, OPTIONS), Access-Control-Allow-Origin=Vector(*), Cache-Control=Vector(no-cache, no-store, max-age=0, must-revalidate), Connection=Vector(keep-alive), Content-Type=Vector(application/json;charset=UTF-8), Date=Vector(Tue, 28 May 2019 14:56:38 GMT), Expires=Vector(0), Pragma=Vector(no-cache), Server=Vector(nginx), Status=Vector(HTTP/1.1 200 OK), Transfer-Encoding=Vector(chunked), X-Content-Type-Options=Vector(nosniff), X-Frame-Options=Vector(allow-from *), X-XSS-Protection=Vector(1; mode=block)}, data={"result":[{"httpPostResult":"httpPost value","id":"242_322759493_312"}],"status":"OK"}, statusCode=200}

Проверка, что хотя бы один элемент второго массива присутствует в первом

$D.arrayContainsAny(array1Str, array2Str)

$D.arrayContainsAny(array1Str, array2Str)
//arrayF1 = 1,2,3,4
//arrayF2 = 3,4
//$D.arrayContainsAny("{{arrayF1}}","{{arrayF2}}") = true

array1Str, array2Str: массивы для проверки в строчном представлении

Проверка, что все элементы второго массива присутствуют в первом

$D.arrayContainsAll(array1Str, array2Str)

$D.arrayContainsAll(array1Str, array2Str)
//arrayF1 = 1,2,3,4
//arrayF2 = 3,4
//$D.arrayContainsAll("{{arrayF3}}","{{arrayF2}}") = true

array1Str, array2Str - массивы для проверки в строчном представлении.

Работа с context

Возможности

Пример JS

Пример результата

Получить все поля текущего объекта

context.scenarioObject.fields()

[ id:100, name:"name" ]

Получить поле name текущего объекта

context.scenarioObject.fields().name context.scenarioObject.fields[name]

name

Получить дату создания объекта в системе

context.scenarioObject.dateCreated

тип Date

Получить дату изменения объекта в системе

context.scenarioObject.dateChanged

тип Date (возможен null)

Пакет Net

Выполнение http-запроса: Net.httpRequest(url, callback, option)

Отправка http GET запроса

Net.httpRequest("http://yandex.ru/test", function(data){
if(statusCode == 200){ // data = {data : '', statusCode : 200}
}
});

Отправка http POST запроса

var json = {test:true, example:2}
Net.httpRequest("http://yandex.ru/test", function(data){
if(statusCode == 200){ // data = {data : '', statusCode : 200}
}
}, {contentType:"application/json", postData:json, method:"POST"});