Симптомы
Настраиваю мобильное приложение, все объекты работают,кроме Активностей, при попытке зайти в Активность выходит сообщение: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"
]
}