Динамически добавленное меню (PXAction + MenuAutoOpen + AddMenuAction) скрывается на некоторых экранах, но не на других

Я пытаюсь динамически добавлять меню и связанные с ним действия через расширение графа. Написанный мной код работает на некоторых экранах, но не работает на других. Я вижу, что меню появляется во время обратной передачи, но оно сразу скрывается: http://recordit.co/T5KSEz7QJv

Я потратил несколько часов на изучение проблемы, и вот что я нашел на данный момент:

  • Если я не добавляю свое действие в меню, оно работает во всех случаях. Проблема только при использовании AddMenuAction. Я вижу, что внутри PXAction есть некоторая логика для отображения / скрытия меню на основе видимости элементов внутри меню, но я не мог понять проблему.
  • Если само меню прямо объявлено в расширении графа (с использованием общедоступного PXAction ... и атрибутов), оно работает должным образом. В моем случае это не, потому что я пытаюсь создать общий механизм, который позволит мне добавлять действия к любому типу графа.

Два следующих расширения диаграммы подчеркивают эту проблему - первое предназначено для ввода заказов на продажу, а другое - для обслуживания бизнес-счета. Они идентичны, за исключением параметра типа графика:

//This extension works fine, button displays as expected
public class TestButtonsSO : PXGraphExtension<SOOrderEntry>
{
    public override void Initialize()
    {
        base.Initialize();

        Type primaryViewItemType = Base.Views[Base.PrimaryView].Cache.GetItemType();

        var myMenu = PXNamedAction.AddAction(Base, primaryViewItemType, "MyMenu", "My Menu",
                    a => a.Get(),
                    new PXEventSubscriberAttribute[] { new PXButtonAttribute() { MenuAutoOpen = true } });

        var action = PXNamedAction.AddAction(Base, primaryViewItemType, "MyMenu$Test", "Test",
            a => throw new PXException("Clicked!"),
            new PXEventSubscriberAttribute[] { new PXButtonAttribute() { } });

        myMenu.AddMenuAction(action);
    }
}

//The menu will appear during post-back but gets hidden right away
public class TestButtonsBAccount: PXGraphExtension<BusinessAccountMaint>
{
    public override void Initialize()
    {
        base.Initialize();

        Type primaryViewItemType = Base.Views[Base.PrimaryView].Cache.GetItemType();

        var myMenu = PXNamedAction.AddAction(Base, primaryViewItemType, "MyMenu", "My Menu", 
                    a => a.Get(),
                    new PXEventSubscriberAttribute[] { new PXButtonAttribute() { MenuAutoOpen = true } });

        var action = PXNamedAction.AddAction(Base, primaryViewItemType, "MyMenu$Test", "Test", 
            a => throw new PXException("Clicked!"),
            new PXEventSubscriberAttribute[] { new PXButtonAttribute() { } });

        myMenu.AddMenuAction(action);
    }
}

person Gabriel    schedule 07.01.2018    source источник


Ответы (1)


По результатам расследования эта проблема, похоже, вызвана тем, что PXGridWithPreview повреждает ToolBarItemCollection в DataSource. Ваш подход, описанный выше, будет отлично работать на всех экранах Acumatica, которые не содержат элемент управления PXGridWithPreview. Для экранов, уже использующих PXGridWithPreview, нам придется подождать, пока исправление не будет реализовано инженерной группой Acumatica (этот элемент останется на моем радаре и опубликует обновление, как только исправление станет доступным)

person RuslanDev    schedule 09.01.2018
comment
Большое спасибо за исследование проблемы - person Gabriel; 10.01.2018