向网格线添加额外的注释字段

时间:2016-09-07 15:17:26

标签: acumatica

我有一个想要在网格中添加额外注释字段的客户端。如果这不可能,有没有办法在网格中有一个大文本字段,使用弹出窗口编辑该字段中的大量文本?

优先级: 1.)如果可能,在网格中添加额外的注释字段。 2.)失败#1,是否有办法添加弹出窗口来编辑大型标准用户文本字段。

1 个答案:

答案 0 :(得分:1)

我相信你的第一个问题的答案是否定的。如果网格已经有一个注释,则它不能有另一个注释。我之前提出了这个问题。

对于#2,你应该能够做一个显示你的领域的智能面板。使用PXTextEdit并根据所选/当前行设置面板的新视图以指向。

要添加智能面板(弹出式面板),您需要掌握一些功能。我更喜欢使用带有图表和表格扩展名的AEF。 T200 / T300培训材料中有关于这些主题的文档。在我的示例中,我将注释功能添加到销售订单页面。我从现有的" PO Link"中复制了大部分逻辑。按钮和面板,它是POSupplyOK PXAction和当前的供应视图(第SO301000页)。

首先,您需要将我们作为扩展表/字段添加到销售行的新字段:

 [PXTable(typeof(SOLine.orderType), typeof(SOLine.orderNbr), typeof(SOLine.lineNbr), IsOptional = true)]
public class SOLineExtension : PXCacheExtension<SOLine>
{
    #region XXMyNote
    public abstract class xXMyNote : PX.Data.IBqlField
    {
    }
    protected string _XXMyNote;
    [PXDBString]
    [PXUIField(DisplayName = "My Note")]
    public virtual string XXMyNote
    {
        get
        {
            return this._XXMyNote;
        }
        set
        {
            this._XXMyNote = value;
        }
    }
    #endregion
}

然后我们需要创建一个新的图形扩展来添加面板视图和PXAction按钮以打开面板。

public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntry>
{

    public PXSelect<SOLine,
        Where<SOLine.orderType, Equal<Current<SOLine.orderType>>,
            And<SOLine.orderNbr, Equal<Current<SOLine.orderNbr>>,
                And<SOLine.lineNbr, Equal<Current<SOLine.lineNbr>>>>>> MyPanelView;

    public PXAction<SOOrder> myNoteAction;
    [PXUIField(DisplayName = "Add Note", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)]
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
    protected virtual IEnumerable MyNoteAction(PXAdapter adapter)
    {
        if (Base.Transactions.Current != null &&
            MyPanelView.AskExt() == WebDialogResult.OK)
        {
            //extra stuff here if needed when OK is pushed
        }

        return adapter.Get();
    }
}

现在你需要&#34;编辑&#34;销售订单页面。您需要将更改添加到自定义项目中,我通常直接在site \ pages \下的visual studio中编辑页面,因此在此示例中。然后返回并通过打开项目并执行以下步骤将我的代码粘贴到自定义项目中:

  1. 点击屏幕和+号以添加新屏幕
  2. 输入SO301000并保存
  3. 单击SO301000超链接以打开销售订单的布局编辑器
  4. 点击操作&gt;编辑ASPX
  5. 粘贴您的更改(如下所述)
  6. 在SO301000页面中添加以下内容:

    [1]在PXDataSource标记

    中添加DS Callback命令
    <px:PXDSCallbackCommand Name="MyNoteAction" Visible="False" 
        CommitChanges="true" DependOnGrid="grid" />
    

    [2]通过将以下内容添加到PXGrid&gt;中,将按钮添加到销售线网格上方的工具栏上。 ActionBar&gt; “文档详细信息”选项卡中网格的CustomItems标记。 (只需在页面中搜索&#34; PO Link&#34;更容易找到此位置或网格上方列出的任何按钮)。

    <px:PXToolBarButton Text="Add Note" DependOnGrid="grid">
        <AutoCallBack Command="MyNoteAction" Target="ds" />
    </px:PXToolBarButton>
    

    [3]添加面板代码,代表面板的外观。您可以使用大小调整以满足您的需求,只需确保使用以下示例代码将PXTextEdit设置为使用MultiLine。查看当前的销售订单页面,了解它在页面语法中的适用位置:

    <px:PXSmartPanel ID="PXSmartPanelNote" runat="server" Caption="My Note Panel Caption"
        CaptionVisible="true" DesignView="Hidden" LoadOnDemand="true" Key="MyPanelView" CreateOnDemand="false" AutoCallBack-Enabled="true"
        AutoCallBack-Target="formMyNote" AutoCallBack-Command="Refresh" CallBackMode-CommitChanges="True" CallBackMode-PostData="Page"
        AcceptButtonID="btnMyNoteOk">
        <px:PXFormView ID="formMyNote" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" CaptionVisible="False"
            DataMember="MyPanelView">
            <ContentStyle BackColor="Transparent" BorderStyle="None" />
            <Template>
                <px:PXLayoutRule ID="PXLayoutRule44" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="XM" />
                <px:PXTextEdit ID="cstXXMyNote" runat="server" DataField="XXMyNote" TextMode="MultiLine"/>
            </Template>
        </px:PXFormView>
        <px:PXPanel ID="PXPanel10" runat="server" SkinID="Buttons">
            <px:PXButton ID="btnMyNoteOk" runat="server" DialogResult="OK" Text="OK"/>
        </px:PXPanel>
    </px:PXSmartPanel>
    

    我还没有对上面的内容进行过全面的测试,但是一起快速打开了面板,没有任何错误。我使用的是6.00.0955版本,但相同的步骤应该适用于所有5.X版本。希望这会有所帮助。