Показать сообщение отдельно
Старый 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.