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

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


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

Ошибка заполнения валюты при преобразовании Отклика в Интерес

Запись от Артем Enot Грунин размещена 08.04.2010 в 16:19

Сегодня наткнулся на очередной странный баг CRM: если мы преобразовываем Отклик (Контракт от Кампании в неудачном переводе) в Интерес, то тот создается ущербным: поле Валюта у него не заполнено. На практике это обозначает, что пользователь не сможет сразу же приступить к заполнению денежных полей. В моем случае, данное поле вообще было убрано с формы за ненадобностью - все расчеты ведутся в базовой валюте, что породило целую проблему. Поле потребовалось вернуть на форму, но теперь возникла проблема его заполнить. Валюта - лукап, да не простой. Помимо стандартных name, id и typename оно содержит массу других необходимых данных используемых служебными скриптами, например, символ валюты. Чтобы упростить себе задачу я воспользовался служебной же функцией setCurrency(stransCurId), которая сама запросит из веб сервиса все данные и заполнит лукап как надо. Почему-то, если поле валюты включено на форме, ф-ция вызывает FireOnChange, но при этом не обновляет коды валюты у полей типа money. Решается задача просто:
Код:
// OnLoad
var oCurField = crmForm.all.transactioncurrencyid;
if (oCurField.DataValue == null ||  oCurField.DataValue[0] == null)
{
    oCurField.SetCurrency("{7705973A-7070-DE11-8A26-001B7895C8E2}");
    oCurField.onchange();
// Можно прятать поле, если мешает
}
Если размещать лишнее поле или тем более делать лишний запрос не хочется, можно просто задать системное свойство CurrencySymbol у всех полей типа money, что так же позволит нормально заполнять поля и корректно сохранить форму. Что удивительно - валюта свяжется с записью автоматически. Минус подхода в том, что код валюты можно изменить через интерфейс и в этом случае вы получите ошибку. Если все же хочется сделать так, то вот код:
Код:
sCurSym = "р.";
sISOCurCode = "RUR";

var iLen = crmForm.all.length;

for (var i=0; i < iLen; i++)
{
    var oCtrl = crmForm.all[i];

    if(!IsNull(oCtrl.IsMoney) && !oCtrl.IsBaseCurrency)
    {
        oCtrl.CurrencySymbol = sCurSym;

        if(ENABLE_CURRENCY_PRECISION)
        {
            oCtrl.ISOCurrencyCode = sISOCurCode;
        }
    }
}
Ну и напоследок: если добавлять поле все же не хочется, но от смены кода валюты все же нужно подстраховаться, то его тоже можно вычитать запросом:
Код:
var oRemoteCmd = new RemoteCommand("TransactionCurrencyWebService", "Retrieve");

oRemoteCmd.SetParameter("transactionCurrencyId",stransCurId);

var oResult = oRemoteCmd.Execute();

if(oResult.Success && typeof(oResult.ReturnValue) == "string")
{
var oXml = CreateXmlDocument(false);
oXml.loadXML(oResult.ReturnValue);

var sCurSym = oXml.selectSingleNode("/TransactionCurrency/CurrencySymbol").text;


if(ENABLE_CURRENCY_PRECISION)
{
var sISOCurCode = oXml.selectSingleNode("/TransactionCurrency/ISOCurrencyCode").text;
}
}
Все приведенные выше скрипты надерганы из файла IMG.lu.transcur.htc. Теперь точно все.
Размещено в CRM
Просмотров 21319 Комментарии 0
Всего комментариев 0

Комментарии

 


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