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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2010, 10:24   #1  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Различные значения полей в одной записи для разных пользователей
Столкнулся с такой задачей: есть какая-то запись сущности new_web, относительно которой периодически выполняется бизнес-процесс, которому передаются значения полей из этой записи. Так вот, возникла необходимость сделать так, чтобы скажем у одного пользователя в поле "фильтр" было одно значение, а у другого - другое и бизнес-процесс уже выполнялся для каждого пользователя со своим значением. Ну что-то в этом роде. Не подскажете, какие пути решения можно найти для решения такой задачи?
Старый 16.04.2010, 10:35   #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, относительно которой периодически выполняется бизнес-процесс, которому передаются значения полей из этой записи. Так вот, возникла необходимость сделать так, чтобы скажем у одного пользователя в поле "фильтр" было одно значение, а у другого - другое и бизнес-процесс уже выполнялся для каждого пользователя со своим значением. Ну что-то в этом роде. Не подскажете, какие пути решения можно найти для решения такой задачи?
Недостаточно понятно объяснили. Может, правда, только я не понял...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 16.04.2010, 10:55   #3  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Загрузил скрин формы, для более точного объяснения.
Так вот: допустим есть 2 неких пользователя в системе. 1 пользователь хочет установить фильтр(выделенное поле на скрине) по слову ЗАО, а второй по слову ФИНАНСЫ. Бизнес процесс использует значение этого поля в своем алгоритме, и если находит это слово в определенном контенте, то уведомляет об этом пользователя(с уведомлениями я разобрался). Мне нужно, чтобы для этой записи у 1 пользователя выполнялся бизнес процесс относительно его данных, тоесть ЗАО, а у второго относительно слова ФИНАНСЫ. Я понимаю, что можно просто наплодить записи с различными данными, но может то, что я описал выше как то реализуемо?
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 687
Размер:	82.9 Кб
ID:	5705  
Старый 16.04.2010, 11:48   #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 Посмотреть сообщение
Загрузил скрин формы, для более точного объяснения.
Так вот: допустим есть 2 неких пользователя в системе. 1 пользователь хочет установить фильтр(выделенное поле на скрине) по слову ЗАО, а второй по слову ФИНАНСЫ. Бизнес процесс использует значение этого поля в своем алгоритме, и если находит это слово в определенном контенте, то уведомляет об этом пользователя(с уведомлениями я разобрался). Мне нужно, чтобы для этой записи у 1 пользователя выполнялся бизнес процесс относительно его данных, тоесть ЗАО, а у второго относительно слова ФИНАНСЫ. Я понимаю, что можно просто наплодить записи с различными данными, но может то, что я описал выше как то реализуемо?
Боюсь, что варианта кроме как наплодить - нет...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 16.04.2010, 17:23   #5  
Артем 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
Можно использовать JS, который будет запрашивать имя+роли текущего пользователя и на основании этих данных будет подставлять значение. Но, вы правы, любые значения по умолчанию чреваты неверным заполнением данных и замусориванием базы. Я бы сказал, что их следует использовать, если значение по умолчанию верно в 90%.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 20.04.2010, 08:26   #6  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Можно использовать JS, который будет запрашивать имя+роли текущего пользователя и на основании этих данных будет подставлять значение. Но, вы правы, любые значения по умолчанию чреваты неверным заполнением данных и замусориванием базы. Я бы сказал, что их следует использовать, если значение по умолчанию верно в 90%.
Но ведь тогда мы добъемся только автоподстановки значений в какое-то поле при открытии формы. Тоесть сама проблема не решится - зайдет один пользователь - в форме будет одно значение, зайдет другой - другое. Соответственно рано или поздно бизнес-процесс запущенный из-под одного пользователя получит чужие данные на вход.
Старый 20.04.2010, 08:48   #7  
Артем 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
Извините, я не внимательно читал. Ну вариант еще сделать развязочный объект "Фильтры пользователей", который будет содержать слова фильтра и ссылку на пользователя. N:N сделать предлагаю. Пусть, тогда ваш алгоритм ищет в контексте все слова из этого объекта и уведомляет нужного пользователя.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: Tarasov E (1).
Старый 20.04.2010, 09:27   #8  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Извините, я не внимательно читал. Ну вариант еще сделать развязочный объект "Фильтры пользователей", который будет содержать слова фильтра и ссылку на пользователя. N:N сделать предлагаю. Пусть, тогда ваш алгоритм ищет в контексте все слова из этого объекта и уведомляет нужного пользователя.
Спасибо за отзывчивость)
То есть если я правильно понял:
1. Нужно создать новую сущность "фильтры пользователей".
2. Создать лукап поле, связанное с этой сущностью как N:N
3. Брать значение поискового фильтра из полей связанной через лукап сущности "фильтры пользователей".
4. Отправлять уведомления выбранному в лукапе пользователю.

Если я правильно понял, то вот какие вопросы возникли:
Опять таки в один момент времени бизнес процесс(а он периодически повторяется) будет брать настройки поискового фильтра у одного пользователя. После смены пользователя в лукапе, может возникнуть(и скорее всего так и произойдет) то, что ранее запущенный бизнес процесс, обратившись к значению поля лукап, выдернет уже чужие данные оттуда и рассылку делать уже другому. То есть саму задачу, когда у каждого пользователя должны быть свои данные в форме(кроме варианта наплодить записей), это не решит? Извините, если я вас не так понял

Последний раз редактировалось Tarasov E; 20.04.2010 в 09:45.
Старый 20.04.2010, 10:43   #9  
Артем 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
Я недостаточно точно выразился: код все равно придется исправить. Если сейчас ваш шаг БП берет данные поля "фильтр" из объекта new_web и уведомляет владельца new_web, то мной предлагается следующая модификация.
1. Убираем из new_web поле фильтр и, желательно даже владелец (владеть объектом должна организация).
2. Создаем связанный с new_web как N:1 объект new_userfilter. Этим объектом будут владеть пользователи. У него будет атрибут "фильтр".
3. Вы создаете ваш new_web с настройками веб ресурса, после чего создаете связанные с ним new_userfilter с нужными значениями фильтра для каждого пользователя (можно и несколько для одного человека!).
4. Запускаете ваш циклический бизнес процесс. В нем ваш код запрашивает из базы все объекты "new_userfilter" связанные с конкретным экземпляром new_web для которого запущен процесс. Далее в цикле (условно) из этого объекта вычитывается id пользователя (владельца new_userfilter) и заданный им фильтр. После этого вызывается тот код который уже есть: тот который отсканирует что нужно, но уведомит владельца new_userfilter, а не new_web, как это было ранее.
Надеюсь на этот раз я выразился яснее.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: Tarasov E (1).
Старый 20.04.2010, 12:16   #10  
Артем 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
То о чем мы говорим - это стандартный рефакториг стандартной же ошибки проектирования. Часто при разработке системы полагается что связь будет 1:1, например, один заказ : один исполнитель. Потом появляются большие заказы где исполнителей должно быть n и тогда приходится делать развязки. В принципе задача достаточно тривиальная, хотя и несколько геморройная. Другого выхода пока не вижу.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 26.04.2010, 10:11   #11  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Спасибо! В общем пока был дан зеленый свет для реализации подобного метода. Итак.
1. Я создал сущность new_userfiltr и поместил на нее атрибуты "Фильтр по словам" и "Связанный субъект" (см.аттач). Кстати поле связанный субъект почему-то не отображает имя выбранного субъекта в связанной сущности new_web, возможно потому что это имя так же является связанным полем с сущностью интересы? Как это можно решить?
2.
Цитата:
Запускаете ваш циклический бизнес процесс. В нем ваш код запрашивает из базы все объекты "new_userfilter" связанные с конкретным экземпляром new_web для которого запущен процесс.
Вот здесь вопрос по реализации. Запись, породившую бизнес-процесс я получаю так:
Код:
//Получаем идентификатор записи, породившей запуск бизнес-процесса
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
А далее как найти в сущности new_userfiltr все записи, связанные с породившей бизнес-процесс?
Цитата:
Далее в цикле (условно) из этого объекта вычитывается id пользователя (владельца new_userfilter) и заданный им фильтр.
Здесь мы просто получаем значения атрибутов...
Цитата:
После этого вызывается тот код который уже есть: тот который отсканирует что нужно, но уведомит владельца new_userfilter, а не new_web, как это было ранее.
Уведомлять следующим образом?
Код:
//Получиние ссылки на запись
                //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;
            }
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 449
Размер:	20.0 Кб
ID:	5744  
Старый 26.04.2010, 10:58   #12  
Артем 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
1. В лукапе отражается значение основного атрибута связываемой сущности. Если его нет на форме new_web и оно не заполняется, то, очевидно и в лукапе будет пусто. Можно сделать скрипт который будет вычитывать нужную информацию из базы и отражать в этом поле. А вообще похоже нужен более глубокий рефакториг.
2. БП по прежнему должен запускаться для new_web! Далее вы совершенно правильно получаете его id из контекста. Далее я бы использовал RetrieveMultiple сущности new_userfilter и задал бы ConditionExpresion на поиск new_userfilter, где поле "Связанный субъект" = полученному из контекста ID
3. По поводу уведомлений тоже понятно: в предыдущем шаге вы уже получили спектр new_userfilter которых нужно уведомлять. Ваш код мне ничего не сообщил относительно того, как вы делаете уведомления.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Извлечение значения полей из атрибута на форме e.pasechny Dynamics CRM: Разработка 9 10.11.2009 13:44
Совмещение одним пользователем разных ролей в разных бизнес-юнитах Soulcar Dynamics CRM: Администрирование 10 22.09.2009 12:55
Маппинг пользователей при импорте организации migunov Dynamics CRM: Администрирование 2 25.06.2009 12:19
Событие "Назначение записи" для бизнес-процесса Lazarus Dynamics CRM: Функционал 1 22.01.2009 19:54
записи в pickup list shumelka Dynamics CRM: Функционал 3 28.01.2005 16:13
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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