2014-10-16 1 views
-1

В моем экземпляре CRM есть основной объект «Case». Внутри этого есть поиск клиентов по умолчанию (customerid), который указывает на основные элементы «Account» & «Контакт». Существует также другой поиск, указывающий на «Контакт», который отфильтрован на основе значения «Учетная запись» в customerid (важно, чтобы customerid использовался для выбора только значений учетной записи). Существует также другой поиск, указывающий на пользовательский объект, который использует функцию автоматического номера. Я также пытаюсь также фильтровать это поле (new_projectref), чтобы показывать только записи, связанные с выбранным значением учетной записи. Однако возникает ошибка, указывающая, что объект «Contact» не содержит атрибута с именем = «customerid». ».Невозможно найти решение, чтобы устранить второй тип записи в Lookup

/* Filter Lookup */ 

function preFilterLookup() { 
    try { 
    Xrm.Page.getControl("new_projectref").addPreSearch(function() { 
     addLookupFilter(); 
    }); 
    } catch (error) { 
    //window.console.log("Prefilter lookup error " + error.message); 
    } 
} 

function preFilterLookupGeneric(sourceField, destinationField) { 
    try { 
    Xrm.Page.getControl(destinationField).addPreSearch(function() { 
     addLookupFilterGeneric(sourceField, destinationField); 
    }); 
    } catch (error) { 
    // window.console.log("Prefilter lookup error " + error.message); 
    } 
} 

function addLookupFilterGeneric(sourceField, destinationField) { 
    try { 
    var companyId = Xrm.Page.getAttribute(sourceField).getValue()[0].id; 
    var entityType = Xrm.Page.getAttribute("customerid").getValue()[0].entityType; 
    alert(entityType); 
    if (entityType == "account") { 
     console.log("Company = " + companyId); 
     if (companyId != null) { 
     fetchXml = "<filter type='and'><condition attribute='customerid' operator='eq' value='" 
      + companyId + "' /></filter>"; 
     Xrm.Page.getControl(destinationField).addCustomFilter(fetchXml); 
     } 
    } else if (entityType == "contact") { 
     return; 
    } 
    } catch (error) { 
    window.console.log("Error lookup filter " + error.message); 
    } 
} 

function addLookupFilter() { 
    try { 
    var companyId = Xrm.Page.getAttribute("parentaccountid").getValue()[0].id; 
    // window.console.log("Company = " + companyId); 
    if (companyId != null) { 
     fetchXml = "<filter type='and'><condition attribute='customerid' operator='eq' value='" 
     + companyId + "' /></filter>"; 
     Xrm.Page.getControl("new_projectref").addCustomFilter(fetchXml); 
    } 
    } catch (error) { 
    // window.console.log("Error lookup filter " + error.message); 
    } 
} 

Заранее спасибо

+1

измените ваше название, чтобы быть более описательный характер, потому что, глядя на название никто не будет пытаться помочь вам – DarkMukke

+1

А вы когда-нибудь слышали разрывы строк? – DarkMukke

+0

Я отступил код для вас, пожалуйста, найдите время, чтобы сделать это в следующий раз. Вы должны облегчить людям, чтобы помочь вам! –

ответ

0

customerid это имя атрибута по делу лица. Если вы хотите применить фильтр к учетной записи или полю контакта, вам необходимо обновить fetchXml, чтобы использовать идентификатор объекта учетной записи, который равен accountid или contactid для контакта.

"<filter type='and'><condition attribute='accountid' operator='eq' value='" + companyId + "' /></filter>";

+0

Проблема только в том, что если я изменил это на идентификатор учетной записи, сообщение об ошибке снова появится, но вместо этого укажет, что пользовательский объект не содержит атрибут? Я думаю, что мой единственный вариант - заменить это поле поиска нескольких объектов с помощью пользовательского поиска, просто указывающего на объект Account. – user3535390