Задача очень простая — отображать только активные записи (в этом примере — продукты) в лукапе при работе с расширенным поиском.
Сначала я попробовал изменить вручную экспортированный файл кастомизации сущности product, добавив условие фильтра
<filter type="and">
<condition attribute="statecode" operator="eq" value="0" />
</filter>
и импортировав его обратно не получил требуемого результата. После чего я решил написать плагин, который бы перехватывал сгенерированный fetch xml и заменял его на нужный мне. Вот, что получилось:
Код плагина:
public void Execute(IPluginExecutionContext context)
{
if (context.InputParameters.Contains("FetchXml"))
{
string FetchXml = (String)context.InputParameters["FetchXml"];
//проверяю, что работаю с product
if (FetchXml.Contains("<entity name=\"product\">"))
{
//заменяю на нужный мне fetch xml
context.InputParameters["FetchXml"] = "<fetch version=\"1.0\" page=\"1\" count=\"100\" output-format=\"xml-platform\" mapping=\"logical\"><entity name=\"product\"><attribute name=\"productid\" /><attribute name=\"name\" /><order attribute=\"name\" /><filter type=\"and\"><condition attribute=\"statecode\" operator=\"eq\" value=\"0\" /><condition attribute=\"name\" operator=\"like\" value=\"%\" /></filter></entity></fetch>";
}
}
Регистрирую плагин с таким шагом:


31.01.2011 в 18:28
Можно ещё так сделать (unsupport, но быстрее и без доп. компонентов): в файле
‘\Program Files\Microsoft Dynamics CRM\Server\ApplicationFiles\alllookups.xml’
в фильтре для продукта () добавить условие отбора.
31.01.2011 в 18:41
Буду иметь ввиду