AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.04.2010, 15:19   #1  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Перекрытие linkActive в подчиненном датасорсе
День добрый, товарищи.
Решаю вопрос с позиционированием в подчиненном гриде при переходе к контексту оповещения.
По ходу реализации возник вопрос. При перекрытии метода linkActive подчиненого датасорса использую следующий код:
X++:
public void linkActive()
{
     if (!element.parmTaskFinded())
    {
        super();
    }
    else
    {
        element.parmTaskFinded(false);
        element.gotoTasks();
     }
}
Так вот если я попадаю в ветку else, то ломается связь между датасорсами в главном и подчиненном гриде. То есть при переходе по строкам главного грида, данные в подчиненном не меняются, метод linkActive не вызывается.
Куда копать? уже всю голову сломал.
Старый 14.04.2010, 15:23   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
Так вот если я попадаю в ветку else, то ломается связь между датасорсами в главном и подчиненном гриде.
еще бы, вы же в ветке else не вызываете метод super().
а именно там ядро и отрабатывает действия по связи.
__________________
полезное на axForum, github, vk, coub.
Старый 14.04.2010, 15:28   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
а когда/где вы вызываете element.parmTaskFinded(true)?
Старый 14.04.2010, 15:28   #4  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Мне как раз и нежелательно его вызывать, т.к. подчиненный датасорс перечитается и курсор перепрыгнет на первую строку подчиненного грида. А у меня позиция уже выставлена в методе findRecord в подчиненного дс.

element.parmTaskFinded(true) выставляется в методе findRecord.
Старый 14.04.2010, 15:32   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
element.parmTaskFinded(true) выставляется в методе findRecord.
а element.gotoTasks() случайно не использует этот самый findRecord?
Старый 14.04.2010, 15:34   #6  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
а element.gotoTasks() случайно не использует этот самый findRecord?
Нет этот метод просто ставит фокус на подчиненный грид.
Старый 14.04.2010, 15:36   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
Мне как раз и нежелательно его вызывать, т.к. подчиненный датасорс перечитается и курсор перепрыгнет на первую строку подчиненного грида. А у меня позиция уже выставлена в методе findRecord в подчиненного дс.
позиция чего?
у вас одна и та же подчиненная запись может быть подчинена двум разным основным записям?

form1
====
main1
main2
...

form2
====
sub1,main1
sub2,main1
sub3,main2
sub4,main2
sub5,main2
...

итак, вы:
1. открыли форму1, ядро установило курсор на main1
2. открыли форму2 из формы1, ядро связало из dynalink'ом. В форме2 показаны две записи sub1, sub2
3. вы передвигаете курсор в форме1 на main2. ядро вызывает метод activeLink в форме2, чтобы покзать 3 (три) совсем другие (!!!) записи sub3, sub4, sub5.

Какая позиция? Какой findRecord? О чем вы говорите?
__________________
полезное на axForum, github, vk, coub.
Старый 14.04.2010, 15:40   #8  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Я так понимаю, это продолжение темы Контекст оповещения Workflow
__________________
Ivanhoe as is..
Старый 14.04.2010, 15:44   #9  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Немного не так...
Я получаю оповещение от некого объекта, в данном случае это Task. Из формы оповещений я хочу перейти к источнику оповещения. Для этого я должен сначала выставить позицию в главном дс, затем в подчиненном. Это все на одной форме в двух гридах.
Старый 14.04.2010, 15:49   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
я должен сначала выставить позицию в главном дс, затем в подчиненном.
Делайте это из одного и тогого же места, сразуже как только распознали, что форма открывается для просмотра конкретной задачи. Зачем вам перекрывать linkActive?
Старый 14.04.2010, 16:06   #11  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Я как раз выставляю его в одном месте, в методе findRecord подчиненного дс, но после вызывается его же метод linkActive и сбрасывает выставленую позицию. Я и подумал, что можно запретить вызов, чтобы этого не происходило.
Старый 14.04.2010, 16:12   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
Я как раз выставляю его в одном месте, в методе findRecord подчиненного дс
а почему вы решили использовать метод подчинённого дс?
Старый 14.04.2010, 16:19   #13  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Потому что туда в качестве параметра приходит как раз ссылка на контекст оповещения
public boolean findRecord(Common _record)
вот как раз _record это и есть моя задача, на которую мне надо встать.
Потом делаю так:
X++:
 select firstonly taskTable where taskTable.RecId == _record.RecId;
    select firstonly docTable where docTable.DocumentId == taskTable.DocumentId;

    Document_ds.findRecord(docTable);
    Task_ds.research();

    ret = super(_record);
Старый 14.04.2010, 17:04   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AlexeyVS Посмотреть сообщение
Потому что туда в качестве параметра приходит как раз ссылка на контекст оповещения
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Я так понимаю, это продолжение темы Контекст оповещения Workflow
Ага. Значит вы зажаты контекстом класса EventContextInformation. У меня возник альтернативный вариант выхода из этого "порочного круга". Что если добавить на форму ещё один отдельный (не связанный ни с какимими другими) вспомогательный DataSource по подчинённой таблице. И натравить EventContextInformation именно на него. Тогда управление прийдёт именно в его findRecord, из которого можно будет свободно (не перекрывая linkActive) управлять связкой двух других "настоящих" дс.

P.S.: Гипотеза чисто теоретическая, т.к. сам с оповещениями никогда не работал
Старый 14.04.2010, 17:50   #15  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Интересно, но я не представляю как такое можно реализовать. Ведь само оповещение генерится инфраструктурой workflow. Я всего лишь запускаю некий документ в документооборот.
Есть еще вариант. Каким-то образом реализовать руками связывание двух источников после обхода метода super в linkActive.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Возможно ли изменить Fields в датасорсе на форме? andriy_s DAX: Функционал 2 26.03.2010 14:04
Запретить редактирование поля в датасорсе Eldar9x DAX: Программирование 3 10.07.2008 12:04
При повторном вызове linkActive проваливается в validateWrite(Строки общего журнала ГК) Lemming DAX: Программирование 6 25.10.2007 13:50
Слетают методы на полях в датасорсе... как бороться? soin DAX: Программирование 6 17.01.2005 15:53
Перекрытие метод new у формы Хилари DAX: Программирование 8 27.04.2004 13:48

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:05.