【问题标题】:Customizing Selector when another another Selector value changes当另一个 Selector 值更改时自定义 Selector
【发布时间】:2018-01-13 00:51:40
【问题描述】:

我需要在案例屏幕上自定义 CaseClassID 选择器。当在附加信息选项卡下的案例屏幕上选择合同字段时,它应该以不同的值刷新。现在,CaseClass 正在显示 CRCase 表中的值。但是,现在如果合同更改,应该触发 fieldupdatedEvent,并且 CaseClassID 选择器应该有相应的值。请建议我如何在 FieldUpdated 事件处理程序中自定义 CaseClassID 选择器

protected virtual void CRCase_ContractID_FieldUpdated(PXCache sender, 
      PXFieldUpdatedEventArgs e)
    {
        CRCase cc = (CRCase)e.Row;
        if (cc == null) return;
        CRCase_CaseClassID_CacheAttached(sender);
    }

[PXMergeAttributes(Method = MergeMethod.Replace)]
    [PXDBString(10, IsUnicode = true, InputMask = ">aaaaaaaaaa")]
    [PXDefault(typeof(Search<CRSetup.defaultCaseClassID>))]
    [PXUIField(DisplayName = "Class ID")]
    [PXSelector(typeof(Search2<CRCaseClass.caseClassID, 
         InnerJoin<CaseContract, On<CaseContract.caseClassID, 
            Equal<CRCaseClass.caseClassID>>,
        InnerJoin<Contract, On<CaseContract.contractID, 
            Equal<Contract.templateID>>,
        InnerJoin<CRCase, On<Contract.contractID, 
            Equal<Current<CRCase.contractID>>>>>>,
        Where<CaseContract.active, Equal<True>>>),
               DescriptionField = typeof(CRCaseClass.description),
               CacheGlobal = true)]
    [PXMassUpdatableField]
    public virtual String CaseClassID { get; set; }
    public virtual void CRCase_CaseClassID_CacheAttached(PXCache sender){

    }

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    覆盖 CaseClassID 选择器并在其类型参数中添加您的自定义逻辑。 您可以创建自定义未绑定字段以根据您的业务逻辑过滤选择器。当您想更改选择器过滤器时,只需更改自定义字段即可。

    #region CaseClassID
    public abstract class caseClassID : IBqlField { }
    
    [PXDBString(10, IsUnicode = true, InputMask = ">aaaaaaaaaa")]
    [PXDefault(typeof(Search<CRSetup.defaultCaseClassID>))]
    [PXUIField(DisplayName = "Class ID")]
    // Use your custom field (filterCaseClassID) in the selector type parameter
    [PXSelector(typeof(Search<CRCaseClass.caseClassID,
                       Where<CRCaseClass.caseClassID, Equal<filterCaseClassID>>>),
                       DescriptionField = typeof(CRCaseClass.description), 
                       CacheGlobal = true)]
    [PXMassUpdatableField]
    public virtual String CaseClassID { get; set; }
    #endregion
    
    #region FilterCaseClassID
    public abstract class filterCaseClassID : IBqlField { }
    
    [PXDBString(10, IsUnicode = true, InputMask = ">aaaaaaaaaa")]
    // Change the value of your custom field to set the selector filter
    public virtual String FilterCaseClassID { get; set; }
    #endregion
    

    编辑图形扩展中的覆盖 DAC 字段并使用来自另一个 DAC 的字段过滤选择器:

    using PX.Data;
    using PX.Objects.CR.MassProcess;
    using System;
    
    namespace PX.Objects.CR
    {
        [Serializable]
        public class CaseContract : IBqlTable
        {
            public abstract class caseClassID : IBqlField { }
    
            [PXString(10, IsUnicode = true)]
            [PXUIField(DisplayName = "Case Class ID")]
            [PXSelector(typeof(CRCaseClass.caseClassID),
                        DescriptionField = typeof(CRCaseClass.description))]
            public virtual String CaseClassID
            {
                get; set;
            }
        }
    
        public class CRCaseMaint_Extension : PXGraphExtension<CRCaseMaint>
        {
            [PXMergeAttributes(Method = MergeMethod.Replace)]
            [PXDBString(10, IsUnicode = true, InputMask = ">aaaaaaaaaa")]
            [PXDefault(typeof(Search<CRSetup.defaultCaseClassID>))]
            [PXUIField(DisplayName = "Class ID")]
            [PXSelector(typeof(Search<CRCaseClass.caseClassID,
                               Where<Current<CaseContract.caseClassID>, IsNull,
                               Or<CRCaseClass.caseClassID, Equal<Current<CaseContract.caseClassID>>>>>),
                        DescriptionField = typeof(CRCaseClass.description),
                        CacheGlobal = true)]
            [PXMassUpdatableField]
            public virtual void CRCase_CaseClassID_CacheAttached(PXCache sender)
            {
            }
        }
    }
    

    【讨论】:

    • 我正在尝试根据另一个 Selector 动态更改一个选择器的值。即,如果第二个 Selector 更新了一个值,那么我应该相应地从数据库中获取数据并显示在第一个选择器中
    • 我误解了你的问题,所以我编辑了我的答案。
    • 您可以使用 CacheAttached 事件处理程序在图形扩展中覆盖它。公共虚拟无效 CRCase _CaseClassID_CacheAttached(PXCache 发件人)。当您覆盖它时,您可以在 type 参数中指定一个包含您的逻辑的新查询。
    • 我编辑了答案以添加 CacheAttached DAC 字段覆盖示例。
    • 感谢您的详细解释。我不清楚如何在 Contract Selector 中获取当前选定的 ContractID 以过滤 CaseClasses 以显示在 Class ID Selector 中。请帮我解决这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多