|
![]() |
#1 |
Участник
|
Спасибо, a33ik, с библиотеками разобрался, сделал как было указано выше:
Код: namespace BP_CRMScaner { [CrmWorkflowActivity("Выполнить сканирование", "Сканирование WEB-ресурсов")] public class Activity1 : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { //получение контекста IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext ctx = contextService.Context; //Здесь выполняется пользовательская логика return base.Execute(executionContext); } //Задание свойств ввода public static DependencyProperty ScanProperty = DependencyProperty.Register("Scaner", typeof(Lookup), typeof(Activity1)); [CrmInput("Субъект сканирования")] [CrmReferenceTarget("new_web")] public Lookup Scaner { get { return (Lookup)base.GetValue(ScanProperty); } set { base.SetValue(ScanProperty, value); } } } } Цитата:
Error 1 Could not create activity of type 'BP_CRMScaner.Activity1'. System.ArgumentException: Type 'BP_CRMScaner.Activity1' does not define a static dependency property with name 'ScanerProperty'.
Parameter name: ownerType at System.Workflow.ComponentModel.DependencyProperty.ValidateAndRegister(String name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, Type validatorType, Boolean isRegistered) at System.Workflow.ComponentModel.DependencyProperty.Register(String name, Type propertyType, Type ownerType) at BP_CRMScaner.Activity1..cctor() |
|
![]() |
#2 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
![]() Спасибо, a33ik, с библиотеками разобрался, сделал как было указано выше:
Код: namespace BP_CRMScaner { [CrmWorkflowActivity("Выполнить сканирование", "Сканирование WEB-ресурсов")] public class Activity1 : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { //получение контекста IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext ctx = contextService.Context; //Здесь выполняется пользовательская логика return base.Execute(executionContext); } //Задание свойств ввода public static DependencyProperty ScanProperty = DependencyProperty.Register("Scaner", typeof(Lookup), typeof(Activity1)); [CrmInput("Субъект сканирования")] [CrmReferenceTarget("new_web")] public Lookup Scaner { get { return (Lookup)base.GetValue(ScanProperty); } set { base.SetValue(ScanProperty, value); } } } } В чем проблема? Вроде все делал по образцу Код: namespace BP_CRMScaner { [CrmWorkflowActivity("Выполнить сканирование", "Сканирование WEB-ресурсов")] public class Activity1 : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { //получение контекста IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext ctx = contextService.Context; //Здесь выполняется пользовательская логика return base.Execute(executionContext); } //Задание свойств ввода public static DependencyProperty ScanerProperty = DependencyProperty.Register("Scaner", typeof(Lookup), typeof(Activity1)); [CrmInput("Субъект сканирования")] [CrmReferenceTarget("new_web")] public Lookup Scaner { get { return (Lookup)base.GetValue(ScanerProperty); } set { base.SetValue(ScanerProperty, value); } } } }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#3 |
Участник
|
Компилятор проглотил
![]() Так...теперь что я имею: в свойствах стэпа у меня есть лукап на какую либо запись из сущности new_web. Но я так понял тогда я буду получать значения полей из конкретной записи, а не из той на изменение которой среагирует бизнес-процесс? Последний раз редактировалось Tarasov E; 29.10.2009 в 11:44. |
|
![]() |
#4 |
Чайный пьяница
|
Зависит от того каким образом Вы будете данное поле лукапа заполнять...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#5 |
Участник
|
Тоесть? При изменении значения поля какой либо записи из сущности new_web у меня запускается бизнес процесс. Как нужно заполнить поле лукапа, чтобы в экшэне я получал значения полей именно записи на которую сработал бизнес-процесс?
|
|
![]() |
#6 |
Чайный пьяница
|
Цитата:
Код: IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext workflowContext = contextService.Context; Guid _entityid = workflowContext.PrimaryEntityId; string _entitytype = workflowContext.PrimaryEntityName;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#7 |
Участник
|
Эх...Ну может в будущем пригодится
![]() Цитата:
Сообщение от a33ik
![]() Запись, инициировавшую бизнес процесс можно получить из контекста плагина. При помощи такого кода можно получить тип и идентификатор записи, которая вызвала запуск Workflow:
Код: IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext workflowContext = contextService.Context; Guid _entityid = workflowContext.PrimaryEntityId; string _entitytype = workflowContext.PrimaryEntityName; Код: IMetadataService metadataService = workflowContext.CreateMetadataService(); RetrieveEntityRequest req = new RetrieveEntityRequest(); req.LogicalName = "new_web"; RetrieveEntityResponse resp = (RetrieveEntityResponse)metadataService.Execute(req); string myString = resp.EntityMetadata.PrimaryField; Я так понял данный код дает доступ ко всем полям записи new_web, но как получить значение конкретного поля? |
|