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

Dynamics 365 F&O中如何让Form1的ScaleID lookup仅显示激活记录?

过滤Form1中ScaleID字段Lookup仅显示Form2的激活记录(Status=Yes)

方法1:重写Form1中ScaleID字段的Lookup方法(推荐,仅影响当前字段)

直接在Form1的ScaleID字段上重写lookup方法,通过自定义查询过滤出Form2中Status为Yes的记录:

  1. 打开Form1设计器,找到ScaleID字段,右键选择Override method -> lookup
  2. 替换默认方法代码为以下逻辑(注意替换实际表名和字段名):
public void lookup()
{
    Query                   query;
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;
    FormRun                 formRun;
    Args                    args;
    TableId                 form2TableId = tableNum(YourForm2Table); // 替换为Form2绑定的表名
    FieldId                 statusFieldId = fieldNum(YourForm2Table, status); // 替换为实际status字段名
    FieldId                 scaleIdFieldId = fieldNum(YourForm2Table, ScaleID); // 替换为实际ScaleID字段名

    // 构建过滤查询
    query = new Query();
    qbds = query.addDataSource(form2TableId);
    qbds.addSortField(scaleIdFieldId, SortOrder::Ascending); // 可选:按ScaleID升序排列

    // 添加Status=Yes的过滤条件
    qbr = qbds.addRange(statusFieldId);
    // 若status是YesNo枚举类型
    qbr.value(queryValue(YesNo::Yes));
    // 若status是字符串类型(如"Yes"/"No"),替换为:
    // qbr.value(strFmt('"%1"', "Yes"));

    // 调用标准Lookup表单(如果用自定义Form2作为Lookup,替换formStr(SysTableLookup)为formStr(YourForm2))
    args = new Args();
    args.parmQuery(query);
    formRun = classFactory.formRunClass(formStr(SysTableLookup));
    formRun.init();
    formRun.run();
    formRun.wait();

    // 将选中值赋值给当前字段
    if (formRun.closedOk())
    {
        element.value(formRun.record().getFieldValue(scaleIdFieldId));
    }
}

方法2:修改Form2的数据源过滤(影响所有使用Form2作为Lookup的场景)

如果Form2仅作为Lookup表单使用,且所有场景都需要过滤激活记录,可以直接在Form2的数据源init方法中添加过滤:

  1. 打开Form2设计器,找到数据源,右键选择Override method -> init
  2. 在super()之后添加过滤代码:
public void init()
{
    super();
    QueryBuildRange qbr;
    TableId form2TableId = tableNum(YourForm2Table);

    qbr = this.query().dataSourceTable(form2TableId).addRange(fieldNum(YourForm2Table, status));
    qbr.value(queryValue(YesNo::Yes));
    // 字符串类型替换为:qbr.value(strFmt('"%1"', "Yes"));
}

注意事项

  • 务必将代码中的YourForm2Table、status、ScaleID替换为项目中的实际表名和字段名
  • 根据status字段的类型(枚举/字符串)调整过滤条件的赋值方式
  • 优先选择方法1,避免方法2对其他使用Form2的场景造成影响

内容的提问来源于stack exchange,提问作者C4U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:42:53