Подскажите как правильно про инициализировать данные для wnd_MultiSelectData помещенный в WindowsContainer. У меня все время появляется такая ошибка: 'MultiSelectData.Dataset.USI' - есть null или не является объектом

Нравится

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

Валентин, ознакомьтесь с примерами в темах:
http://www.community.terrasoft.ua/developer/faq/4155
http://www.community.terrasoft.ua/forum/topic/9236

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

Спасибо. Второй топик интересный. Что удалось узнать:
вот эта функция
function wnd_MultiSelectDataExOnShow(Window) {
UpdateButtonsVisible();
SetFocusToEdit();
}
Вызывается почему-то до того как окно MultiSelectData проинициализировано. Т.е. на момент ее вызова MultiSelectData = null.
Т.е. событие OnShow окна MultiSelectData находящегося в контейнере вызывается до того как это окно создано?
Более того это событие вызывается до события onPrepare родителькского окна!!!!

Собственно главная проблема не в этом.
Я закоментировал UpdateButtonsVisible(); и ошибка не появляется. мне не понятно почему в датасет данные не отображаются? Когда я его открываю то строки появляться но они почему то не отображаются в дата гриде. Вернее отображается какие-то строки но все значения пустые

Валентин, нужны сервисы или бекап базы чтобы понять причину и предоставить рекомендации.

сервисы это что?

Сервисы - это файлы конфигурации, в которые Вы вносите изменения.
Чтобы их выгрузить, выберите название сервиса в дереве сервисов приложения Terrasoft Administrator и вызовите команду контекстного меню "Сохранить в файл".

Я уже ничего не понимаю :-(
вот CallStack (см. аттач)
Объясните мне какого после вызова ShowWindowEditEx вызывается wnd_MultiSelectDataExOnShow???

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

Валентин, для корректной работы логики приведите код по окну wndTeam в функции wnd_ProjectEditOnPrepare к виду:

wndTeam.Window.ComponentsByName('dlData').Dataset = Services.GetNewItemByUSI('ds_Staff');
wndTeam.Window.ComponentsByName('fgSearch').IsVisible = false;
wndTeam.Window.ComponentsByName('fgDataButtons').IsVisible = false;
SetAttribute(wndTeam.Window, 'DatasetUSI', ExtractUSICodeEx(Services.GetNewItemByUSI('ds_Owner').USI));
wndTeam.Window.Attributes('DisplayFieldNames') = 'ContactID';
wndTeam.Window.Attributes('DisplayFieldName') = 'ContactID';
wndTeam.Window.Attributes('SearchFieldName') = 'ContactID'; 
wndTeam.Window.Attributes('KeyFieldName') = 'ID';
wndTeam.Window.Attributes('KeyValue') = '';
wndTeam.Window.Prepare();
var Dataset =  wndTeam.Window.ComponentsByName('dlData').Dataset;   
Dataset.Open();

Что касается Вашего комментария

"Хуторный Валентин Петрович" написал:Объясните мне какого после вызова ShowWindowEditEx вызывается wnd_MultiSelectDataExOnShow???

При изменении записи в разделе [Проекты] происходит вызов функции function EditProjectRecord. Окно редактирования вызывается посредством функции ShowEditWindowEx, согласно передаваемым параметрам которой не следует выполнять Prepare перед Show.
Чтобы это изменить, замените строку

ShowEditWindowEx('wnd_ProjectEdit', Attributes);

На:

ShowEditWindowEx('wnd_ProjectEdit', Attributes, undefined, undefined, true);
SetAttribute(wndTeam.Window, 'DatasetUSI', ExtractUSICodeEx(Services.GetNewItemByUSI('ds_Owner').USI));

наверное все таки:

SetAttribute(wndTeam.Window, 'DatasetUSI', ExtractUSICodeEx(Services.GetNewItemByUSI('ds_Staff').USI)); 

и еще добавил

wndTeam.Window.Attributes('SearchFieldNames') = 'ContactID'; 

т.к. ругалась функция AddSearchFields()

и конечно

var Dataset =  wndTeam.Window.ComponentsByName('dlData').Dataset;   
Dataset.Open();

можно убрать т.к. если нормально отрабатывает onPrepare() то датасет будет отккрыт

"Хуторный Валентин Петрович" написал:наверное все таки:
SetAttribute(wndTeam.Window, 'DatasetUSI', ExtractUSICodeEx(Services.GetNewItemByUSI('ds_Staff').USI));

Вы правы, так как в коробочной версии нет ds_Staff, тестировала на ds_Owner. Пропустила внести изменения в данной строке при подмене.

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