Кастомизация
23
Июн
9

Передача кастомных параметров в строке запроса CRM 4

По умолчанию MS CRM не позволяет изменять маску url, т.е. существуют предопределенные параметры, которые могут быть переданы в строке запроса. И если Вы попытаетесь добавить свои, то система свалится с ошибкой. Например, откройте какую-нибудь карточку какого-либо объекта и нажмите Ctrl+N. Откроется новое окно браузера содержащее ту же самую запись, но то на этот раз у браузера будет строка запроса. Допишите в ее конце (только сотрите сначала знак #), например, строчку &user=new и нажмите Enter.


Для чего это нужно? Причин может быть много… от интеграции с внешними системами и передачи значений через строку запросу. Либо для внутренних нужд: например, открытие одной формы из другой через скрипт и передача каких-либо значений через строку запроса.

Чтобы включить пользовательские параметры в строке запроса нужно немного похимичить с реестром:

  1. Перейдите Start – Run – введите regedit и жмите ОК
  2. Откройте ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM и добавтье (или измените существующий) DWORD ключь DisableParameterFilter со значением 1
  3. Перезгрузите веб-сервер: перейдите Start – Run – iireset и жмите ОК

Попробуйте снова ввести строчку запроса, которую пробовали в начале – на этот раз ошибки не будет.

А для того чтобы получить значение параметров и значений из строки запроса воспользуйтесь следующим скриптом:

var _GET_Keys; // в этом масиве будут хранится названия переменных
var _GET_Values; // а в этом значения этих переменных
var _GET_Count = 0;
get = new String(window.location); // присваеваем переменной значение адресной строки
x = get.indexOf('?');
if(x!=-1) {
	l = get.length;
	get = get.substr(x+1, l-x-2); // вырезаем подстроку с переменными
	l = get.split('&');
	x = 0;
	_GET_Count  = l.length;
	_GET_Keys   = new Array(_GET_Count);
	_GET_Values = new Array(_GET_Count);
	
	// отделяем название переменных от их значений и заносим в соответствующие массивы
	for(i in l) {
		get = l[i].split('=');
		_GET_Keys[x] = get[0];
		_GET_Values[x] = get[1];
		x++;
	}
	
	// выводим в сообщении вторую пару переменная=значение (нумерация начинается с нуля)
	alert("Переменная 1: " + _GET_Keys[1] +', значение 1: '+ _GET_Values[1]);
}

Поместите его на событие OnLoad формы и он будет помещать в два массива пары переменная=значение. А также выводит вторую пару в сообщении (Вы же можете поступить с ними как захотите).


Комментарии (9)
  • Age 23.06.2009

    Для offline клиента есть подобный флажок?
    накатали проект со своими параметрами в урл, и в offline это все с грохотом падает
    как отключить фильтр url в offline?

  • slivka_83 23.06.2009

    Здравствуйте 🙂
    У меня к сожалению нет под рукой offline клиента, но у него точно должны быть свои записи в реестре 🙂 попробуйте их найти и добавить к ним этот флажок 🙂

  • Дмитрий 23.06.2009

    Добрый день!

    подскажите пожалуйста как захостить свою (кастом) страницу в пространстве СРМ.
    задача следующая — передается некий ID этой странице, осуществляется поиск объекта по этому идентификатору (например организация) и производится открытие карточки организация (редирект)

  • slivka_83 23.06.2009

    А у Вас страничка уже написана?

  • Дмитрий 23.06.2009

    наверно страничка — это громко сказано,
    в онлоад метод добавлен ког который подключается к срм сервису и ищет объект по полю ID, далее получает CRM GUID найденного объекта и формирует полный URL адрес формы редактирования объекта.

  • slivka_83 23.06.2009

    Тогда я не понимаю вопрос… страница у Вас уже есть (наверно помещена она у Вас в папке ISV). Как передать параметры тут написано. Что еще необходимо?

  • екатерина 23.06.2009

    у меня вопрос: а как сделать поиск по значениям одного атрибута для всех созданных экземпляров сущности? причем организовать этот поиск в коде на событие OnLoad

  • slivka_83 23.06.2009

    Ну, например с помощью Fetch-запроса 🙂
    http://mmcrm.ru/?p=489
    http://msdn.microsoft.com/en-us/library/cc677073.aspx

  • екатерина 23.06.2009

    спасибо, уже разобралась
    использовала код доступа к базе данных CRM, описанный в одном из java скриптов на этом сайте

*

code