crm 2011 js — получение связанного представления сетки при обновлении

#javascript #crm #microsoft-dynamics #quote

#javascript #crm #microsoft-dynamics #Цитата

Вопрос:

У меня есть продукт с предложением комплекта в CRM 2011, и я пытаюсь вызвать функцию, когда соответствующий вид продукта обновляется.

введите описание изображения здесь

введите описание изображения здесь

В инструментах отладки F12 я вижу, что идентификатор сетки ‘crmGrid_productassociation_association’:

введите описание изображения здесь

Но следующий код js, похоже, не работает:

 var grid = document.getElementById("crmGrid_productassociation_association").control;
if (grid != null)
{
    alert("success");
}   
  

И когда я запускаю этот код при загрузке страницы:

 console.dir(Xrm.Page.ui.controls.get());
  

Элемент управления crmGrid_productassociation_association не отображается в списке элементов управления. Вместо этого отображаются только элементы управления для исходного продукта предложения. Кто-нибудь знает, как вызвать функцию js при обновлении связанного представления сетки?

Ответ №1:

Для тех из вас, кому интересно, я смог получить связанные сетки в CRM 2011 с помощью JS, вам нужна функция, которая выглядит следующим образом:

 function reloadKitProducts() {
    var iframe = document.getElementById('areaKitsFrame');

    if (iframe == null || iframe.readyState != "complete") {
        setTimeout(reloadKitProducts, 3000);
        return;
    }

    var subgrid = iframe.contentWindow.document.getElementById('crmGrid_productassociation_association').control.add_onRefresh(getKitProductsOnLineItemChange);
}
  

Вам нужно получить идентификатор iframe, который содержит подсетку. Это основная строка здесь:

 var subgrid = iframe.contentWindow.document.getElementById('crmGrid_productassociation_association').control.add_onRefresh(getKitProductsOnLineItemChange);
  

Он загружается только при нажатии на ссылку в панели навигации, и для загрузки все равно потребуется секунда или две, поэтому вам нужно реализовать рекурсивный тайм-аут.