Доброго времени суток. Имеется раздел "Аукцион" , создал действие "Заполнить участников", при нажатии на кнопку добавляются в детали "Участники" записи определенным отбором. Дело в том что уже заполненный реестра детали отображается только при обновлении страницы. Похоже нужно использовать механизм сообщений  ? Подскажите пожалуйста как сделать так, чтобы без  без обновления страницы данные сразу высвечивались?

Нравится

2 комментария
Лучший ответ

Добрый день!

Деталь можно обновить следующим кодом:

this.updateDetail({detail: "DetailName"});

 

Добрый день!

Деталь можно обновить следующим кодом:

this.updateDetail({detail: "DetailName"});

 

Сидоров Александр В.,

Спасибо, добавил reloadAll: true и заработало)

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

Здравствуйте, подскажите пожалуйста, как перенести данный код на 7.3

this.methods.init = function() {
                this.onPrfServiceContractor = function() {
                    var viewModel = this;
                    setTimeout(function(){
                        viewModel.reloadDetail('PrfServiceContractor')
                    }, 150, viewModel);
                    setTimeout(this.waitDetailReload, 300, this);
                };
                this.waitDetailReload = function(viewModel) {
                    var detailCollection = viewModel.getDetailItems('PrfServiceContractor');
                    detailCollection.forEach(function(el) {
                            if (el.get('Main'))
                                viewModel.set('Cost', el.get('Cost'));
                        },
                        viewModel
                    );

                    return viewModel;
                };
                this.changeDetailSubscribeByName('PrfServiceContractor', this.onPrfServiceContractor);
                window.ServiceCardViewModel = this;
                window.CurrentEditPage = this;
            };

Есть ли в 7.3 метод this.changeDetailSubscribeByName? если нет, то подскажите его аналог.
Пробовал реализовать следующим образом (не помогло)

PrfServiceContractor: {
                    schemaName: "PrfServiceContractorDetail",
                    entitySchemaName: "PrfServiceContractor",
                    filter: {
                        masterColumn: "Id",
                        detailColumn: "PrfService"
                    },
                    subscriber: "this.onPrfServiceContractor"
                }

Нравится

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

Здравствуйте, Александр.

В версии 7.3 подписку на изменение детали Вам необходимо реализовать следующим образом:

InvoiceProduct: {
				schemaName: "InvoiceProductDetailV2",
				filter: {
					masterColumn: "Id",
					detailColumn: "Invoice"
				},
				subscriber: function() {
					this.onInvoiceProductDetailUpdated();
				}
			},

Все работает, спасибо.

Подскажите пожалуйста, как в 7.3 реализован метод getDetailItems
Пытаюсь обратиться к нему следующим образом

var detailCollection = viewModel.getDetailItems('PrfServiceContractor');

подключаемые библиотеки:
define('prfServicePage', ['prfServicePageResources', 'GeneralDetails','terrasoft'],
function(resources, GeneralDetails,Terrasoft)

Здравствуйте, Александр.

Метод getDetailItems() в версии 7.3 использовать не рекомендуется. Он остался для совместимости с более ранними версиями приложений 7.0 - 7.2 Просьба уточнить какую задачу Вы хотели реализовать с помощью данного метода.

На странице раздела есть деталь с полями стоимость и основной. Если у записи в детали установлено булево поле основной в true, то нужно в странице раздела у поля стоимость установить данное значение.
Скажите пожалуйста, есть ли где-то список всех доступных методов и свойств объектов для 7.3 ?

Здравствуйте, Александр.

Вашу задачу алгоритмически можно решить так:
На странице детали в attributes:
в определении атрибута указать в dependencies метод который сработает при изменении поля, например:

"JobTitle": {
		dependencies: [
		{
			columns: ["Job"],
			methodName: "jobChanged"
		}
	]
},

В самом методе Вам необходимо будет генерировать сообщение, которое будет обработано в основной странице, также можно передать в масиве args необходимые параметры.

jobChanged: function() {
	var job = this.get("Job");
	if (!this.Ext.isEmpty(job)) {
 
	var args = {
	scope: this,
	isSilent: true,
        param: job,
	messageTags: [sandbox.id]
	};
 
	sandbox.publish("RecordChanged", args, [sandbox.id]);
        }
}

Затем в методе который выполняется после изменения детали, необходимо выполнить подписку на сообщение "RecordChanged" с массива параметров получить необходимые значения полей детали и установить их в качестве значений полей страницы редактирования, например так:

onInvoiceProductDetailUpdated: function() {
	this.sandbox.subscribe("RecordChanged", function(args) {
	this.set("Job", args.param);
	}
},

Весь код представлен в качестве примера и не является готовым решением.

Также Вы можете ознакомиться с обучающим видео по конфигурированию bpm'online 7.3 по ссылке http://www.training.terrasoft.ru/resources/video
Техническая документация по платформе BPMonline CRM 7.3 http://www.terrasoft.ru/documentation/bpmonlinesdk7-3/

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