|
16.11.2009, 10:14 | #1 |
Чайный пьяница
|
CrmService.Update - подойдёт?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
16.11.2009, 10:36 | #2 |
Участник
|
|
|
16.11.2009, 11:31 | #3 |
Чайный пьяница
|
Через DynamicEntity.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
16.11.2009, 11:50 | #4 |
Участник
|
В случае с Retrieve делал так:
Код: targetRetrieve.EntityName = _entitytype; targetRetrieve.EntityId = _entityid; но в случае в update не знаю как передать айдишник вызвавшей бизнес-процесс записи. Делаю пока только так: Код: targetUpdate.Entity.Name = _entitytype; |
|
16.11.2009, 12:17 | #5 |
Чайный пьяница
|
Цитата:
http://nishantrana.wordpress.com/200...t-dynamic-crm/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Tarasov E (1). |
19.11.2009, 12:34 | #6 |
Участник
|
Воспользовался данным примером, но поле 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); } |
|
19.11.2009, 12:53 | #7 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Воспользовался данным примером, но поле 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); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|