В мобильном приложении при открытии раздела "Активности" ошибка: "Uncaught TypeError:Cannot read property "modelName""
Симптомы
Настраиваю мобильное приложение, все объекты работают,кроме Активностей, при попытке зайти в Активность выходит сообщение:Uncaught TypeError:Cannot read property “modelName”
of undefined. Пробовала все колонки удалить, заново добавить, думала проблема в колонке Тип, не помогло ее удаление (после изменения настроек, заново раздавала права пользователям, чистила кэш и заново проводила синхронизацию с базой).
Решение
В карточке активности была убрана часть полей, а главное – убрана деталь «Участники активности». Почему «главное». На эту деталь есть завязки при работе самого раздела. В частности, по умолчанию, когда при синхронизации забираются активности из bpm’online, то забираются только те активности, в детали «Участники активности» которых есть текущий пользователь.
Как раз из-за того, что была удалена группа колонок «Связи» и деталь «Участники», возникала ошибка, поскольку мы на них завязались.
Убрав эту деталь, возможно, не будут «правильно» забираться активности.
Обходное решение для случая, когда пользователь удалил какой-то объект, используемый в родительских пакетах
Создать кастомную схему (Исходный код) (например, "MobileUtilitiesCustom")
Ext.define("Terrasoft.sdk.RecordPageMetadataApplier.Override", { override: "Terrasoft.sdk.RecordPageMetadataApplier", addEmbeddedDetail: function(modelName, operation) { this.embeddedDetails[operation.name] = operation.values; var values = operation.values; var filter = values.filter; var detailName = operation.name; Terrasoft.sdk.RecordPage.addEmbeddedDetail(modelName, { name: detailName, title: values.caption, position: values.position, modelName: values.entitySchemaName, primaryKey: filter.masterColumn, foreignKey: filter.detailColumn, hidden: values.hidden }); }, applyMetadata: function() { this.callParent(arguments); for (var itemName in this.removedMetadataItems) { if (!Terrasoft.util.isGuid(itemName) && Terrasoft.util.String.contains(itemName, "EmbeddedDetail")) { this.addEmbeddedDetail(this.modelName, { name: itemName, values: { entitySchemaName: itemName.substring(0, itemName.indexOf("Detail")), filter: { masterColumn: "Id", detailColumn: "Id" }, hidden: true } }); } } } }); Terrasoft.sdk.RecordPage.configureColumn = function(model, columnSetName, columnName, columnConfig) { var modelConfig = Terrasoft.ApplicationConfig.getModelConfig(model); var columnSetConfig = modelConfig.columnSets.get(columnSetName); if (!columnSetConfig) { return; } var columnSetColumns = Terrasoft.sdk.RecordPage.getColumns(model, columnSetName); if (!columnSetColumns) { return; } var columnSetColumn = columnSetColumns.get(columnName); var columnOriginalConfig; if (columnSetColumn) { columnOriginalConfig = columnSetColumn.columnOriginalConfig; } else { columnOriginalConfig = {}; columnConfig.hidden = true; var modelInstance = Ext.ClassManager.get(columnSetConfig.modelName || model); var realModelColumnConfig = modelInstance.ColumnConfigs.get(columnName); columnConfig.columnType = realModelColumnConfig.columnType; columnConfig.name = columnName; } Ext.merge(columnOriginalConfig, columnConfig); var contextModel = columnSetConfig.modelName || model; if (columnConfig.hidden) { var columns = this.getColumnSetColumns(model, columnSetName); columns.remove(columnName); } else { var resolvedColumnConfig = this.resolveColumnConfig(contextModel, columnOriginalConfig, !!columnSetConfig.modelName); columnSetConfig.columns.configure(columnName, resolvedColumnConfig); } }; Terrasoft.sdk.RecordPage.addColumn = function(model, columnConfig, columnSetName) { var modelConfig = Terrasoft.ApplicationConfig.getModelConfig(model); if (!columnSetName) { columnSetName = modelConfig.primaryColumnSetName; } var columnSetConfig = modelConfig.columnSets.get(columnSetName); if (!columnSetConfig) { return; } var contextModel = columnSetConfig.modelName || model; var isEmbeddedDetail = !!columnSetConfig.modelName; if (!columnConfig.hidden) { columnSetConfig.columns.add(this.resolveColumnConfig(contextModel, columnConfig, isEmbeddedDetail)); } this.addColumnToQueryConfig(model, columnConfig.name, columnSetName, isEmbeddedDetail); if (columnConfig.displayColumn) { this.addColumnToQueryConfig(model, columnConfig.displayColumn, columnSetName, isEmbeddedDetail); } };
В манифесте мобильного приложения (например, "UsrMobileApplicationManifestCustomMobile") указать кастомную схему
{ "CustomSchemas": [ "MobileUtilitiesCustom" ] }