Технические вопросы
7.x

Заполнения поля справочника

Каким образом заполняется поле справочника на странице редактирования объекта
На клиенте получил экземпляр обекта поля справочника поменял ему id и name, но значения не сохраняются, и значения возвращается прежднее

Нравится

7 комментариев

Здравствуйте, для изменения записи в бд, необходимо использовать Terrasoft.UpdateQuery, множество примеров можете найти в конфигурации, к примеру метод updateContactCareer в AccountPageV2 в пакете UIv2

[javascript]
var update = Ext.create("Terrasoft.UpdateQuery", {
rootSchemaName: "ContactCareer"
});
var filters = update.filters;
var contactIdFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Contact", data.contactId);
var isCurrentFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Current", true);
var isPrimaryFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"Primary", true);
filters.add("contactIdFilter", contactIdFilter);
filters.add("isCurrentFilter", isCurrentFilter);
filters.add("isPrimaryFilter", isPrimaryFilter);
if (data.hasOwnProperty("isPrimary")) {
update.setParameterValue("Primary", data.isPrimary, Terrasoft.DataValueType.BOOLEAN);
}
if (data.hasOwnProperty("isCurrent")) {
update.setParameterValue("Current", data.isPrimary, Terrasoft.DataValueType.BOOLEAN);
}
if (data.hasOwnProperty("dueDate")) {
update.setParameterValue("DueDate", data.dueDate, Terrasoft.DataValueType.DATE);
}
update.execute(function(result) {
callback.call(this, result);
}, this);
[/javascript]

а также на комьюнити, к примеру тут:
http://www.community.terrasoft.ru/forum/topic/24995#comment-66505

Не совсем то,
Например у Контрагента есть поле Город, который является справочником
Пользователь отредактировал какое-то поле по которому я определил, что город указаный в форме не соответсвует городу контрагента в жизни
Мне нужно изменить значения поля Город в текущей странице редактирования
Редактирование значения в БД не подходит т.к. пользователь может отменить все изменения, и информация в таком случае должна остаться нетронутой

"Хусаинов Булат" написал:Мне нужно изменить значения поля Город в текущей странице редактирования

Т.е вам нужно просто установить значение для переменной? В таком случае:
[javascript]
var myCityObj = {
value: ...,//сюда ид города из базы
displayValue: ...//сюда название города
};
this.set("City", myCityObj);
[/javascript]
Работает, если поле "Город" - лукапное(справочное). Для строк, Guid-ов, дат и т.п просто this.set("Parameter", value)

Булат,

попробуйте реализовать с помощью бизнес-правил: https://academy.terrasoft.ru/documents/technic-sdk/7-9/biznes-pravila-i…

присоединяюсь к Даниле
Вставлю лишь свои 5-ть копеек, что лучше бы пойти в отладчик установить в справочное поле значение, а потом получить его в отладчике, таким образом вы получите представление полной структуры объекта, для сохранения в БД не играет роли никакие поля кроме "value" (иногда "id")
но остальные значения могут быть задействованы в побочной логике, как это часто бывает с displayValue
так же зачастую можно встретить и другие поля/значения
вот пример того как выглядят объекты в типовых Активностях, для полей "Состояние" и "Результат"

обратите внимание что для объекта поля "Состояние" есть еще отдельное свойство "Finish" от его значения может зависеть какая либо логика на странице, например сокрытие/демонстрация полей или запуск каких-либо БП.
Так что устанавливая значение в справочное поле самостоятельно, желательно воспроизводить структуру объекта целиком, и разбираться с дополнительными свойствами - зачем они нужны и как их воспроизвести.
вот...

PS: (на всякий случай объясню)
если Вы хотите поработать с контекстом карточки из отладчика, не расставляя точек останова по ходу инициализации, например повызывать методы на исполнение, "пощупать" значения аттрибутов и полей, то вам необходимо предварительно "обернуть" контекст.
Для этого подойдет универсальный метод "onEntityInitialized", где вы сможете транслировать ссылку на текущий контекст в свойство глобального объекта, н/п document.ActivityPageScope
[javascript]
methods:
...
"onEntityInitialized": function() {
this.callParent(arguments);
document.ActivityPageScope = this;
},
...
[/javascript]

Ваши пять копеек, Илья, оказались золотыми. Ни как не мог понять как обратиться к контексту страницы и прощупать состояние его объектов. Интересно, существует ли способ обращения к странице напрямую не передавая его в document?

Стандартно для обмена сообщениями между разными страницами используется «песочница». То, что выше описал Илья, относится только к отладке в браузере.

Показать все комментарии