D365 FO中如何获取表单显示方法totalAmountSingleLine的值?
D365显示方法取值与字段对比解决方案
问题背景
在LedgerJournalTransVendInvoice表单中,"Total Amount"字段关联数据源的显示方法totalAmountSingleLine,需要获取该方法返回的金额值,与RemainingAmount字段做对比,现有代码无法实现该逻辑。
现有代码问题点
- 错误使用
formRun.controlCallingMethod获取方法名称,而非直接调用显示方法获取返回值 - 未正确获取显示方法的返回值,也未实现与
RemainingAmount的对比逻辑 - 获取表单数据源和当前记录的方式冗余
修正后的代码实现
final class LedgerJournalTransVendInvoice_PostJournal_AzimutBenetti_Extension { public void clicked() { LedgerJournalTransVendInvoice currentRecord; Amount totalAmount; Amount remainingAmount; DialogButton diagBut; str strMessage = "Importo da decurtare al saldo della lettera di intento maggiore dell’importo residuo. Proseguire?"; str strTitle = "Splafonamento"; // 获取当前表单数据源的选中记录 currentRecord = this.dataSourceObject().cursor(); if (!currentRecord) { next clicked(); return; } // 直接调用显示方法获取Total Amount值 totalAmount = this.dataSourceObject().totalAmountSingleLine(); // 获取RemainingAmount字段值 remainingAmount = currentRecord.RemainingAmount; // 执行金额对比逻辑 if (totalAmount > remainingAmount) { diagBut = Box::yesNo(strMessage, DialogButton::No, strTitle); // 根据用户选择决定是否执行后续逻辑 if (diagBut == DialogButton::Yes) { next clicked(); } // 用户选No则终止后续操作 } else { // 金额符合要求,直接执行后续逻辑 next clicked(); } } }
关键说明
- 直接通过
dataSourceObject()获取表单数据源,调用其显示方法totalAmountSingleLine()即可拿到计算后的金额值 - 通过
cursor()获取当前选中的LedgerJournalTransVendInvoice记录,直接读取RemainingAmount字段值 - 增加空记录判断,避免空引用错误
- 完善用户选择分支逻辑,仅在用户确认后执行后续的
clicked()操作
内容的提问来源于stack exchange,提问作者Fabrizio Mastrone
相关产品推荐
相关产品推荐

