Воспользовался данным примером, но поле new_scandate не обновилось. Возможно ошибка в настройках CRM сервиса?
Вот код:
Код:
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
//Настройка CRM сервиса
CrmAuthenticationToken myToken = new CrmAuthenticationToken();
myToken.OrganizationName = "Keysystems";
myToken.AuthenticationType = 0;
CrmService myService = new CrmService();
myService.Credentials = System.Net.CredentialCache.DefaultCredentials;
myService.Url = "http://vms:5555/MSCrmServices/2007/CrmService.asmx";
myService.CrmAuthenticationTokenValue = myToken;
//получение контекста
IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
IWorkflowContext workflowContext = contextService.Context;
ICrmService service = contextService.Context.CreateCrmService(false);
//Получаем идентификатор записи, породившей запуск бизнес-процесса
Guid _entityid = workflowContext.PrimaryEntityId;
string _entitytype = workflowContext.PrimaryEntityName;
//указываем, какие атрибуты надо получить из CRM
//ColumnSet cols = new ColumnSet();
//cols.AddColumns(new string[] {"new_url"});
//Указываем ID записи, у которой надо получить атрибуты
TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
targetRetrieve.EntityName = _entitytype;
targetRetrieve.EntityId = _entityid;
//устанавливаем свойства метода RetrieveResponse
RetrieveRequest retrieve = new RetrieveRequest();
retrieve.Target = targetRetrieve;//из какой записи берем
retrieve.ColumnSet = new AllColumns();//что берем
retrieve.ReturnDynamicEntities = true;//о_О
RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
//Получили саму запись
DynamicEntity retrievedEntity = (DynamicEntity)retrieved.BusinessEntity;
//Получили необходимые атрибуты записи
CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now;
string period = retrievedEntity.Properties.Contains("new_periodical") ? (string)retrievedEntity["new_periodical"]: string.Empty;
double hours = Convert.ToDouble(period);
DateTime time = Convert.ToDateTime(sdt.Value);
CrmDateTime dateTime = new CrmDateTime();
dateTime.Value = time.AddHours(hours).ToString("yyyy-MM-ddTHH:mm:ss")+"+03:00";
//Обновление записи в CRM
DynamicEntity myDEUpdate = new DynamicEntity();
myDEUpdate.Name = "new_web";
KeyProperty myContactGuid = new KeyProperty();
myContactGuid.Name = "new_webid";
Key myContactKey=new Key();
myContactKey.Value=_entityid; //идентификатор записи породившей бизнес-процесс
myContactGuid.Value = myContactKey;
myDEUpdate.Properties.Add(myContactGuid);
// Create a StringProperty with the new updated value
StringProperty myDateU = new StringProperty();
myDateU.Name = "new_scandate";
myDateU.Value = dateTime.Value; ;
myDEUpdate.Properties.Add(myDateU);
try
{
myService.Update(myDEUpdate);
}
catch (SoapException ex)
{
MessageBox.Show(ex.Detail.InnerXml);
}
return base.Execute(executionContext);
}