При синхронизации мобильного приложения ошибка "Модели, указанные в манифесте мобильного приложения, имеют циклические связи"
Симптомы
Суть инцидента: пытаемся войти в мобильное приложение – происходит ошибка синхронизации.
Часть полученного баг-репорта:
ENG
Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"method":"GET","disableCaching":false},"performanceCounter":{"startDate":"2015-07-24T08:26:56.702Z"}},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"method":"GET","disableCaching":false},"async":true},"requestId":8,"status":500,"statusText":"Internal Server Error","responseText":"Terrasoft.Mobile.MobileModelLoopException: Models specified in the mobile application manifest have circular relationships\r\n at Terrasoft.Mobile.MobileModelTopologicalSorter.Sort()\r\n at Terrasoft.Mobile.MobileModelGraph.Build()\r\n at Terrasoft.Mobile.MobileManifest.BuildModelGraph()\r\n at Terrasoft.Mobile.MobileUtilities.GetAppMetadata(HttpContextBase context)\r\n at Terrasoft.WebApp.Mobile.Services.MobileCodeService.ProcessRequest(HttpContext context)\r\nЦикл: [Account,KnowledgeBase]","responseXML":null,"responseBytes":null}
Calls sequence:
RUS
Type: Terrasoft.SyncException
Message: An error occurred while synchronizing
Type: Terrasoft.ServerException
Message: Server request returned error
Additional information:
{"request":{"id":4,"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie","X-Requested-With":"XMLHttpRequest"},"options":{"url":"https://xxx.xxxxxx.xxx/0/Mobile/Services/MobileCodeService.ashx?functionName=getAppMetadata&workplaceCode=","scope":{"initialConfig":{"url":"https://xxx.xxxxxx.xxx/0/Mobile/Services/MobileCodeService.ashx?functionName=getAppMetadata&workplaceCode=","scope":{},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"method":"GET","disableCaching":false},"performanceCounter":{"startDate":"2015-07-23T09:41:43.803Z"}},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"method":"GET","disableCaching":false},"async":true},"requestId":4,"status":500,"statusText":"InternalServer Error","responseText":"Terrasoft.Mobile.MobileModelLoopException: Модели, указанные в манифесте мобильного приложения, имеют циклические связи\r\n at Terrasoft.Mobile.MobileModelTopologicalSorter.Sort()\r\n at Terrasoft.Mobile.MobileModelGraph.Build()\r\n at Terrasoft.Mobile.MobileManifest.BuildModelGraph()\r\n at Terrasoft.Mobile.MobileUtilities.GetAppMetadata(HttpContextBase context)\r\n at Terrasoft.WebApp.Mobile.Services.MobileCodeService.ProcessRequest(HttpContext context)\r\nЦикл: [Invoice,Contract]","responseXML":null,"responseBytes":null}
Решение
Для решения необходимо создать (Добавить - Исходный код) кастомный манифест (например, MobileApplicationManifestCustom) и указать язык "Javascript"
Для версии 7.6 и выше, в случае если MobileApplicationManifest в Custom нет - нужно замещать родительскую схему манифеста. Для этого можно войти в мастер мобильного приложения, выбрать "Настройку разделов" для рабочего места и нажать кнопку "Сохранить".
Если кастомный манифест уже присутствует, то открываем имеющий и добавляем следующий код:
{ "Loops": [ ["Account", "KnowledgeBase"], ] }
, где
["Account", "KnowledgeBase"], - связи, которые необходимо указать. Значение прописывается из значения.
Например (из баг-репорта):
Цикл: [Invoice,Contract]","responseXML":null,"responseBytes":null}
То, прописывать надо:
{ "Loops": [ ["Invoice”,”Contract "], ] }
Если версия 7.5 и ниже, то также необходимо манифест (например, MobileApplicationManifestCustom ) прописать в системной настройке MobileApplicationManifest:
И проверить синхронизацию. Если с ошибкой, то скорее всего еще необходимо указать связи в кастомном манифесте. В результате в манифест добавляет до тех пор пока синхронизация не произойдет успешно.