Добрый день.

Подскажите почему может не вызываться метод заголовка для дифф в модуле уведомлений?

Кейс такой: в стандартный модуль уведомлений добавлены гиперссылки на продажу и лид. Сами гиперссылки прописаны отдельными дифами. А так же к ним добавлены текстовые заголовки тоже отдельными дифами. Заголовок для Лида прописан в локализованные строки. А для Продаж значение заголовка достаётся методом из системной настройки.

Проблема в том, что при добавлении продажи с открытым центром уведомлений не происходит вызов метода, прикрученного к свойству "caption" дифа. А для гиперссылки все вызывается и отображается нормально.

diff: [
{
	"operation": "insert",
	"name": "NotificationOpportunityLabel",
	"parentName": "NotificationItemActivityTopContainer",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.LABEL,
		"caption": {"bindTo": "getOpportunityCaption"},
		"visible": {"bindTo": "getActivityOpportunityVisible"},
		"classes": {"labelClass": ["account-comma-contact"]}
	}
}]
methods: {
	processNotificationsCollection: function(items) {
		items.each(this.addColumnLink, this);
	},

	addColumnLink: function(item) {
		var self = this;
		item.getOpportunityCaption = function() {
			self.queryOpportunityCaption.call(self, item);
			return self.get("NotificationOpportunityCaption");
		};
	},

	queryOpportunityCaption: function() {
		Terrasoft.SysSettings.querySysSettingsItem("OpportunityLinkCaptionRemindingSchema", 
			function(value) {
				this.set("NotificationOpportunityCaption",value);
			}, this);
	}
}

Может быть кто сталкивался с таким поведением?

 

Нравится

2 комментария

Вообще, как таковой биндинг caption на функцию возможен, судя по коду в MultiDeleteResultPageV2. Может, у Вас где-то раньше ошибка и JS-код прекращает выполняться?

{
	"operation": "insert",
	"name": "ByRightsContainerHeader",
	"parentName": "ByRightsContainer",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.LABEL,
		"caption": {"bindTo": "getRightsCaption"},
		"classes": {
			"labelClass": ["container-multi-delete-caption-labelClass"]
		}
	}
},
 
/**
 * Returns caption for block with errors by rights.
 * return {String} Caption.
 * @protected
 */
getRightsCaption: function() {
	var items = this.get("RecordsData").getItems();
	var count = items ? items.length : 0;
	return this.Ext.String.format(this.get("Resources.Strings.ByRightsCaption"), count);
},

А в чём недостаток локализируемой строки перед системной настройкой, значение нужно часто менять? В крайнем случае можно попробовать сделать БП, синхронизирующий значение из настройки в строку на событии изменения настройки, хотя это и «костыль».

Насколько я  понял после инициализации диф не хочет от рисоввываться. Решил кейс немного по-другому. Засунул в инит вызов функции, определяющей заголовок. 

diff: [
	{
		"operation": "insert",
		"name": "NrbProcessNotificationOpportunityLabel",
		"parentName": "StartDateContainer",
		"propertyName": "items",
		"values": {
			"itemType": Terrasoft.ViewItemType.LABEL,
			"caption": {"bindTo": "getOpportunityCaption"},
			"visible": {"bindTo": "getActivityOpportunityVisible"},
			"classes": {"labelClass": ["account-comma-contact", "nrb-label"]}
		}
	}
	],
methods: {	
	init: function(){
		this.callParent(arguments);
		this.getOpportunityCaption();
	},
 
	/**
	 * Вытаскиваем из системной настройки заголовок для Продаж.
	 */
	getOpportunityCaption: function() {
		var caption;
		Terrasoft.SysSettings.querySysSettingsItem("NrbOpportunityLinkCaptionRemindingSchema", 
			function(value) {
				caption = value;
			}, this);
		return caption + " ";
	}
}

 

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

Добрый день, коллеги!

Кто сталкивался, существуется ли возможность во время отрисовки карточки или подготовки конфига для отрисовки добавить в конфиг Diff какой-нибудь валидный diff-object?

Нравится

1 комментарий

Добрый день

В тот момент, когда получается схема, происходит генерация по конфигам (diff-objects) всех элементов управления. Это происходит в генераторе (ViewGeneratorV2). Именно туда приходит уже собранный с учетом иерархии массив объектов. И только в этом генераторе вы можете что-то добавить. Только учтите, что изменения в генераторе будут влиять на всю систему, что может привести к неработоспособности чего-либо

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