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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.10.2016, 17:55   #1  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
CRM 2013: Business Process work flow
Коллеги привет!

Есть такой сценарий: не дать возможность пользователю устанавливать следующий стейдж в Business Process work flow. Кнопку то скрыть не проблема, вот только если страница грузить долго, то кнопка будет активна пока наш скрипт на форме не подгрузиться и не скроет кнопку "Next Stage". А есть такие что меняют.

Я видел два пути решения:
1) JS: Выводить какой-то меседж или не давать сохранить запись (логика очень сложная в сорса MS, не нашел как сделать)
2) Plugin: повесить плагин на изменения поля stageId и там уже все валидировать согласно моей логике (но его путо нет в списке (Filtering attribute)

Если у кого есть пример кода как можно решить - помогите
Старый 01.11.2016, 11:01   #2  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
На изменение поля stageid можно повесить WF
http://www.powerobjects.com/2014/04/...-dynamics-crm/
За это сообщение автора поблагодарили: Ion (1).
Старый 01.11.2016, 11:26   #3  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от ZooY Посмотреть сообщение
На изменение поля stageid можно повесить WF
http://www.powerobjects.com/2014/04/...-dynamics-crm/
Спасибо!

Очень дивно что я не могу в плагине повесить свой обработчик на это поле. Это по ходу бага или недочет!
Старый 01.11.2016, 12:12   #4  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Извините за тупой вопрос: юзаю Plugin Registration из SDK 2013, написал кастомную активити, залил сборку через тулу, но не вижу ValidateChangeProcessStage в списке зарегистрированных, что я не так делаю?))

X++:
    public class ValidateChangeProcessStage : CodeActivity
    {
        [RequiredArgument]
        [Input("Contact")]
        public InArgument<Entity> Contact{ get; set; }

        protected override void Execute(CodeActivityContext executionContext)
        {
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(null);

            Entity contact= Contact.Get<Entity>(executionContext);
            if(contact!= null)
            {
                if (!contact.Contains("uds_statuscode"))
                {
                    new InvalidPluginExecutionException("You can not change process flow stage manually");
                };
            }
        }
    }
Старый 01.11.2016, 12:41   #5  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Может не туда смотрите, кастомное действие обычно лежит в папочке с именем сборки.
Старый 01.11.2016, 13:05   #6  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от ZooY Посмотреть сообщение
Может не туда смотрите, кастомное действие обычно лежит в папочке с именем сборки.
Старые есть, а вот нового - нет!(
Старый 01.11.2016, 13:16   #7  
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
Судя по всему проблема в объявлении аргумента:

Код:
public InArgument<Entity> Contact{ get; set; }
нельзя Entity объявлять, а вот EntityReference - можно.

Код:
[ReferenceTarget("contact")]
public InArgument<EntityReference> Contact{ get; set; }
Не забудьте добавить ReferenceTarget для того, чтобы CRM смог разобраться в метаданных.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 01.11.2016, 17:21   #8  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Судя по всему проблема в объявлении аргумента:

Код:
public InArgument<Entity> Contact{ get; set; }
нельзя Entity объявлять, а вот EntityReference - можно.

Код:
[ReferenceTarget("contact")]
public InArgument<EntityReference> Contact{ get; set; }
Не забудьте добавить ReferenceTarget для того, чтобы CRM смог разобраться в метаданных.
Я не знаю в чем прикол: создал новый проект, создал только одну wf activity, без каких либо аргументов - и все равно Reg tool не видит активность и пишет: "No plugins have been selected from the list. Please select at least one and try again." Сборка подписана.

У меня windows 10. Может из-за этого трабла

Версия Reg tool 6.1.1.1143 64 bit

Последний раз редактировалось Ion; 01.11.2016 в 17:26.
Старый 01.11.2016, 17:56   #9  
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
Скриншоты не помешают.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 01.11.2016, 18:11   #10  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Ion Посмотреть сообщение
"No plugins have been selected from the list. Please select at least one and try again."
Выберите галочками плагины в сборке при регистрации. Новый убогий регистратор не делает этого по умолчанию.
Старый 02.11.2016, 10:23   #11  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Цитата:
Сообщение от Ion Посмотреть сообщение
Коллеги привет!

Есть такой сценарий: не дать возможность пользователю устанавливать следующий стейдж в Business Process work flow. Кнопку то скрыть не проблема, вот только если страница грузить долго, то кнопка будет активна пока наш скрипт на форме не подгрузиться и не скроет кнопку "Next Stage". А есть такие что меняют.

Я видел два пути решения:
1) JS: Выводить какой-то меседж или не давать сохранить запись (логика очень сложная в сорса MS, не нашел как сделать)
2) Plugin: повесить плагин на изменения поля stageId и там уже все валидировать согласно моей логике (но его путо нет в списке (Filtering attribute)

Если у кого есть пример кода как можно решить - помогите
Еще есть популярный вариант: добавить на ленту обязательное поле с Feld Level Security и не давать пользователю право на его изменение. Тогда он не может заполнить поле и, следовательно, перейти на следующий шаг. А дальше - по вашему сценарию. Либо поле заполняет какой-то ответственный сотрудник, либо это делает какой-то серверный обработчик с нужными правами доступа.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 02.11.2016, 14:56   #12  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Еще есть популярный вариант: добавить на ленту обязательное поле с Feld Level Security и не давать пользователю право на его изменение. Тогда он не может заполнить поле и, следовательно, перейти на следующий шаг. А дальше - по вашему сценарию. Либо поле заполняет какой-то ответственный сотрудник, либо это делает какой-то серверный обработчик с нужными правами доступа.
Спасибо за вариант, но он не подойдет в моем кейсе
Старый 02.11.2016, 14:59   #13  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Скриншоты не помешают.
В новой сборке всего один аction, а в RT ничего нет

X++:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EmployeeWorkflow.Actions
{
    public class ValidateChangeProcessStage : CodeActivity
    {
        [ReferenceTarget("contact")]
        public InArgument<EntityReference> ontact { get; set; }

        protected override void Execute(CodeActivityContext executionContext)
        {
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(null);

            EntityReference contact = ontact.Get<EntityReference>(executionContext);
            if (contact != null)
            {
                new InvalidPluginExecutionException("You can not change process flow stage manually");
            }
        }
    }
}
Старый 02.11.2016, 16:15   #14  
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
Может показаться глупым, но попробуйте:
1. Удалите snk.
2. Пересоздайте snk.
3. Сбилдьте.
4. Попробуйте.

Если не сработает - попробуйте скачать Microsoft CRM SDK 2015 и использовать Plugin Registration Tool из этого SDK.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 02.11.2016, 16:58   #15  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Еще старый добрый рабочий регистратор есть в XrmToolBox...
Старый 03.11.2016, 12:28   #16  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Ребята, спасибо за помощь!

Как оказалось какой-то кривой RT for CRM 2013. Взял из SDK 2015 - отлично работает
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Leon's CRM Musings: Book Review: Microsoft Dynamics CRM 2013 Unleashed Blog bot Dynamics CRM: Blogs 0 31.10.2014 10:11
Gareth Tucker: Using Business Rules for Calculated Fields in CRM 2013 Blog bot Dynamics CRM: Blogs 0 17.10.2013 23:11
Gareth Tucker: CRM 2013 New Features: Business Rules Blog bot Dynamics CRM: Blogs 0 16.10.2013 03:12
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 7 Blog bot Dynamics CRM: Blogs 0 27.03.2012 02:11
Microsoft Dynamics CRM Team Blog: List Web Part for Microsoft Dynamics CRM 4.0 Deployment Scenarios Blog bot Dynamics CRM: Blogs 0 30.01.2009 22:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:36.