Публикация

Мобильное приложение. Ошибка при синхронизации: Поле Организация является обязательным для заполнения (Terrasoft.ODataRequiredColumnsEmptyValuesException) (UiV2/Offline)

Вопрос

Обязательность поля "Организация" проставлена на объекте контакта "На уровне приложения".

В мобильном приложении:

- Создаем новый контакт

- Заполняем поле "Организация" (Созданную раннее в веб-версии)

- Сохраняем

- Выполняем синхронизацию

- Выпадает ошибка 



Call Stack:

Contact(9d6652ba-5062-45d2-a7f2-1fb6c3ba1978) at Wed May 16 2018 11:13:07 GMT+0300 (MSK). Error text: Type: Terrasoft.ODataRequiredColumnsEmptyValuesException

Message: Поле Организация является обязательным для заполнения

AdditionalInfo: {"position":0,"error":{"code":"3","message":{"value":"Поле Организация является обязательным для заполнения"},"innererror":{"message":"Поле Организация является обязательным для заполнения","type":"Terrasoft.Core.Entities.RequiredColumnsEmptyValuesException","stacktrace":"  в Terrasoft.Core.Entities.Entity.ValidateRequiredColumns()\r\n  в Terrasoft.Core.Entities.Entity.InternalSave(Boolean validateRequired, Boolean setColumnDefValue)\r\n  в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue)\r\n  в Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n  в Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()","internalexception":null}}}



Если убрать обязательность  - все работает корректно.

Ответ

Обяснение на примере.

Между объектами Контакт и Контрагент используются циклические связи (например, в мобильном приложении может быть добавлен и контакт, и контрагент, и связь между ними). Поэтому при синхронизации записей для корректного сохранения запросы разбиваются: сначала выполняется создание записи контакта, потом создание записи контрагента, потом справочные поля связей между ними обновляются нужными значениями только что созданных данных. В связи с этим использовать обязательность на объекте не получится.

Как обходное решение можем предложить сделать обязательно на уровне карточки с помощью бизнес-правила.

Пример. Создаете:

Terrasoft.sdk.Model.addBusinessRule('Contact', {
    ruleType: Terrasoft.RuleTypes.Requirement,
    triggeredByColumns: ['Name']
});

Затем добавить в манифест необходимого модуля в секцию ModelExtensions.

Пример реализации можете посмотреть в схеме "MobileActivityModelConfig".

Нравится

Поделиться

0 комментариев
Показать все комментарии