如何在字段中放置相关实体代码 [英] How to place a 'Related Entity' lookup on a field
问题描述
在活动/任务屏幕(Cr306020)中,有一个带有PXSelector查找的‘Related Entity’字段以及一支用于打开相关实体屏幕的铅笔:
我想知道是否有方法可以对自定义字段执行此操作。我已经查看了该字段的源代码(它是DAC中的EPActivity.Source),但我没有看到任何将这些属性添加到该字段上的内容。没有PXSelector或任何类似内容。
推荐答案
下面的示例显示如何在机会(CR304000)屏幕上添加相关实体字段。请注意,Acumatica Customization Manager中的布局编辑器当前不支持此示例中使用的PXRefNoteSelector控件。我使用Opportunities简化和缩短了示例。遗憾的是,目前您只能在自定义屏幕上添加相关实体字段。
现在让我们前进到样本:
实现CROpportunity DAC的扩展以声明数据库绑定的UsrRefNoteID和未绑定的RelatedEntity字段。关联实体的NoteID将存储在UsrRefNoteID中,RelatedEntity将用于显示相关实体的友好描述:
public class CROpportunityExt : PXCacheExtension<CROpportunity> { #region UsrRefNoteID public abstract class usrRefNoteID : IBqlField { } protected Guid? _UsrRefNoteID; [PXDBGuid] [PXParent(typeof(Select<CRActivityStatistics, Where<CRActivityStatistics.noteID, Equal<Current<CROpportunityExt.usrRefNoteID>>>>), LeaveChildren = true)] public Guid? UsrRefNoteID { get { return _UsrRefNoteID; } set { _UsrRefNoteID = value; } } #endregion #region Source public abstract class relatedEntity : IBqlField { } [PXString(IsUnicode = true)] [PXUIField(DisplayName = "Related Entity Description", Enabled = false)] [PXFormula(typeof(EntityDescription<CROpportunityExt.usrRefNoteID>))] public string RelatedEntity { get; set; } #endregion }
为OpportunityMaint BLC创建扩展以使用PXRefNoteSelectorAttribute装饰其主要Opportunity数据视图。编辑(铅笔)和查找按钮需要PXRefNoteSelectorAttribute才能处理您的自定义相关实体字段:
public class OpportunityMaintExt : PXGraphExtension<OpportunityMaint> { [PXCopyPasteHiddenFields(typeof(CROpportunity.resolution))] [PXViewName(Messages.Opportunity)] [PXRefNoteSelector(typeof(CROpportunity), typeof(CROpportunityExt.usrRefNoteID))] public PXSelect<CROpportunity> Opportunity; }
在ASPX页上,将DataField属性设置为RelatedEntity和NoteIDDataField的PXRefNoteSelector控件添加到UsrRefNoteID。 对于EditButton、LookupButton和LookupPanel标记,使用由PXRefNoteSelector属性修饰的主数据视图名称(以下代码片段中的Opportunity)
<pxa:PXRefNoteSelector ID="edRefEntity" runat="server" DataField="RelatedEntity" NoteIDDataField="UsrRefNoteID" MaxValue="0" MinValue="0" ValueType="Guid" CommitChanges="true"> <EditButton CommandName="Opportunity$Navigate_ByRefNote" CommandSourceID="ds" /> <LookupButton CommandName="Opportunity$Select_RefNote" CommandSourceID="ds" /> <LookupPanel DataMember="Opportunity$RefNoteView" DataSourceID="ds" TypeDataField="Type" IDDataField="NoteID" /> </pxa:PXRefNoteSelector>
从表单工具栏隐藏由PXRefNoteSelector属性生成的3个操作。使用由PXRefNoteSelector属性修饰的相同主数据视图名称(以下代码片段中的Opportunity),与上面的步骤相同:
<CallbackCommands> ... <px:PXDSCallbackCommand Name="Opportunity$Navigate_ByRefNote" Visible="False" /> <px:PXDSCallbackCommand Name="Opportunity$Select_RefNote" Visible="False" /> <px:PXDSCallbackCommand Name="Opportunity$Attach_RefNote" Visible="False" /> </CallbackCommands>
您可能还需要实现您自己的EntityDescription运算符,因为在创建此示例时,它具有内部访问修饰符,并且在PX.Objects.dll:
之外不可用public class EntityDescription<RefNoteID> : BqlFormulaEvaluator<RefNoteID>, IBqlOperand
where RefNoteID : IBqlField
{
public override object Evaluate(PXCache cache, object item, Dictionary<Type, object> pars)
{
Guid? refNoteID = (Guid?)pars[typeof(RefNoteID)];
return new EntityHelper(cache.Graph).GetEntityDescription(refNoteID, item.GetType());
}
}
最后……带有全新相关实体字段的自定义商机屏幕截图:
这篇关于如何在字段中放置相关实体代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!