Типы данных

Подробное описание читайте в статье про типы данных.

Type aliases

ReplacementTypeEnumBase

ReplacementTypeEnumBase: Information | Reassign | Full

Типы замещений

  • Information — информирование;

  • Reassign — переназначение задач;

  • Full — полная передача прав.

RoleType

RoleType: "user" | "group" | "orgstruct"

Типы объектов в поле типа «Роль»

  • пользователь;
  • группа;
  • элемент оргструктуры.

TApplication

TApplication: Data extends object ? ApplicationProjectItemRef<Data & ProjectItemData, Params, TProcesses> : Data extends object ? ApplicationProjectPlanElementItemRef<Data & ProjectPlanElementItemData, Params, TProcesses> : ApplicationItemRef<Data, Params, TProcesses>

TBoolean

TBoolean: boolean

Выбор «да/нет»

Подробнее читайте на MDN.

TCategory

TCategory: CategoryItemRef<C>

Категория (папка)

Ссылка на категорию элементов приложения. В структуре файлов и в иерархическом справочнике категория — это папка.

TDirectory

TDirectory: DirectoryItemRef

TFile

TFloat

TFloat: number

Число

Подробнее читайте на MDN.

TImage

TImage: ImageItemRef

TJSON

TJSON: any

Произвольный тип (JSON)

Тип предназначен для передачи или хранения произвольных данных в контексте:

Context.data.json = {
    'my-string': 'string data',
    'my-num': 1234,
    'my-bool': true,
    'my-array': [ 'string', 999, false ],
    'my-object': {
        // Вложенный объект также возможен
    }
};

Обратите внимание, что при использовании этого типа в сериализуемом контексте (например, в серверном контексте виджета) в этом значении могут храниться только примитивные типы данных JSON.

Однако вполне возможно, в частности, использовать этот тип для передачи произвольных значений между виджетами на клиенте с использованием привязки входящих переменных.

// Виджет 1 - внешний
async function onInit() {
    Context.data.json = {
        onSaveCallback: async () => await saveFunction() // Записываем ссылку на функцию
    };
}

async function saveFunction() {
    // Логика обработки события
}

// Виджет 2 - внутренний
async function onSaveClick() {
    await Context.data.in_json?.onSaveCallback?.();
}

TLink

TLink: string

Ссылка (URL)

Используется как обычная строка. Не проходит валидацию.

Context.data.site_url = 'https://elma365.com';

TOAuth2

TOAuth2: OAuth2Record

TRole

TRole: Role

TString

TString: string

Строка

Подробнее читайте на MDN.

TUser

TableCellChangeDoneEvent

TableCellChangeDoneEvent: object[Exclude<keyof TableRowType, TableRowSystemKeys>] | object[Exclude<keyof TableRowType, TableRowSystemKeys>]

TableCellChangeDoneEvents

TableCellChangeDoneEvents: TableCellChangeDoneEvent<ExtractTableDataType<TableDataType>>[]

Событие окончания изменения ячеек в таблице

Представляет собой массив объектов со следующими полями:

  • currentValue — текущее значение ячейки;
  • rootRowIndex — индекс строки корневой таблицы;
  • rootColumnCode — код колонки корневой таблицы;
  • subTableRowIndex — индекс строки вложенной таблицы;
  • subTableColumnCode — код колонки вложенной таблицы.

Пример использования:

const table = Context.data.clients_table;
for (const event of events) {
    // Проверка, что изменения произошли во вложенной таблице
    if (event.subTableColumnCode) {
        // Проверка, что изменения были в колонке с кодом `client`
        if (event.subTableColumnCode === 'client') {
            const clientRef = event.currentValue; // тип `UserItemRef`
            const clientApp = await clientRef.fetch(); // тип `UserItem`
            // Изменение значения ячейки в колонке `client_phone` в той же строке вложенной таблицы
            // на основе нового значения ячейки `client`
            const rootRow = table[event.rootRowIndex];
            const subTable = rootRow[event.rootColumnCode];
            const subTableRow = subTable[event.subTableRowIndex];
            subTableRow.client_phone = clientApp.data.mobilePhone;
            return;
        }
    } else {
        // Изменения произошли в корневой таблице
        // ...
    }
}
Context.data.clients_table = table;

TableCellChangeEvent

TableCellChangeEvent: object[Exclude<keyof TableRowType, TableRowSystemKeys>] | object[Exclude<keyof TableRowType, TableRowSystemKeys>]

TableCellChangeEvents

TableCellChangeEvents: TableCellChangeEvent<ExtractTableDataType<TableDataType>>[]

Событие изменения ячеек в таблице

Представляет собой массив объектов со следующими полями:

  • previousValue — предыдущее значение ячейки;
  • currentValue — текущее значение ячейки;
  • rootRowIndex — индекс строки корневой таблицы;
  • rootColumnCode — код колонки корневой таблицы;
  • subTableRowIndex — индекс строки вложенной таблицы;
  • subTableColumnCode — код колонки вложенной таблицы.

Пример использования:

const table = Context.data.clients_table;
for (const event of events) {
    // Проверка, что изменения произошли во вложенной таблице
    if (event.subTableColumnCode) {
        // Проверка, что изменения были в колонке с кодом `client`
        if (event.subTableColumnCode === 'client') {
            const clientRef = event.currentValue; // тип `UserItemRef`
            const clientApp = await clientRef.fetch(); // тип `UserItem`
            // Изменение значения ячейки в колонке `client_phone` в той же строке вложенной таблицы
            // на основе нового значения ячейки `client`
            const rootRow = table[event.rootRowIndex];
            const subTable = rootRow[event.rootColumnCode];
            const subTableRow = subTable[event.subTableRowIndex];
            subTableRow.client_phone = clientApp.data.mobilePhone;
            continue;
        }
    } else {
        // Изменения произошли в корневой таблице
        // ...
    }
}
Context.data.clients_table = table;

TableRowDeleteEvent

TableRowDeleteEvent: object | object[keyof TableRowType]

TableRowDeleteEvents

TableRowDeleteEvents: TableRowDeleteEvent<ExtractTableDataType<TableDataType>>[]

Событие удаления строк в таблице

Представляет собой массив объектов со следующими полями:

  • row — удалённая строка;
  • currentValue — текущее значение ячейки;
  • rootRowIndex — индекс строки корневой таблицы;
  • rootColumnCode — код колонки корневой таблицы;
  • subTableRowIndex — индекс строки вложенной таблицы.

Пример использования:

for (const event of events) {
    // Проверка, что изменения произошли во вложенной таблице
    if (event.rootColumnCode) {
        // Проверка, что изменения были в колонке с кодом `products_table`
        if (event.rootColumnCode === 'products_table') {
            const deletedRow = event.row;
            const productRef = deletedRow.product;
            const productApp = await productRef.fetch();
            // Далее выполняем стороннюю логику на основе данных удалённой строки
            console.log(`Строка с продуктом ${productApp.data.__name} была удалена!`);
            continue;
        }
    } else {
        // Изменения произошли в корневой таблице
        // ...
    }
}

TableRowMoveEvent

TableRowMoveEvent: object | object[keyof TableRowType]

TableRowMoveEvents

TableRowMoveEvents: TableRowMoveEvent<ExtractTableDataType<TableDataType>>[]

Событие перемещения строк в таблице

Представляет собой массив объектов со следующими полями:

  • row — перемещённая строка;
  • oldRootRowIndex — предыдущий индекс строки корневой таблицы;
  • newRootRowIndex — новый индекс строки корневой таблицы;
  • rootColumnCode — код колонки корневой таблицы;
  • oldSubTableRowIndex — предыдущий индекс строки вложенной таблицы;
  • newSubTableRowIndex — новый индекс строки вложенной таблицы.

Пример использования:

const table = Context.data.clients_table;
for (const event of events) {
    // Проверка, что изменения произошли во вложенной таблице
    if (event.rootColumnCode) {
        // Проверка, что изменения были в колонке с кодом `products_table`
        if (event.rootColumnCode === 'products_table') {
            const movedRow = event.row;
            const productRef = movedRow.product;
            const productApp = await productRef.fetch();
            // Далее выполняем стороннюю логику на основе данных перемещённой строки
            console.log(`Строка с продуктом ${productApp.data.__name} была перемещена!`);
            continue;
        }
    } else {
        // Изменения произошли в корневой таблице
        // ...
    }
}
Context.data.clients_table = table;