В скрипте scr_MultiSelectData осуществляется чтения атрибутов

MultiSelectData.SearchFieldNames = GetAttribute(Window, 'SearchFieldNames');

Как найти где атрибуты устанавливаются?

Нравится

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

Воспользуйтесь утилитой Grep search в Terrasoft Administrator
1
По ключевому слову SearchFieldNames Вы найдете множество присвоений wnd_MultiSelectData атрибута SearchFieldNames

В меню инструменты у меня нет GREP поиска.
Я использую Common\Tools\GrepSearch\wnd_GrepSearchScript.
Это аналогично?

Найдено более 70-ти вхождений.
Перебирать все вручную (занося и убирая debugger)?
Если переберу все точно найду?

Владимир, опишите, пожалуйста Вашу задачу.
Если вы хотите понять в какой момент присваивается тот или иной атрибут, поставьте debugger перед данной строчкой, в Visual Studio посмотрите панель Call Stack в ней Вы увидите какие функции отработали до остановки скрипта на debugger'e, что даст вам понять где присваивался необходимый атрибут

Естественно я так и делал.

В стеке вызовов три функции (все из текущего скрипта scr_MultiSelectData):

ReadAttributes JScript
Initialize JScript
wnd_MultiSelectDataExOnPrepare JScript

И естественно в тексте скрипта нет ни каких установок Атрибутов.

Задача заключается в доработке окна множественного выбора для возможности выбирать не только по наименованию, но по другим атрибутам (к примеру по ОКПО контрагентов).
А эти злостные АТРИБУТЫ мешают жить.

Владимир, возможно я вас не до конца понял, но посмотрите мое в теме замечание http://www.community.terrasoft.ru/forum/topic/7580#comment-32508

Алексей, существует окно множественного выбора:
(Common\Window Templates\MultiSelectData\wnd_MultiSelectData)
Это окно вызывается при установке фильтра по справочнику.

http://savepic.su/1516960.htm

Опытным путем выяснено, что сюда попадает только первичное поле для отображения.
При отладке выяснилось, что нет возможности узнать где устанавливаются атрибуты этого окна.

Владимир, судя по скриншоту вы используете 3.3.2 следовательно:
1. В scr_MultiSelectDataWithGroup внесите изменения в функцию AddDisplayFields, изменения с комментариев //340

function AddDisplayFields() {
	grdData.BeginUpdate();
	grdTarget.BeginUpdate();	
	try {
		var DataGridColumn = Self.CreateComponent(DataGridColumnCode,
		  'col' + MultiSelectData.DisplayFieldName + 'Source');
		DataGridColumn.DataFieldName = MultiSelectData.DisplayFieldName;
		gvData.Add(DataGridColumn); 
		DataGridColumn = Self.CreateComponent(DataGridColumnCode,
		  'col' + MultiSelectData.DisplayFieldName + 'Target');
		DataGridColumn.DataFieldName = MultiSelectData.DisplayFieldName;
		gvTarget.Add(DataGridColumn); 			
		//340
		//if (AddColumnsForAllDisplayFields) {
			var DataFields = MultiSelectData.Dataset.DataFields;
			var DataField;
			var DataFieldName;
			for (var i = 0; i < DataFields.Count; i++) {
				DataField = DataFields.Items(i);
				DataFieldName = DataField.Name;
				if ((DataField.IsDisplayField) 
					&&(DataFieldName != MultiSelectData.DisplayFieldName)) {
 
					DataGridColumn = Self.CreateComponent(DataGridColumnCode,
					  'col' + DataFieldName + 'Source');
					DataGridColumn.DataFieldName = DataFieldName;
					DataGridColumn.IsVisible = true; //установить колонки для отображения видимыми
					gvData.Add(DataGridColumn); 
				}
			}
		//}	
 
		//340
	}
	finally {
		grdData.EndUpdate();	
		grdTarget.EndUpdate();				
	}
}

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

в 3.4.0
сервис wnd_MultiSelectData доработан по сравнении с 3.3.2, в нем есть такой атрибут как AddColumnsForAllDisplayFields, который является булевым значением, проверка на данный атрибут проходит на Initialize окна по даному признаку добавляется возможность добавлять в грид множественного выбора дополнительные поля

1

Пример использования Вы можете посмотреть в сервисе wnd_DataManager

function edtDatasetsOnPrepareSelectWindow(LookupControl, SelectWindow) {
	var Dataset = LookupControl.LookupDatasetLink.Dataset;
	SelectWindow.Attributes('AddColumnsForAllDisplayFields') = true;
	ApplyDatasetFilter(Dataset, 'ServiceTypeCode', 'Table', true);
}
Показать все комментарии