Вопрос

Если лид не был просмотрен или открыт ни разу выделить его

Добрый день!

Необходимо выделить лиды которые не были открыты пользователем. 

Есть следующий код:

define("LeadSectionV2", [], function() {
	return {
		entitySchemaName: "Lead",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			prepareResponseCollectionItem: function(item) {
				this.callParent(arguments);
				var scope = this;
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
					rootSchemaName: "UsrLeadStatusByUser"
				});
				esq.addColumn("Id");
				var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrLead", item.get("Id"));
				var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrContact", Terrasoft.SysValue.CURRENT_USER_CONTACT.value);
				esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
				esq.filters.add("esqFirstFilter", esqFirstFilter);
				esq.filters.add("esqSecondFilter", esqSecondFilter);
				esq.getEntityCollection(function (result) {
					if (result.success && result.collection.collection.items.length > 0) {
						//Лид уже был просмотрен
						item.customStyle = null;
					}else{
						//Лид еще ни разу не открывали
						item.customStyle = {
							"color": "white",
							"background": "#8ecb60",
							"font-weight": "bold"
						};
					}
				}, scope);
			}
		}
	};
});

Он работает не совсем как ожидалось. Выделение цветом происходит после того как зайдешь в лид и выйдешь из него, к тому же выделяются только те записи, которые были подгружены первично. Если же пролистать ниже, то подгруженные позже записи не выделяются цветом. 

Подскажите, пожалуйста, красивое решение вопроса.

У меня такой же вопрос

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

В объектной модели Лида, добавьте например булево значения IsViewed, в момент открытия карточки, обновляйте это значение.
А подкрашивание грида, делайте уже от этого параметра IsVewed (true/false).

В объектной модели Лида, добавьте например булево значения IsViewed, в момент открытия карточки, обновляйте это значение.
А подкрашивание грида, делайте уже от этого параметра IsVewed (true/false).

Спасибо, Павел! Скорее всего так и поступлю. Хотел сделать по пользователям, но откажусь от этой затеи.

Теперь возникла другая проблема, после закрытия лида в реестре раздела у просмотренного лида не обновляется стиль. После перезагрузки страницы страницы - все в порядке. Как сделать чтобы это происходило автоматически?

Руслан Хасанов пишет:
Теперь возникла другая проблема, после закрытия лида в реестре раздела у просмотренного лида не обновляется стиль. После перезагрузки страницы страницы - все в порядке. Как сделать чтобы это происходило автоматически?

Путем использования сообщений, вызовите в разделе метод this.refreshGridData();

Примерно так:
 

init: function() {
	this.callParent(arguments);
	this.sandbox.subscribe("NeedReloadLeadGrid", this.customMethod, this);
},
customMethod: function() {
	//если нужно что-то еще сделать, то делаете, а потом:
	this.refreshGridData();
}
 
messages: {
	"NeedReloadLeadGrid": {
		"mode": Terrasoft.MessageMode.PTP,
		"direction": Terrasoft.MessageDirectionType.SUBSCRIBE
	}
}
 
 
На карточке лида, по сохранению/закрытии/изменении параметра, в общем там, где вам нужно, вызываете публикацию данного сообщения.
 
messages: {
	"NeedReloadLeadGrid": {
		"mode": Terrasoft.MessageMode.PTP,
		"direction": Terrasoft.MessageDirectionType.PUBLISH
	}
}
 
callPublish_YourCustomMethod: function() {
	this.sandbox.publish("NeedReloadLeadGrid", null, ["_NeedReloadLeadGrid"]);
}
 
//вместо null можете передать объектом параметры, при необходимости

 

Войдите или зарегистрируйтесь, чтобы комментировать