Показать сообщение отдельно
Старый 24.12.2007, 15:53   #3  
Lutecij is offline
Lutecij
Участник
Аватар для Lutecij
 
7 / 12 (1) ++
Регистрация: 07.11.2007
? Аудит данных
А вот такой есть пример (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) код.

Но вот третья проблема у меня решаться нехочет, хотя казалось бы она должна быть попроще второй...

Может кто-нить из присутствующих здесь гуру прокомментировать мои потуги в написании колаутов и подсказать в какую сторону надо копать?
За это сообщение автора поблагодарили: Likefire (1).