Acumatica 正在查询BAccount,但BQL正在查询供应商表,而不是BAccount

Acumatica 正在查询BAccount,但BQL正在查询供应商表,而不是BAccount,acumatica,Acumatica,我有一个加入BAccount表的BQL查询,但当我查看SQL Profiler时,它查询的是供应商表,我试图检索的对象不是供应商。这是我为SOLine表中的customer字段添加的自定义选择器。使用的所有字段和表都是Acumatica基本字段和表。这是我的BQL代码: [PXDBString(50, IsUnicode = true)] [PXUIField(DisplayName = "Default Specification")] [PXSelector(typeof(Search5&l

我有一个加入BAccount表的BQL查询,但当我查看SQL Profiler时,它查询的是供应商表,我试图检索的对象不是供应商。这是我为SOLine表中的customer字段添加的自定义选择器。使用的所有字段和表都是Acumatica基本字段和表。这是我的BQL代码:

[PXDBString(50, IsUnicode = true)]
[PXUIField(DisplayName = "Default Specification")]
[PXSelector(typeof(Search5<UploadFileRevision.comment, 
    InnerJoin<UploadFile, On<UploadFile.fileID, Equal<UploadFileRevision.fileID>>,
    InnerJoin<NoteDoc, On<NoteDoc.fileID, Equal<UploadFile.fileID>>,
    InnerJoin<BAccount, On<BAccount.noteID, Equal<NoteDoc.noteID>>,
    InnerJoin<Customer, On<Customer.bAccountID, Equal<BAccount.bAccountID>>
    >>>>, Where<Customer.bAccountID, Equal<Current<SOOrder.customerID>>>,
    Aggregate<GroupBy<UploadFileRevision.comment>>>),
typeof(UploadFileRevision.comment), typeof(UploadFile.name), 
typeof(UploadFile.fileID))]

您可以看到,当它加入BAccount时,它使用[Vender]BAccount\u Vendor,但我的BQL代码不包含任何与Vendor相关的内容。我甚至向customer表添加了一个冗余连接,但它什么也没做。我是否错过了迫使它查看BAccount表而不是供应商的内容?

尝试用BAccountR或BAccount2替换BAccount。在BAccount缓存之前,BLC的Caches集合中必须有一个为供应商DAC初始化的缓存-这通常会导致BQL转换为另一个DB表的SQL查询

要检查初始化了哪些顺序缓存,可以在VS内的即时窗口中对自定义BLC执行
this.caches
,或对BLC扩展执行
Base.caches
。我很确定你会在BAccount之前初始化供应商缓存

不幸的是,我试图重现错误“多部分标识符”BAccount2.BAccountID“无法绑定”没有成功。以下是我在本端使用的自定义SOLine字段声明:

public class SOLineExt : PXCacheExtension<SOLine>
{
    public abstract class usrComment : IBqlField { }

    [PXDBString(50, IsUnicode = true)]
    [PXUIField(DisplayName = "Default Specification")]
    [PXSelector(
        typeof(Search5<UploadFileRevision.comment,
            InnerJoin<UploadFile, 
                On<UploadFile.fileID, Equal<UploadFileRevision.fileID>>,
            InnerJoin<NoteDoc, 
                On<NoteDoc.fileID, Equal<UploadFile.fileID>>,
            InnerJoin<BAccountR, 
                On<BAccountR.noteID, Equal<NoteDoc.noteID>>>>>,
            Where<BAccountR.bAccountID, Equal<Current<SOOrder.customerID>>>,
            Aggregate<GroupBy<UploadFileRevision.comment>>>),
    typeof(UploadFileRevision.comment), typeof(UploadFile.name),
    typeof(UploadFile.fileID))]
    public string UsrComment { get; set; }
}
公共类solinext:PXCacheExtension
{
公共抽象类usrComment:IBqlField{}
[PXDBString(50,IsUnicode=true)]
[PXUIField(DisplayName=“默认规范”)]
[PX选择器(
类型(搜索5),
typeof(UploadFileRevision.comment)、typeof(UploadFile.name),
typeof(UploadFile.fileID))]
公共字符串UsrComment{get;set;}
}
而且查找似乎没有任何问题:


我错过了什么或做错了什么吗?

尝试用BAccountR或BAccount2替换BAccount。在BAccount缓存之前,BLC的Caches集合中必须有一个为供应商DAC初始化的缓存-这通常会导致BQL转换为另一个DB表的SQL查询

要检查初始化了哪些顺序缓存,可以在VS内的即时窗口中对自定义BLC执行
this.caches
,或对BLC扩展执行
Base.caches
。我很确定你会在BAccount之前初始化供应商缓存

不幸的是,我试图重现错误“多部分标识符”BAccount2.BAccountID“无法绑定”没有成功。以下是我在本端使用的自定义SOLine字段声明:

public class SOLineExt : PXCacheExtension<SOLine>
{
    public abstract class usrComment : IBqlField { }

    [PXDBString(50, IsUnicode = true)]
    [PXUIField(DisplayName = "Default Specification")]
    [PXSelector(
        typeof(Search5<UploadFileRevision.comment,
            InnerJoin<UploadFile, 
                On<UploadFile.fileID, Equal<UploadFileRevision.fileID>>,
            InnerJoin<NoteDoc, 
                On<NoteDoc.fileID, Equal<UploadFile.fileID>>,
            InnerJoin<BAccountR, 
                On<BAccountR.noteID, Equal<NoteDoc.noteID>>>>>,
            Where<BAccountR.bAccountID, Equal<Current<SOOrder.customerID>>>,
            Aggregate<GroupBy<UploadFileRevision.comment>>>),
    typeof(UploadFileRevision.comment), typeof(UploadFile.name),
    typeof(UploadFile.fileID))]
    public string UsrComment { get; set; }
}
公共类solinext:PXCacheExtension
{
公共抽象类usrComment:IBqlField{}
[PXDBString(50,IsUnicode=true)]
[PXUIField(DisplayName=“默认规范”)]
[PX选择器(
类型(搜索5),
typeof(UploadFileRevision.comment)、typeof(UploadFile.name),
typeof(UploadFile.fileID))]
公共字符串UsrComment{get;set;}
}
而且查找似乎没有任何问题:


我错过了什么或做错了什么吗?

我将BAccount切换到BAccount2,并删除了客户。我还将Where子句切换到WHERITELSO,以便在即时窗口中运行Base.Caches,您是正确的。供应商在BAccount之前加载,BAccount与供应商的关系如下:[10]:{[PX.Objects.AP.Vendor,PXCache(0)]}[11]:{[PX.Objects.CR.BAccount,PXCache(0)]}对不起,Ruslan,这是我的错。我注意到我做了什么。我没有把一个BACCount改成BAccountR。那是我的错。现在可以了!谢谢别担心,埃里克。很高兴听到问题得到解决!我将BAccount切换到BAccount2,并删除了Customer。我还将Where子句切换到WHERITELSO,以便在即时窗口中运行Base.Caches,您是正确的。供应商在BAccount之前加载,BAccount与供应商的关系如下:[10]:{[PX.Objects.AP.Vendor,PXCache(0)]}[11]:{[PX.Objects.CR.BAccount,PXCache(0)]}对不起,Ruslan,这是我的错。我注意到我做了什么。我没有把一个BACCount改成BAccountR。那是我的错。现在可以了!谢谢别担心,埃里克。很高兴听到问题得到解决!