如何将属性支持添加到开箱即用的销售订单实体?
How to add Attribute Support to out-of-box Sales Order Entity?
开箱即用 Acumatica Sales Order (SO301000)
没有属性支持。如何将属性支持扩展到 Acumatica 中的销售订单实体?
最核心的是,您的实体主 DAC 必须具有 GUID 列 (NoteID
) 以引用 CSAnswers
table 并且必须具有标识 class 的字段实体。
我们将使用 Order Type
定义属性列表以收集特定订单类型的特定信息。
为 SOOrderTypeMaint
图表创建图表扩展并声明数据视图以定义特定订单类型的属性列表。我们将使用开箱即用的 CSAttributeGroupList<TEntityClass, TEntity>
public class SOOrderTypeMaintPXExt : PXGraphExtension<SOOrderTypeMaint>
{
[PXViewName(PX.Objects.CR.Messages.Attributes)]
public CSAttributeGroupList<SOOrderType, SOOrder> Mapping;
}
为 SOOrderEntry
图表创建图表扩展并声明特定于当前订单类型的属性的数据视图。
public class SOOrderEntryPXExt : PXGraphExtension<SOOrderEntry>
{
public CRAttributeList<SOOrder> Answers;
}
为 SOOrder
DAC 创建 DAC 扩展并声明用 CRAttributesField
属性装饰的用户定义字段并指定 ClassID
字段——在我们的例子中是 OrderType
。
public class SOOrderPXExt : PXCacheExtension<SOOrder>
{
#region UsrAttributes
public abstract class usrAttributes : IBqlField { }
[CRAttributesField(typeof(SOOrder.orderType))]
public virtual string[] UsrAttributes { get; set; }
#endregion
}
使用自定义引擎修改订单类型页面 (SO201000
),如下所示
<px:PXTabItem Text = "Attributes" >
<Template>
<px:PXGrid runat = "server" BorderWidth="0px" Height="150px" SkinID="Details" Width="100%" ID="AttributesGrid"
MatrixMode="True" DataSourceID="ds">
<AutoSize Enabled = "True" Container="Window" MinHeight="150" />
<Levels>
<px:PXGridLevel DataMember = "Mapping" >
<RowTemplate>
<px:PXSelector runat = "server" DataField="AttributeID" FilterByAllFields="True" AllowEdit="True"
CommitChanges="True" ID="edAttributeID" /></RowTemplate>
<Columns>
<px:PXGridColumn DataField = "AttributeID" Width="81px" AutoCallBack="True" LinkCommand="ShowDetails" />
<px:PXGridColumn DataField = "Description" Width="351px" AllowNull="False" />
<px:PXGridColumn DataField = "SortOrder" TextAlign="Right" Width="81px" />
<px:PXGridColumn DataField = "Required" Type="CheckBox" TextAlign="Center" AllowNull="False" />
<px:PXGridColumn DataField = "CSAttribute__IsInternal" Type="CheckBox" TextAlign="Center" AllowNull="True" />
<px:PXGridColumn DataField = "ControlType" Type="DropDownList" Width="81px" AllowNull="False" />
<px:PXGridColumn DataField = "DefaultValue" RenderEditorText="False" Width="100px" AllowNull="True" />
</Columns>
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXTabItem>
使用自定义引擎修改销售订单页面 (SO301000
),如下所示
<px:PXTabItem Text="Attributes">
<Template>
<px:PXGrid runat="server" ID="PXGridAnswers" Height="200px" SkinID="Inquire"
Width="100%" MatrixMode="True" DataSourceID="ds">
<AutoSize Enabled="True" MinHeight="200" />
<ActionBar>
<Actions>
<Search Enabled="False" />
</Actions>
</ActionBar>
<Mode AllowAddNew="False" AllowDelete="False" AllowColMoving="False" />
<Levels>
<px:PXGridLevel DataMember="Answers">
<Columns>
<px:PXGridColumn TextAlign="Left" DataField="AttributeID" TextField="AttributeID_description"
Width="250px" AllowShowHide="False" />
<px:PXGridColumn Type="CheckBox" TextAlign="Center" DataField="isRequired" Width="80px" />
<px:PXGridColumn DataField="Value" Width="300px" AllowSort="False" AllowShowHide="False" />
</Columns>
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXTabItem>
开箱即用 Acumatica Sales Order (SO301000)
没有属性支持。如何将属性支持扩展到 Acumatica 中的销售订单实体?
最核心的是,您的实体主 DAC 必须具有 GUID 列 (NoteID
) 以引用 CSAnswers
table 并且必须具有标识 class 的字段实体。
我们将使用 Order Type
定义属性列表以收集特定订单类型的特定信息。
为 SOOrderTypeMaint
图表创建图表扩展并声明数据视图以定义特定订单类型的属性列表。我们将使用开箱即用的 CSAttributeGroupList<TEntityClass, TEntity>
public class SOOrderTypeMaintPXExt : PXGraphExtension<SOOrderTypeMaint>
{
[PXViewName(PX.Objects.CR.Messages.Attributes)]
public CSAttributeGroupList<SOOrderType, SOOrder> Mapping;
}
为 SOOrderEntry
图表创建图表扩展并声明特定于当前订单类型的属性的数据视图。
public class SOOrderEntryPXExt : PXGraphExtension<SOOrderEntry>
{
public CRAttributeList<SOOrder> Answers;
}
为 SOOrder
DAC 创建 DAC 扩展并声明用 CRAttributesField
属性装饰的用户定义字段并指定 ClassID
字段——在我们的例子中是 OrderType
。
public class SOOrderPXExt : PXCacheExtension<SOOrder>
{
#region UsrAttributes
public abstract class usrAttributes : IBqlField { }
[CRAttributesField(typeof(SOOrder.orderType))]
public virtual string[] UsrAttributes { get; set; }
#endregion
}
使用自定义引擎修改订单类型页面 (SO201000
),如下所示
<px:PXTabItem Text = "Attributes" >
<Template>
<px:PXGrid runat = "server" BorderWidth="0px" Height="150px" SkinID="Details" Width="100%" ID="AttributesGrid"
MatrixMode="True" DataSourceID="ds">
<AutoSize Enabled = "True" Container="Window" MinHeight="150" />
<Levels>
<px:PXGridLevel DataMember = "Mapping" >
<RowTemplate>
<px:PXSelector runat = "server" DataField="AttributeID" FilterByAllFields="True" AllowEdit="True"
CommitChanges="True" ID="edAttributeID" /></RowTemplate>
<Columns>
<px:PXGridColumn DataField = "AttributeID" Width="81px" AutoCallBack="True" LinkCommand="ShowDetails" />
<px:PXGridColumn DataField = "Description" Width="351px" AllowNull="False" />
<px:PXGridColumn DataField = "SortOrder" TextAlign="Right" Width="81px" />
<px:PXGridColumn DataField = "Required" Type="CheckBox" TextAlign="Center" AllowNull="False" />
<px:PXGridColumn DataField = "CSAttribute__IsInternal" Type="CheckBox" TextAlign="Center" AllowNull="True" />
<px:PXGridColumn DataField = "ControlType" Type="DropDownList" Width="81px" AllowNull="False" />
<px:PXGridColumn DataField = "DefaultValue" RenderEditorText="False" Width="100px" AllowNull="True" />
</Columns>
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXTabItem>
使用自定义引擎修改销售订单页面 (SO301000
),如下所示
<px:PXTabItem Text="Attributes">
<Template>
<px:PXGrid runat="server" ID="PXGridAnswers" Height="200px" SkinID="Inquire"
Width="100%" MatrixMode="True" DataSourceID="ds">
<AutoSize Enabled="True" MinHeight="200" />
<ActionBar>
<Actions>
<Search Enabled="False" />
</Actions>
</ActionBar>
<Mode AllowAddNew="False" AllowDelete="False" AllowColMoving="False" />
<Levels>
<px:PXGridLevel DataMember="Answers">
<Columns>
<px:PXGridColumn TextAlign="Left" DataField="AttributeID" TextField="AttributeID_description"
Width="250px" AllowShowHide="False" />
<px:PXGridColumn Type="CheckBox" TextAlign="Center" DataField="isRequired" Width="80px" />
<px:PXGridColumn DataField="Value" Width="300px" AllowSort="False" AllowShowHide="False" />
</Columns>
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXTabItem>