Я создал вложенную сетку в форме для объекта контакта в Dynamics CRM 2015, которая возвращает все действия электронной почты, задачи, встречи и телефонного звонка, где либо действие относится к контакту, для которого была загружена форма, либо где этот контакт является участник действия (т. е. в полях «Отправитель» или «Кому/Копия/Скрытая копия» для сообщения электронной почты или в списке участников для встречи).
Я добавил новую вложенную сетку (пока называемую «Новые действия») в свою контактную форму, которая использует специальное представление действий, которое я создал (и разработан с критериями, которые «никогда» не вернут никаких результатов - DateCreated >= 01/01/ 2050), а затем создал функцию javascript, которую я включил в качестве веб-ресурса в свое решение и вызываю в событии OnLoad формы:
function DisplaySubGrid() {
var subgrid = document.getElementById("NewActivities");
if (subgrid == null) {
setTimeout('DisplaySubGrid()', 1000);
return;
}
var fetchXml =
"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>"
+ "<entity name='activitypointer'>"
+ "<attribute name='activityid' />"
+ "<attribute name='activitytypecode' />"
+ "<attribute name='subject' />"
+ "<attribute name='statecode' />"
+ "<attribute name='regardingobjectid' />"
+ "<attribute name='ownerid' />"
+ "<attribute name='scheduledend' />"
+ "<attribute name='createdby' />"
+ "<attribute name='createdon' />"
+ "<order attribute='scheduledend' descending='false' />"
+ "<order attribute='subject' descending='false' />"
+ "<filter>"
+ "<condition attribute='activitytypecode' operator='in'>"
+ "<value>4201</value>"
+ "<value>4202</value>"
+ "<value>4210</value>"
+ "<value>4212</value>"
+ "</condition>"
+ "</filter>"
+ "<link-entity name='activityparty' from='activityid' to='activityid' alias='ae'>"
+ "<filter>"
+ "<condition attribute='partyid' operator='eq' uiname='" + Xrm.Page.getAttribute("fullname").getValue() + "' uitype='contact' value='" + Xrm.Page.data.entity.getId() + "' />"
+ "</filter>"
+ "</link-entity>"
+ "</entity>"
+ "</fetch>"
subgrid.control.SetParameter("fetchXml", fetchXml);
subgrid.control.refresh();
}
Надеюсь, вышеизложенное имеет смысл, я возвращаю атрибуты, которые соответствуют атрибутам представления действий, которое используется в подсетке, которую я настроил, а затем фильтрую нужные мне типы действий и только то, где сторона действия является контактом на страница. Это работает нормально, за исключением одного странного поведения.
Проблема в том, что иногда при переходе к этой контактной форме вложенная сетка не обновляется, хотя мой javascript (включая вызов subgrid.control.refresh()
) определенно работает, и поэтому во вложенной сетке нет записей об активности. Если я обновляю подсетку вручную (щелчок правой кнопкой мыши -> Обновить список) после загрузки страницы, отображаются правильные результаты - я не понимаю, почему это происходит. Кажется, это происходит при переходе от контактной формы, а затем с помощью кнопки «Назад» в моем браузере для возврата, но у меня также случалось это при обновлении страницы.