Ярлыки

.Net (17) (9) 1с8 (4) 1с8.2 УП (3) документирование (1) интеграция (10) карта (1) собеседование (1) ado (1) ajax (11) ASP (1) asp.net (10) authentication (1) c# (14) coding (2) Crm Ribbon (2) csv (1) datareader (1) delegate (5) dhtml (5) exam (1) excel (10) ext (1) extjs (8) google maps (1) iis (3) javascript (33) JSON (5) linq (1) LN (5) log (1) lotus notes (5) mail (1) MS CRM (63) MS CRM 2015 (3) MS CRM 5 (48) MS CRM 6 (28) ms office (2) msi (1) MVC (1) namespace (1) oData (3) outlook (1) parent-child (2) plugin (1) program (4) Project Management (1) remote debugger (1) REST (1) SharePoint (1) SharePoint 2010 (2) Silverlight (2) soft (1) sql (13) sql reporting service (8) sql2005 (3) ssrs (2) Thread (4) tree (1) vb (6) vba (1) VSTO (1) WCF (4) wmi (1) wsc (2) xml (1) Xrm.Page (1) xslt (1)

среда, 9 марта 2016 г.

MS CRM: Улучшение поиска в Homegrid

На мой взгляд, поиск в CRM сделан хорошо. Однако, когда в базе много записей, поиск по условию ИЛИ перестает нравиться. Можно воспользоваться расширенным поиском, но пользователи его на дух не переносят.
Можно сделать так:
Здесь в шапке таблицы под каждым заголовком столбца размещено поле ввода для поиска по соответствующему полю. Условия можно задать для разных колонок, оно будет обрабатываться по И. При этом штатный функционал - поиск, сортировка, фильтр продолжает работать без изменений.

Итак, на сетку вешаю кнопку, даю ей enablerule. В скрипте
1. раздвигаю высоту шапки.
2. сдвигаю вниз подсетку с результатами (данными).
3. Добавляю строку в шапку
4. в каждую ячейку рисую поле ввода, на нажатие клавиши ввода вешаю обработчик
5. обработчик собирает запрос по всем полям, устанавливает его для homegrid и обновляет

grid_form_customfilter = function(gr) {
 var crmGrid_gridBar = $("#crmGrid_gridBar");
 var tr = crmGrid_gridBar.children("tbody").children("tr");
 if(tr.length>1) return;
 //debugger;
 $("#crmGrid_gridBodyContainer").find("div.ms-crm-grid-databodycontainer").css("top",45);
 $("#crmGrid_gridBodyContainer").find("div.ms-crm-grid-BodyContainer").css("height",45);
 
 var sNewTr = "<tr id='tr324tr324'>";
 
 tr.children().each(function(index,ell){
  var el = $(ell);
  sNewTr += "<td>";
  var nobr = el.find("nobr");
  if(nobr.length>0){
   sNewTr += "<input id1='"+el.attr("field")+"' style='width:10em; box-sizing: border-box; height:16px; border: solid 1px gray; padding:0 5px 2px 5px; margin: 0 9px 2px 9px; ' value=''>";
  }
  else{
   sNewTr += el.html();
  }
  sNewTr += "</td>";
 });
 sNewTr += "</tr>";
 crmGrid_gridBar.children("tbody").append(sNewTr);
 
 $("#tr324tr324").find("input").each(function(index,ell){
  var el = $(ell);
  el.on( "click", function( e ) {
   e = e||event; 
   if (e) 
   { 
    e.returnValue = false; 
    e.cancelBubble = true;
    e.stopPropagation();
    e.preventDefault();
   }
  }).on("keyup", function(e){
   if ( e.which == 13 ) {
    e.preventDefault();
    
    var fetch = "<fetch distinct=\"false\" no-lock=\"true\" mapping=\"logical\" page=\"1\" count=\"150\" returntotalrecordcount=\"true\"><entity name=\"contact\"><filter type=\"and\"><condition attribute=\"statecode\" operator=\"eq\" value=\"0\" />";
    
    var tr1i = $(this).parent().find("input").each(function(ind,ell){
     var el = $(ell);
     var fld = el.attr("id1");
     var fldVal = el.val();
     if(fld && fldVal){
      fetch += "<condition attribute=\"" + fld + ((fld.endsWith("id") || fld.endsWith("statecode")) ? "name" : "") + "\" operator=\"like\" value=\"%"+fldVal+"%\" />";
     }
    });
    
    fetch += "</filter></entity></fetch>";
    gr.SetParameter("fetchXml", fetch);
    gr.refresh();
    
   }
  });
 });
 
 return;
}

Этот скрипт может искать записи по типам полей Текст, Число, Поиск (если имя поля заканчивается на id), statecode по названию.
Вам может потребуется доработать под типы Дата, Picklist по номеру.


Похожие записи:
как программно выбрать представление связанного списка

Комментариев нет: