Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Ошибка заполнения валюты при преобразовании Отклика в Интерес
Запись от Артем Enot Грунин размещена 08.04.2010 в 16:19
Теги bug, dom, java script, response, unsupport
Сегодня наткнулся на очередной странный баг CRM: если мы преобразовываем Отклик (Контракт от Кампании в неудачном переводе) в Интерес, то тот создается ущербным: поле Валюта у него не заполнено. На практике это обозначает, что пользователь не сможет сразу же приступить к заполнению денежных полей. В моем случае, данное поле вообще было убрано с формы за ненадобностью - все расчеты ведутся в базовой валюте, что породило целую проблему. Поле потребовалось вернуть на форму, но теперь возникла проблема его заполнить. Валюта - лукап, да не простой. Помимо стандартных name, id и typename оно содержит массу других необходимых данных используемых служебными скриптами, например, символ валюты. Чтобы упростить себе задачу я воспользовался служебной же функцией setCurrency(stransCurId), которая сама запросит из веб сервиса все данные и заполнит лукап как надо. Почему-то, если поле валюты включено на форме, ф-ция вызывает FireOnChange, но при этом не обновляет коды валюты у полей типа money. Решается задача просто:
Если размещать лишнее поле или тем более делать лишний запрос не хочется, можно просто задать системное свойство CurrencySymbol у всех полей типа money, что так же позволит нормально заполнять поля и корректно сохранить форму. Что удивительно - валюта свяжется с записью автоматически. Минус подхода в том, что код валюты можно изменить через интерфейс и в этом случае вы получите ошибку. Если все же хочется сделать так, то вот код:
Ну и напоследок: если добавлять поле все же не хочется, но от смены кода валюты все же нужно подстраховаться, то его тоже можно вычитать запросом:
Все приведенные выше скрипты надерганы из файла IMG.lu.transcur.htc. Теперь точно все.
Код:
// OnLoad var oCurField = crmForm.all.transactioncurrencyid; if (oCurField.DataValue == null || oCurField.DataValue[0] == null) { oCurField.SetCurrency("{7705973A-7070-DE11-8A26-001B7895C8E2}"); oCurField.onchange(); // Можно прятать поле, если мешает }
Код:
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; } }
Всего комментариев 0