|
![]() |
#1 |
Участник
|
Тоесть? При изменении значения поля какой либо записи из сущности new_web у меня запускается бизнес процесс. Как нужно заполнить поле лукапа, чтобы в экшэне я получал значения полей именно записи на которую сработал бизнес-процесс?
|
|
![]() |
#2 |
Участник
|
Доброе утро! Стал проверять передались ли параметры из CRM. Добавил код создания файла, и чтобы туда загонялся переданный параметр:
Код: namespace BP_CRMScaner { [CrmWorkflowActivity("Выполнить сканирование1", "Сканирование WEB-ресурсов")] public class Activity1 : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { //получение контекста 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; //Получили необходимые атрибуты записи string url = retrievedEntity.Properties.Contains("new_url") ? (string)retrievedEntity["new_url"] : string.Empty; StreamWriter Sw = new StreamWriter("\\\\Uch5\\SHARE\\1.txt"); Sw.WriteLine(url); Sw.Close(); //Здесь выполняется пользовательская логика return base.Execute(executionContext); } Последний раз редактировалось Tarasov E; 02.11.2009 в 10:04. |
|
![]() |
#3 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
![]() Доброе утро! Стал проверять передались ли параметры из CRM. Добавил код создания файла, и чтобы туда загонялся переданный параметр:
Код: namespace BP_CRMScaner { [CrmWorkflowActivity("Выполнить сканирование1", "Сканирование WEB-ресурсов")] public class Activity1 : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { //получение контекста 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; //Получили необходимые атрибуты записи string url = retrievedEntity.Properties.Contains("new_url") ? (string)retrievedEntity["new_url"] : string.Empty; StreamWriter Sw = new StreamWriter("\\\\Uch5\\SHARE\\1.txt"); Sw.WriteLine(url); Sw.Close(); //Здесь выполняется пользовательская логика return base.Execute(executionContext); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Чайный пьяница
|
А шаг Workflow удачно выполнился?
Попробуйте создавать файл на сервере для начала.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
Хотелось бы вернутся к обновлению поля дата на заданное в другом поле значение.
Как выше предлагалось - нужно получить значение поля Data и сложить в кастомном степе его со значением поля периодичность, а затем записать полученный результат снова в поле Data. Так вот - возник вопрос о форматах. Как лучше получить дату и как ее записать обратно в CRM? Со строками до этого получал так: Код: string period = retrievedEntity.Properties.Contains("new_period") ? (string)retrievedEntity["new_period"] : string.Empty; |
|
![]() |
#8 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
![]() Хотелось бы вернутся к обновлению поля дата на заданное в другом поле значение.
Как выше предлагалось - нужно получить значение поля Data и сложить в кастомном степе его со значением поля периодичность, а затем записать полученный результат снова в поле Data. Так вот - возник вопрос о форматах. Как лучше получить дату и как ее записать обратно в CRM? Со строками до этого получал так: Код: string period = retrievedEntity.Properties.Contains("new_period") ? (string)retrievedEntity["new_period"] : string.Empty; Код: CrmDateTime dt = retrievedEntity.Properties.Contains("new_datetime") ? (CrmDateTime)retrievedEntity["new_datetime"] : CrmDateTime.Now;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#9 |
Участник
|
Цитата:
Код: CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now; string period = retrievedEntity.Properties.Contains("new_period") ? (string)retrievedEntity["new_period"] : string.Empty; StreamWriter Sw = new StreamWriter(@"C:\BP_Scanner\BP_Scanner_Hash\Ace.txt"); Sw.WriteLine(period); Sw.Close(); |
|
![]() |
#10 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
![]() Бизнес-процесс переходит в состояние "Ожидание" вот на этом участке кода:
Код: CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now; string period = retrievedEntity.Properties.Contains("new_period") ? (string)retrievedEntity["new_period"] : string.Empty; StreamWriter Sw = new StreamWriter(@"C:\BP_Scanner\BP_Scanner_Hash\Ace.txt"); Sw.WriteLine(period); Sw.Close();
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#11 |
Участник
|
Поковырялся...бизнес-процесс больше не уходит в ожидание, но в файл пишется не значение поля new_scandate, а
Цитата:
Microsoft.Crm.Sdk.CrmDateTime
Код: CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now; StreamWriter Sw = new StreamWriter(@"C:\BP_Scanner\BP_Scanner_Hash\Ace.txt"); Sw.WriteLine(sdt); Sw.Close(); Последний раз редактировалось Tarasov E; 10.11.2009 в 11:36. |
|
![]() |
#12 |
Участник
|
Изменил на sdt.value и все получил как надо
|
|
![]() |
#13 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
![]() Поковырялся...бизнес-процесс больше не уходит в ожидание, но в файл пишется не значение поля new_scandate, а
Вот код: Код: CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now; StreamWriter Sw = new StreamWriter(@"C:\BP_Scanner\BP_Scanner_Hash\Ace.txt"); Sw.WriteLine(sdt); Sw.Close(); Попробуйте так: Код: Sw.WriteLine(sdt.Value);
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Tarasov E (1). |