Справочник обработчиков Interactor

Аннотация @Bind* связывает метод интерфейса с одним InteractionHandler. Доступность аннотации зависит от корневого интерфейса; актуальная группировка приведена на странице «Поддерживаемые сущности».

Общие соглашения

  • Чтение — метод без аргументов с не-void результатом.

  • Одиночный результат обычно возвращает null, если значения нет. Требование обязательного значения задаётся @NotNull.

  • Для коллекционных данных используются List<T> и Set<T>.

  • Изменение коллекции различается по началу имени: set заменяет, add/plus добавляет, remove/delete удаляет, clear очищает.

  • Если специальный префикс не требуется, обработчик трактует изменяющий метод как добавление или замену согласно своей документации.

  • Изменяющие методы кешируемого интерфейса следует помечать @DropCache.

  • Неподдерживаемая сигнатура выявляется во время вызова и приводит к исключению.

Типы ниже записаны в Java-форме для компактности; эквивалентные Kotlin-типы поддерживаются через reflection.

Базовые обработчики

@BindId

Возвращает ID, переданный в Interactor.create.

int getId();

@BindConfig

Читает конфигурацию сущности. Параметры аннотации: key = "", defaultValue = "", useGlobalConfig = false. Ключ можно передать аргументом с @BindConfig.Key, а значение по умолчанию — с @BindConfig.Default.

T getValue();
T getValue(@BindConfig.Key String key);
T getValue(@BindConfig.Default T defaultValue);
T getValue(@BindConfig.Key String key, @BindConfig.Default T defaultValue);
Configurable getConfig();

Фактически поддерживаются String, boolean/Boolean, int/Integer, BigDecimal, List<String>, List<Integer>, Set<String>, Set<Integer> и реализации Configurable. Строка проходит через TextTemplateProcessor. useGlobalConfig = true читает глобальный Setup, иначе — конфигурацию типа процесса или пользователя.

Ограничение для GroupInteractor описано на странице сущностей.

Параметры сущностей

Во всех аннотациях этого раздела value — ID параметра.

@BindTextParam

Читает и изменяет параметры text и blob.

String getValue();
void setValue(String value);
void clearValue();

Значение и аргумент могут быть null.

@BindTextParamAsNumber

Работает с числом, сохранённым в text/blob.

int getValue();             Integer getValue();
long getValue();            Long getValue();
BigDecimal getValue();
void setValue(int value);   void setValue(Integer value);
void setValue(long value);  void setValue(Long value);
void setValue(BigDecimal value);
void clearValue();

Для отсутствующего или некорректного текста примитивный результат равен 0, nullable-объект — null.

@BindTextParamAsCollection

Хранит коллекцию в text/blob. Параметр delimiters по умолчанию равен [","].

List<String> getValues();   Set<String> getValues();
List<Integer> getValues();  Set<Integer> getValues();
void setValues(Collection<String> values);
void setValues(Collection<Integer> values);
void clearValues();

Пустое значение читается как пустая коллекция.

@BindTextParamAsJson

Сериализует произвольный тип в JSON текстового параметра с помощью Jackson.

T getValue();
T getValue(@BindTextParamAsJson.Default T defaultValue);
void setValue(T value);
void clearValue();

Без значения и без аргумента по умолчанию возвращается null.

@BindBooleanParam

Работает с параметром boolean.

boolean getValue();
void setValue(boolean value);
void clearValue();

clear эквивалентен записи false.

@BindNumberParam

Работает с параметром number.

BigDecimal getValue();  Integer getValue();  Long getValue();
Double getValue();      Float getValue();    Short getValue();
Byte getValue();

void setValue(BigDecimal value);  void setValue(Integer value);
void setValue(Long value);        void setValue(Double value);
void setValue(Float value);       void setValue(Short value);
void setValue(Byte value);
void clearValue();

Результаты и аргументы объектных типов могут быть null.

@BindDateParam

Работает с параметром date. Параметр format по умолчанию равен yyyy-MM-dd и используется только для String.

LocalDate getValue();  Date getValue();  String getValue();
void setValue(LocalDate value);
void setValue(Date value);
void setValue(String value);
void clearValue();

@BindDateTimeParam

Работает с параметром datetime. Параметр format по умолчанию равен yyyy-MM-dd HH:mm:ss и используется только для String.

LocalDateTime getValue();  Date getValue();  String getValue();
void setValue(LocalDateTime value);
void setValue(Date value);
void setValue(String value);
void clearValue();

@BindListParam

Работает с параметром list.

Integer getValue();  IdTitle getValue();  IdTitleComment getValue();
List<Integer> getValues();          Set<Integer> getValues();
List<IdTitle> getValues();          Set<IdTitle> getValues();
List<IdTitleComment> getValues();   Set<IdTitleComment> getValues();

void setValue(int value);           void setValue(IdTitle value);
void setValue(IdTitleComment value);
void setValues(Collection<T> values);
void addValue(T value);             void addValues(Collection<T> values);
void removeValue(T value);          void removeValues(Collection<T> values);
void clearValues();

Здесь T — Integer, IdTitle или IdTitleComment; операция определяется префиксом имени.

@BindListCountParam

Работает с параметром listCount.

ParameterListCountValue getValue();
List<ParameterListCountValue> getValues();
Set<ParameterListCountValue> getValues();
void setValue(ParameterListCountValue value);
void setValues(Collection<ParameterListCountValue> values);
void addValue(ParameterListCountValue value);
void addValues(Collection<ParameterListCountValue> values);
void removeValue(ParameterListCountValue value);
void removeValues(Collection<ParameterListCountValue> values);
void clearValues();

@BindTreeParam

Работает с параметром tree.

String getValue();  TreeTitle getValue();
List<String> getValues();     Set<String> getValues();
List<TreeTitle> getValues();  Set<TreeTitle> getValues();
void setValue(T value);       void setValues(Collection<T> values);
void addValue(T value);       void addValues(Collection<T> values);
void removeValue(T value);    void removeValues(Collection<T> values);
void clearValues();

Здесь T — строковый ID дерева или TreeTitle.

@BindAddressParam

Работает с параметром address. Параметр loadDetails = false управляет загрузкой справочных данных.

ParameterAddressValue getValue();
HouseInteractor getValue();
StreetInteractor getValue();  // loadDetails = true
CityInteractor getValue();    // loadDetails = true
List<T> getValues();          Set<T> getValues();
void setValue(ParameterAddressValue value);
void setValues(Collection<ParameterAddressValue> values);
void addValue(ParameterAddressValue value);
void addValues(Collection<ParameterAddressValue> values);
void removeValue(ParameterAddressValue value);
void removeValues(Collection<ParameterAddressValue> values);
void clearValues();

Коллекционный T — один из четырёх типов одиночного результата. Одиночные значения и аргументы могут быть null.

@BindPhoneParam

Работает с параметром phone. format = "10" задаёт CRM-формат, unformatted = true возвращает номер без форматирования.

String getValue();       List<String> getValues();
Set<String> getValues();
void setValue(String value);          void setValues(Collection<String> values);
void addValue(String value);          void addValues(Collection<String> values);
void removeValue(String value);       void removeValues(Collection<String> values);
void clearValue();

@BindEmailParam

Работает с параметром email и умеет возвращать как адрес, так и модель с комментарием.

String getValue();                   ParameterEmailValue getValue();
List<String> getValues();            Set<String> getValues();
List<ParameterEmailValue> getValues();
Set<ParameterEmailValue> getValues();
void setValue(T value);              void setValues(Collection<T> values);
void addValue(T value);              void addValues(Collection<T> values);
void removeValue(T value);           void removeValues(Collection<T> values);
void clearValue();

T — String или ParameterEmailValue.

@BindFileParam

Работает с параметром file.

FileData getValue();
List<FileData> getValues();  Set<FileData> getValues();
void addValue(FileData value);
void removeValue(FileData value);

Удаление определяется префиксом remove или delete. Операции полной замены и очистки обработчик не предоставляет.

@BindObjectList

Работает со строками параметра objectList. Параметры: value = 0 — ID параметра, allowNotFinishedElements = false — включать ли несохранённые строки с отрицательным ID.

List<RowInteractor> getRows();
RowInteractor newRow();
void clearRows();

RowInteractor должен наследовать ObjectListInteractor. Метод с префиксом new добавляет строку и возвращает proxy для неё; помечайте его @DropCache, иначе кеш может повторно вернуть тот же proxy. clear удаляет все строки параметра.

Свойства процесса

@BindCreateTime

Возвращает время создания процесса как LocalDateTime, Date или String. Параметр format для строки по умолчанию равен yyyy-MM-dd HH:mm:ss.

@BindCloseTime

Возвращает nullable-время закрытия как LocalDateTime, Date или String. format имеет то же значение по умолчанию.

@BindCreateUser

Возвращает создателя процесса.

User getCreateUser();
int getCreateUserId();

Изменение создателя не поддерживается.

@BindProcessType

Возвращает тип процесса.

int getTypeId();
IdTitle getType();
ProcessType getType();

@BindProcessDescription

Читает или изменяет описание. Параметр pattern = "" задаёт шаблон для добавляемой строки.

String getDescription();
void setDescription(String value);
void addDescription(String value);  // также префикс plus

Без add/plus значение полностью заменяется.

Статусы процесса

@BindProcessStatus

int getStatus();
StatusChange getStatus();
IdTitle getStatus();
boolean isClosedStatus();
void setStatus(int statusId);
void setStatus(int statusId, String comment);

Проверка закрывающего статуса определяется префиксом isClosed.

@BindProcessStatusCheck

Проверяет текущий статус. statuses задаёт статусы в аннотации, mode = ANY проверяет вхождение, mode = NONE — отсутствие.

boolean check();
boolean check(int statusId);
boolean check(Set<Integer> statusIds);

Аргумент метода, если он есть, заменяет список из аннотации.

@BindProcessStatusSwitch

Параметр status — целевой статус.

void switchStatus();
void switchStatus(String comment);
boolean canSwitchStatus();

Boolean-метод обязан начинаться с can и проверяет матрицу доступных переходов. Изменяющий метод вызывает ProcessService.updateStatus.

Группы и исполнители процесса

@BindProcessGroups

Параметр roleId = 0 фильтрует группы по роли.

ProcessGroup getGroup();  int getGroup();
List<ProcessGroup> getGroups();  Set<ProcessGroup> getGroups();
List<Integer> getGroups();       Set<Integer> getGroups();
void setGroups(Collection<ProcessGroup> values);
void addGroup(ProcessGroup value);     void addGroups(Collection<ProcessGroup> values);
void removeGroup(ProcessGroup value);  void removeGroups(Collection<ProcessGroup> values);

Для одиночного результата можно использовать @Size.

@BindProcessExecutors

Параметры: roleId = 0; firstSuitableGroup = false разрешает при передаче User автоматически выбрать первую подходящую группу, иначе неоднозначность групп считается ошибкой.

ProcessExecutor getExecutor();  User getExecutor();
UserInteractor getExecutor();   int getExecutor();
List<T> getExecutors();         Set<T> getExecutors();
void setExecutors(Collection<T> values);
void addExecutor(T value);      void addExecutors(Collection<T> values);
void removeExecutor(T value);   void removeExecutors(Collection<T> values);

Для чтения T — ProcessExecutor, User, UserInteractor или Integer; для изменения — первые три типа.

Привязки процесса

Одиночные getters всех обработчиков этого раздела допускают @Size для проверки количества до выбора первого значения.

@BindProcessLinkedObjects

Параметры typePattern = "." и titlePattern = "." фильтруют объекты.

CommonObjectLink getLink();
List<CommonObjectLink> getLinks();  Set<CommonObjectLink> getLinks();
void setLinks(Collection<CommonObjectLink> values);
void addLink(CommonObjectLink value);     void addLinks(Collection<CommonObjectLink> values);
void removeLink(CommonObjectLink value);  void removeLinks(Collection<CommonObjectLink> values);

@BindProcessLinkedCustomers

Customer getLink();            CustomerInteractor getLink();
List<T> getLinks();            Set<T> getLinks();
void setLinks(Collection<T> values);
void addLink(T value);         void addLinks(Collection<T> values);
void removeLink(T value);      void removeLinks(Collection<T> values);

T — Customer или CustomerInteractor.

@BindLinkedCommonContracts

Работает с едиными договорами; titlePattern = ".*" фильтрует номер.

CommonContract getLink();       CommonContractInteractor getLink();
List<T> getLinks();             Set<T> getLinks();
void setLinks(Collection<T> values);
void addLink(T value);          void addLink(int commonContractId);
void addLinks(Collection<T> values);
void removeLink(T value);       void removeLink(int commonContractId);

@BindProcessLinkedContracts

Работает с договорами биллинга. Параметры: billings = [], titlePattern = ".*", typeFilter = []. Пустой фильтр означает все значения; типы договора: SUPER, INDEPENDENT, SUB_INDEPENDENT, SUB_DEPENDENT.

Contract getLink();
List<Contract> getLinks();  Set<Contract> getLinks();
void setLinks(Collection<Contract> values);
void addLink(Contract value);     void addLinks(Collection<Contract> values);
void removeLink(Contract value);  void removeLinks(Collection<Contract> values);

@BindLinkedProcesses

Работает с процессными связями. Параметры:

  • mode = LINKED: искать процессы, привязанные к текущему; LINKING — процессы, к которым привязан текущий;

  • linkTypes: по умолчанию LINK, MADE, DEPEND;

  • processTypes = []: фильтр типов;

  • statuses = [] и statusMode = ANY|NONE: фильтр статусов при чтении.

Process getProcess();  Integer getProcess();  ProcessInteractor getProcess();
List<T> getProcesses();  Set<T> getProcesses();
void addProcess(Process value);            void addProcess(int id);
void addProcess(ProcessInteractor value);  void addProcesses(Collection<T> values);
void removeProcess(Process value);         void removeProcess(int id);
void removeProcess(ProcessInteractor value);

Для изменения в linkTypes должен остаться ровно один тип связи. Коллекционное удаление обработчиком не реализовано.

Конфигурация типа процесса

@BindProcessTypeConfig — устарел

Старый обработчик конфигурации типа процесса поддерживает key, defaultValue, вложенные @Key и @Default. Новые интерфейсы должны использовать @BindConfig, который также умеет читать глобальную конфигурацию.

TMC и Verdandi

@BindProcessTmcMoves

Получает движения для process ID из Verdandi и фильтрует их параметрами useTypes, accountingTypes и deviceCategory. По умолчанию включены рабочие типы назначения, режимы MOUNTING, DISMOUNTING, NOT_NEED_ACCOUNTING и категории MATERIAL, EQUIPMENT, SERVICES.

TmcMove getMove();
List<TmcMove> getMoves();
Set<TmcMove> getMoves();

Одиночный результат поддерживает @Size.

@BindTmcUserLeftovers

Использует переданный user ID. Для UserLeftover читает ИНН пользователя и запрашивает остатки Verdandi; isMainResources = true переключает запрос на основные ресурсы. Для MolLeftovers читает ID склада 1С из параметра пользователя.

List<UserLeftover> getUserLeftovers();
Set<UserLeftover> getUserLeftovers();
List<MolLeftovers> getMolLeftovers();
Set<MolLeftovers> getMolLeftovers();

При отсутствии ИНН или ID склада выбрасывается BGMessageException.