Current Path : /var/www/html/clients/wiki.e-nk.ru/data/pages/directum/ |
Current File : /var/www/html/clients/wiki.e-nk.ru/data/pages/directum/jabber.txt |
====Агент рассылки входящих заданий через Jabber==== **Краткое описание:** \\ Скрипт для рассылки уведомлений о новых заданиях через систему мгновенных сообщений Jabber. **Подготовительные работы:** \\ Скачать и установить((На сервер запускающий скрипт)) jabber клиент: http://www.miranda-ng.org/ru/ \\ Скачать и установить plugin CmdLine для Miranda NG: http://wiki.miranda-ng.org/index.php?title=Plugin:CmdLine/ru \\ Предварительно создать константу в системе Directum: **JabberTime** \\ В планировщике заданий((На сервере запускающий скрипт)): Задать периодичность запуска данного скрипта. **Скрипт:** <code> STATE_ACTIVE="Действующая" // Установить время последнего выполнения сценария LastExecTime = Конст("JabberTime";;) // Установить время последнего выполнения сценария CurrDate = Today() CurrTime = Time() ExecTime = Format('%s %s'; ArrayOf(CurrDate; CurrTime)) Конст("JabberTime"; ExecTime) // Определить если время последнего выполнения не указано, значит выполняем первый раз. // Поэтому ничего выполнять не будем, запомним только время выполнения. // Отключить обработку исключений, чтобы можно было определить, что была ошибка при // выполнении и откатить времы выполнения ExceptionsOff() FreeException() if LastExecTime <<>> "" // Создать список пользователей и их e-mail адресов UserList = CreateList() WrkRef = References.РАБ.GetComponent() UserReq = WrkRef.DataSet.Requisites("Пользователь") ContactReq = WrkRef.DataSet.Requisites("Реквизит") Table = WrkRef.DataSet.SQLTableName // Определить работников, для которых заведен пользователь в системе WrkRef.AddWhere(Format('%s.%s is not null'; ArrayOf(Table; UserReq.SQLFieldName))) WrkRef.Open WrkRef.First foreach Wrk in WrkRef // Пройтись по всем найденным пользователям ContactCode = Wrk.Реквизит UserCode = Wrk.Пользователь Performers = References.КНТ.GetObjectByCode(ContactCode) // Добавить адреса только из действующих записей if Performers.Состояние == STATE_ACTIVE PerformerAddress = Performers.Строка2 UserList.Add(UserCode; PerformerAddress) endif endforeach // Задать параметры для создания ISB файла SysCode = Application.Connection.SystemInfo.Code UserName = Application.Connection.UserName TempFolder = GetTempFolder() // Для всех пользователей в списке найти их новые задания и разослать по указанным JID iUser = 0 while iUser < UserList.Count // Определить пользователя User = ServiceFactory.GetUserByCode(UserList.Names(iUser)) UserCode = UserList.Names(iUser) UserNameJID = User.Name // Определить Jabber //JID = UserList.Values(iUser) JID = UserNameJID&"@jabber.prettl.su" if JID <<>> "" // Достать все задания, стартованные с момента последнего выполнения сценария Search = Searches.CreateNew(ckJob) Criteria = Search.SearchCriteria CriterionPerformer = Criteria.Add('Performer') CriterionPerformer.Add(User.Code) CriterionDate = Criteria.Add('StartDate') CriterionDate.AddSingleValue(LastExecTime; vtGreaterOrEqual) CriterionDate.AddRange(LastExecTime; ExecTime) SearchResult = Searches.Execute(Search) // Пройтись по найденым заданиям SearchResult.Reset while not SearchResult.Eof JobInfo = SearchResult.Value Performer = JobInfo.Performer Author = JobInfo.Author.FullName Subject = JobInfo.Name JobKind = JobInfo.JobKind JobState = JobInfo.State.Value JobFinalDate = JobInfo.DeadLine JobID = JobInfo.ID TaskID = JobInfo.TaskID Task = Tasks.GetObjectByID(TaskID) // Снять блокировку с задачи if Task.GlobalLock.LockedByThis Task.GlobalLock.UnlockObject endif File = Format('%s%s.isb'; ArrayOf(TempFolder; JobID)) if (not JobInfo.IsRead) and (JobState <> wsAborted) and (((JobState <> wsDone) and ((JobKind = jkJob) or (JobKind = jkControlJob))) or (JobKind = jkNotice)) if JobKind = jkNotice JobKind = 'Уведомление от' x=CreateHyperlink(JobID;"Уведомление") else if JobKind = jkControlJob JobKind = 'Задание-контроль от' x=CreateHyperlink(JobID;"Задание-контроль") else JobKind = 'Задание от' x=CreateHyperlink(JobID;"Задание") endif endif Params = ArrayOf(JobKind; Author; Subject; Trim(JobInfo.State.Name)) Tema = Format("%s %s. %s. %s"; Params) // Достать текст по текущей задаче Text = Task.GetFullText(true) // Создать файл-ссылку на задание FileName = JobID str="C:\Program Files\Miranda NG\MimCmd.exe message " //delete-- //JID="warpinterdictor@jabber.prettl.su" //delete-- cmd_line=str&JID&' '&'"'&Tema&' Ссылка: '&x&'"' ExecuteProcess(cmd_line) ФайлУдалить(File) endif SearchResult.Next endwhile // Удалить ссылки на созданные объекты SearchResult = NIL CriterionPerformer = NIL CriterionDate = NIL Criteria = NIL Search = NIL endif // Увеличить счетчик iUser = iUser + 1 endwhile ExceptionsOn() endif </code>