Добрый день.
Создала деталь с выбором из справочника [ConfigItemModel] (создавала на основе примера: создание детали...)
Для детали был создан объект [UsrModelCIInSupplies].
Возникли ошибки при вызове окна справочника
1 ошибка
При этом окно справочника открывается, закрывается, дает фильтровать и дает возможность множественного выбора
2 ошибка. Вы выборе данных, они не вставляются в объект [UsrModelCIInSupplies].
Сам код детали
function(enums) {
return {
entitySchemaName: "UsrModelCIInSupplies",
attributes: {},
messages: {},
methods: {
//колонки выбираемые запросом
getGridDataColumns: function() {
return {
"Id": {path: "Id"},
"UsrConfigItemModel": {path: "UsrConfigItemModel"},
"UsrConfigItemModel.Name": {path: "UsrConfigItemModel.Name"}
};
},
//конфигурирует и отображает модальное окно справочника
openUsrConfigItemModelLookup: function() {
//конфигурирует объект
var config = {
//название схемы объекта, записи которого будут отображены в справочнике
entitySchemaName: "ConfigItemModel",
//множественный выбор
multiSelect: true,
//колонки, которые будут отображены в справочнике
columns: ["Name"]
};
var UsrConsumablesId = this.get("MasterRecordId");
if (this.Ext.isEmpty(UsrConsumablesId)) {
return;
}
//экземпляр класса [EntitySchemaQuery]
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
//установка корневой схемы
rootShemaName: this.entitySchemaName
});
//добовление колонки [Id]
esq.addColumn("Id");
//добавление колонки [id] из схемы [UsrConfigItemModel]
esq.addColumn("UsrConfigItemModel.Id", "UsrConfigItemModelId");
//Создание и добаление фильтров в коллекцию запроса
esq.filters.add("filterUsrConsumables",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrConsumables", UsrConsumablesId));
// Получение всей коллекции записей и отображение ее в модальном окне справочника.
esq.getEntityCollection(function(result) {
var existsUsrConfigItemModelCollection = [];
if (result.success) {
result.collection.each(function(item) {
existsUsrConfigItemModelCollection.push(item.get("UsrConfigItemModelId"));
});
}
// Добавление фильтра в конфигурационный объект.
if (existsUsrConfigItemModelCollection.length > 0) {
var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
existsUsrConfigItemModelCollection);
existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
existsFilter.Name = "existsFilter";
config.filters = existsFilter;
}
// Вызов модального окна справочника
this.openLookup(config, this.addCallBack, this);
}, this);
},
//обработчик события сохранения страницы редактирвоания
onCardSaved: function() {
this.openUsrConfigItemModelLookup();
},
//открывает справочник МКЕ в случае если странца была редактирвоания РМ была ранее сохранена
addRecord: function() {
var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
var isNewRecord = (masterCardState.state === enums.CardStateV2.ADD ||
masterCardState.state === enums.CardStateV2.COPY);
if (isNewRecord === true) {
var args = {
isSilent: true,
messageTags: [this.sandbox.id]
};
this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
return;
}
this.openUsrConfigItemModelLookup();
},
//добавление выбранных продуктов
addCallBack: function(args) {
//экземпляр класса пакетного запроса BatchQuery
var bq = this.Ext.create("Terrasoft.BatchQuery");
var UsrConsumablesId = this.get("MasterRecordId");
//коллекция выбранных в справочнике данных
this.selectedRows = args.selectedRows.getItems();
//колекция, передаваемая в запрос
this.selectedItems = [];
// Копирование необходимых данных.
this.selectedRows.forEach(function(item) {
item.UsrConsumablesId = UsrConsumablesId;
item.UsrConfigItemModelId = item.values;
bq.add(this.getUsrConfigItemModelInsertQuery(item));
this.selectedItems.push(item.values);
}, this);
//выполнение пакетного запроса, если он не пустой
if (bq.queries.length) {
this.showBodyMask.call(this);
bq.execute(this.onUsrConfigItemModelInsert, this);
}
},
//возвращает запрос на добавление текущего объекта
getUsrConfigItemModelInsertQuery: function(item) {
var insert = Ext.create("Terrasoft.InsertQuery", {
rootShemaName: this.entitySchemaName
});
insert.setParameterValue("UsrConsumables", item.UsrConsumablesId,
this.Terrasoft.DataValueType.GUID);
insert.setParameterValue("ConfigItemModel", item.UsrConfigItemModelId,
this.Terrasoft.DataValueType.GUID);
return insert;
},
//метод, вызываемый при добавлении записей в реестр детали
onUsrConfigItemModelInsert: function(response) {
this.hideBodyMask.call(this);
this.beforeLoadGridData();
var filterCollection = [];
response.queryResults.forEach(function(item) {
filterCollection.push(item.id);
});
var esq = Ext.cteate("Terrasoft.EntitySchemaQuery", {
rootShemaName: this.entitySchemaName
});
this.initQueryColumns(esq);
esq.filters.add("recordId",
Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
esq.getEntityCollection(function(response) {
this.afterLoadGridData();
if (response.success) {
var responseCollection = response.collection;
this.prepareResponseCollection(responseCollection);
this.getGridData().loadAll(responseCollection);
}
}, this);
},
//метод, вызываемый при удалении выбранных записей детали
deleteRecords: function() {
var selectedRows = this.getSelectedItems();
if (selectedRows.length > 0) {
this.set("SelectedRows", selectedRows);
this.callParent(arguments);
}
},
//скрыть пункт меню [Копировать]
getCopyRecordMenuItem: Terrasoft.emptyFn,
//скрыть пункт меню [Изменить]
getEditRecordMenuItem: Terrasoft.emptyFn,
//возвращает имя колонки по умолчанию для фильтра
getFilterDefaultColumnName: function() {
return "UsrConfigItemModel";
}
},
// Массив модификаций.
diff: /**SCHEMA_DIFF*/[
{
// Тип операции — слияние.
"operation": "merge",
// Название элемента схемы, над которым производится действие.
"name": "DataGrid",
// Объект, свойства которого будут объединены со свойствами элемента схемы.
"values": {
"rowDataItemMarkerColumnName": "UsrConfigItemModel"
}
},
{
// Тип операции — слияние.
"operation": "merge",
// Название элемента схемы, над которым производится действие.
"name": "AddRecordButton",
// Объект, свойства которого будут объединены со свойствами элемента схемы.
"values": {
"visible": {"bindTo": "getToolsVisible"}
}
}
]/**SCHEMA_DIFF*/
};
});
Задача стоит, сделать деталь такой же как, например: деталь [ConfItemUserDetail] в КЕ.
Версия продукта: service enterprise 7.8.2
Нравится
Добрый вечер, Алеся.
Исходя из ошибки - у Вас неправильно строится запрос к базе данных в методе openUsrConfigItemModelLookup. На первом скриншоте явно видно, что запрос не был построен корректно. Проверьте правильность имен колонок, а также правильность связей. SDK.
Ошибка на втором скриншоте результат первой ошибки. Метод addCallBack получил не правильный параметр args и затем у несуществующего свойства selectedRows попытался вызвать метод forEach.
Добрый вечер.
Сегодня просидела весь день, пытаясь все таки разобраться, но к сожалению самостоятельно решить не могу.
Единственное я нашла, в каком месте падает в ошибку
// Получение всей коллекции записей и отображение ее в модальном окне справочника. esq.getEntityCollection(function(result) { var existsUsrConfigItemModelsCollection = []; if (result.success) { result.collection.each(function(item) { existsUsrConfigItemModelsCollection.push(item.get("UsrConfigItemModelId")); }); }