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

D365虚拟实体:Lookup输入筛选时插件无法获取筛选条件

如何在插件中获取Lookup搜索时的筛选条件

Lookup弹窗触发的检索请求与高级查找的参数结构存在差异,常规从InputParameters["Query"]获取筛选条件的方式并不适用,可通过以下方法处理:

1. 确认插件注册的消息与上下文参数

  • 确保插件注册在目标虚拟实体的RetrieveMultiple消息上(Lookup搜索直接检索虚拟实体数据,而非Case实体)。
  • 先输出执行上下文的所有输入参数,明确参数的实际键名:
    // 调试时打印所有输入参数
    foreach (var key in context.InputParameters.Keys)
    {
        Trace.WriteLine($"InputParameter: {key} = {context.InputParameters[key]}");
    }
    
    Lookup场景下,筛选条件通常封装在FetchXml参数中,而非Query(QueryExpression)。

2. 解析FetchXml获取筛选逻辑

如果上下文存在FetchXml参数,直接解析该XML提取筛选条件:

if (context.InputParameters.Contains("FetchXml"))
{
    string fetchXml = context.InputParameters["FetchXml"].ToString();
    // 使用XDocument解析FetchXml的筛选节点
    var fetchDoc = XDocument.Parse(fetchXml);
    var filterElements = fetchDoc.Descendants(XName.Get("filter", "http://schemas.microsoft.com/xrm/2011/Contracts"));
    // 遍历filter节点处理具体筛选条件
}

3. 处理直接输入的搜索文本

当用户在Lookup输入框直接输入文本搜索时,筛选条件可能通过SearchText参数传递:

if (context.InputParameters.Contains("SearchText"))
{
    string searchKeyword = context.InputParameters["SearchText"].ToString();
    // 根据关键词匹配虚拟实体的对应字段
}

4. 识别Lookup请求来源

可通过上下文的MessageProperties判断请求是否来自Lookup弹窗,针对性处理:

if (context.MessageProperties.TryGetValue("IsLookup", out object isLookupObj) && (bool)isLookupObj)
{
    // 执行Lookup专属的筛选参数解析逻辑
}

额外注意事项

  • 虚拟实体的自定义Connector需确保正确传递Lookup的筛选参数到插件执行上下文,避免参数丢失。
  • 调试时使用Plugin Registration Tool的Profiler捕获完整上下文,确认参数的实际存在形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:11