Здравствуйте!
Пытаюсь создать преднастроенную страницу, содержащую справочники. Поля на странице относятся к разным объектам. Делал аналогично примеру из конфигурации (PreconfiguredPageV2)
При открытии справочник не получает верный конфиг.
При использовании примера из конфигурации ситуация в точности повторяется.
Подскажите пожалуйста, как побороть данную проблему?
Нравится
Уже разобрался.
Если кому-то понадобится, то необходимо переопределить 2 метода: LoadVocabulary и getLookupPageConfig
loadVocabulary: function(args, tag) { var column = this.getColumnByName(tag); args.schemaName = column.referenceSchemaName; this.callParent(arguments); }, /** * Возвращает настройки страницы выбора из справочника. * @private * @param {Object} args Параметры. * @param {String} columnName Название колонки. * @return {Object} Настройки страницы выбора из справочника. */ getLookupPageConfig: function(args, columnName) { var config = { entitySchemaName: args.schemaName, multiSelect: false, columnName: columnName, columnValue: this.get(columnName), searchValue: args.searchValue, filters: this.getLookupQueryFilters(columnName) }; this.Ext.apply(config, this.getLookupListConfig(columnName)); return config; }
Возник еще один вопрос. Как сделать,чтобы в преднастроенной странице работала вся логика справочных полей?
Не работает фильтрация "на лету", когда пишешь в поле справочника и подтягиваются отфильтрованные данные (именно на странице, а не в окне лукапа)
Прикрепите пожалуйста скриншот внешнего вида того, что вы пытаетесь сделать, и код схемы. Не до конца понятно какую проблему вы пытаетесь решить. Возможно есть типовые решения, без необходимости прибегать к написанию кода.
Думаю, что по картинке станет понятна задача.
В БП используется преднастроенная страница. Кажется, что в ней не выполнилась подписка на базовые события для полей типа LOOKUP, либо я не подключил какой-то базовый модуль. Не могу понять, что именно. В обычных страницах при нажатии стрелок или начав писать текст в поле справочника мы получаем подсказку по наполнению, а в моем случае такой функционал не работает.
Полный код во вложении
preconfuguredpage.txt
Посмотрите в сторону схемы автогенерируемой страницы (AutoGeneratedPageV2) и ее реализаций loadVocabulary и остальных.
В автогенерируемых страницах фильтрация происходит.
И еще одну старую тему попробую оживить...
Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?
"Александр Кудряшов" написал:Александр, а то, что на SDK описано не подходит? Если вы хотите не в шапке страницы реализовать, то возможно для примера подходит страница "Отчет о проделанной работе" (раздел "Активности").И еще одну старую тему попробую оживить...
Может приходилось кому делать преднастроенную страницу с набором кнопок быстрого выбора даты, как в фильтре раздела активности (см аттач)?
Прикрепленный файлРазмер
filter.jpg10.46 кб
"Мотков Илья" написал:то, что на SDK описано
Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk
А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)
"Александр Кудряшов" написал:
Мотков Илья пишет:
то, что на SDK описано
Илья, за ссылку спасибо! Посмотрел, но это не мой вариант, так как у меня не раздел (и соответственно нет базовой логики, способной подцепить предлагаемый модуль). А в преднастроенной странице (наследуемой от страницы редактирования) такой блок просто так не добавится... надо писать именно контролы и именно ручками, а еще обработчики событий на них... либо как то уж очень исхитриться и прицепить готовый модуль, но методика должна быть более изощренная, чем в sdk
А страница фильтра отчета о проделанной работе не подходит, так как в ней добавить два блока фильтров по периоду (ну вот нужно мне по двум датам разным иметь возможность фильтровать...) нельзя без переписывания ReportFilterModule, поэтому решил, что легче сделать свою страницу с параметрами. Ну и для самообразования полезно :)
Но фильтры же правильней использовать для раздела или детали :wink:
Если уже для самообразования. то можно попробовать следующий алгоритм:
1. Модуль фильтров можно подключить как обычный модуль. Другой вопрос, что в раздел и деталь это сделать можно легко.
2. Как это примерно сделать – загрузить модуль и поддержать сообщения для работы с ним.
Сперва нужно поддержать сообщения
Потом на них сделать такую логику:
Для добавления фиксированных фильтров нужно сообщение
Его код должен возвращать конфиг, из статьи - http://www.academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/AddFix…
Загрузка самого модуля фильтров стандартная -
this.sandbox.loadModule("QuickFilterModuleV2", { renderTo: "SectionFiltersContainer",// куда рисовать, контейнер в diff id: this.getQuickFilterModuleId()// тут уникальный id модуля });
На 7.8 необходимо на преднастроенную страницу добавить справочное поле.
Добавляю в attributes:
"Contact": { dataValueType: this.Terrasoft.DataValueType.LOOKUP, type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, referenceSchemaName: "Contact", },
Добавляю элемент в diff.
Поле появляется, но при нажатии на лупу появляется ошибка:
Ошибка
на строчке:
args.schemaName = this.model.attributes[tag].referenceSchemaName;
в методе:
loadVocabulary: function(args, tag) { args.schemaName = this.model.attributes[tag].referenceSchemaName; this.callParent(arguments); },
Здравствуйте, Игорь.
Попробуйте добавить свойство usLookup к атрибуту Contact:
isLookup: true,
"Мотков Илья" написал:Здравствуйте, Игорь.Попробуйте добавить свойство usLookup к атрибуту Contact:
isLookup: true,
Не помогло. Проблема возникает при нажатии на лупу. Если использовать выпадающий список, то проблема не возникает.
Аналогичная проблема со справочными полями наблюдается и в других базовых преднастроенных страницах.
Игорь, для исправления данного поведения, необходимо добавить зависимость от LookupUtilities. А также переопределить метод loadVocabulary аналогично схеме AutoGeneratedPageV2.
Полный листинг кода схемы:
define("UsrSome", ["LookupUtilities", "CustomProcessPageV2Utilities"], /** * @class Terrasoft.configuration.PreconfiguredPageV2 * Пример преднастроенной страницы без EntitySchema по процессу */ function(LookupUtilities) { return { mixins: {}, attributes: { "UsrContact": { dataValueType: this.Terrasoft.DataValueType.LOOKUP, type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, isLookup: true, referenceSchemaName: "Contact", }, }, rules: {}, details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, methods: { findEntityColumn: function(columnName) { var column = this.callParent(arguments); if (!column) { column = this.getColumnByName(columnName); } return column; }, loadVocabulary: function(args, tag) { var column = this.findEntityColumn(tag); if (!column || !column.isLookup) { return; } var entitySchemaName = column.referenceSchemaName; var config = { entitySchemaName: entitySchemaName, multiSelect: false, columnName: tag, columnValue: this.get(tag), searchValue: args.searchValue }; var handler = function(args) { var columnName = args.columnName; var collection = args.selectedRows.collection; if (collection.length > 0) { this.set(columnName, collection.items[0]); } }; LookupUtilities.Open(this.sandbox, config, handler, this, null, false, false); }, init: function(){ this.callParent(arguments); document.scope = this; }, }, diff: /**SCHEMA_DIFF*/[ { "operation": "remove", "name": "TextParameter1" }, { "operation": "insert", "parentName": "GeneralInfoBlock", "propertyName": "items", "name": "UsrContact", "values": { caption: "UsrContact", contentType: Terrasoft.ContentType.LOOKUP, bindTo: "UsrContact", layout: {column: 0, row: 0, colSpan: 12} } } ]/**SCHEMA_DIFF*/, userCode: {} }; });