воскресенье, 20 июня 2010 г.

Расширенная обработка OnSave для форм в которых есть диалоги закрытия

Все разработчики кто занимался скриптами для CRM читал эту статью. Но в этой статье нет ни слова о том, как можно доступиться к данным из полей диалога закрытия (например в Возможной сделке. Я провёл небольшое исследованиями и пришёл к таким результатам:


Для начала - когда Вы закрываете Возможную сделку event.Mode равнёется 5 (деактивация). Новое состояния, новый статус и информация о закрытии сделки можно увидеть вставив следующий скрипт в OnSave обработчик формы возможной сделки, затем сохранив форму и опубликовав сущность:

if (event.Mode == 5)
{
alert(crmFormSubmit.crNewState.value + '\n' + crmFormSubmit.crNewStatus.value + '\n' + crmFormSubmit.crActivityXml.value);
}


Создайте и закройте сделку с результатом Выигрыш:



Вы получите такой результат:



Если вы попытаетесь закрыть сделку со статусом проигрыш:



Вы увидите такой результат:



Как этом может быть использовано - например Вы хотите, чтобы поле описание было обязательным к заполнению когда сделка закрывается с результатом выигрыш, а поле Конкурент становилось обязательным когда сделка проиграна. Вставьте следующий код в OnSave обработчик карточки возможной сделки:

if (event.Mode == 5)
{
var status = crmFormSubmit.crNewState.value;
var xml = crmFormSubmit.crActivityXml.value;
var XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
XmlDoc.async = false;
XmlDoc.loadXML(xml);

//If status is won
if (status == 1)
{
var descriptionnode = XmlDoc.selectSingleNode("//opportunityclose/description");
if (descriptionnode == null || descriptionnode.nodeTypedValue == "")
{
alert("Opportunity can't be closed!\nFill description field in Close Opportunity Dialogue");
event.returnValue = false;
return false;
}
}
else if (status == 2)
{
var competitornode = XmlDoc.selectSingleNode("//opportunityclose/competitorid");
if (competitornode == null || competitornode.nodeTypedValue == "")
{
alert("Opportunity can't be closed!\nFill competitor field in Close Opportunity Dialogue");
event.returnValue = false;
return false;
}
}
}


Сохраните форму и опубликуйте возможную сделку, затем попробуйте закрыть сделку.
Случай выигранной сделки:




Случай проигранной сделки:




Кастомизации такого рода не задокументированы, потому скорее всего они - неподддерживаемые...

4 комментария:

  1. Приветствую!
    Извиняюсь за, возможно, глупый вопрос, но как можно найти этот OnSave обработчик карточки возможной сделки и достучаться до него?

    ОтветитьУдалить
    Ответы
    1. У вас CRM 4.0 или версия старше?

      Удалить
    2. У меня Dynamics 365, который самый актуальный.

      Удалить
    3. Если это последний, то это не сработает. Это работало для 4.0 и 2011. А чего именно вы хотите добиться от полученных данных? Валидации?

      Удалить