Пользовательский поиск в динамике CRM 4.0

Может быть, этот фрагмент может помочь, все, что я сделал, это перебрал элементы img; схватил SRC и сохранил во временную переменную; добавили http: // domain + src в качестве нового атрибута источника.

<!DOCTYPE html>
<html lang="en">

  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title></title>

    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet">

  </head>

  <body>

    <!-- Page Content -->
    <div class="container">
      <div class="row">
        <div class="col-lg-12 text-center">
          <h1 class="mt-5">Test</h1>
            <img src="/img/img_01.png">
            <img src="/img/img_02.png">
            <img src="/img/img_03.png">
        </div>
      </div>
    </div>

    <!-- Bootstrap core JavaScript -->
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
    <script>
        $("img").each(function(){
          var src = $(this).attr('src');
          $(this).attr('src', 'http://www.blah.com' + src);
        })
    </script>
  </body>

</html>
6
задан Matt 4 May 2011 в 17:31
поделиться

2 ответа

При поиске и фильтрации через CRM SDK действительно занимает время для привыкания к. Для моделирования полнотекстового поиска необходимо использовать, вложил FilterExpressions как QueryExpression. Критерии. Страница SDK для вложенных фильтров, которые выясняет самая твердая часть, как создать отношения отцов и детей. Существует такое продолжение булевой логики, что легко потеряться.

У меня было требование для создания "поисковой системы" для одного из наших пользовательских объектов. Используя этот метод для сложной строки поиска ("один И два ИЛИ три") с несколькими доступными для поиска атрибутами было ужасно. Если Вам интересно, хотя, я могу вскопать его. В то время как это действительно не поддерживается, если бы можно получить доступ к базе данных непосредственно, я предложил бы использовать возможности полнотекстового поиска SQL.

- хорошо, здесь Вы идете. Я не думаю, что Вы сможете скопировать, вставляют это и выполняют Ваши потребности. мой клиент только делал два - три поиска ключевого слова, и они были довольны результатами этого. Вы видите то, что боль это должно просто сделать это в простом поисковом сценарии. Я в основном рвал код, пока он не 'работал'.

    private FilterExpression BuildFilterV2(string[] words, string[] seachAttributes)
    {
        FilterExpression filter = new FilterExpression();
        List<FilterExpression> allchildfilters = new List<FilterExpression>();

        List<string> andbucket = new List<string>();
        List<string> orBucket = new List<string>();

        // clean up commas, quotes, etc
        words = ScrubWords(words);

        int index = 0;

        while (index < words.Length)
        {
            // if current word is 'and' then add the next wrod to the ad bucket
            if (words[index].ToLower() == "and")
            {
                andbucket.Add(words[index + 1]);
                index += 2;
            }
            else
            {
                if (andbucket.Count > 0)
                {

                    List<FilterExpression> filters = new List<FilterExpression>();
                    foreach (string s in andbucket)
                    {
                        filters.Add(BuildSingleWordFilter(s, seachAttributes));
                    }

                    // send existing and bucket to condition builder 
                    FilterExpression childFilter = new FilterExpression();
                    childFilter.FilterOperator = LogicalOperator.And;
                    childFilter.Filters = filters.ToArray();

                    // add to child filter list
                    allchildfilters.Add(childFilter);

                    //new 'and' bucket
                    andbucket = new List<string>();
                }
                if (index + 1 < words.Length && words[index + 1].ToLower() == "and")
                {
                    andbucket.Add(words[index]);
                    if (index + 2 <= words.Length)
                    {
                        andbucket.Add(words[index + 2]);
                    }
                    index += 3;
                }
                else
                {
                    orBucket.Add(words[index]);
                    index++;
                }
            }
        }

        if (andbucket.Count > 0)
        {
            List<FilterExpression> filters = new List<FilterExpression>();
            foreach (string s in andbucket)
            {
                filters.Add(BuildSingleWordFilter(s, seachAttributes));
            }

            // send existing and bucket to condition builder 
            FilterExpression childFilter = new FilterExpression();
            childFilter.FilterOperator = LogicalOperator.And;
            childFilter.Filters = filters.ToArray();

            // add to child filter list
            allchildfilters.Add(childFilter);

            //new 'and' bucket
            andbucket = new List<string>();
        }
        if (orBucket.Count > 0)
        {
            filter.Conditions = BuildConditions(orBucket.ToArray(), seachAttributes);
        }
        filter.FilterOperator = LogicalOperator.Or;
        filter.Filters = allchildfilters.ToArray();

        return filter;
    }
    private FilterExpression BuildSingleWordFilter(string word, string[] seachAttributes)
    {
        List<ConditionExpression> conditions = new List<ConditionExpression>();

        foreach (string attr in seachAttributes)
        {
                ConditionExpression expr = new ConditionExpression();
                expr.AttributeName = attr;
                expr.Operator = ConditionOperator.Like;
                expr.Values = new string[] { "%" + word + "%" };

                conditions.Add(expr);
        }

        FilterExpression filter = new FilterExpression();
        filter.FilterOperator = LogicalOperator.Or;
        filter.Conditions = conditions.ToArray();

        return filter;
    }

    private ConditionExpression[] BuildConditions(string[] words, string[] seachAttributes)
    {
        List<ConditionExpression> conditions = new List<ConditionExpression>();

        foreach (string s in words)
        {
            foreach (string attr in seachAttributes)
            {
                ConditionExpression expr = new ConditionExpression();
                expr.AttributeName = attr;
                expr.Operator = ConditionOperator.Like;
                expr.Values = new string[] { "%" + s + "%" };

                conditions.Add(expr);
            }
        }

        return conditions.ToArray();
    }
4
ответ дан 17 December 2019 в 02:34
поделиться

Гм, это - довольно интересный сценарий...

Вы могли, конечно, сделать 'Подобный' запрос, и 'или' вместе colums/attribute условия, которые Вы хотите включенный в поиск. Это, кажется, как CRM делает запросы от поля выше списков объекта (и они - много быстро). Похоже, что база данных CRM имеет полнотекстовый индекс, хотя точно то, какие столбцы используются для заполнения его, немного туманно мне после краткого быстрого взгляда.

И помните LinqtoCRM за любовь запроса CRM (я запустил проект, извините о бесстыдном разъеме).

1
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: