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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.09.2022, 02:52   #1  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Jumpref (DAX2012)
Добрый день!

Есть форма, на которой главный датасорс не привязан к компании, а подчиненный хранится в разрезе компаний.
В главном датасорсе есть код компании, настроена связь таблиц через 2 поля.

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

Что я упустил?
Старый 02.09.2022, 09:22   #2  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Как-то очень абстрактно всё, примеры кода из jumpref хотя бы приведите, что ли
Старый 02.09.2022, 10:43   #3  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Встреча такое, но в 2009й версии.
В 3ке работало.

Лечили просто -
В коде метода писали
ChangeCompany
И внутри него переход делали.
Старый 02.09.2022, 10:54   #4  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Да собственно в моей голове jumpref должен был отработать без перекрытий, так как есть настроенный relation.

После того как не отработал, подумал что проблема в разных компаниях и написал:
X++:
changeCompany(DataAreaId2)
{
      super();
}
Результат не изменился.
Попытка через MenuFunction также провалилась.
X++:
changeCompany(DataAreaId2)
{
    new MenuFunction(menuitemdisplaystr(ProdTable), MenuItemType::Display).run(args);
}
Поясню более подробно ситуацию: форма открыта в компании DataAreaId1. На форму выведен главный datasource, таблица которого имеет свойство savedatapercompany == No, а также dataSource ProdTable. При этом в анализируемой строке ProdTable принадлежит к DataAreaId2 и прекрасно отображается на форме. Но при попытке провалиться в ProdTable открывается пустая форма.
Старый 02.09.2022, 11:08   #5  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
При этом в анализируемой строке ProdTable принадлежит к DataAreaId2 и прекрасно отображается на форме.
Вот это мне кажется несколько странным, что у вас при выбранной активной DataAreaId1 на форме спокойно отображаются записи из DataAreaId2.
Он же, по идее, ядром должен компанию в запросе ограничивать.
Там никаких шаманств на форме в запросах нет для этого? Временной таблицы и т.д.?
Старый 02.09.2022, 11:28   #6  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Нет. Только свойства на форме setCompany == No и на датасорсах crossCompanyAutoQuery == Yes.
По такому же принципу и View работает. Если у главной таблицы savedatapercompany == No, а у подчиненной Yes, то при открытии таблицы отобразятся записи всех компаний подчиненной таблицы

Последний раз редактировалось DesparioN; 02.09.2022 в 12:19.
За это сообщение автора поблагодарили: Pandasama (2).
Старый 02.09.2022, 12:00   #7  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
О, не знал про такие свойства. Даже не сталкивался с такой необходимостью как-то.

А по теме - поставить точку останова на init/run открывающейся по jumpref формы и посмотреть, что там творится в Args, в запросе и т.д. - не пробовали?
Может быть, как раз дело в том, что из-за setCompany = No у родительской формы в дочереней запрос как-то неправильно компании обрабатывает?
Старый 02.09.2022, 12:03   #8  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
362 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Посмотрите, что вас в ограничениях по запросу, в том числе dynalink в открывающей форме, стандартными средствами.

args не видно где у вас заполняются, если в текущей компании, то работать и не будет, при переключениях между компаниями надо обнулять данные в курсорах (=null), иначе он помнит код старой компании.

Попробуйте такой код

X++:
ProdTable prodTableAreaId2;

changeCompany(DataAreaId2)
{
prodTableAreaId2 = ProdTable::find(ProdTable.ProdId);
args = new Args();
args.record(prodTableAreaId2);
    new MenuFunction(menuitemdisplaystr(ProdTable), MenuItemType::Display).run(args);
}
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: DesparioN (1).
Старый 02.09.2022, 12:18   #9  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Не все скопировал. Как раз так и было написано.
Старый 02.09.2022, 14:47   #10  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Благодарю)
Проблема была именно в dynalink
Старый 14.10.2022, 02:49   #11  
vmoskalenko is offline
vmoskalenko
Участник
Аватар для vmoskalenko
 
145 / 334 (12) ++++++
Регистрация: 25.01.2007
Адрес: Toronto
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Проблема была именно в dynalink
Не понял за dynalink. Туплю наверное.

Альтернативное решение для FnO

X++:
public void jumpRef()
{
    CTSGLImportTableView    glImportTableView;

    glImportTableView = element.dataSource().cursor();

    if (glImportTableView.LedgerJournalId)
    {
        // gets the deep links generator instance
        var generator     = new Microsoft.Dynamics.AX.Framework.Utilities.UrlHelper.UrlGenerator();
        var currentHost   = new System.Uri(UrlUtility::getUrl());
        generator.HostUrl = currentHost.GetLeftPart(System.UriPartial::Authority);
        generator.Company = glImportTableView.CompanyCode; // curext();
        generator.MenuItemName = menuItemDisplayStr(LedgerJournalTableDailyGlobal);
        generator.Partition = getCurrentPartition();

        // repeat this segment for each datasource to filter
        var requestQueryParameterCollection = generator.RequestQueryParameterCollection;
        requestQueryParameterCollection.AddRequestQueryParameter(
            formDataSourceStr(LedgerJournalTable,LedgerJournalTable),
            fieldStr(LedgerJournalTable, JournalNum),
            glImportTableView.LedgerJournalId
            );

        System.Uri fullURI = generator.GenerateFullUrl();

        // to get the encoded URI, use the following code
        new Browser().navigate(fullURI.AbsoluteUri); //ISSUE: it will not open posted General Journals. Well, it opens form, but user should change filter to show All

        super();
    }
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kurthatlevik: DAX2012 R3 – Playing with Retail CRT Blog bot DAX Blogs 0 28.10.2015 20:11
DAX2012 - перепоставки по закупкам Starling DAX: Функционал 2 18.03.2014 13:56
Dynamics AXBR: Usando o jumpRef() Blog bot DAX Blogs 0 02.06.2011 20:11
Обработка jumpRef в Dialog Eldar9x DAX: Программирование 13 12.05.2008 13:24
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:37.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.