А вот такой есть пример (
DataAudit.rar) в книжке Working With CRM Снайдера и Стеггера. Предназначен для сохранения лога изменений записей контактов. Я слегка поправил пример для сохранения лога изменений обращений. Но столкнулся с тремя моментами.
1) в качестве значений picklist`ов сохраняются коды, а не значения;
2) не сохраняется информация о назначении обращения другому сотруднику и изменении статуса обращения;
3) не сохраняется информация об изменении состояния обращения.
Первая проблема решилась изменением кода при обработке типа PicklistProperty в функции GetValueFromProperty на следующий:
Код:
else if (propType == typeof(PicklistProperty))
{
MetadataService servicemeta = new MetadataService();
servicemeta.Credentials = System.Net.CredentialCache.DefaultCredentials;
servicemeta.Url = "http://crm-server:5555/MSCRMServices/2006/metadataservice.asmx";
AttributeMetadata attMetaData = servicemeta.RetrieveAttributeMetadata("incident", InputProperty.Name);
PicklistAttributeMetadata picklist = (PicklistAttributeMetadata)attMetaData;
int propIdValue = ((PicklistProperty)InputProperty).Value.Value;
foreach(Option o in picklist.Options)
{
if (o.OptionValue == propIdValue)
{
propValue = o.Description;
}
}
}
Вторая проблема решается дублированием процедуры PostUpdate с перименованием в PostAssign и PostSetState, т.е. по сути превращения одного коллаута в три.
В итоге получился вот такой (
AltecDataAudit.rar) код.
Но вот третья проблема у меня решаться нехочет, хотя казалось бы она должна быть попроще второй...
Может кто-нить из присутствующих здесь гуру прокомментировать мои потуги в написании колаутов и подсказать в какую сторону надо копать?