Кастомизация
21
Ноя
9

Передача значений на дочернюю форму

В одном из предыдущих постов был описан способ как с помощью скрипта добраться до родительской формы. Сегодня будет инверсия – будем добираться до дочерней формы.

Если мы пытаемся создавать новые связанные записи, то тут все просто – маппинг – он передаст необходимые значения полей в дочернюю форму. Но если новые записи создаются с помощью скрипта, то маппинг нам не поможет – нужно кодить.

Как Вы знаете MS CRM основан на веб-стандартах и соответственно все его формы открываются по URLам. Т.е. чтобы открыть форму для вводу новой записи Электронной почты нужно вбить в адресной строке в браузере (более подробно смотрите в статье Прямой доступ к объектам MS CRM):

Соответственно чтобы открыть новое окно какой-то записи нужно воспользоваться JavScript методом window.open. Но открыть его мало! Нужно сохранить ссылку на него для того, чтобы иметь возможность обращаться к нему в любое время.

Посмотрим как это сделать:

  • Поместите на онлоад формы Возможная сделка следующий код (измените только значения подставляемые в лукап):
    var newwin;
    
    // открываем новое окно и записываем ссылку на него
    newwin=window.open('/Activities/email/edit.aspx', '', 'width=830,height=600,directories=no,menubar=no,resizable=yes,titlebar=no,toolbar=no');
    
    // ждем секунду и вызываем функцию PreFillSourceCampaign
    window.setTimeout(PreFillSourceCampaign, 1000);
    
    function PreFillSourceCampaign() {
    
    	// проверяем что нужное поле (в данном случаи regardingobjectid на форме Электронной почте) на дочерней форме доступно
    	if(newwin.document.crmForm.all.regardingobjectid != null) {
         
    		// задаем значение лукапа
    		var lookupData = new Array();
    		var lookupItem= new Object();
    		lookupItem.id = '{BBFF77D3-94C5-DE11-A985-000C298F544B}';
    		lookupItem.typename = 'account';
    		lookupItem.name = 'Ежик';
    		lookupData[0] = lookupItem;
    		newwin.document.crmForm.all.regardingobjectid.DataValue = lookupData;
            
    	} else {
    
    		// если дочерняя форма еще не загрузилась, ждем секунду и снова вызываем функцию PreFillSourceCampaign
            window.setTimeout(PreFillSourceCampaign, 1000);
            
    	}
        
    }
    

    Этот код открывает новое окно и сохранет ссылку на него в переменную newwin. Затем «дожидается» пока в открытое окно загрузится HTML-код и изменяет в нем значение лукапа.

  • Откройте какую-либо запись Возможной сделки (или создайте новую). При загрузке формы сразу же откроется форма создания Электронной почты с заполненным полем В отношении.


Комментарии (9)
  • Stanislav 21.11.2009

    Битые сслыкли на картинки, внизу поста.

  • slivka_83 21.11.2009

    Спасибо 🙂 подправил 🙂

  • Николай 21.11.2009

    Это статический скрипт, а как сделать динамику!
    lookupItem.id = ‘{BBFF77D3-94C5-DE11-A985-000C298F544B}’;
    lookupItem.typename = ‘account’;
    lookupItem.name = ‘Ежик’;

    Если не такой ID и не account а contact?

  • Николай 21.11.2009

    lookupItem.id = ‘{BBFF77D3-94C5-DE11-A985-000C298F544B}’;
    lookupItem.typename = ‘account’;
    lookupItem.name = ‘Ежик’;
    Это же статика а не динамика?

  • slivka_83 21.11.2009

    Вопрос не понятен! 🙂

  • Николай 21.11.2009

    Вопрос заключался в том, что в коде указана статическая ссылка, на id и имя объекта, а как сделать динамику?

  • slivka_83 21.11.2009

    Ну, в коде и делаете динамику 🙂 вопрос по прежнему не понятен 🙂 Что конкретно Вы хотите сделать? 🙂

  • Николай 21.11.2009

    В том то и вопрос, как сделать динамику?! у вас код для конкретной Возможной сделки? А как сделать унифицированный код, для любой возможной сделки. А вообще мысль такая — при определенном значении picklist на форме какого-либо действия, создавать новое действие, с уже проставленными значениями, ну хотя бы в отношении(стандартные дальнейшие действия не подходят(((

  • slivka_83 21.11.2009

    Что значит любой? я хочу поставить в поле определенное значение — я его и ставлю! Если Вы хотите какое-либо другое значение — либо меняете его в коде, либо к воде определяете (а что конкретно Вам нужно — это уже зависит от задачи).

*

code