AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 28.10.2010, 18:10   #1  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Слой прикладного объекта в перекрестных ссылках
Иногда хочется иметь возможность найти по перекрестным ссылкам только свои модификации, исключив стандартный функционал. Особенно актуально это может быть при переходе на новый SP или версию системы. Во вложении - проект с соответствующими модификациями: новое поле в таблице, поле на гриде формы и класс, который заполняет новое поле. В принципе, можно было поступить проще и реализовать его заполнение на вставке записи в xRefPaths, что кажется логичным. Однако, для большинства объектов приложения путь определяется за счет создания объекта TreeNode, а как показала практика, при создании сотен тысяч таких объектов по ходу сбора перекрестных ссылок клиент Аксапты почему-то валится. В связи с этим заполнение поля было вынесено в отдельный класс, который запускается на одном из этапов построения перекрестных ссылок. Затем можно использовать эти данные на форме перекрестных ссылок, в т.ч. для фильтрации записей.

Проект приведен для AX 3.0, причем выгрузка сделана только для модификаций на usr-слое. При накатывании проекта на 4-ку или 2009-ю может потребоваться вручную добавить новое поле в таблицу и вынести его на форму.
Angehängte Dateien
Dateityp: zip DEV_xRefNamesUtilLevel.zip (13,8 KB, 386x aufgerufen)
This post has been rated by: mazzy (5), Logger (7), MikeR (2), jonny (1), Antoncheg (1), someOne (1), kornix (1).
Alt 29.10.2010, 10:05   #2  
AraraT® ist offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Registriert seit: 13.01.2006
Ort: Республика Татарстан, г. Казань
Я правильно понимаю, что в поле хранится самый верхний слой, в котором были сделаны добавления или изменения?
Alt 29.10.2010, 15:57   #3  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Правильно.
Alt 29.10.2010, 16:04   #4  
Antoncheg ist offline
Antoncheg
Участник
 
41 / 11 (1) +
Registriert seit: 29.02.2008
Не компилируется main
Добрый день! Проект, безусловно, полезный. Есть небольшой вопрос, у меня не компилируется метод main класса DEV_xRefPathsLayerUpdate."is не является методом класса" . В перекрестных ссылках везде обозачен солой sys (думаю, связано с вышеуказанным). Заранее благодарен.AX 3.0
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	xDev.JPG
Hits:	613
Größe:	38,2 KB
ID:	6316  
Alt 29.10.2010, 16:49   #5  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Пардон, это я в 3-ный SysDictClass перенес пару методов из 2009-й:
X++:
public static boolean is(Object _class, classId _classId)
{
    SysDictClass    dictCls = new SysDictClass(classidget(_class));
    boolean         ret     = dictCls && dictCls.isImplementing(_classId);
    ;
    if (!ret)
    {
        ret = SysDictClass::isEqualOrSuperclass(classidget(_class), _classId);
    }
    return ret;
}

static public Object as(Object _class, classId _classId)
{
    if (SysDictClass::is(_class, _classId))
        return _class;
    return null;
}
This post has been rated by: Logger (1).
Alt 29.10.2010, 16:52   #6  
Antoncheg ist offline
Antoncheg
Участник
 
41 / 11 (1) +
Registriert seit: 29.02.2008
to gl00mie, спасибо, с этим уже разобрался, забрал с 9-ки Остался вопрос, почему у меня везде sys слой, хотя объекты модифицированы на usr ?
Alt 29.10.2010, 16:55   #7  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Простановка слоя приделана в xRefUpdate на случай перестройки всех перекрестных ссылок ("Обновить все"). В принципе, можно запустить класс и отдельно - он тогда в уже созданных записях xRefPaths проставит "правильный" код слоя.
Alt 07.02.2011, 20:06   #8  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Обновил проект для работы на AX 2009, по-максимуму сократил использование TreeNode, из-за которых AOS отжирал фигову тучу памяти и дико тормозил. За счет кэширования информации по формам, отчетам и подобным "большим" объектам приложения, хранящимся на слое целиком, а также за счет оптимизации SysTreeNode::path2ApplObjectType() удалось добиться того, что теперь на все про все у меня уходит чуть больше 20 минут (AOS в виртуалке, проц - Xeon 5405 @ 2 GHz):
Code:
2 из 1004083 записей обновлено в таблице xRefPaths
Израсходованное время: 0:20:48
Закэшировано 7403, в кэше найдено/не найдено 499471/14555, создано объектов TreeNode 83615, записей UtilElements запрошено/найдено 393742/386102
Обновление завершено
В проекте - только изменения на usr-слое.
Angehängte Dateien
Dateityp: rar DEV_xRefNamesTopmostUtilLevel_AX2009.rar (11,6 KB, 381x aufgerufen)

Geändert von gl00mie (07.02.2011 um 20:45 Uhr) Grund: вложил проект с исправленной опечаткой ("Fields Groups")
This post has been rated by: mazzy (5), Logger (10).
Alt 25.12.2020, 18:19   #9  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Привет всем.
А кто-нибудь пробовал адаптировать этот проект для 2012-й аксапты ?
Или может быть знает как по Path узла получить sysModelElement ? (это нужно чтобы не использовать тормозной TreeNode. Если есть sysModelElement, то слой легко получается простым запросом к sysModelElementData и sysModelLayer)
Alt 27.12.2020, 18:55   #10  
trud ist offline
trud
Участник
Лучший по профессии 2017
 
1.039 / 1635 (57) ++++++++
Registriert seit: 07.06.2003
Blog-Einträge: 1
я вот такие 2 дисплей метода юзаю на таблице xRefReferences в 2012. Возможно они и пришли из этого проекта Дениса
один показывает находится ли элемент на текущем слое, другой выдает строку кода в месте расположения перекрестных ссылок. Но это именно дисплей методы, чтобы фильтровать надо их скопировать в Excel
X++:
//BP Deviation documented
[SysClientCacheDataMethodAttribute]
display NoYesId SDSinCurrentLayer()
{
    NoYes       ret;
    TreeNode    node;
    ;
    node = TreeNode::findNode(this.path());
    if (node && node.treeNodeType().isLayerAware())
    {
        ret = SysTreeNode::isNodeInLayer(node, currentAOLayer());
    }
    return ret;
}

//BP Deviation documented
[SysClientCacheDataMethodAttribute]
display SourceLine SDSgetSourceLine()
{
    SourceLine  res;
    TreeNode    node;
    ;
    if (this.line)
    {
        node = TreeNode::findNode(this.path());
        if (node)
        {
            res = strLine(node.AOTgetSource(), this.line - 1);
            res = strLRTrim(res);
        }
    }
    return res;
}
This post has been rated by: mazzy (5), Logger (5).
Alt 28.12.2020, 13:40   #11  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von trud Beitrag anzeigen
я вот такие 2 дисплей метода юзаю на таблице xRefReferences в 2012.
Спасибо, все работает.

А при интенсивной работе ошибок не бывает ?
Treenode-ы могут ошибки выдавать при интенсивном использовании.
Я еще у себя добавил вызов treeNodeRelease. Так точно не должно ничего утекать.
Alt 28.12.2020, 14:07   #12  
trud ist offline
trud
Участник
Лучший по профессии 2017
 
1.039 / 1635 (57) ++++++++
Registriert seit: 07.06.2003
Blog-Einträge: 1
ошибок не замечал. но тут вроде не должно быть особо интенсивной работы.
Создайте пример для воспроизведения проблемы, его можно будет обсудить.
Alt 28.12.2020, 20:24   #13  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Да я не утверждаю, что они обязаны быть.
Просто как-то переносил проект по поиску узла в проектах из ax3 в 2009 и заметил что клиент стал падать. Оказалось не хватало вызова treenodeRelease. С тех всегда его ставлю.
В обсуждаемом случае возможно не достигаем предела, поэтому и никаких проблем нет. У меня сегодня не возникло.

Geändert von Logger (28.12.2020 um 20:28 Uhr)
Alt 28.12.2020, 20:27   #14  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Доработал проект, чтобы взводил галку
\Data Dictionary\Tables\xRefPaths\Fields\IsCurLayer_MRC
для текущего слоя (а другие нам и не нужны)

Думает 2-3 минуты для всего usr слоя (129 тысяч узлов). Думаю, что достаточная скорость.
Соответственно, теперь можно фильтровать.

Для работы достаточно класса xRefPathsLayerUpdate (остальное паровозом прицепилось в проект, можно выкинуть)
Angehängte Dateien
Dateityp: zip PKoz_xRefAxforum_dev.zip (11,1 KB, 311x aufgerufen)
This post has been rated by: mazzy (5).
Alt 29.12.2020, 11:11   #15  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von trud Beitrag anzeigen
я вот такие 2 дисплей метода юзаю на таблице xRefReferences в 2012.
Попробовал SDSgetSourceLine

Он просто прекрасен !
Ооочень удобно.

А у вас он где на форме выведен ?
Столбец в гриде или отдельный контрол под гридом?
Alt 29.12.2020, 11:18   #16  
trud ist offline
trud
Участник
Лучший по профессии 2017
 
1.039 / 1635 (57) ++++++++
Registriert seit: 07.06.2003
Blog-Einträge: 1
Оба поля - дисплей методы в гриде
This post has been rated by: Logger (10).
Alt 02.01.2021, 10:30   #17  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von Logger Beitrag anzeigen
Доработал проект, чтобы ...
Ха.
Оказывается ветка AOT \Reports
работает так же как в 2009-й версии - в SysModelElements только одна корневая запись, а все дочерние узлы лежат бинарном поле.

Поправил для такого случая, чтобы корректно заполнялся слой.
Также заметил что для дизайнов форм слой заполняется только для ветки
\Forms\*\Designs\DesignList\*

а для ветки с полными путями
\Forms\*\Designs\Design\*
пропускается.

Сперва хотел для нее тоже дописать, но потом решил не трогать, так как
1. Это сильно усложнит заполнение и удлинит время работы
2. Эти ветки дублируют друг друга и проставление слоя в них обеих ничего не упрощает при дальнейшем использовании перекрестных ссылок. Просто увеличивает в 2 раза число узлов, которые при фильтрации остаются. Так что даже кхорошо что слой не заполняется для ветки \Forms\*\Designs\Design\*

PKoz_xRefPathsLayerUpdate_dev.zip

Geändert von Logger (02.01.2021 um 10:34 Uhr)
Alt 04.03.2021, 11:04   #18  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Поправил ряд багов.
Не обрабатывались поля и методы датасорса.
Angehängte Dateien
Dateityp: zip PKoz_xRefPathsLayerUpdate_dev.zip (5,4 KB, 331x aufgerufen)
This post has been rated by: mazzy (10), raz (5).
Stichworte
xref, законченный пример, перекрестные ссылки, слой приложения

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Как проверить существование метода у объекта Lucky13 DAX: Программирование 22 16.08.2024 20:32
ax2009: почему обновление перекрестных ссылок перестало быть пакетным заданием? mazzy DAX: Программирование 9 21.08.2010 22:08
перенос объекта со слоя на слой sparur DAX: Программирование 3 22.02.2007 11:33
Есть ли таблица соответствий ID -объекта - Имя объекта в Аксапта? coja DAX: Администрирование 5 26.04.2005 15:25
"Падающий" вниз слой ? renat DAX: Программирование 3 01.03.2004 08:10

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 05:13 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.