Работа с номенклатурой (делами), регистрациями и резервированием регистрационных номеров документов, а также с листами согласования и ознакомления осуществляется с помощью методов типа DocflowApplicationItemRef.

Работа с листами согласования/ознакомления

Получить листы согласования/ознакомления можно с помощью методов getApprovalLists и getInformLists. Так можно получить листы согласования:

const item = await Context.data.n1;
const approvalLists = await item.docflow().getApprovalLists();

В дальнейшем можно продолжать работу с листами — например, получить статусы, списки согласующих/информируемых (респондентов), даты создания и изменения:

for (const list of approvalLists) {
    const {status, respondents, createdAt: __createdAt} = list;
}

Листы согласования/ознакомления представлены типом BaseList.

Работа с номенклатурой (делами)

Получить конкретное дело можно с помощью метода DocflowApplicationItemRef.getNomenclature. Для получения данных дела необходимо передать его идентификатор. Его можно получить двумя способами.

Пример получения идентификатора из настроек регистрации приложения:

const settings = await Application.getSettings();
settings.registrationSettings.nomenclatureIds.forEach(nomenclatureId => {
    ...
});

Пример получения идентификатора из списка регистраций элемента приложения:

const item = Context.data.d1!
const registrations = item.docflow().getRegistrations();
registrations.forEach(registration => {
    const {nomenclatureId} = registration;
    ...
})

Данные дела представлены типом TNomenclature. Получение и обработка данных дела может выглядеть так:

const item = Context.data.d1!
const settings = await Application.getSettings();
const nomenclatures = [];
for (const nomenclatureId of settings.registrationSettings.nomenclatureIds) {
    const nomenclature = await item.docflow().getNomenclature(nomenclatureId);
    if (nomenclature !== undefined) {
        const {id: __id, name: __name} = nomenclature;
        nomenclatures.push(nomenclature);
    }
}

Регистрация и резервирование регистрационных номеров приложений

Каждое приложение может быть зарегистрировано в нескольких делах, если такое предусмотрено настройками приложения. Для получения регистраций документа можно воспользоваться методом DocflowApplicationItemRef.getRegistrations. Регистрации имеют тип ApplicationItemRegistration. Например, получить идентификаторы дел, в которых могут быть зарегистрированы элементы приложения, можно следующим образом:

const item = Context.data.d1!
const registrations = await item.docflow().getRegistrations();
for (const registration of registrations) {
    const nomenclatureId = registration.nomenclatureId;
}

Для управления регистрациями можно использовать методы DocflowApplicationItemRef.register и DocflowApplicationItemRef.deleteReservation. Данные методы принимают идентификатор дела, в котором надо зарегистрировать элемент приложения или для которого нужно отменить регистрацию. Пример регистрации элемента приложения для всех дел из настроек приложения:

const item = Context.data.d1!
const settings = await Application.getSettings();
settings.registrationSettings.nomenclatureIds.forEach(nomenclatureId => {
     item.docflow().register(nomenclatureId);
})

Также существует возможность ручной регистрации с указанием номера регистрации. Ручная регистрация доступна в том случае, если предусмотрена настройками дела. Для ручной регистрации элемента приложения можно использовать метод DocflowApplicationItemRef.manualRegister. Пример ручной регистрации:

const item = Context.data.d1!
const settings = await Application.getSettings();
settings.registrationSettings.nomenclatureIds.forEach(nomenclatureId => {
     item.docflow().manualRegister("Номер тест 1", nomenclatureId);
})

Для предварительного резервирования номера регистрации можно использовать метод DocflowApplicationItemRef.reserve. Этот метод возвращает зарезервированный номер. Для отмены резервирования номера используется метод DocflowApplicationItemRef.deleteReservation. Оба метода принимают идентификатор дела в качестве параметра. При ошибке резервирования будет сгенерирована ошибка. Пример резервирования номера для конкретного дела:

const item = Context.data.d1!
const settings = await Application.getSettings();
const nomenclatures = [];
for (const nomenclatureId of settings.registrationSettings.nomenclatureIds) {
    const nomenclature = await item.docflow().getNomenclature(nomenclatureId);
    if (nomenclature !== undefined) {
        nomenclatures.push(nomenclature);
    }
}
const nomenclatureName = 'Название нужного дела';
const nomenclatureForReservation = nomenclatures.find(nom => nom.name === nomenclatureName);
if (nomenclatureForReservation !== undefined) {
    const reservedNumber = await item.docflow().reserve(nomenclatureForReservation.__id);
}