AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2009, 11:56   #1  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
Зависит от того каким образом Вы будете данное поле лукапа заполнять...
Тоесть? При изменении значения поля какой либо записи из сущности new_web у меня запускается бизнес процесс. Как нужно заполнить поле лукапа, чтобы в экшэне я получал значения полей именно записи на которую сработал бизнес-процесс?
Старый 29.10.2009, 12:13   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Тоесть? При изменении значения поля какой либо записи из сущности new_web у меня запускается бизнес процесс. Как нужно заполнить поле лукапа, чтобы в экшэне я получал значения полей именно записи на которую сработал бизнес-процесс?
А. Вы про это. Для этого Лукап на самом деле не нужен. Запись, инициировавшую бизнес процесс можно получить из контекста плагина. При помощи такого кода можно получить тип и идентификатор записи, которая вызвала запуск Workflow:

Код:
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 29.10.2009, 12:54   #3  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
А. Вы про это. Для этого Лукап на самом деле не нужен.
Эх...Ну может в будущем пригодится

Цитата:
Сообщение от a33ik Посмотреть сообщение
Запись, инициировавшую бизнес процесс можно получить из контекста плагина. При помощи такого кода можно получить тип и идентификатор записи, которая вызвала запуск Workflow:

Код:
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
А если использовать такой метод, то каким образом выцепляются значения полей скажем сущности new_web. В SDK откопал следующее:
Код:
IMetadataService metadataService = workflowContext.CreateMetadataService();
            RetrieveEntityRequest req = new RetrieveEntityRequest();
            req.LogicalName = "new_web";
            RetrieveEntityResponse resp = (RetrieveEntityResponse)metadataService.Execute(req);

            string myString = resp.EntityMetadata.PrimaryField;
В строчке string myString = resp.EntityMetadata.PrimaryField; мне нужно получать значение по PrimaryField или PrimaryKey?
Я так понял данный код дает доступ ко всем полям записи new_web, но как получить значение конкретного поля?
Старый 29.10.2009, 13:12   #4  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Эх...Ну может в будущем пригодится


А если использовать такой метод, то каким образом выцепляются значения полей скажем сущности new_web. В SDK откопал следующее:
Код:
IMetadataService metadataService = workflowContext.CreateMetadataService();
            RetrieveEntityRequest req = new RetrieveEntityRequest();
            req.LogicalName = "new_web";
            RetrieveEntityResponse resp = (RetrieveEntityResponse)metadataService.Execute(req);

            string myString = resp.EntityMetadata.PrimaryField;
В строчке string myString = resp.EntityMetadata.PrimaryField; мне нужно получать значение по PrimaryField или PrimaryKey?
Я так понял данный код дает доступ ко всем полям записи new_web, но как получить значение конкретного поля?
Метадата сервис Вам не за чем. Вам неоходимо RetrieveRequest использовать, а в качестве таргета использовать TargetRetrieveDynamic.

Всё на самом деле проще...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 29.10.2009, 14:20   #5  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
Метадата сервис Вам не за чем. Вам неоходимо RetrieveRequest использовать, а в качестве таргета использовать TargetRetrieveDynamic.

Всё на самом деле проще...
Вот что я написал:
Код:
//получение контекста
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            //Без этой строки не работало RetrieveResponse)service.Execute(retrieve);
            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.EntityId = _entityid;
            //устанавливаем свойства метода RetrieveResponse
            RetrieveRequest retrieve = new RetrieveRequest();
            retrieve.Target = targetRetrieve;//из какой записи берем
            retrieve.ColumnSet = cols;//что берем
            retrieve.ReturnDynamicEntities = true;//о_О

            RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
Собственно вот...теперь по порядку:
1. Не уверен в этой строке:ICrmService service = contextService.Context.CreateCrmService(false);. Точнее говоря не совсем понял зачем она, но без нее не работало (RetrieveResponse)service.Execute(retrieve);
2. Как я понял значение поля "new_url" будет хранить переменная retrieved? Или я еще ничего не получил?
3. Можно ли писать так cols.AddColumns(new string[] {"new_url", "new_comment"}); для передачи сразу всех атрибутов, и если да, то как потом поотдельности их выдирать?
Старый 29.10.2009, 14:38   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Пара корректив:

Код:
            ColumnSet cols = new ColumnSet();
            cols.AddColumns(new string[] {"new_url"});
для получения всех аттрибутов надо заменить на

Код:
            ColumnSet cols = new AllColumns();
Данный запрос не отработает потому как не указано имя сущности из которой будет выполняться получение данных, а именно после кода

Код:
            TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
            targetRetrieve.EntityId = _entityid;
следует добавить

Код:
          targetRetrieve.EntityName = _entitytype;
Вроде бы всё - пробуйте.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 29.10.2009, 14:50   #7  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
Пара корректив:

Код:
            ColumnSet cols = new ColumnSet();
            cols.AddColumns(new string[] {"new_url"});
для получения всех аттрибутов надо заменить на

Код:
            ColumnSet cols = new AllColumns();
Вот что мне сказали в ответ на подобное:
Цитата:
Error 1 Cannot implicitly convert type 'Microsoft.Crm.Sdk.Query.AllColumns' to 'Microsoft.Crm.Sdk.Query.ColumnSet'
И все таки - значение new_web(строка) хранится теперь в " retrieved"?
А в случае с AllColumns() - на выходе должен массив значений колонок? или в каком виде мы их получим?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бизнес-процесс висит в состоянии ожидания Evgenia_f Dynamics CRM: Функционал 70 21.12.2009 18:53
Странности бизнес-процесса на изменение атрибутов записи SLK Dynamics CRM: Функционал 6 19.05.2009 08:14
Событие "Назначение записи" для бизнес-процесса Lazarus Dynamics CRM: Функционал 1 22.01.2009 19:54
Работает неопубликованный бизнес-процесс sergeyjb Dynamics CRM: Разработка 1 22.12.2008 09:16
Бизнес-процесс и список ожидания Evgenia_f Dynamics CRM: Разработка 16 07.10.2008 16:22

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.