Всем привет!
Проблема заключается в том что следуя инструкции "https://academy.terrasoft.ru/documents/technic-sdk/7-12/sozdanie-detali-s-vyborom-iz-spravochnika" появляется ошибка при попытки добавить элементы из справочника:
Кто знает как решить проблему?
Объект детали "UsrProductsAndITStuff" имеют 2 lookup:
Title: Productu Categorija и Product
Name: UsrProductcategory и UsrDarbopriemones
Lookup: Product category и Product
Код:
// Определение схемы и установка ее зависимостей от других модулей. define("UsrSchema24Detail", ["ConfigurationEnums"], function(configurationEnums) { return { // Название схемы объекта детали. entitySchemaName: "UsrProductsAndITstuff", // Методы схемы детали. methods: { //Возвращает колонки, которые выбираются запросом. getGridDataColumns: function() { return { "Id": {path: "Id"}, "Product": {path: "UsrDarbopriemones"}, "Product.Name": {path: "UsrDarbopriemones.Name"} }; }, //Конфигурирует и отображает модальное окно справочника. openDocumentLookup: function() { //Конфигурационный объект var config = { // Название схемы объекта, записи которого будут отображены в справочнике. entitySchemaName: "Product", // Возможность множественного выбора. multiSelect: true, // Колонки, которые будут использованы в справочнике, например, для сортировки. columns: ["Name", "Code", "Type", "Color"] }; var ProductCategoryId = this.get("MasterRecordId"); if (this.Ext.isEmpty(ProductCategoryId)) { return; } // Экземпляр класса [EntitySchemaQuery]. var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { // Установка корневой схемы. rootSchemaName: this.entitySchemaName }); // Добавление колонки [Id]. esq.addColumn("Id"); // Добавление колонки [Id] из схемы [darbo priemones]. esq.addColumn("Product.Id", "ProductId"); // Создание и добавление фильтров в коллекцию запроса. esq.filters.add("filterProductCategory", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "UsrProductcategory", ProductCategoryId)); // Получение всей коллекции записей и отображение ее в модальном окне справочника. esq.getEntityCollection(function(result) { var existsDocumentsCollection = []; if (result.success) { result.collection.each(function(item) { existsDocumentsCollection.push(item.get("ProductId")); }); } // Добавление фильтра в конфигурационный объект. if (existsDocumentsCollection.length > 0) { var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id", existsDocumentsCollection); existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL; existsFilter.Name = "existsFilter"; config.filters = existsFilter; } // Вызов модального окна справочника this.openLookup(config, this.addCallBack, this); }, this); }, // Обработчик события сохранения страницы редактирования. onCardSaved: function() { this.openDocumentLookup(); }, //Открывает справочник документов в случае если страница редактирования заказа была ранее сохранена. addRecord: function() { var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]); var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD || masterCardState.state === configurationEnums.CardStateV2.COPY); if (isNewRecord === true) { var args = { isSilent: true, messageTags: [this.sandbox.id] }; this.sandbox.publish("SaveRecord", args, [this.sandbox.id]); return; } this.openDocumentLookup(); }, // Добавление выбранных продуктов. addCallBack: function(args) { // Экземпляр класса пакетного запроса BatchQuery. var bq = this.Ext.create("Terrasoft.BatchQuery"); var ProductCategoryId = this.get("MasterRecordId"); // Коллекция выбранных в справочнике документов. this.selectedRows = args.selectedRows.getItems(); // Коллекция, передаваемая в запрос. this.selectedItems = []; // Копирование необходимых данных. this.selectedRows.forEach(function(item) { item.ProductCategoryId = ProductCategoryId; item.ProductId = item.value; bq.add(this.getDocumentInsertQuery(item)); this.selectedItems.push(item.value); }, this); // Выполнение пакетного запроса, если он не пустой. if (bq.queries.length) { this.showBodyMask.call(this); bq.execute(this.onDocumentInsert, this); } }, //Возвращает запрос на добавление текущего объекта. getDocumentInsertQuery: function(item) { var insert = Ext.create("Terrasoft.InsertQuery", { rootSchemaName: this.entitySchemaName }); insert.setParameterValue("UsrProductcategory", item.ProductCategoryId, this.Terrasoft.DataValueType.GUID); insert.setParameterValue("UsrDarbopriemones", item.ProductId, this.Terrasoft.DataValueType.GUID); return insert; }, //Метод, вызываемый при добавлении записей в реестр детали. onDocumentInsert: function(response) { this.hideBodyMask.call(this); this.beforeLoadGridData(); var filterCollection = []; response.queryResults.forEach(function(item) { filterCollection.push(item.id); }); var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: 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 "UsrDarbopriemones"; } }, // Массив модификаций. diff: /**SCHEMA_DIFF*/[ { // Тип операции — слияние. "operation": "merge", // Название элемента схемы, над которым производится действие. "name": "DataGrid", // Объект, свойства которого будут объединены со свойствами элемента схемы. "values": { "rowDataItemMarkerColumnName": "UsrDarbopriemones" } }, { // Тип операции — слияние. "operation": "merge", // Название элемента схемы, над которым производится действие. "name": "AddRecordButton", // Объект, свойства которого будут объединены со свойствами элемента схемы. "values": { "visible": {"bindTo": "getToolsVisible"} } } ]/**SCHEMA_DIFF*/ }; } );
Нравится
Eduardas,
Это можно проверить только, если у Вас есть доступ к серверу, где развернута база данных.
Если Вы используете SQL Server, то посмотреть запросы, которые идут в базу данных можно с помощью приложения SQL Server Profiler.
Рекомендую Вам все-таки воспользоваться советом Данилы и отладиться на клиенте.
Скорее всего валится onDocumentInsert. Надо встать дебаггером, посмотреть что в response приходит (думаю ошибка от вставки в бд)
Если SQLException, то нужно смотреть в профайлере, какие запросы идут в базу. Может, вставка в записи колонки с неправильным именем или значением.
Eduardas,
Это можно проверить только, если у Вас есть доступ к серверу, где развернута база данных.
Если Вы используете SQL Server, то посмотреть запросы, которые идут в базу данных можно с помощью приложения SQL Server Profiler.
Рекомендую Вам все-таки воспользоваться советом Данилы и отладиться на клиенте.
Профайлером. См. статью. Но это только для случая, если система развёрнута on site.
Варфоломеев Данила пишет:
Скорее всего валится onDocumentInsert. Надо встать дебаггером, посмотреть что в response приходит (думаю ошибка от вставки в бд)
Как мне это проверить?
Зверев Александр пишет:
Профайлером. См. статью. Но это только для случая, если система развёрнута on site.
Спасибо, пойду знакомится со статьей
Eduardas пишет:
Варфоломеев Данила пишет:Скорее всего валится onDocumentInsert. Надо встать дебаггером, посмотреть что в response приходит (думаю ошибка от вставки в бд)Как мне это проверить?
Посмотрите статью на Академии - в ней подробно описано, каким образом выполнять отладку.
Добрый день
Вопрос первый что не спросили до меня Коллеги
в таблице UsrProductsAndITstuff
есть или нет поля Product, Product.Name
мне кажеться правильно должно быть вот так написано
getGridDataColumns: function() {
return {
"Id": {path: "Id"},
"UsrDarbopriemones": {path: "UsrDarbopriemones"},
"UsrDarbopriemones.Name": {path: "UsrDarbopriemones.Name"}
};
},
так же и в методе openDocumentLookup описывается что для таблицы UsrProductsAndITstuff есть поля Product.Id
если таблица не наследовалась от базовой то откуда там такие поля, почему без префикса? вот здесь есть доля сомнения.
потом в методе addCallBack идет присвоение значения колонкам ProductCategoryId, ProductId здесь тоже или явная ошибка или я не нашел
определения для ГРИДА данных колонок.
Чтобы все корректно работало, все колонги ГРИДА должны сначала правильно проинициализированы а уже только потом мы их обрабатываем