Стандартный функционал CRM 2011 не позволяет создавать Lookup, в котором можно выбрать сразу несколько элементов.
Поиск в интернете дал только одно решение, которое по каким-то причинам не работает в Rollup 12.
В результате, была найдено следующее решение:
Решается это при помощи JavaScript'a.
Алгоритм следующий:
1. Создается обычный лукап любого типа
2. Создается текстовое поле - для хранения списка GUID'ов. (текст, несколько строк)
3. Создается текстовое поле - для хранения названий элементов Lookup'a (текст, несколько строк)
4. При помощи JavaScript'а меняется аттрибут лукапа на multiple.
5. При выборе списка записей, выбранные GUID'ы сохраняются в наше текстовое поле.
6. При загрузке страницы, список GUID'ов и названий подгружается на форму.
На страницу добавляется следующая JS-функция:
var SetLookupAsMulti = function (lookupAttrName, guidsAttrName, namesAttrName) {
var lookupElement = document.getElementById(lookupAttrName);
var lookupAttribute = Xrm.Page.getAttribute(lookupAttrName);
var guidsAttribute = Xrm.Page.getAttribute(guidsAttrName);
var namesAttribute = Xrm.Page.getAttribute(namesAttrName);
if ((typeof lookupElement == 'undefined') ||
(typeof guidsAttribute == 'undefined') ||
(typeof namesAttribute == 'undefined')) {
return false;
}
var guidsAttributeValue = guidsAttribute.getValue();
var namesAttributeValue = namesAttribute.getValue();
var looklupType = lookupAttribute.getAttributeType();
var SetSavedGuidsToLookup = function () {
if ((guidsAttributeValue == null) ||
(namesAttributeValue == null)) {
return false;
}
var idsArray = [];
var splittedGuids = guidsAttributeValue.split(";");
var splittedNames = namesAttributeValue.split(";");
var savedItem = crmForm.all[lookupAttrName].control.get_value();
if (savedItem == null) {
return false;
}
var sampleItem = savedItem[0];
for (var key in splittedGuids) {
var item = {};
for (itm_key in sampleItem) {
item[itm_key] = sampleItem[itm_key];
}
item.id = splittedGuids[key];
item.name = splittedNames[key];
if (item.id != "") {
idsArray.push(item);
}
}
if (idsArray.length == 0) {
return false;
}
lookupAttribute.setValue();
crmForm.all[lookupAttrName].control.set_value(idsArray);
};
var onFormSave_Handler = function () {
var lookupValue = crmForm.all[lookupAttrName].control.get_value();
var guidsString = "";
var namesString = "";
if (typeof lookupValue == 'undefined') {
return false;
}
for (var key in lookupValue) {
guidsString += lookupValue[key].id + ";";
namesString += lookupValue[key].name + ";";
}
guidsAttribute.setValue(guidsString);
namesAttribute.setValue(namesString);
// lookupAttribute.setValue();
lookupElement.setAttribute("lookupstyle", "single");
lookupElement.setAttribute("_lookupstyle", "single");
};
lookupElement.setAttribute("lookupstyle", "multi");
lookupElement.setAttribute("_lookupstyle", "multi");
SetSavedGuidsToLookup();
Xrm.Page.data.entity.addOnSave(onFormSave_Handler);
}
После этого, добавляется еще одна функция на onLoad:
function onLoad(){
SetLookupAsMulti("new_lookup","new_lookup_guids","new_lookup_names");
}
которая вешается на загрузку формы.
В результате, получается lookup с мульти-выбором для CRM 2011, работающий и с Rollup 12.