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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.08.2010, 16:03   #1  
usa1009 is offline
usa1009
Участник
 
6 / 10 (1) +
Регистрация: 20.02.2010
Документооборот
В функциональности документооборота AX 2009 перекрыл ParticipantProvider для того что бы отправлять уведомления пользователям, которые выбраны в списке для текущего документа(для каждого документа список сотрудников, которым отправляется уведомление, разный). А вот воспользоваться группой пользователей, созданной в ParticipanrProvider для отправки уведомлений по e-mail не удается. Есть какие-то решения, модифицирующие стандарный функционал, для отправки сообщений пользователям из указанной группы.
Старый 04.08.2010, 11:24   #2  
dmitro is offline
dmitro
Участник
 
48 / 19 (1) ++
Регистрация: 18.07.2008
Адрес: Москва, РФ
решения есть. но так просто их вам никто не даст, сами понимаете

цепочка примерно такая:

класс EventNotificationWorkflow отвечает за отправку e-mail, метод create(), из таблицы EventInbox, созданной ядром workflow ранее..

X++:
        if (inbox.EmailTemplateId)
        {

            userInfo = SysUserInfo::find(inbox.UserId);

            if (userInfo && userInfo.EventWorkflowTasksInEmail)
            {
                if (SysEmailDistributor::validateEmail(userInfo.Email))
                {
                     inbox.SendEmail = true;
                     inbox.EmailRecipient = userInfo.Email;
                     this.sendMail();
                }
            }
        }
метод newInfoNoDrillDown() для задания параметров этой самой отправки, вызывается из класса-обработчика событий SysWorkflowEventDispatcher из метода sendNotifications()

X++:
                notificationSettings = configNotification.getNotification(_action);
                if (notificationSettings && notificationSettings.parmEnabled() == NoYes::Yes)
                {
                    users = SysWorkflowEventDispatcher::resolveParticipant(_context, notificationSettings.parmAssignTo(), _notificationId);
                    setEnumerator = users.getEnumerator();

                    while(setEnumerator.moveNext())
                    {
                        // verify that the user has access to the data
                        documentData = Workflow::getDocumentRecord(_context, setEnumerator.current());
                        if (documentData.RecId == 0)
                        {
                            continue; // does this throw
                        }

                        subject = SysWorkflowEventDispatcher::getNotificationSubject(_notificationLevel, _notificationType, setEnumerator.current());
                        notification = EventNotificationWorkflow::newInfoNoDrillDown(
                            setEnumerator.current(),
                            subject,
                            WorkflowParameters::find().WorkItemEmailId);
обратите внимание на выделенные места resolveParticipant() + notificationSettings.parmAssignTo() + setEnumerator.current(), именно там происходит "доставание" из ParticipantProvider нашей группы юзеров и для каждого юзера запуск отправки сообщения. Тут, как мне кажется, и надо смотреть.

Последний раз редактировалось dmitro; 04.08.2010 в 11:27.
Старый 04.08.2010, 12:16   #3  
usa1009 is offline
usa1009
Участник
 
6 / 10 (1) +
Регистрация: 20.02.2010
Решение нашел. Class WorkflowConfigurationForm

void getNotificationListAssignTo_clicked(Common record)
{
WorkflowConfigPersonPickerControl workflowPersonPickerControl;
WorkflowConfigControlData data = this.setControlData(record);
WorkflowNotificationTmp notification = record;
WorkflowStep step = WorkflowStep_Task::construct();
// добавил
SysDictWorkflowElement sysDictWorkflowElement;
// добавил
;
// добавил
sysDictWorkflowElement = new SysDictWorkflowElement(WorkFlowElementType::Approval, tmpWorkflowElementTable.ElementName);
data.parmParticipantProvider(sysDictWorkflowElement.participantProvider());
// добавил
//закоментировал
//data.parmParticipantProvider(classstr(WorkflowUserGroupParticipantProvider));
//закоментировал

// hierarchy resolution not available for notifications.
data.parmHierarchyProvider('');

step.parmConditions(configuration.parmConfigurationConditions());
data.parmStep(step);

workflowPersonPickerControl = WorkflowConfigPersonPickerControl::newForm(tablenum(WorkflowNotificationTmp), fieldnum(WorkflowNotificationTmp, AssignTo));
workflowPersonPickerControl.clicked(data);

configuration.parmConfigurationConditions(step.parmConditions());
}
Старый 04.08.2010, 12:21   #4  
dmitro is offline
dmitro
Участник
 
48 / 19 (1) ++
Регистрация: 18.07.2008
Адрес: Москва, РФ
а теперь расшифруйте, что изменилось? я так понял этот кусок отвечает за список отображаемый при нажатии на кнопку "Выбрать" в назначении для шага?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Документооборот Eldar9x DAX: Программирование 9 07.06.2008 09:25
Про документооборот andreynikolai DAX: Программирование 30 06.10.2006 09:34
Документооборот. Создание файла по шаблону. NJD DAX: Программирование 4 11.05.2005 10:52
Документооборот wb DAX: Программирование 1 07.02.2005 15:56
Кто нибудь пытался релизовать ДОКУМЕНТООБОРОТ в Аксапта? edd DAX: Функционал 10 21.07.2003 15:48
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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