D365FO中复用PurchSelectLines将PO行复制到自定义表单的实现问题
D365FO复用标准
PurchSelectLines对话框实现采购单行复制到自定义表 我正在D365FO中开发功能,需要复用标准PurchSelectLines对话框,让用户选择一条或多条采购单行,并将选中行复制到已存在的采购单中(类似标准表单VendEditInvoice的功能)。目前的问题是,弹出PurchSelectLines对话框后,无法将选中行复制到自定义表中。
目标采购单已存在,并显示在自定义表单CancelDebitNoteDiffs中,该表单包含表头表和行表。
功能目标
- 打开标准
PurchSelectLines对话框 - 允许用户选择采购单行
- 将选中行复制/添加到自定义表单显示的现有采购单中
- 将复制的行持久化到自定义行表中
场景说明
- 自定义表单:
CancelDebitNoteDiffs - 表头表:
CancelDebitNoteDiffsTable - 行表:
CancelDebitNoteDiffsLine - 核心目标:通过标准
PurchSelectLines选择采购单行,复制到已存在表头记录对应的自定义行表中
1. 自定义表单按钮(操作菜单项)的点击事件
public void clicked() { super(); FormRun purchSelectLinesFormRun; Args args; purchFormLetter purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice); args = new Args(); args.name(formStr(PurchSelectLines)); args.record(invoiceInfoTable); args.parmObject(purchFormLetter); args.caller(element); purchSelectLinesFormRun = classFactory.formRunClass(args); purchSelectLinesFormRun.init(); purchSelectLinesFormRun.run(); // 等待模态表单关闭 purchSelectLinesFormRun.wait(true); element.refreshForm(); }
2. 处理PurchSelectLines返回的选中行
public void selectedLines(Common _record) { PurchLine purchLine; CancelDebitNoteDiffsTable header; CancelDebitNoteDiffsLine line; // 获取表单当前表头记录 header = CancelDebitNoteDiffsTable_ds.cursor(); if (!header) { warning("未选中表头记录。"); return; } purchLine = _record as PurchLine; if (!purchLine) { return; } ttsbegin; line.clear(); line.initValue(); line.CancelDebitNoteId = header.CancelDebitNoteId; line.PurchId = purchLine.PurchId; line.LineNum = purchLine.LineNumber; line.ItemId = purchLine.ItemId; line.Qty = purchLine.QtyOrdered; line.PurchPrice = purchLine.PurchPrice; line.LineAmount = purchLine.LineAmount; line.InventDimId = purchLine.InventDimId; line.insert(); ttscommit; }
3. 最终实现效果
- 标准
PurchSelectLines对话框正常打开 - 用户可选择一条或多条采购单行
- 每一条选中的
PurchLine都会传回自定义表单 - 选中行被复制到
CancelDebitNoteDiffsLine表中 - 原有表头记录保持不变
内容的提问来源于stack exchange,提问作者simon peter
相关产品推荐
相关产品推荐

