acumatica - 根据账单和调整中的自定义日期字段计算发票日期和折扣日期
问题描述
我在账单和调整中创建了一个自定义日期字段“发票日期”。在票据和调整中,到期日和现金折扣日期是根据 DocDate 和选定的 TermsID 计算的。
但我想使用自定义字段“发票日期”中的日期而不是 DocDate 来计算到期日和现金折扣日期。
我尝试在 APInvoiceEntry 图中搜索 DocDate 和 TermsID 的字段更新事件,并尝试在图中的到期日和现金折扣日期的 CacheAttached 中找到 PXFormula 属性。此外,我还查看了 APInvoice DAC 以找到到期日和现金折扣日期的公式,但找不到任何地方。我也尝试在 DiscountEngine 类中找到方法,但没有运气。
谢谢你。
解决方案
TL;博士
创建从 TermsAttribute 派生的新属性并重写
CalcTerms
方法。替换字段上的属性TermsID
。
正确答案
了解更新某些字段的逻辑的最可靠方法是使用调试器。为此,可以使用以下步骤:
- 添加用于使用自定义设置断点的事件。在这种情况下,FieldUpdating 是最好的匹配。
public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry> { public void APInvoice_DueDate_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e) { } }
发布自定义。
在 Visual Studio 中打开代码
A. 如果您使用运行时代码(自定义项目中内置的代码编辑器),请
SiteFolder\App_RuntimeCode
在 Visual Studio(管理员模式)中打开所需的文件。B. 如果你使用扩展库,打开你的 Visual Studio 项目(管理员模式)
为事件设置断点
- 附加调试器。在 Visual Studio 菜单中,转到
Debug
->Attach to process
-> 附加到 IIS 进程(通常名称为 w3wp.exe)(确保选中复选框Show processes from all users
) - 触发字段更新。在这种情况下,您可以更改文档日期以触发到期日期重新计算。
- 当断点被命中时,检查调用堆栈窗口
- 您可以通过双击行来浏览调用堆栈。在那种情况下
PX.Objects.dll!PX.Objects.CS.TermsAttribute.CalcTerms(PX.Data.PXCache sender, PX.Data.PXFieldUpdatedEventArgs e) Line 3461
看起来很有希望。 - 通常,您应该会看到 PX.Objects.dll 中所有内容的代码,但如果您没有看到,请按照以下步骤进行修复:
- 确保
Install debugger tools
在安装 Acumatica ERP 时进行设置 - Visual Studio 设置中的禁用
Enable Just My Code
选项 - 您可以手动将 Visual Studio 指向位于
SiteFolder\App_Data\CodeRepository\PX.Objects
- 确保
- 探索代码以找到覆盖逻辑的最佳位置。在这种情况下,最好的方法是创建一个从 TermsAttribute 派生的新属性并重写
CalcTerms
方法(这样您仍然可以重用基本CalcTermsDates
方法)
推荐阅读
- elasticsearch - 连接 Logstash 和 Elasticsearch 时出错
- javascript - 如何处理 onChange 并将焦点转移到新的
? - java - 当我使用 junit Cucumber 运行 TestRunner 类时,出现以下错误:
- node.js - 在 Node.JS 中只购买一个 Twilio 电话号码
- corda - Corda 可拥有的状态参与者财产
- linux - 将 pom 版本输出设置为变量并增加值
- javascript - Chrome JS 创建全局 KeyEvents
- c++ - asio::buffer_cast 奇怪的输出
- python - 如何使用 pycharm 安装 zip 包?
- javascript - JSON 数据到 HTML 中的表格