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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2009, 11:43   #1  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Отправка уведомления пользователю о результате работы бизнес-процесса
Собственно вот какая задача:
Есть бизнес-процесс, который, грубо говоря, выполняет поиск по заданному фильтру в определенном интернет-контенте(для каждой записи сущности свой контент). Если этот поиск успешен, то какому-либо ответственному лицу нужно отослать сообщение об этом, со ссылкой на запись, для которой выполнялся поиск по фильтру. Каким образом это лучше всего реализовать в рамках CRM?
Старый 07.12.2009, 12:15   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,198 / 867 (35) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Собственно вот какая задача:
Есть бизнес-процесс, который, грубо говоря, выполняет поиск по заданному фильтру в определенном интернет-контенте(для каждой записи сущности свой контент). Если этот поиск успешен, то какому-либо ответственному лицу нужно отослать сообщение об этом, со ссылкой на запись, для которой выполнялся поиск по фильтру. Каким образом это лучше всего реализовать в рамках CRM?
Посмотрите это.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Tarasov E (1).
Старый 24.12.2009, 11:17   #3  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Все сделал как в в вашем примере, создалось письмо, но URL в письме не было.
Код:
[CrmWorkflowActivity("Сканировать", "Сканирование WEB-ресурсов")]
    public class Activity1 : SequenceActivity
    {
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            ICrmService service = workflowContext.CreateCrmService();
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
            TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
            targetRetrieve.EntityName = _entitytype;
            targetRetrieve.EntityId = _entityid;
            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.Normalize();
            string startParse = retrievedEntity.Properties.Contains("new_startparse") ? (string)retrievedEntity["new_startparse"] : string.Empty.Normalize();
            string endParse = retrievedEntity.Properties.Contains("new_endparse") ? (string)retrievedEntity["new_endparse"] : string.Empty.Normalize();
            string folder = retrievedEntity.Properties.Contains("new_history") ? (string)retrievedEntity["new_history"] : string.Empty;
            string filtr = retrievedEntity.Properties.Contains("new_filtr") ? (string)retrievedEntity["new_filtr"] : string.Empty;
            string Code = CreateCode(startParse.Normalize(), endParse.Normalize(), ConnectToSite(url));

            String[] filt_strs = filtr.Split(' ');

            bool flag = false;
            foreach(var str in filt_strs)
            {
                flag = Code.Contains(str);
                if (flag) break;
            }

            if (flag)
            {
               //I need organization name for Url Creation
            organization org = (organization)service.Retrieve(EntityName.organization.ToString(), workflowContext.OrganizationId, new ColumnSet(new string[] { "name" }));

            string orgname = org.name;

            url = string.Format("{0}{1}/CRMReports/viewer/drillopen.aspx?ID={2}&LogicalName={3}", 
                new object[] {
                    //I retrieve url of crm server with MSCRMServices part and clear it
                    ((string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl"))).Replace("MSCRMServices", ""),
                    orgname,
                    _entityid,
                    _entitytype});

            return ActivityExecutionStatus.Closed;
            }

            Save(Code, folder);
            
            //Здесь выполняется пользовательская логика
            
            return base.Execute(executionContext);
        }
        //Задание свойства вывода
        public static DependencyProperty urlProperty = DependencyProperty.Register("url", typeof(string), typeof(Activity1));
        [CrmOutput("url")]
        public string url
        {
            get
            {
                return (string)base.GetValue(urlProperty);
            }
            set
            {
                base.SetValue(urlProperty, value);
            }
        }
А так же прикрепляю скрин шаблона сообщения. В чем может крыться ошибка? С шаблоном вроде все нормально, значит не получаем URL,но тогда почему?
Старый 24.12.2009, 11:27   #4  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,198 / 867 (35) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Все сделал как в в вашем примере, создалось письмо, но URL в письме не было.
Код:
[CrmWorkflowActivity("Сканировать", "Сканирование WEB-ресурсов")]
    public class Activity1 : SequenceActivity
    {
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            ICrmService service = workflowContext.CreateCrmService();
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
            TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
            targetRetrieve.EntityName = _entitytype;
            targetRetrieve.EntityId = _entityid;
            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.Normalize();
            string startParse = retrievedEntity.Properties.Contains("new_startparse") ? (string)retrievedEntity["new_startparse"] : string.Empty.Normalize();
            string endParse = retrievedEntity.Properties.Contains("new_endparse") ? (string)retrievedEntity["new_endparse"] : string.Empty.Normalize();
            string folder = retrievedEntity.Properties.Contains("new_history") ? (string)retrievedEntity["new_history"] : string.Empty;
            string filtr = retrievedEntity.Properties.Contains("new_filtr") ? (string)retrievedEntity["new_filtr"] : string.Empty;
            string Code = CreateCode(startParse.Normalize(), endParse.Normalize(), ConnectToSite(url));

            String[] filt_strs = filtr.Split(' ');

            bool flag = false;
            foreach(var str in filt_strs)
            {
                flag = Code.Contains(str);
                if (flag) break;
            }

            if (flag)
            {
               //I need organization name for Url Creation
            organization org = (organization)service.Retrieve(EntityName.organization.ToString(), workflowContext.OrganizationId, new ColumnSet(new string[] { "name" }));

            string orgname = org.name;

            url = string.Format("{0}{1}/CRMReports/viewer/drillopen.aspx?ID={2}&LogicalName={3}", 
                new object[] {
                    //I retrieve url of crm server with MSCRMServices part and clear it
                    ((string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl"))).Replace("MSCRMServices", ""),
                    orgname,
                    _entityid,
                    _entitytype});

            return ActivityExecutionStatus.Closed;
            }

            Save(Code, folder);
            
            //Здесь выполняется пользовательская логика
            
            return base.Execute(executionContext);
        }
        //Задание свойства вывода
        public static DependencyProperty urlProperty = DependencyProperty.Register("url", typeof(string), typeof(Activity1));
        [CrmOutput("url")]
        public string url
        {
            get
            {
                return (string)base.GetValue(urlProperty);
            }
            set
            {
                base.SetValue(urlProperty, value);
            }
        }
А так же прикрепляю скрин шаблона сообщения. В чем может крыться ошибка? С шаблоном вроде все нормально, значит не получаем URL,но тогда почему?
А сам скриншот бизнес процесса, где данная активность используется можете предоставить?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 24.12.2009, 11:37   #5  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Вот и он:
Миниатюры
Нажмите на изображение для увеличения
Название: AXForum1.JPG
Просмотров: 406
Размер:	63.1 Кб
ID:	5478  
Старый 24.12.2009, 14:38   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,198 / 867 (35) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Вот и он:
А шагов скриншоты покажите тоже, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 28.12.2009, 09:32   #7  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от a33ik Посмотреть сообщение
А шагов скриншоты покажите тоже, пожалуйста.
Каких то именно может? Или всех?
Старый 28.12.2009, 10:32   #8  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,198 / 867 (35) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Каких то именно может? Или всех?
Приложите всех, если не трудно.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 28.12.2009, 10:44   #9  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Собственно вот. Код шага "Сканировать" я почти полностью прикреплял выше. Именно у из него как свойство вывода должна браться ссылка на запись.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 389
Размер:	27.6 Кб
ID:	5489   Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 384
Размер:	47.2 Кб
ID:	5490  

Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 370
Размер:	102.4 Кб
ID:	5491  
Старый 28.12.2009, 10:52   #10  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,198 / 867 (35) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Всмотрелся внимательно в Ваш код и увидел там такие строки:

public static DependencyProperty urlProperty = DependencyProperty.Register("url", typeof(string), typeof(Activity1));
[CrmOutput("url")]
public string url
{
get
{
return (string)base.GetValue(urlProperty);
}
set
{
base.SetValue(urlProperty, value);
}
}

...

string url = retrievedEntity.Properties.Contains("new_url") ? (string)retrievedEntity["new_url"] : string.Empty.Normalize();

...

url = string.Format("{0}{1}/CRMReports/viewer/drillopen.aspx?ID={2}&LogicalName={3}",
new object[] {
//I retrieve url of crm server with MSCRMServices part and clear it
((string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl"))).Replace("MSCRMServices", ""),
orgname,
_entityid,
_entitytype});

Получается, что есть накладка - статическое свойство класса и локальная переменная. Попробуйте локальную переменную переименовать. Вероятно, что последняя приведённая строка модифицирует не свойство, а локальную переменную.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бизнес-процесс (Workflow) отправка e-mail degussa Dynamics CRM: Функционал 1 07.12.2009 08:42
Отправка ярлыка задачи с помощью бизнес-процесса. DImaNec Dynamics CRM: Разработка 6 06.06.2009 13:42
Ошибка при публикации бизнес-процесса Верба Dynamics CRM: Администрирование 2 27.03.2009 16:18
Мир CRM: Отправка ярлыка по электронной почте при помощи бизнес-процесса Blog bot Dynamics CRM: Blogs 0 29.09.2008 07:16
Мир CRM: Автоматизирование добавления основного контакта при помощи Бизнес-Процесса Blog bot Dynamics CRM: Blogs 0 31.07.2008 02:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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