Есть задача: по нажатию кнопки в модальном окне открывается окно с выбором
полей текущего раздела. Выбирается любое поле и добавляется в модальное окно. И так далее. То есть получается добавленные поля существуют только пока открыто модальное окно. Это нужно для создания отчета Excel, где указанные значения в полях будут фильтрами.
В разделе полей много. Плюс в будущем поля могут добавляться. Поэтому забивать их жестко в diff смысла не вижу.
Вопрос: есть ли возможность как-то динамически наполнять массив diff полями?
А если создать фиксированное количество виртуальных полей и программно их скрывать, показывать, а также менять заголовки?
Либо в этом окне использовать редактируемый реестр с двумя колонками: название и значение. Примерно такой обсуждали в этой теме, но там предлагали решение при помощи view, что может в Вашем случае не подойти.
Наконец, если формируете фильтр по значениям полей, можно воспользоваться готовым механизмом динамических групп, где такой тоже настраивается. То есть стандартными средствами создать группу, а затем выбрать её в окне настроек отчёта, а затем программно разбирать её фильтр.
А вообще, описанное Вами очень похоже на автогенерируемую страницу в БП. Может, с её помощью получится?
Спасибо за ответ. Фиксированное количество виртуальных полей не вариант, так как в будущем клиент самостоятельно может добавлять поля, которые тоже должны выбираться. Мне подсказали создать на странице модального окна ContainerList. Вот такой элемент diff:
Добрый день. Нужна подсказка как реализовать поле на странице контакта, куда автоматически подтягивался бы номер телефона контрагента (по выбору контрагента, конечно). Поле должно быть виртуальное и только для просмотра.
Версия 7.6.0.840
Заранее спасибо за помощь
а какие у вас трудности? Работа с виртуальными полями ничем не отличается от работы полями получаемые их схем "Таблиц". Ничем не отличается Инициализация, Обработка, Валидация, Контроль и обработка событий. Вам нужен реальный пример, как решить вашу задачу. Или вам подсказать где в стандартном функционале, ваша задача уже решалась.
// methods
getMainAssistant: function(){
var esq =this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName:"UsrContactAssistents"});
esq.addColumn("UsrAssistant.Name", "UsrAssistantName");
esq.filters.add("UsrContactFilter", this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UsrContact", this.get("Id")));
esq.getEntityCollection(function(response){if(response && response.success){if(response.collection.getCount()>0){
var result = response.collection.getItems()[0];this.set("MainAssistant", result.get("UsrAssistantName"));}}}, this);}
для связи с выбранным контрагентом например надо еще в добавить зависимость данного поля от контрагента
и attributes будет выглядеть так примерно
// attributes"Assistant":{
dataValueType: Terrasoft.DataValueType.TEXT,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dependencies:[{
columns:["Account"], // это для зависимости от контрагента
methodName:"getMainAssistant"}]}