如何将列添加到选择器屏幕 (PXSelector)?

How do I add columns to a selector screen (PXSelector)?

我想在“总帐”>“日记帐分录”>“批次选择”屏幕中添加几列。在我的具体情况下,我想添加 Batch.CreatedByID 和 Batch.Description.

我该怎么做?

选项 1

打开选择器屏幕,Ctrl + Alt + 单击选择器屏幕进行检查,然后选择自定义数据字段。

然后,单击工具栏中的“选择器列”。在那里您可以通过从列表中选择它们来添加列。单击工具栏中的保存,发布定制,刷新网站,您的选择器应该全部设置好!

选项 2

要将列添加到选择器屏幕,您需要在屏幕图表中声明 CacheAttached 方法。方法签名遵循以下语法:

protected virtual void DAC_FIELD_CacheAttached(PXCache cache)
{

}

将不再考虑在原始 DAC 中应用的所有属性,因此请确保将所有必要的属性放在该方法之上。 (5.10版本还有另一种方式,见文末编辑post)

[PXDBString(15, IsUnicode = true, IsKey = true, InputMask = ">CCCCCCCCCCCCCCC")]
[PXDefault()]
[PXUIField(DisplayName = "Batch Number", Visibility = PXUIVisibility.SelectorVisible)]
[BatchModule.Numbering()]
[PXFieldDescription]
//PXSelector() still to add
protected virtual void Batch_BatchNbr_CacheAttached(PXCache cache)
{

}

要在选择器屏幕中指定您需要的内容,请将 PXSelector 属性添加到 CacheAttached 方法。第一个参数是查询要在选择器屏幕中显示的数据的 BQL 语句。第二个参数是对我们有用的参数。它是一个 params 参数,您可以在其中指定您想要的所有字段作为屏幕中的列。

// Not showing previsouly added attributes for simplicity...
[PXSelector(
    typeof(Search<Batch.batchNbr, 
                        Where<Batch.module, 
                                Equal<Current<Batch.module>>, 
                            And<Batch.draft, 
                                Equal<False>>>, 
                        OrderBy<Desc<Batch.batchNbr>>>),
    typeof(Batch.module),       //This field will be your first column
    typeof(Batch.batchNbr),     
    typeof(Batch.ledgerID),     
    typeof(Batch.finPeriodID),  
    typeof(Batch.status),       
    typeof(Batch.debitTotal),   
    typeof(Batch.creditTotal),  
    typeof(Batch.curyID),       
    typeof(Batch.createdByID),  
    typeof(Batch.description),  //This field is the last column to be shown
    Filterable = true
)]
protected virtual void Batch_BatchNbr_CacheAttached(PXCache cache)
{

}

这是在 JournalEntry

上使用图形扩展的完整代码示例
using PX.Data;
using PX.Data.EP;

namespace PX.Objects.GL
{

    public class JournalEntry_Extension : PXGraphExtension<JournalEntry>
    {
        [PXDBString(15, IsUnicode = true, IsKey = true, InputMask = ">CCCCCCCCCCCCCCC")]
        [PXDefault()]
        [PXUIField(DisplayName = "Batch Number", Visibility = PXUIVisibility.SelectorVisible)]
        [BatchModule.Numbering()]
        [PXFieldDescription]
        [PXSelector(
            typeof(Search<Batch.batchNbr, 
                                Where<Batch.module, 
                                        Equal<Current<Batch.module>>, 
                                    And<Batch.draft, 
                                        Equal<False>>>, 
                                OrderBy<Desc<Batch.batchNbr>>>),
            typeof(Batch.module),
            typeof(Batch.batchNbr),
            typeof(Batch.ledgerID),
            typeof(Batch.finPeriodID),
            typeof(Batch.status),
            typeof(Batch.debitTotal),
            typeof(Batch.creditTotal),
            typeof(Batch.curyID),
            typeof(Batch.createdByID),
            typeof(Batch.description),
            Filterable = true
        )]
        protected virtual void Batch_BatchNbr_CacheAttached(PXCache cache)
        {

        }
    }
}

编辑:从 5.10 版开始,您可以将原始属性与 CacheAttached 方法中的属性合并。 你可以这样做:

[PXMergeAttributes(Method = MergeMethod.Merge)]
//PXSelector() still to add
protected virtual void Batch_BatchNbr_CacheAttached(PXCache cache)
{

}