Товарищи, это что же получается? Пишешь пишешь код, а тут бац - в модной 7ой версии не могу сделать отображаемое поле :( просветите, люди добрые примером что-ли?
Конкретизируем задачу для облегчения понимания. На странице редактирования Контакта хочу увидеть не только название Контрагента (поле Контрагент), а еще и его Код, или Альтернативное название.
Про реестр в карточке знаю - можно сделать деталью подробную информацию, а вот просто обычное тестовое поле со значением Кода как?
Не хочу я добавлять новое поле в объект Контакт, оно ж в таблице создастся, а это против самой сути реляционной базы данных идет - ну зачем мне лишние поля... а если отобразить я их штук 10 захочу?
Вот как это сделать в 2.х, 3.х, 5х знаю, а как в 7.х - не знаю...
Нравится
"Салихов А" написал:Возможно его можно решить с помощью Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN ?
Вот если бы знать можно ли и как... опыта у меня в 7.х очень мало, потому и стучусь за примером да техподдержку третий день мучаю
Возможно это поможет:
{ type: Terrasoft.ViewModelSchemaItem.ATTRIBUTE, name: 'ReverseAccountA', caption: resources.localizableStrings.AccountCaption, columnType: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, dataValueType: Terrasoft.DataValueType.LOOKUP, customConfig: { enabled: false }, rules: [{ ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER, property: BusinessRuleModule.enums.Property.VISIBLE, conditions: [{ leftExpression: { type: BusinessRuleModule.enums.ValueType.ATTRIBUTE, attribute: 'RelationTypeFilter' }, comparisonType: Terrasoft.core.enums.ComparisonType.EQUAL, rightExpression: { type: BusinessRuleModule.enums.ValueType.CONSTANT, value: 'Account' } }] }], dependencies: ['AccountB'], methodName: 'setReverseAccountA' }, ...... this.methods.setReverseAccountA = function() { var accountB = this.get('AccountB'); if (accountB) { this.set('ReverseAccountA', accountB); } else { this.set('ReverseAccountA', null); } };
Нашел в RelationshipDetailPage
"Салихов А" написал:Нашел в RelationshipDetailPage
Вот так по кирпичикам может и решиться вопрос) Спасибо за наводку, покопаюсь там. Смущает только то, что это опять же реестр и его колонки - в него то можно и вьюшку сделать да из нее все тащить.
"Салихов А" написал:кроме как делать запрос в бд в методе и результат записывать в виртуальное поле
Это понятно, вопрос как поле то на форме редактирования создать... заполнить его я сумею
Может с горя label какой создать, да его текст нужный прописывать...
Скорее всего вопрос изначальный можно переформулировать - как создать на странице редактирования некое поле или визуальный объект типа label или ему подобный, и при этом не связывать его с данными. Создавать видимо надо кодом, так как мастер не предлагает ничего кроме полей данных.
Как назначить ему текст/значение/прочее в скрипте примеры есть.
"Салихов А" написал:Не, это не реестр) Это страница редактирования записи детали, но не сама деталь.
Так, пойду прямо сейчас читать код да разбираться с ней :smile:
С помощью вот такой чудо конструкции создал label.
{ "operation": "insert", "parentName": "Header", "propertyName": "items", "name": "label_name", "values": { itemType: Terrasoft.ViewItemType.LABEL, "caption": "Test3", "layout": { "column": 10, "row": 5, "colSpan": 12, "rowSpan": 1 } } }
Дальше в общем то надо просто при открытии/обновлении писать туда нужный текст, вытащенный как угодно, запросом через EntityShemaQuery например.
Остался осадочек.
1. Terrasoft.ViewItemType.LABEL написал наугад, не нашел список возможных значений нигде, что лишний раз говорит о безобразном состоянии документации.
2. Это все ж label, а хотелось бы просто TextEdit (стандартно создается поле, где обязателен параметр bind to, а биндить то мне понятно некуда). Гадать, какой ViewItemType будет содержать нужное значение неохота.
Как доделаю полностью заполнение caption по событиям, выложу сюда.
"Салихов А" написал:А как же консоль браузера? Там можно вытащить все значения.
Вот копаюсь сейчас там )) надо привыкать к семерке, мозг под нее подстраивать ))
Коллеги, постараюсь Вам помочь в Ваших мучениях)
В принципе, направление мысли правильное, только непонятно, для чего делать еще один запрос для получения значения дополнительного поля, если можно это сделать в уже текущем запросе (см. http://www.community.terrasoft.ru/forum/topic/10906).
В целом, решение добавления колонки "Альтернативное название контрагента" может выглядеть следующим образом:
attributes: { "Account": { lookupListConfig: { columns: ["AlternativeName"] } }, "AccountAlternativeName": { dataValueType: Terrasoft.DataValueType.TEXT, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN } }, methods: { onEntityInitialized: function() { this.callParent(); var account = this.get("Account"); var accountAlternativeName = account ? account.AlternativeName : ""; this.set("AccountAlternativeName", accountAlternativeName); } } diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "parentName": "Header", "propertyName": "items", "name": "AccountAlternativeName", "values": { "layout": {"column": 12, "row": 3, "colSpan": 12}, "caption": "Альтернативное название контрагента" //лучше использовать локализированную строку } } //... ]/**SCHEMA_DIFF*/
Андрей, огромное спасибо!
Добавил динамически меняющееся значение поля при изменении контрагента в карточке
methods: { getAccountCode: function() { var account = this.get("Account"); var accountAlternativeName = account ? account.AlternativeName : ""; this.set("AccountAlternativeName", accountAlternativeName); } }
attributes: { "AccountAlternativeName": { dataValueType: Terrasoft.DataValueType.TEXT, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, dependencies: [ { columns: ["Account"], methodName: "getAccountCode" } ] } }
Использую динамические поля в детали...но потом не могу отобразить в виде колонок. Как это сделать?
"Юсупов Марат" написал:Использую динамические поля в детали...но потом не могу отобразить в виде колонок. Как это сделать?
А никак, в реестре вы можете вывести только физические колонки.