как обновить вид панели инструментов с помощью js в Mscrm?

Я реализовал кнопку на ленте, которая обновляет поле объекта на основе объекта, выбранного в представлении панели мониторинга. После того, как я обновлю поле объекта с помощью js, мне нужно обновить представление панели мониторинга, чтобы повторно отобразить представление с обновленным значением поля.

Какой самый элегантный способ сделать это? Я мог бы выполнить js, чтобы перезагрузить всю страницу, но это был бы худший сценарий. Можете ли вы порекомендовать способ обновления только определенного представления на информационной панели для отображения обновленных данных?


person abdelaziz maroc    schedule 25.02.2015    source источник
comment
Взгляните на: stackoverflow.com/questions/8271868/   -  person Bactos    schedule 27.02.2015
comment
спасибо @Bactos, но у меня это не работает :/   -  person abdelaziz maroc    schedule 27.02.2015
comment
Почему бы вам не сделать вызов Ajax, чтобы получить обновленный html/JSON Dashboard для обновления представления?   -  person Arkantos    schedule 03.03.2015
comment
@Arkantos, ты можешь сказать мне, как это сделать ??   -  person abdelaziz maroc    schedule 03.03.2015
comment
Вы используете jQuery?   -  person Arkantos    schedule 03.03.2015
comment
Я разместил свой ответ с минимальным кодом, вам все равно нужно изменить его под свои нужды :)   -  person Arkantos    schedule 03.03.2015


Ответы (2)


Допустим, это ваш основной контейнер div, в котором содержится весь HTML-код панели инструментов.

<div id="main-container"> </div>

Затем, если вы уже используете jQuery

$('.updateBtn').on('click', function(){
  // update your entity field here
  $.ajax({
    url : 'your-dashboard-url',
    type : 'GET',
    // data : some object in case you want to pass something to server
    dataType : 'html'
  }).done(function(rdata){
        $('#main-container').html(rdata); 
  });
});
person Arkantos    schedule 03.03.2015
comment
спасибо, но как я могу вызывать эту функцию каждые 30 секунд и без события клика - person abdelaziz maroc; 03.03.2015
comment
вы можете сохранить весь код ajax внутри функции, скажем, getDashboardContent, и использовать ее в setInterval(getDashboardContent, 30000) - person Arkantos; 03.03.2015
comment
Но вы уверены, что на стороне сервера всегда будет обновляться контент каждые 30 секунд? Если нет, то вы без необходимости делаете запросы на получение того же контента :) - person Arkantos; 03.03.2015
comment
Это просто способ jQuery для выбора всех элементов с классом updateBtn - person Arkantos; 03.03.2015

У нас есть Custom report в IFRAME в нашем dashboard, и мы должны применить некоторые CSS Styles к этому отчету.

С помощью следующих строк кода я смог добраться до report и применить стили.

var ContentIframe = window.top.document.getElementById('contentIFrame0');
if(ContentIframe!=null)
{
var DashboardIframe=ContentIframe.contentDocument.frames["dashboardFrame"]
if(DashboardIframe!=null)
{
   //DashboardIframe.document.frames["IFRAME_SalesTrend"].document.getElementById("compatibilityNotification").style.display = "none";

У нас есть Activities View на dashoboard, я могу получить и обновить его, как показано ниже.

 DashboardIframe.document.getElementById("Activities").control.refresh();
}

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

person Dot_NET Pro    schedule 03.03.2015
comment
спасибо за ответ, но это не работает: / ‹br› Ошибка сообщения: «невозможно получить свойство« обновить »неопределенной или нулевой ссылки» - person abdelaziz maroc; 03.03.2015
comment
DashboardIframe.document.getElementById("Activities").control.refresh(); Я не могу найти .Control.refresh(), который обрабатывает ошибку, извините за мой английский :/ - person abdelaziz maroc; 03.03.2015
comment
@abdelazizmaroc это потому, что у вас нет представления Activities на панели инструментов, найдите имя своего View, которое вы хотите обновить, и замените его на Activities. Спасибо - person Dot_NET Pro; 05.03.2015
comment
Я заменил "Activities" на идентификатор моих представлений, но у меня все еще была та же ошибка. - person abdelaziz maroc; 05.03.2015
comment
Представление @abdelazizmaroc не может быть нулевым. Поскольку я приложил скриншот, вы должны использовать весь код. - person Dot_NET Pro; 05.03.2015