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

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

Нравится

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

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

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);

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

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

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

Т.е вам нужно просто установить значение для переменной? В таком случае:

var myCityObj = {
     value: ...,//сюда ид города из базы
     displayValue: ...//сюда название города
};
this.set("City", myCityObj);

Работает, если поле "Город" - лукапное(справочное). Для строк, 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

		methods: 
...
			"onEntityInitialized": function() {
				this.callParent(arguments);
				document.ActivityPageScope = this;
			},
...

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

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

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