Дошли-таки руки реализовать задумку: открывать проект и сразу форму поиска по нему, но в этом деле обнаружился один
нюанс В общем-то все просто:
- Любой проект легко и просто ищется в UtilElements
- имея на руках запись UtilElements для проекта, ищем TreeNode - это можно сделать с помощью xUtilElements::getNode()
- затем этот TreeNode проекта надо подпихнуть якобы через контекстное меню в форму SysAotFind. Я выбрал для этого класс SysContextMenuTreeNode, в который добавил такой вот метод:
X++:
public static SysContextMenuTreeNode newNode(TreeNode _treeNode)
{
return new SysContextMenuTreeNode(_treeNode);
}
Зачем добавлять новый метод, если уже есть SysContextMenuTreeNode::newPath()? А затем, что последний берет на входе TreeNodePath и вызывает TreeNode::findNode() - а тот никогда не найдет узел типа "проект".
- Ну и нюанс: в форму поиска надо передавать не абы какой ProjectNode, а обязательно полученный после вызова ProjectNode.getRunNode(), иначе поиск работать не будет.
Вот пример тестового джобика:
X++:
Args args;
UtilElements ue;
ProjectNode projectNode;
;
select firstonly ue
where ue.utilLevel == currentAOLayer()
&& ue.recordType == UtilElementType::SharedProject
&& ue.createdBy == curuserid()
;
if (ue)
{
projectNode = xUtilElements::getNode(ue);
if (projectNode)
{
projectNode = projectNode.getRunNode(); // NB! без этого поиск не заработает
args = new Args();
args.parmObject(SysContextMenuTreeNode::newNode(projectNode));
new MenuFunction(menuitemdisplaystr(SysAotFind), MenuItemType::Display).run(args);
}
}