向网格线添加额外的注释字段
Add extra note field to grid line
我有一个客户想要在网格中添加一个额外的注释字段。如果这不可能,有没有办法在使用弹出窗口 window 编辑该字段中的大量文本的网格中有一个大文本字段?
优先级:
1.) 如果可能,向网格添加额外的注释字段。
2.) 失败 #1,有没有办法添加弹出窗口 window 来编辑大型标准用户文本字段。
我认为您的第一个问题的答案是否定的。如果网格已经有注释,则不能再有注释。这个问题我之前也提过。
对于 #2,您应该能够制作一个显示您的字段的智能面板。使用 PXTextEdit 并为面板设置一个新视图以根据您的 selected/current 行指向它。
要添加智能面板(弹出式面板),您需要准备一些东西。我更喜欢将 AEF 与图形和 table 扩展一起使用。 T200/T300 培训 material 中有关于这些主题的文档。在我的示例中,我将备注功能添加到销售订单页面。我从现有的 "PO Link" 按钮和面板复制了大部分逻辑,即 POSSupplyOK PXAction 和 currentpossupply 视图(页面 SO301000)。
首先您需要您的新字段,我们将把它作为扩展添加到销售行中 table/field:
[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();
}
}
现在您需要 "edit" 销售订单页面。您需要将更改放入自定义项目中,在本示例中,我通常直接在 site\pages\so 下的 visual studio 中编辑页面。然后返回并通过打开项目并执行以下步骤将我的代码粘贴到自定义项目中:
- 单击屏幕和 + 号以添加新屏幕
- 输入SO301000并保存
- 单击 SO301000 超链接打开销售订单的布局编辑器
- 单击操作 > 编辑 ASPX
- 粘贴您的更改(如下所述)
在 SO301000 页面添加以下内容:
[1] 在 PXDataSource 标签中添加您的 DS Callback 命令
<px:PXDSCallbackCommand Name="MyNoteAction" Visible="False"
CommitChanges="true" DependOnGrid="grid" />
[2] 通过将以下内容添加到文档详细信息选项卡中网格的 PXGrid > ActionBar > CustomItems 标签,将按钮添加到销售线网格上方的工具栏。 (只需在页面中搜索 "PO Link" 即可更轻松地找到此位置或网格上方列出的任何按钮)。
<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 版本。希望这有帮助。
我有一个客户想要在网格中添加一个额外的注释字段。如果这不可能,有没有办法在使用弹出窗口 window 编辑该字段中的大量文本的网格中有一个大文本字段?
优先级: 1.) 如果可能,向网格添加额外的注释字段。 2.) 失败 #1,有没有办法添加弹出窗口 window 来编辑大型标准用户文本字段。
我认为您的第一个问题的答案是否定的。如果网格已经有注释,则不能再有注释。这个问题我之前也提过。
对于 #2,您应该能够制作一个显示您的字段的智能面板。使用 PXTextEdit 并为面板设置一个新视图以根据您的 selected/current 行指向它。
要添加智能面板(弹出式面板),您需要准备一些东西。我更喜欢将 AEF 与图形和 table 扩展一起使用。 T200/T300 培训 material 中有关于这些主题的文档。在我的示例中,我将备注功能添加到销售订单页面。我从现有的 "PO Link" 按钮和面板复制了大部分逻辑,即 POSSupplyOK PXAction 和 currentpossupply 视图(页面 SO301000)。
首先您需要您的新字段,我们将把它作为扩展添加到销售行中 table/field:
[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();
}
}
现在您需要 "edit" 销售订单页面。您需要将更改放入自定义项目中,在本示例中,我通常直接在 site\pages\so 下的 visual studio 中编辑页面。然后返回并通过打开项目并执行以下步骤将我的代码粘贴到自定义项目中:
- 单击屏幕和 + 号以添加新屏幕
- 输入SO301000并保存
- 单击 SO301000 超链接打开销售订单的布局编辑器
- 单击操作 > 编辑 ASPX
- 粘贴您的更改(如下所述)
在 SO301000 页面添加以下内容:
[1] 在 PXDataSource 标签中添加您的 DS Callback 命令
<px:PXDSCallbackCommand Name="MyNoteAction" Visible="False"
CommitChanges="true" DependOnGrid="grid" />
[2] 通过将以下内容添加到文档详细信息选项卡中网格的 PXGrid > ActionBar > CustomItems 标签,将按钮添加到销售线网格上方的工具栏。 (只需在页面中搜索 "PO Link" 即可更轻松地找到此位置或网格上方列出的任何按钮)。
<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 版本。希望这有帮助。