| 
	 | 
| 
			
			 | 
		#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). | |