Подскажите как правильно про инициализировать данные для wnd_MultiSelectData помещенный в WindowsContainer. У меня все время появляется такая ошибка: 'MultiSelectData.Dataset.USI' - есть null или не является объектом
Нравится
Валентин, ознакомьтесь с примерами в темах:
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. Пропустила внести изменения в данной строке при подмене.