Доброго времени суток.
Стоит такая задача. На определенном этапе бизнес-процесса открывается 2 окна (карточки редактирования): счет и задача "Подтвердить счет". У пользователя два варианта: либо изменить дату начала/завершения задачи и сохранить задачу, либо подтвердить счет, при этом задача "Подтвердить счет" становится выполненной.
Вопрос такой. У задачи статус "Выполнена", но при этом остается висеть окно задачи с неактуальными данными. Хочу его автоматически закрывать. Возможно ли это?
Нравится
Добрый день, Петр.
Метод, закрывающий окно: Close()
Если нужно обратиться в объекту окна, и вызвать его метод Close(), сделайте так:
Window.Close();
"Фильковский Павел" написал:Добрый день, Петр.
Метод, закрывающий окно: Close()
Если нужно обратиться в объекту окна, и вызвать его метод Close(), сделайте так:
Window.Close();
Спасибо за ответ, Павел. Но в том то и проблема, что ссылки на объект окна у меня нет. Существует ли какая-нибудь возможность, например получить форму редактирования задачи зная ID задачи (если есть открытая форма, то получить ее) или список всех открытых окон экземпляра Террасофт Клиент (я бы их перебрал и по содержимому Attributes нужное окно нашел)?
Или все-таки придется городить огород с сохранением ссылок на все окна в какой-то коллекции?
Может проще не выводить два окна редактирования? а обойтись диалоговым окном с возможностью либо выбрать что делать дальше (задача или счет). Либо собственное окно с возможностью закрыть задачу либо подтвердить счет, пользователю же необязательно видеть всю карточку и счета, и задачи?
Добрый день, коллеги!
Но если же Вы все-таки желаете использовать связь между одельными окнами, посмотрите примеры использования:
NotifyObject.Notify(Window, MSG_OK, null);
и
FindEditWindow(USI, SearchFieldName, SearchValue); FindWindow(USI, RecordID);
"Александр Кудряшов" написал:Может проще не выводить два окна редактирования? а обойтись диалоговым окном с возможностью либо выбрать что делать дальше (задача или счет).
Сейчас уже не проще. Бизнес-процесс спроектирован так, что каждый его этап сопровождается выводом формы редактирования задачи, связанной с этим этапом (это фундаментальное требование). Плюс, для этапов, связанных с оформлением доментов, еще выводится форма редактирования этого документа. Ваше предложение предполагает переделывание кучи БП, а в данном случае я хотел обойтись малой кровью.
"Фильковский Павел" написал: NotifyObject.Notify(Window, MSG_OK, null);
Этот вариант не подойдет, поскольку ссылки на Window у меня нет, я не знаю как мне получить нужное окно.
"Фильковский Павел" написал: FindEditWindow(USI, SearchFieldName, SearchValue);
FindWindow(USI, RecordID);
А вот за это спасибо. У меня была мысль руками в
WinCache_Windows
поковыряться. Не подскажете, можно ли об этом механизме почитать поподробнее?
Ну и судя по этому куску кода из функции ShowEditWindowEx сервиса scr_WindowUtils
if ((!Services.AlwaysGetLastItemVersion) && (IsUndefined(UseCache) || UseCache)) { // здесь пропущены проверки var EditWindow = WinCache_Get(EditWindowUSI, RecordID); if (!Assigned(EditWindow)) { return; } } else { var EditWindow = Services.GetNewItemByUSI(EditWindowUSI); }
с выключенным кэшированием сервисов я таким образом окна получать не смогу?
Петр, WinCache_Windows - это системная функция, в конфигурациютранслируется из ядра.
Больше о ней можно узнать из открытых источников.
С выключенным кэшированием можно будет обращаться к открытым окнам, пока они в ОЗУ.
После закрытия - уже нет.