如何解决为什么在视图查询中出现Muti-part标识符错误将新创建的扩展字段添加到查询中之后?
多部分标识符错误
我在“联系人”屏幕中新创建了一个扩展名字段(UsrLocationCD int字段)。创建完该字段后,我将该字段添加到视图查询中,并且出现了以上错误。
概念是“客户和位置ID”(“客户位置”屏幕)应与“联系人”屏幕“企业帐户和位置ID”(新添加的位置ID)匹配。满足此条件后,相关的联系人ID应显示在“联系人”选项卡下的“客户位置”屏幕中。
完整概念
这是我写的查询:
[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。
保存记录之前
保存记录后
在“联系人”屏幕中,位置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 举报,一经查实,本站将立刻删除。