Acumatica 如何在图扩展中重写PXFilteredProcessingJoin而不改变基本图的行为?

Acumatica 如何在图扩展中重写PXFilteredProcessingJoin而不改变基本图的行为?,acumatica,Acumatica,背景: [PXFilterable] public PXFilteredProcessingJoin<APAdjust, PayBillsFilter, InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>, LeftJoin<

背景:

[PXFilterable]
public PXFilteredProcessingJoin<APAdjust, PayBillsFilter,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
    LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
        And<APTran.tranType, Equal<APAdjust.adjdDocType>,
        And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
        And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APDocumentList;

public PXSelectJoin<APAdjust,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
        LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
            And<APTran.tranType, Equal<APAdjust.adjdDocType>,
            And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
            And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APExceptionsList;
在APPayBills(应付款-准备付款)中,屏幕功能旨在累积现金账户的所有付款。分行有一个选择,但它实际上并不限制对分行的付款,而是为分行定义的现金账户

我们的使用案例是,我们有多个“分支机构”,它们在日常业务(库存、发料、采购收据等)中独立运作。然而,所有应付款项都通过单个银行账户处理,因此只有一个现金账户。分支机构根据某些业务规则处理付款。在标准Acumatica下处理这一问题的明显方法是使用不同的银行账户,这样我们就可以在Acumatica内部操作单独的现金账户。我们的用户群更喜欢单一银行账户,因此我们的任务是创建一个解决方案。我们也有一些变通办法,但这需要简化,以减轻工作人员的负担并减少错误。Acumatica打开了一个案例,得到的回应是这需要我们进行定制

问题:

[PXFilterable]
public PXFilteredProcessingJoin<APAdjust, PayBillsFilter,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
    LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
        And<APTran.tranType, Equal<APAdjust.adjdDocType>,
        And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
        And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APDocumentList;

public PXSelectJoin<APAdjust,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
        LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
            And<APTran.tranType, Equal<APAdjust.adjdDocType>,
            And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
            And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APExceptionsList;
APPayBill利用2个视图(APDocuemntList和APExceptionsList)在2个选项卡上填充网格。标准行为是在用户输入分行、付款方式和现金账户之前,网格保持为空。此时,结果将根据使用指定现金帐户的所有付款显示在网格中

我的理解是,可以在图形扩展中重新定义视图以覆盖它。但是,当我这样做时,网格甚至在做出任何选择之前就填充了。网格数据按照我的要求进行过滤,但不希望在填充网格的时间更改用户界面行为

代码之前:

[PXFilterable]
public PXFilteredProcessingJoin<APAdjust, PayBillsFilter,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
    LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
        And<APTran.tranType, Equal<APAdjust.adjdDocType>,
        And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
        And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APDocumentList;

public PXSelectJoin<APAdjust,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
        LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
            And<APTran.tranType, Equal<APAdjust.adjdDocType>,
            And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
            And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>
    > APExceptionsList;
[PXFilterable]
公共PXFilteredProcessingJoin APDocumentList;
公共PXSelectJoin APExceptionsList;
代码后:

[PXFilterable]
public PXFilteredProcessingJoin<APAdjust, PayBillsFilter,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
    LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
        And<APTran.tranType, Equal<APAdjust.adjdDocType>,
        And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
        And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>

    // BEG - Add branch filter
    ,Where<APAdjust.adjdBranchID, Equal<Current<PayBillsFilter.branchID>>>
    // END - Add branch filter

    > APDocumentList;

public PXSelectJoin<APAdjust,
    InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>,
        LeftJoin<APTran, On<APInvoice.paymentsByLinesAllowed, Equal<True>,
            And<APTran.tranType, Equal<APAdjust.adjdDocType>,
            And<APTran.refNbr, Equal<APAdjust.adjdRefNbr>,
            And<APTran.lineNbr, Equal<APAdjust.adjdLineNbr>>>>>>>

    // BEG - Add branch filter
    ,Where<APAdjust.adjdBranchID, Equal<Current<PayBillsFilter.branchID>>>
    // END - Add branch filter

    > APExceptionsList;
[PXFilterable]
公共PXFilteredProcessingJoin APDocumentList;
公共PXSelectJoin APExceptionsList;
为了确保添加where子句不是罪魁祸首,我将基本代码中的确切视图复制并粘贴到图形扩展中,这样就绝对不会有任何更改。令人惊讶的是(对我来说),带有替换视图的图形扩展显示出与添加Where子句相同的预填充行为

显然,以这种方式覆盖视图有其特殊之处。我尝试过使用和不使用[PXOverride]装饰视图,但没有行为上的差异


是什么导致处理屏幕预填充网格,以及如何将覆盖正确应用于这两个视图?

在图形APPayBills中,数据视图APDocumentList的定义如下:

    [PXFilterable]
    public PXFilteredProcessingJoin<APAdjust, PayBillsFilter, 
        InnerJoin<APInvoice, On<APInvoice.docType, Equal<APAdjust.adjdDocType>, And<APInvoice.refNbr, Equal<APAdjust.adjdRefNbr>>>>> APDocumentList;
在您的情况下,还需要重写委托

注意:这是2018R2的视图和委托定义。其他版本可能有所不同。确保使用适用于您的版本的版本