AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2013, 18:07   #1  
NoTimeToCry is offline
NoTimeToCry
Участник
 
101 / 10 (1) +
Регистрация: 28.04.2012
Не отрабатывает скрипт после ur12
Всем привет. Такая проблема, что после обновления crm до 12 роллапа, начал падать скрипт на OnLoad, суть его в обновлении грида. Вот код :
X++:
var a = ["sample1","sample2","sample3"];
        for (var i in a)
        {
            var gridControl = Xrm.Page.ui.controls.get(a[i]);
            if (gridControl != null) 
            {
                gridControl.refresh();
            }
        }
Падает вот с такой ошибкой :Unable to get value of the property 'Refresh': object is null or undefined. Смотрел в дебаггере, через F12, метод refresh есть и доступен, но на деле, почему то не работает. Никто не сталкивался? Заранее спасибо!
Старый 02.07.2013, 02:22   #2  
Anros is offline
Anros
Участник
 
54 / 28 (1) +++
Регистрация: 01.07.2009
http://msdn.microsoft.com/en-us/libr...x#BKMK_refresh
Цитата:
Note
The refresh method is not available in the form OnLoad Event.
За это сообщение автора поблагодарили: NoTimeToCry (1).
Старый 02.07.2013, 10:23   #3  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
попробуйте это :
Код:
        for (var i in a)
        {
           var gridControl = Xrm.Page.ui.controls.get(a[i]);
           if (gridControl != null) return;
           if (gridControl.readyState != "complete")
           {
               setTimeout('название функции где идет рефреш()', 1000);
               return;
           }
           gridControl.refresh();
        }
не уверен что в Xrm.Page.ui.controls.get(a[i]) есть метод readyState, но в document.getElementById(a[i]).readyState есть точно или для UR12 лучше через JQuery $(a[i]).attr("readyState")

Последний раз редактировалось spectr; 02.07.2013 в 10:25.
За это сообщение автора поблагодарили: NoTimeToCry (1).
Старый 02.07.2013, 10:37   #4  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Цитата:
Сообщение от spectr Посмотреть сообщение
попробуйте это :
Код:
        for (var i in a)
        {
           var gridControl = Xrm.Page.ui.controls.get(a[i]);
           if (gridControl != null) return;
           if (gridControl.readyState != "complete")
           {
               setTimeout('название функции где идет рефреш()', 1000);
               return;
           }
           gridControl.refresh();
        }
не уверен что в Xrm.Page.ui.controls.get(a[i]) есть метод readyState, но в document.getElementById(a[i]).readyState есть точно или для UR12 лучше через JQuery $(a[i]).attr("readyState")

Для IFRAME есть event OnReadyStateComplete

IFRAME OnReadyStateComplete Event
The OnReadyStateComplete event indicates that the content of the IFRAME has loaded and can be accessed in code. Use this event when referencing IFRAME controls within your scripts.

http://msdn.microsoft.com/en-us/library/gg334481.aspx

Это поддерживаемый метод.
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 02.07.2013 в 10:43.
За это сообщение автора поблагодарили: NoTimeToCry (1).
Старый 09.07.2013, 18:42   #5  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Вот млин самому пришлось такое делать на UR 12
Так вот под все браузеры сидел долго и нудно ковырял Script и дошел до такого решения:
Код:
$(Xrm.Page.getControl("WebResource_ELL").getObject()).load(function() {
		тут тело
	});
Xrm.Page.getControl("WebResource_ELL").setSrc(Xrm.Page.getControl("WebResource_ELL").getSrc());
Предыстория
Начал ковырять все с IFRAME OnReadyStateComplete Event, так оказалось что для подключаемых HTML Web Resource ее нет!
Пошел другим путем через Xrm.Page.getControl("WebResource_ELL").getObject(), а там получив object есть такая штука как readystatechange
Вот результат пробы был такой:
Код:
Xrm.Page.getControl("WebResource_ELL").getObject().readystatechange = function() {
		тело
	});
Но это чудо в Chrome и FF не захотело пахать, зато красиво в ИЕ работало.
Тогда перешел на JQuery и ее .load, но и тут не все гладко , оказалось что .load не всегда срабатывает. Тут начал думать и пришел к мнению что IFrame уже начинает грузится с кеша раньше чем выполняется OnLoad формы, потому решил добавить
Код:
Xrm.Page.getControl("WebResource_ELL").setSrc(Xrm.Page.getControl("WebResource_ELL").getSrc());
и вот и все заработало, но есть один минус, так как мы 2 раза дергаем загрузку айфрейма.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Системные нотификации для CRM 2011 и CRM 2011 UR12 Blog bot Dynamics CRM: Blogs 0 10.06.2013 18:11
crminthefield: UR12/Polaris Changes to Dynamics CRM 2011 Async Maintenance Jobs Blog bot Dynamics CRM: Blogs 0 25.03.2013 18:11
crminthefield: UR12 vs. Polaris: Commonalities Differences & Improvements Blog bot Dynamics CRM: Blogs 0 05.02.2013 00:12
crminthefield: UR12 FAQ and Known Issues Blog bot Dynamics CRM: Blogs 0 30.01.2013 09:11
crminthefield: Script Errors after Installing UR12 Blog bot Dynamics CRM: Blogs 0 21.01.2013 21:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:11.