如何在字段中放置相关实体代码 [英] How to place a 'Related Entity' lookup on a field

查看:8
本文介绍了如何在字段中放置相关实体代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在活动/任务屏幕(Cr306020)中,有一个带有PXSelector查找的‘Related Entity’字段以及一支用于打开相关实体屏幕的铅笔:

我想知道是否有方法可以对自定义字段执行此操作。我已经查看了该字段的源代码(它是DAC中的EPActivity.Source),但我没有看到任何将这些属性添加到该字段上的内容。没有PXSelector或任何类似内容。

推荐答案

下面的示例显示如何在机会(CR304000)屏幕上添加相关实体字段。请注意,Acumatica Customization Manager中的布局编辑器当前不支持此示例中使用的PXRefNoteSelector控件。我使用Opportunities简化和缩短了示例。遗憾的是,目前您只能在自定义屏幕上添加相关实体字段。

现在让我们前进到样本:

  1. 实现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
    }
    
  2. 为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;
    }
    
  3. 在ASPX页上,将DataField属性设置为RelatedEntityNoteIDDataField的PXRefNoteSelector控件添加到UsrRefNoteID。 对于EditButtonLookupButtonLookupPanel标记,使用由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>
    
  4. 从表单工具栏隐藏由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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆