Расширенная функциональность
04
Ноя
2

Букмарклеты для CRM 2013

MS CRM построен на базе Веб-технологий, а значит – открывается в браузере (неожиданно, правда? 🙂 ). Поэтому в некоторых случаях можем использовать некоторые их возможности. А именно – букмарклет – закладка, сохраненная в веб-браузере, которая содержит JavaScript-команды. Применение их в отношении MS CRM поможет Вам сохранить пару щелчков мыши и даже больше.

Создаются они при помощи кнопки добавления в избранное:

  • Щелкните Добавить в Панель избранного;
  • Создастся закладка – откройте ее на редактирование;
  • Измените URL (вставьте в нее JavaScript-команду) и названия закладки. А чтобы было совсем шикарно — повесьте на закладки подходящие иконки 🙂


А ниже подборка JavaScript, которые помогут облегчится Вам жизнь:

Быстрые переходы

Страница Решения

javascript: var nav = new Object(); nav.uri = "/tools/Solution/home_solution.aspx?etc=7100&sitemappath=Settings|Customizations|nav_solution"; window.top.document.getElementById("navBar").control.raiseNavigateRequest(nav); void (0)

Страница Администрирование

javascript: var nav = new Object(); nav.uri = "/tools/Admin/admin.aspx?sitemappath=Settings|System_Setting|nav_administration"; window.top.document.getElementById("navBar").control.raiseNavigateRequest(nav); void (0)

Страница настройки текущей сущности

javascript: var frame = $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') }); var form = frame[0].contentWindow; try { var etc = form.Xrm.Page.context.getQueryStringParameters().etc; } catch (e) { } form.Mscrm.RibbonActions.openEntityEditor(etc);

Расширенный поиск

javascript: var frame = $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') }); var form = frame[0].contentWindow; var u = form.Mscrm.CrmUri.create("/main.aspx"); u.get_query()["pagetype"] = "advancedfind"; try { var etc = form.Xrm.Page.context.getQueryStringParameters().etc; } catch (e) { } if (etc) { u.get_query()["extraqs"] = "EntityCode=" + etc; } form.openStdWin(u, "_blank", 900, 600); void (0);

Форма

Копирование GUID’а записи

На экран

javascript: if (window.prompt("EntityId:", $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.entity.getId().slice(1, -1))) { }

В буфер

javascript: !(function (e) { if (!e) { return } try { var t = e.Xrm.Page.data.entity.getId(); if (!t) { return alert("Failed to find id on this form.") } if (window.clipboardData) { window.clipboardData.setData("Text", t) } else { window.prompt("Copy to clipboard: Ctrl+C, Enter", t) } } catch (n) { alert("Error occurred while retrieving record id. " + n.message) } })(function (e) { if (!e.APPLICATION_VERSION) { return alert("Could not determine the current version of CRM.") } if (e.APPLICATION_VERSION === "5.0") { return window.top.frames[0] } else if (e.APPLICATION_VERSION === "6.0" || e.APPLICATION_VERSION === "6.1") { var t = $("#crmContentPanel iframe:not([style*=\"visibility: hidden\"])"); if (t.length > 0 && t[0].contentWindow.Xrm.Page.ui) { return t[0].contentWindow } else { return alert("[CRM 2013] Could not locate the entity form.") } } else if (e.APPLICATION_VERSION) { return alert("Unsupported CRM Version Detected: " + e.APPLICATION_VERSION) } else { return alert("Unable to detect current CRM Version.") } }(window))

Copy a Link

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Mscrm.CommandBarActions.sendFormShortcut();

Асинхронное (без перезагрузки) обновление страницы данными с сервера

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.refresh(false)

Асинхронное обновление страницы с сохранением введенных данных

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.refresh(true)

Сохранение

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.entity.save();

Сохранить и закрыть

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.entity.save('saveandclose');

Сохранить и создать

javascript: $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') })[0].contentWindow.Xrm.Page.data.entity.save('saveandnew');

Окно свойств

javascript: var frame = $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') }); var id = frame[0].contentWindow.Xrm.Page.data.entity.getId(); var etc = frame[0].contentWindow.Xrm.Page.context.getQueryStringParameters().etc; frame[0].contentWindow.Mscrm.RibbonActions.openFormProperties(id, etc);

Разработка

Опубликовать все настройки

javascript: var frame = $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') }); frame[0].contentWindow.Mscrm.FormEditor.PublishAll();

Отключение автоматического сохранения

Данный bookmarklet отключает автоматическое сохранение для текущей записи (будет работать до обновления записи).

javascript: var frame = $("iframe").filter(function () { return ($(this).css('visibility') == 'visible') }); frame[0].contentWindow.Xrm.Page.data.entity.addOnSave(function (context) { if (context.getEventArgs().getSaveMode() != 1) { context.getEventArgs().preventDefault(); } });

Активировать все поля

javascript: !(function (e) { if (!e) { return } e.Xrm.Page.ui.controls.forEach(function (e, t) { if (e && e.setDisabled) { e.setDisabled(false) } }); e.Xrm.Page.data.entity.attributes.forEach(function (e, t) { if (e && e.setSubmitMode) { e.setSubmitMode("always") } }) })(function (e) { if (!e.APPLICATION_VERSION) { return alert("Could not determine the current version of CRM.") } if (e.APPLICATION_VERSION === "5.0") { return window.top.frames[0] } else if (e.APPLICATION_VERSION === "6.0" || e.APPLICATION_VERSION === "6.1") { var t = $("#crmContentPanel iframe:not([style*=\"visibility: hidden\"])"); if (t.length > 0 && t[0].contentWindow.Xrm.Page.ui) { return t[0].contentWindow } else { return alert("[CRM 2013] Could not locate the entity form.") } } else if (e.APPLICATION_VERSION) { return alert("Unsupported CRM Version Detected: " + e.APPLICATION_VERSION) } else { return alert("Unable to detect current CRM Version.") } }(window))

Режим «Бога»

Режим «Бога» позволяет одним кликом отключить большую часть стандартной клиентской логики:

  • Делает все обязательные поля не обязательными;
  • Делает все скрытые поля видимыми;
  • Активирует все неактивные поля;
  • Делает все скрытые вкладки видимыми;
  • Делает все скрытые секции видимыми;
  • Разворачивает все свернутые вкладки;
  • Очищает уведомления на уровне полей;
  • Отключает скрипт на сохранение записи;
  • Позволяет редактировать неактивные записи (работает только при включенном автосохранении и текущей объект не является Действием).
javascript: var form=$("iframe").filter(function(){return$(this).css("visibility")=="visible"})[0].contentWindow;try{form.Mscrm.InlineEditDataService.get_dataService().validateAndFireSaveEvents=function(){return new Mscrm.SaveResponse(5,"")}}catch(e){}varattrs=form.Xrm.Page.data.entity.attributes.get();for(var i in attrs){attrs[i].setRequiredLevel("none")}var contrs=form.Xrm.Page.ui.controls.get();for(var iin contrs){try{contrs[i].setVisible(true);contrs[i].setDisabled(false);contrs[i].clearNotification()}catch(e){}}var tabs=form.Xrm.Page.ui.tabs.get();for(var i in tabs){tabs[i].setVisible(true);tabs[i].setDisplayState("expanded");varsects=tabs[i].sections.get();for(var i in sects){sects[i].setVisible(true)}}

Системные названия атрибутов

Вариант 1

Заменяет метки полей на системные названия соответствующих атрибутов.

javascript: frames[0].Xrm.Page.ui.controls.forEach(function(a){a.setLabel(a.getName())});

Вариант 2

Создает рядом с меткой поле ввода, а в нем отображает системное имя, соответствующее метке.

javascript: (function(){var frm=(window.Xrm&&window.Xrm.Page&&window.Xrm.Page.ui&&window)||(frames[1]&&frames[1].Xrm&&frames[1].Xrm.Page.ui&&frames[1])||frames[0];var Xrm=frm.Xrm;if(!Xrm||!Xrm.Page||!Xrm.Page.ui){alert('Unable to find CRM form');return;}Xrm.Page.ui.tabs.forEach(function(tab){tab.setVisible(true);tab.sections.forEach(function(section){section.setVisible(true);});});var $=frm.jQuery||(frm.CEI&&frm.CEI.$);if(!$){var head=frm.document.getElementsByTagName('head').item(0);var s=frm.document.createElement('script');s.setAttribute('type','text/javascript');s.setAttribute('src','https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js');s.async=false;head.appendChild(s);waitForJQ();}else{setLabels();}function waitForJQ(){if(frm.jQuery){$=frm.jQuery.noConflict(true);setLabels();}else{setTimeout(waitForJQ,1000);}}function setLabels(){Xrm.Page.data.entity.attributes.forEach(function(a){a.controls.forEach(function(c){var lblText=c.getLabel();c.setVisible(true);var attr=a.getName();var lbl=$('#'+c.getName()+'_c').html('');lbl.css('text-align','left');if(lbl.is('td')){lbl.closest('table').children('colgroup').children('col:even').attr('width','400');}$('<input/>').width(200).val(attr).appendTo(lbl).focus(function(){$(this).select()});$('<span></span>').text(lblText).appendTo(lbl);});});}})();

Список пиклистов и их значений

Выводит в отдельном окне все пиклисты имеющиеся на форме и их значения (как отображаемые, так и числовые).

javascript: var osa = ""; frames[0].Xrm.Page.ui.controls.forEach(function (c, i){if (c.getControlType() == "optionset"){var osv = "<br /><b><u>Name: "+c.getName()+"</u></b><br />";frames[0].$("#"+c.getName()+"_i").find("option").first().nextAll().each(function (){osv += "<div>Value: "+$(this).attr("value")+"%C2%A0%C2%A0-%C2%A0%C2%A0Text: "+$(this).attr("title")+"</div>";});osa += "<div>"+osv+"</div>";}});(window.open("#", "#").document.open()).write("<div style='font-family:Segoe UI,Arial;font-size:11px;overflow:always'>"+osa+"</div>")

Список измененных полей

javascript: var message="The following fields are dirty: \n";window.frames[0].Xrm.Page.data.entity.attributes.forEach(function(attribute,index){if(attribute.getIsDirty()==true){message+="\u2219 "+attribute.getName()+"\n";}});alert(message);

Код объекта

javascript: var typeCode = frames[0].Xrm.Page.context.getQueryStringParameters().etc; if (typeCode) { clipboardData.setData("Text", typeCode.toString()); window.prompt("Copy to clipboard: Ctrl+C, Enter", typeCode.toString()) }

Получить значение поля

Вызывает окно ввода, в котором вводится название поля. После этого возвращается его значение. Бывает полезно для получения значения скрытого поля.

javascript: var v, f = prompt("Enter field name"); var a = frames[0].Xrm.Page.getAttribute(f); switch (a.getAttributeType()) { case "optionset": case "boolean": v = a.getSelectedOption().text; break; case "lookup": v = a.getValue()[0].name; break; default: v = a.getValue(); break; } window.prompt("Copy to clipboard: Ctrl+C, Enter", v);
Комментарии (2)
  • Michael Goryachev 04.11.2014

    Супер круто! Стал постоянно пользоватся, экономит кучу времени! Большое спасибо!

  • Николай 04.11.2014

    Отлично! Спасибо 🙂
    только «Режим Бога» надо чуток поправить, чтоб заработал:
    1. return$(this).css(«visibility») — пробел после return
    2. varattr — пробел после var
    3. varsects — пробел после var
    4. for(var iin contrs) — пробел между i и in

*

code