Acumatica Smart Panel 打开时不显示数据
Acumatica Smart Panel not showing data when opening
我正在尝试在销售订单屏幕上创建一个智能面板,它将显示与 SOLine 库存项目相关的项目。
我在库存项目页面上添加了一个选项卡和网格,并使用 CFBSUPSale 的 DAC 创建了一个 table 来创建此关系。所有这些都按预期工作。
我打开了智能面板,所有列都在显示,但没有显示任何数据。我知道需要额外的代码才能将数据从智能面板获取到 SOLine,但此时我要做的就是让相关项目显示在面板中。
这里是智能面板的html:
<px:PXSmartPanel runat="server" ID="UpSalePanel" Caption="Supplemental Items" Height="500px" Width="1100px" Key="UpSaleData1" CaptionVisible="True" LoadOnDemand="True">
<px:PXGrid runat="server" ID="UpSaleGrid" AdjustPageSize="Auto" SkinID="Inquire" Width="100%" Height="250px" DataSourceID="ds">
<Levels>
<px:PXGridLevel DataMember="UpSaleData1">
<Columns>
<px:PXGridColumn DataField="UpSaleID" Width="70" />
<px:PXGridColumn DataField="UsrSelected" Width="60" />
<px:PXGridColumn DataField="UpInvID" Width="70" />
<px:PXGridColumn DataField="UpInvDescr" Width="200" />
<px:PXGridColumn DataField="RequiredItem" Width="60" />
<px:PXGridColumn DataField="RequiredQty" Width="70" /></Columns></px:PXGridLevel></Levels></px:PXGrid>
<px:PXPanel runat="server" ID="PXUpSalePnl">
<px:PXButton runat="server" ID="CstButton4" Text="Add" />
<px:PXButton runat="server" ID="CstButton5" Text="Add & Close" DialogResult="OK" />
<px:PXButton runat="server" ID="CstButton6" Text="Cancel" DialogResult="Cancel" /></px:PXPanel></px:PXSmartPanel>
这是 SOOrderEntry 代码:
//Retreiving data from CFBSregistrationGroup table and creating RegistrationGroup view.
public PXSelect<CFBSUpSale, Where<CFBSUpSale.invID, Equal<Current<SOLine.inventoryID>>>> UpSaleData1;
public PXFilter<UpSalePnlDAC> UpSaleData2;
public PXAction<SOOrder> cMDUpSale;
[PXUIField(DisplayName = "Supplemental Items", MapViewRights = PXCacheRights.Select)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
protected virtual IEnumerable CMDUpSale(PXAdapter adapter)
{
if (Base.Transactions.Current != null &&
UpSaleData1.AskExt() == WebDialogResult.OK)
{
//Stuff goes here to move data from panel back to SOLine
}
return adapter.Get();
}
我遇到的另一个问题是我认为 PXAction 行不应该使用 SOOrder 而应该是 SOLine 行,但是当我修改它时智能面板根本不会显示。使用现在的代码,按钮显示在 SOOrder header 和 SOLine 网格 header 上。这是我能够在按下按钮时让面板显示的唯一方法。
如有任何帮助,我们将不胜感激。
考虑查看分配弹出窗口是如何在 SOOrderEnty 上实现的,ScreenID = SO301000。不涉及 PXAction,而是在 px:PXTabItem 中找到 ActionBar 标记:
<px:PXTabItem Text="Document Details">
然后是 px:PXToolBarButton 调用 LSSOLine class 的 BinLotSerial 方法:
<px:PXToolBarButton Text="Allocations" Key="cmdLS" CommandName="LSSOLine_binLotSerial" CommandSourceID="ds" DependOnGrid="grid">
LSSOLine class 使用 PXSelectBase 定义了 BQL Select 语句:
public class LSSOLine : LSSelectSOBase<SOLine, SOLineSplit,
Where<SOLineSplit.orderType, Equal<Current<SOOrder.orderType>>,
And<SOLineSplit.orderNbr, Equal<Current<SOOrder.orderNbr>>>>>
BinLotSerial 方法依次调用 PXSelectBase 的 View.Ask() 来提供弹出窗口。
问题最终是我们没有正确设置 AutoCallBack-Target 和 AutoCallBack-Command。如果我们手动点击刷新按钮,网格中显示的项目不会自动显示。这让我们相信代码无法正常工作。
<px:PXSmartPanel runat="server" ID="UpSalePanel" Caption="Supplemental Items" Height="500px" Width="1100px" Key="UpSaleData1" CaptionVisible="True" AutoCallBack-Target="UpSaleGrid" AutoCallBack-Command="Refresh">
我正在尝试在销售订单屏幕上创建一个智能面板,它将显示与 SOLine 库存项目相关的项目。
我在库存项目页面上添加了一个选项卡和网格,并使用 CFBSUPSale 的 DAC 创建了一个 table 来创建此关系。所有这些都按预期工作。
我打开了智能面板,所有列都在显示,但没有显示任何数据。我知道需要额外的代码才能将数据从智能面板获取到 SOLine,但此时我要做的就是让相关项目显示在面板中。
这里是智能面板的html:
<px:PXSmartPanel runat="server" ID="UpSalePanel" Caption="Supplemental Items" Height="500px" Width="1100px" Key="UpSaleData1" CaptionVisible="True" LoadOnDemand="True">
<px:PXGrid runat="server" ID="UpSaleGrid" AdjustPageSize="Auto" SkinID="Inquire" Width="100%" Height="250px" DataSourceID="ds">
<Levels>
<px:PXGridLevel DataMember="UpSaleData1">
<Columns>
<px:PXGridColumn DataField="UpSaleID" Width="70" />
<px:PXGridColumn DataField="UsrSelected" Width="60" />
<px:PXGridColumn DataField="UpInvID" Width="70" />
<px:PXGridColumn DataField="UpInvDescr" Width="200" />
<px:PXGridColumn DataField="RequiredItem" Width="60" />
<px:PXGridColumn DataField="RequiredQty" Width="70" /></Columns></px:PXGridLevel></Levels></px:PXGrid>
<px:PXPanel runat="server" ID="PXUpSalePnl">
<px:PXButton runat="server" ID="CstButton4" Text="Add" />
<px:PXButton runat="server" ID="CstButton5" Text="Add & Close" DialogResult="OK" />
<px:PXButton runat="server" ID="CstButton6" Text="Cancel" DialogResult="Cancel" /></px:PXPanel></px:PXSmartPanel>
这是 SOOrderEntry 代码:
//Retreiving data from CFBSregistrationGroup table and creating RegistrationGroup view.
public PXSelect<CFBSUpSale, Where<CFBSUpSale.invID, Equal<Current<SOLine.inventoryID>>>> UpSaleData1;
public PXFilter<UpSalePnlDAC> UpSaleData2;
public PXAction<SOOrder> cMDUpSale;
[PXUIField(DisplayName = "Supplemental Items", MapViewRights = PXCacheRights.Select)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
protected virtual IEnumerable CMDUpSale(PXAdapter adapter)
{
if (Base.Transactions.Current != null &&
UpSaleData1.AskExt() == WebDialogResult.OK)
{
//Stuff goes here to move data from panel back to SOLine
}
return adapter.Get();
}
我遇到的另一个问题是我认为 PXAction 行不应该使用 SOOrder 而应该是 SOLine 行,但是当我修改它时智能面板根本不会显示。使用现在的代码,按钮显示在 SOOrder header 和 SOLine 网格 header 上。这是我能够在按下按钮时让面板显示的唯一方法。
如有任何帮助,我们将不胜感激。
考虑查看分配弹出窗口是如何在 SOOrderEnty 上实现的,ScreenID = SO301000。不涉及 PXAction,而是在 px:PXTabItem 中找到 ActionBar 标记:
<px:PXTabItem Text="Document Details">
然后是 px:PXToolBarButton 调用 LSSOLine class 的 BinLotSerial 方法:
<px:PXToolBarButton Text="Allocations" Key="cmdLS" CommandName="LSSOLine_binLotSerial" CommandSourceID="ds" DependOnGrid="grid">
LSSOLine class 使用 PXSelectBase 定义了 BQL Select 语句:
public class LSSOLine : LSSelectSOBase<SOLine, SOLineSplit,
Where<SOLineSplit.orderType, Equal<Current<SOOrder.orderType>>,
And<SOLineSplit.orderNbr, Equal<Current<SOOrder.orderNbr>>>>>
BinLotSerial 方法依次调用 PXSelectBase 的 View.Ask() 来提供弹出窗口。
问题最终是我们没有正确设置 AutoCallBack-Target 和 AutoCallBack-Command。如果我们手动点击刷新按钮,网格中显示的项目不会自动显示。这让我们相信代码无法正常工作。
<px:PXSmartPanel runat="server" ID="UpSalePanel" Caption="Supplemental Items" Height="500px" Width="1100px" Key="UpSaleData1" CaptionVisible="True" AutoCallBack-Target="UpSaleGrid" AutoCallBack-Command="Refresh">