Мобильное приложение. Ошибка при синхронизации: Поле Организация является обязательным для заполнения (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".