AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Отклик от кампании

Запись от Артем Enot Грунин размещена 27.10.2009 в 11:08

Отклики, или как их неудачно назвали в третьей версии "Контракты от кампании", используются для сбора информации о ходе проводимой акции. Основное отличие Отклика от Интереса заключается в том, что Отклик может быть и плана "идите в задницу", в то время как Интерес - это действительно интерес. Так же отклик является Действием со всеми вытекающими последствиями: имеет срок, ответственного и попадает в Outlook. Иными словами Отклик - переходной объект между модулями продаж и маркетинга. Именно поэтому Отклики часто используются для анкетирования на семинарах при телесейле и т.д. Получены они при этом могут быть лишь в ответ на некое действие пользователя. И вот тут возникает не приятный момент: в Отклики преобразуются только Действия созданные после распределения маркетинговых Действий кампании. Для всех же прочих действий (пусть даже созданных в отношении этих самых Действий кампании) такой функционал по умолчанию не доступен - просто не будет соответствующего пункта меню.



Оставим риторический вопрос почему это так и зададимся вопросом как это исправить. Наиболее простой способ - вызвать стандартную системную функцию promoteToResponse так же как это происходит для "особенных" действий. Возможно наиболее правильным будет способ добавить этот элемент меню через ISV.config, но меня искренне бесит этот способ, поэтому я пошел другим путем:
Код:
var CRM_FORM_TYPE_CREATE = 1;

if (crmForm.FormType != CRM_FORM_TYPE_CREATE)
{
    //debugger;
    var oRegarding = crmForm.all.regardingobjectid;

    // В отклик преобразуются только Действия в отношении Действия компании
    if(oRegarding != null && oRegarding.DataValue != null && oRegarding.DataValue[0] != null && oRegarding.DataValue[0].typename == "campaignactivity")
    {
        var oId = '_MIpromoteToResponse' + crmForm.ObjectTypeCode;

        // Если элемент меню уже promoteToResponse уже есть - выходим
        if (document.getElementById(oId) != null) return;

        var oAction = 'action="promoteToResponse(' + crmForm.ObjectTypeCode + ');"';
        var oMenuItemHtml = '<LI class="ms-crm-MenuItem-Label" id="' + oId + '" ' + oAction + '></LI>';

        var oMenu = document.getElementById("mnuaction");
        var oItem = oMenu.appendChild(document.createElement(oMenuItemHtml));

        var oMenuItemText = "Promote To Response";    
        oItem.innerHTML =    '<SPAN class="ms-crm-MenuItem-Label">' +
                        '<A class="ms-crm-MenuLink" onclick="return false;" href="javascript:onclick();" target="_self">' +
                            '<SPAN class="ms-crm-MenuItem-Icon"></SPAN>' +
                            '<SPAN class="ms-crm-MenuItem-Text">' +
                                oMenuItemText +
                            '</SPAN>' +
                        '</A>' +
                    '</SPAN>';
    }
}
Этот код нужно вставить на OnLoad формы любого Действия, которое может быть создано путем распределения Действий кампании: Звонок, Факс, Письмо, Встреча. Он проверяет подходит ли тип формы, правильно ли заполнено поле "в отношении", есть ли системный пункт меню и в противном случае создает его.
Для чего может потребоваться данный функционал? Например, когда маркетинговый список дополнялся в процессе кампании. В этом случае BulkOperation, уже выполнена и автоматически новые Действия генерироваться не будут. Тем не менее, рационально использовать стандартную методику проработки активностей кампании. Минусом решения может служить тут факт, что активности, созданные в отношении Действия кампании вручную, не будут отражаться в гриде. Дело в том, что для наполнения он использует выборку по определенной BulkOperation:
Код:
exec sp_executesql N'select top 51 
phonecall0.Subject as ''subject'',
phonecall0.RegardingObjectId as ''regardingobjectid'',
phonecall0.DirectionCode as ''directioncode'',
phonecall0.PhoneNumber as ''phonenumber'',
phonecall0.PriorityCode as ''prioritycode'',
phonecall0.ScheduledEnd as ''scheduledend'',
phonecall0.StateCode as ''statecode'',
phonecall0.OwnerId as ''ownerid'',
phonecall0.ActivityId as ''activityid'',
phonecall0.RegardingObjectIdDsc as ''regardingobjectiddsc'',
phonecall0.RegardingObjectIdName as ''regardingobjectidname'',
phonecall0.RegardingObjectTypeCode as ''regardingobjecttypecode'',
phonecall0.RegardingObjectIdYomiName as ''regardingobjectidyominame'',
phonecall0.OwnerIdDsc as ''owneriddsc'',
phonecall0.OwnerIdYomiName as ''owneridyominame'',
phonecall0.OwnerIdName as ''owneridname'',
phonecall0.OwnerIdType as ''owneridtype''
from PhoneCall as phonecall0
    join BulkOperationLog as bulkoperationlog0
    on (phonecall0.ActivityId  =  bulkoperationlog0.CreatedObjectId 
            and ((bulkoperationlog0.BulkOperationId = @BulkOperationId0
            and bulkoperationlog0.CreatedObjectId is not null)))
where ((phonecall0.DeletionStateCode in (@DeletionStateCode0)))
order by
phonecall0.Subject asc,
phonecall0.ActivityId asc',
N'@DeletionStateCode0 int,
@BulkOperationId0 uniqueidentifier',
@DeletionStateCode0=0,
@BulkOperationId0='104E2EAA-D4BF-DE11-B64D-0003FF494F0C'
Вариант решения: натравить на фрейм результатов функцию EmbedAdvancedFindView и заполнять грид по упрощенному запросу.
Миниатюры
Нажмите на изображение для увеличения
Название: pts.jpg
Просмотров: 532
Размер:	245.9 Кб
ID:	19  
Размещено в CRM
Просмотров 22564 Комментарии 0
Всего комментариев 0

Комментарии

 


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