You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 14:04:50