16.11.2009, 12:17 | #61 |
Чайный пьяница
|
Цитата:
http://nishantrana.wordpress.com/200...t-dynamic-crm/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Tarasov E (1). |
19.11.2009, 12:34 | #62 |
Участник
|
Воспользовался данным примером, но поле 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 | #63 |
Чайный пьяница
|
Цитата:
Сообщение от 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 |
|
24.11.2009, 08:53 | #64 |
Участник
|
Доброе утро! Для отладки стал регистрировать стэп на Disk и при регистрации мне вернулась вот такая ошибка:
Код: Unhandled Exception: System.Web.Services.Protocols.SoapException: Server was unable to process request. Detail: <detail><error> <code>0x80040216</code> <description>An unexpected error occurred.</description> <type>Platform</type> </error></detail> в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) в PluginRegistrationTool.CrmSdk.CrmService.Create(BusinessEntity entity) в PluginRegistrationTool.RegistrationHelper.RegisterPluginType(CrmOrganization org, CrmPlugin plugin) в PluginRegistrationTool.PluginRegistrationForm.btnRegister_Click(Object sender, EventArgs e) |
|
24.11.2009, 10:22 | #65 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Доброе утро! Для отладки стал регистрировать стэп на Disk и при регистрации мне вернулась вот такая ошибка:
Код: Unhandled Exception: System.Web.Services.Protocols.SoapException: Server was unable to process request. Detail: <detail><error> <code>0x80040216</code> <description>An unexpected error occurred.</description> <type>Platform</type> </error></detail> в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) в PluginRegistrationTool.CrmSdk.CrmService.Create(BusinessEntity entity) в PluginRegistrationTool.RegistrationHelper.RegisterPluginType(CrmOrganization org, CrmPlugin plugin) в PluginRegistrationTool.PluginRegistrationForm.btnRegister_Click(Object sender, EventArgs e) 2. Ошибка нечитабельна. Попытайтесь посмотреть trace CRM. Ответ может быть там.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
24.11.2009, 15:29 | #66 |
Участник
|
Спасибо, с регистрацией разобрались.
Почему не записывались данные тоже, но как правильно сделать преобразования не могу разобраться. Делал как описано: Код: CrmDateTime dateTime = new CrmDateTime(); dateTime.Value = time.AddHours(hours).ToString("yyyy-MM-ddTHH:mm:ss")+"+03:00"; Код: try { myService.Update(myDEUpdate); } catch (Exception ex) { Console.WriteLine(ex.Message); } Если же те же самые данные записываю в текстовое поле "new_url" , то данные записываются нормально. Хотя как написано здесь: Цитата:
Property Value
The value of this property is a String type. Цитата:
yyyy-MM-ddTHH:mm:ss Offset
Where Offset is one of the following: +##:## |
|
24.11.2009, 16:11 | #67 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Спасибо, с регистрацией разобрались.
Почему не записывались данные тоже, но как правильно сделать преобразования не могу разобраться. Делал как описано: Код: CrmDateTime dateTime = new CrmDateTime(); dateTime.Value = time.AddHours(hours).ToString("yyyy-MM-ddTHH:mm:ss")+"+03:00"; Код: try { myService.Update(myDEUpdate); } catch (Exception ex) { Console.WriteLine(ex.Message); } Если же те же самые данные записываю в текстовое поле "new_url" , то данные записываются нормально. Хотя как написано здесь: и причем следующего формата: catch (SoapException ex) { Console.WriteLine(ex.Detail.InnerText); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
28.12.2009, 18:16 | #68 |
Заноза в заднице
|
Позвольте и мои 5 копеек...
Тоже была аналогичная задача: периодичность запуска, получение данных из базы и всё такое. Воротить код для процесса не стал. Сделал новую сущность под названием "Задание", при создании которой отрабатывает плагин, запускающий серверный скрипт, определяемый параметрами задания. При этом, при создании нового задания запускается воркфлоу, который ждет 20 минут и создает новое задание. Так у меня раз в 20 минут происходит проверка содержимого базы проджекта на предмет появления новых узлов проектов и в базе CRM появляются новые записи возможных сделок. Элементарное решение вопроса, а запуск серверного скрипта не омрачается контекстом воркфлоу.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|