我可以在PXSelector中为一个字段添加别名

时间:2018-01-15 16:13:27

标签: acumatica

我有一个选择器定义如下:

[PXSelector(typeof(Search2<xTACTaxDocument.iD, 
                              InnerJoin<xTACEntityMappingEIN, 
                                  On<xTACTaxDocument.clientEINID, Equal<xTACEntityMappingEIN.iD>>,
                              InnerJoin<xTACEntityMappingEIN1, 
                                  On<xTACTaxDocument.investmentEINID, Equal<xTACEntityMappingEIN1.iD>>>>>),
                typeof(xTACTaxDocument.iD),
                typeof(xTACTaxDocument.formID),
                typeof(xTACTaxDocument.year),
                typeof(xTACEntityMappingEIN.eIN),
                typeof(xTACEntityMappingEIN1.eIN))]

我在下面定义一个别名DAC(重新定义我需要使用的字段):

[Serializable]
public class xTACEntityMappingEIN1 : xTACEntityMappingEIN
{
    public abstract new class iD : IBqlField { }
    public abstract new class eIN : IBqlField { }
}

我的问题是 - 由于原始的ein和别名的DAC ein字段具有相同的名称 - 是否可以 - 仅仅在显示的网格中 - 重命名第二个?或者,理想情况下,重命名它们?在intellisense的任何地方都没有看到这个选项...

这是我想要做的事情(参见别名字段):

select  xTACTaxDocument.iD
       ,xTACTaxDocument.FormID
       ,xTACTaxDocument.Year
       ,xTACEntityMappingEIN.EIN as 'ClientEIN'
       ,xTACEntityMappingEIN1.EIN as 'InvestmentEIN'
from    xTACTaxDocument
        Inner Join  xTACEntityMappingEIN
            On xTACTaxDocument.clientEINID = xTACEntityMappingEIN.iD
        Inner Join  xTACEntityMappingEIN xTACEntityMappingEIN1
            On xTACTaxDocument.investmentEINID = xTACEntityMappingEIN1.iD

2 个答案:

答案 0 :(得分:1)

唯一的选择是在xTACEntityMappingEIN1 DAC中另外覆盖EIN属性,以在PXUIFieldAttribute中使用不同的DisplayName:

[Serializable]
public class xTACEntityMappingEIN1 : xTACEntityMappingEIN
{
    public abstract new class iD : IBqlField { }
    public abstract new class eIN : IBqlField { }

    [PXDBString(50, IsUnicode = true, IsKey = true)]
    [PXUIField(DisplayName = "Investment EIN")]
    public override string EIN { get; set; }
}

请注意,在上面的代码片段中,我随机选择了EIN字段的字符串类型。理想情况下,除了PXUIFieldAttribute的DisplayName属性值外,xTACEntityMappingEIN和xTACEntityMappingEIN1中的EIN字段属性应该接近相同。

答案 1 :(得分:0)

DAC名称必须是&#34;别名&#34;一张桌子。您不能像在SQL中那样设置别名,但是您可以声明一个继承源类的新类,为其提供一个新的名称&#34;用于查询。我在这里有一个类似的Q&amp; A:Acumatica BQL Query with the same table more than once

在继承的类中,您可以根据需要将字段的显示名称更改为&#34;别名&#34;重复的字段名称。

这是一个快速未经测试的样本:

[Serializable]
public class xTACEntityMappingEINClient : xTACEntityMappingEIN
{
    //Override field to set display name = "ClientEIN"
    //[PXUIField(DisplayName = "ClientEIN")]
}

[Serializable]
public class xTACEntityMappingEINInvestment : xTACEntityMappingEIN
{
    //Override field to set display name = "InvestmentEIN"
    //[PXUIField(DisplayName = "InvestmentEIN")]
}

[PXSelector(typeof(Search2<xTACTaxDocument.iD,
    InnerJoin<xTACEntityMappingEINClient,
        On<xTACTaxDocument.clientEINID, Equal<xTACEntityMappingEINClient.iD>>,
    InnerJoin<xTACEntityMappingEINInvestment , 
        On<xTACTaxDocument.investmentEINID, Equal<xTACEntityMappingEINInvestment.iD>>>>>),
                typeof(xTACTaxDocument.iD),
                typeof(xTACTaxDocument.formID),
                typeof(xTACTaxDocument.year),
                typeof(xTACEntityMappingEINClient.eIN),
                typeof(xTACEntityMappingEINInvestment .eIN))]