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的视图和委托定义。其他版本可能有所不同。确保使用适用于您的版本的版本