Процедуры#

Описание#

Процедура выполняет блок кода, указанный в теле процедуры при ее объявлении, в момент ее вызова.

В теле процедуры доступны только переменные, переданные в качестве аргументов.

Результатом выполнения процедуры является значение, переданное в выражении return.

Синтаксис#

Объявление процедуры имеет формат:

procedure <имя_процедуры> (<список_используемых_в_процедуре_переменых>) { <тело_процедуры> }

Вызов процедуры имеет формат:

procedure(<список_аргументов>)

Примеры использования процедур#

Пример 1#

Входящее сообщение:

{
  "root":{
    "a":[56.25, 13, 9.3, 103],
    "b":["test1","test2","test3"],
    "c": -150,
    "testDate":"2024-05-29T11:51:40"
  }
}

Правило трансформации:

procedure test1 (n) {
 info("Математические операции")
 return(abs($n.root.c)+sqrt(round($n.root.a[2])))
}
procedure test2 (n) {
 info("Преобразование даты и времени")
 return(convertDateTime("yyyy-MM-dd'T'HH:mm:ss", "dd MM yyyy", IN.root.testDate))
}
procedure test3 (n) {
 info("Генерация идентификаторов")
 return(generateId16())
}
define res = test3(in)
out.test1 = test1(in)
out.test2 = test2(in)
out.test3 = $res

Выходящее сообщение:

{
  "test1":153.0,
  "test2":"29 05 2024",
  "test3":"b928c7bbd2386152"
}

Пример 2#

Входящее сообщение:

{
  "root":{
    "test1":{
      "test11":"test11",
      "test12":"test12",
      "test13":"test13"
    },
    "test2":["test21","test22","test23"],
    "testDate":"16.03.2020T16:51:40.350",
    "field with spaces":"spaces",
    "index":"2"
  }
}

Правило трансформации:

procedure test (a, b, c) {
 info("test in procedure test")
 info($a)
 return($a.root.test1)
}
procedure testVar (a) {
 info("test in procedure test2")
 info($a)
 return("var")
}
out.test = "test"
define res = test(in, in, in)
define var = "var"
define resVar = testVar($var)
info($resVar)
out.test1 = $res
out.test2 = $resVar

Выходящее сообщение:

{
  "test":"test",
  "test1":{
    "test11":"test11",
    "test12":"test12",
    "test13":"test13"
  },
  "test2":"var"
}