微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在视图查询中出现Muti-part标识符错误将新创建的扩展字段添加到查询中之后?

如何解决为什么在视图查询中出现Muti-part标识符错误将新创建的扩展字段添加到查询中之后?

多部分标识符错误

Multi-part identifier error

我在“联系人”屏幕中新创建了一个扩展名字段(UsrLocationCD int字段)。创建完该字段后,我将该字段添加到视图查询中,并且出现了以上错误

概念是“客户和位置ID”(“客户位置”屏幕)应与“联系人”屏幕“企业帐户和位置ID”(新添加的位置ID)匹配。满足此条件后,相关的联系人ID应显示在“联系人”选项卡下的“客户位置”屏幕中。

完整概念

Full concept img

这是我写的查询

    [PXViewName(Messages.Contacts)]
    [PXFilterable]
    [PXViewSavedDetailsButton(typeof(Location))]
    public PXSelectJoin<Contact,LeftJoin<Address,On<Address.addressID,Equal<Contact.defAddressID>>>,Where<Contact.bAccountID,Equal<Current<Location.bAccountID>>,And<Where<ContactExt.usrLocationCD,Equal<Location.locationID>,And<Where<Contact.contactType,Equal<ContactTypesAttribute.person>,Or<Contact.contactType,Equal<ContactTypesAttribute.lead>>>>>>>> Contacts;

这是新创建的扩展名字段:

public class ContactExt : PXCacheExtension<PX.Objects.CR.Contact> /*,IBqlTable*/
{
    #region UsrLocationCD
    [PXDBInt()]
    [PXUIField(displayName = "Location ID")]

    [PXSelector(
      typeof(Search<Location.locationID,Where<Location.bAccountID,Equal<Current<Contact.bAccountID>>>>),SubstituteKey = typeof(Location.locationCD),ValidateValue = false)]

    public virtual int? UsrLocationCD { get; set; }
    public abstract class usrLocationCD : PX.Data.BQL.BqlInt.Field<usrLocationCD> { }
    #endregion
}

我要在这里分享一点,即新创建的扩展名字段不会在“联系人”屏幕中造成任何问题,成功地我可以保存记录,您可以看到以下imgs。

保存记录之前

Before save the record

保存记录后

After saved the record

在“联系人”屏幕中,位置ID字段为“ Int”。

错误在哪里以及如何解决此问题?

解决方法

在上面的代码中,位置DAC缺少连接。希望对您有所帮助。

  [PXViewName(PX.Objects.CR.Messages.Contacts)]
    [PXFilterable]
    [PXViewSavedDetailsButton(typeof(Location))]
    public PXSelectJoin<Contact,LeftJoin<Address,On<Address.addressID,Equal<Contact.defAddressID>>,LeftJoin<Location,On <Location.bAccountID,Equal<Contact.bAccountID>>>>,Where<Contact.bAccountID,Equal<Current<Location.bAccountID>>,And<Where<ContactExt.usrLocationCD,Equal<Location.locationID>,And<Where<Contact.contactType,Equal<ContactTypesAttribute.person>,Or<Contact.contactType,Equal<ContactTypesAttribute.lead>>>>>>>> Contacts;
,

您的PXSelect缺少您在usrLocationCD中添加的位置的最新信息。

缺少当前行的原始行:

And<Where<ContactExt.usrLocationCD,

将缺少的Current 添加回去后:

[PXViewName(Messages.Contacts)]
[PXFilterable]
[PXViewSavedDetailsButton(typeof(Location))]
public PXSelectJoin<Contact,Equal<Contact.defAddressID>>>,Equal<Current<Location.locationID>>,Equal<ContactTypesAttribute.lead>>>>>>>> Contacts;

选择数据时,您始终必须以某种方式连接引用的DAC ...通过直接连接到联接中选择的另一个表,通过将字段联接到 Current 值(例如父视图中的字段),或提供您传入的参数。

此外,为了保持一致,我建议将新字段的名称从usrLocationCD更改为usrLocationID。 ID表示“标识符”,CD表示“代码”。在这种情况下,LocationID(标识符)是用于标识位置记录的整数字段。 LocationCD是位置记录的字段,其中包含我们通常在显示屏上看到的位置代码。当另一位Acumatica开发人员查看上面的代码时,第一印象是您试图将字符串字段与整数字段相关联。从技术上讲,只要您的字段类型在等于的两边都匹配,就可以使用,但是一致性在编码标准中很重要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。