Товарищи, это что же получается? Пишешь пишешь код, а тут бац - в модной 7ой версии не могу сделать отображаемое поле :( просветите, люди добрые примером что-ли?
Конкретизируем задачу для облегчения понимания. На странице редактирования Контакта хочу увидеть не только название Контрагента (поле Контрагент), а еще и его Код, или Альтернативное название.
Про реестр в карточке знаю - можно сделать деталью подробную информацию, а вот просто обычное тестовое поле со значением Кода как?
Не хочу я добавлять новое поле в объект Контакт, оно ж в таблице создастся, а это против самой сути реляционной базы данных идет - ну зачем мне лишние поля... а если отобразить я их штук 10 захочу?
Вот как это сделать в 2.х, 3.х, 5х знаю, а как в 7.х - не знаю...
Нравится
"Салихов А" написал:Возможно его можно решить с помощью Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN ?
Вот если бы знать можно ли и как... опыта у меня в 7.х очень мало, потому и стучусь за примером да техподдержку третий день мучаю
Возможно это поможет:
[javascript]
{
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);
}
};
[/javascript]
Нашел в RelationshipDetailPage
"Салихов А" написал:Нашел в RelationshipDetailPage
Вот так по кирпичикам может и решиться вопрос) Спасибо за наводку, покопаюсь там. Смущает только то, что это опять же реестр и его колонки - в него то можно и вьюшку сделать да из нее все тащить.
"Салихов А" написал:кроме как делать запрос в бд в методе и результат записывать в виртуальное поле
Это понятно, вопрос как поле то на форме редактирования создать... заполнить его я сумею
Может с горя label какой создать, да его текст нужный прописывать...
Скорее всего вопрос изначальный можно переформулировать - как создать на странице редактирования некое поле или визуальный объект типа label или ему подобный, и при этом не связывать его с данными. Создавать видимо надо кодом, так как мастер не предлагает ничего кроме полей данных.
Как назначить ему текст/значение/прочее в скрипте примеры есть.
"Салихов А" написал:Не, это не реестр) Это страница редактирования записи детали, но не сама деталь.
Так, пойду прямо сейчас читать код да разбираться с ней :smile:
С помощью вот такой чудо конструкции создал label.
[javascript]
{
"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
}
}
}
[/javascript]
Дальше в общем то надо просто при открытии/обновлении писать туда нужный текст, вытащенный как угодно, запросом через EntityShemaQuery например.
Остался осадочек.
1. Terrasoft.ViewItemType.LABEL написал наугад, не нашел список возможных значений нигде, что лишний раз говорит о безобразном состоянии документации.
2. Это все ж label, а хотелось бы просто TextEdit (стандартно создается поле, где обязателен параметр bind to, а биндить то мне понятно некуда). Гадать, какой ViewItemType будет содержать нужное значение неохота.
Как доделаю полностью заполнение caption по событиям, выложу сюда.
"Салихов А" написал:А как же консоль браузера? Там можно вытащить все значения.
Вот копаюсь сейчас там )) надо привыкать к семерке, мозг под нее подстраивать ))
Коллеги, постараюсь Вам помочь в Ваших мучениях)
В принципе, направление мысли правильное, только непонятно, для чего делать еще один запрос для получения значения дополнительного поля, если можно это сделать в уже текущем запросе (см. http://www.community.terrasoft.ru/forum/topic/10906).
В целом, решение добавления колонки "Альтернативное название контрагента" может выглядеть следующим образом:
[javascript]
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*/
[/javascript]
Андрей, огромное спасибо!
Добавил динамически меняющееся значение поля при изменении контрагента в карточке
[javascript]
methods: {
getAccountCode: function() {
var account = this.get("Account");
var accountAlternativeName = account ? account.AlternativeName : "";
this.set("AccountAlternativeName", accountAlternativeName);
}
}
[/javascript]
[javascript]
attributes: {
"AccountAlternativeName": {
dataValueType: Terrasoft.DataValueType.TEXT,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dependencies: [
{
columns: ["Account"],
methodName: "getAccountCode"
}
]
}
}
[/javascript]
Использую динамические поля в детали...но потом не могу отобразить в виде колонок. Как это сделать?
"Юсупов Марат" написал:Использую динамические поля в детали...но потом не могу отобразить в виде колонок. Как это сделать?
А никак, в реестре вы можете вывести только физические колонки.