Я пытаюсь динамически добавлять меню и связанные с ним действия через расширение графа. Написанный мной код работает на некоторых экранах, но не работает на других. Я вижу, что меню появляется во время обратной передачи, но оно сразу скрывается: 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);
}
}