zoukankan      html  css  js  c++  java
  • 也谈MS CRM4中实现模糊查找

        看了星吧客的文章<<MSCRM4 让视图查找功能默认实现模糊查找>>,确实在项目实施中有这种需求出现,End User希望实现完全的模糊查询,而现有系统中给定的功能呢,只是在输入的查询字符之后加入了通配符以便进行模糊查找。举例来说,用户在客户列表的搜索查找框中输入数字"8",MS CRM系统会在处理时,将"8"扩充为"8*",由此可见,这只是部分的模糊匹配,即,只能够查找出以"8"开头的所有数据,而End User经常希望的结果是,只要数据中还有8,就要被挑选出来,也就是形如"*8*"的查询。

        星吧客的做法,是修改了源文件,一种Unsupported方法,我也提供另一个方法的思路吧。

        主旨想法就是借用MS CRM中的Plugin,将完全模糊查询功能实现在一个Plugin中。那么应该截获那个消息呢?凭感觉,想到了Fetch方法,不过,在SDK给的注册工具中,并没有相对应的消息,那么是什么呢?在Reference中找到ExecuteFetch Message方法,还是没有对应的消息,不过,倒是有Execute消息,是不是可以用乜?try一下,get it。在进行查找时,使用Execute方法可以拦截到该查找请求。分析context参数的属性,如下图所示。

    image

    其中,InputParameters[“FetchXml”]对应的值如下:

    <fetch distinct="false" mapping="logical" page="1" count="50">
      <entity name="account">
        <attribute name="name" />
        <attribute name="accountnumber" />
        <attribute name="createdon" />
        <attribute name="modifiedon" />
        <attribute name="accountid" />
        <attribute name="name" />
        <attribute name="accountnumber" />
        <attribute name="modifiedon" />
        <attribute name="createdon" />
        <filter type="and">
          <filter type="and">
            <condition attribute="statecode" operator="eq" value="0" />
          </filter>
          <filter type="or">
            <condition attribute="name" operator="like" value="8%" />
            <condition attribute="accountnumber" operator="like" value="8%" />
          </filter>
        </filter>
      <order attribute="name" descending="false" />
      </entity>
    </fetch>

    从上面红色以及蓝色着色的部分,可以看到MS CRM系统是如何处理,那么在待开发的Plugin的Execute方法中,只要将形如"8%"的value更改为"%8%"不就可以了么?

        我的代码如下:

    public void Execute(IPluginExecutionContext context)
    {
        if (context.InputParameters.Contains("FetchXml") == false) return;
        string fetchXml = context.InputParameters["FetchXml"].ToString();
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(fetchXml);
        XmlNodeList nodeList = doc.GetElementsByTagName("condition");
        foreach (XmlNode node in nodeList)
        {
            if (node.Attributes["operator"].Value != "like") continue;
            if (node.Attributes["value"] == null) continue;
            node.Attributes["value"].Value = "%" + node.Attributes["value"].Value + "%";
        }
        context.InputParameters["FetchXml"] = doc.InnerXml;
    }

    注册Step时,选择Execute消息,以及PreStage,其他的选项不必修改。

     

    如此,即可实现完全模糊查找功能。

  • 相关阅读:
    与客服聊天功能测试点
    京东优惠券如何测试
    Linux笔试题
    线程与线程池原理
    PyCharm 介绍、安装、入门使用
    银行APP测试用户体验性方面
    python的闭包
    列表解析2
    深入函数
    再谈装饰器@@@
  • 原文地址:https://www.cnblogs.com/StoneGarden/p/1512393.html
Copyright © 2011-2022 走看看