Current Path : /var/www/html/clients/wiki.e-nk.ru/data/cache/f/ |
Current File : /var/www/html/clients/wiki.e-nk.ru/data/cache/f/fcc61a1e6d975fdeadfb6a34d24e5935.xhtml |
<h3 class="sectionedit1" id="агент_рассылки_входящих_заданий_через_jabber">Агент рассылки входящих заданий через Jabber</h3> <div class="level3"> <p> <strong>Краткое описание:</strong> <br/> Скрипт для рассылки уведомлений о новых заданиях через систему мгновенных сообщений Jabber. </p> <p> <strong>Подготовительные работы:</strong> <br/> Скачать и установить<sup><a href="#fn__1" id="fnt__1" class="fn_top">1)</a></sup> jabber клиент: <a href="http://www.miranda-ng.org/ru/" class="urlextern" title="http://www.miranda-ng.org/ru/" rel="nofollow">http://www.miranda-ng.org/ru/</a> <br/> Скачать и установить plugin CmdLine для Miranda NG: <a href="http://wiki.miranda-ng.org/index.php?title=Plugin:CmdLine/ru" class="urlextern" title="http://wiki.miranda-ng.org/index.php?title=Plugin:CmdLine/ru" rel="nofollow">http://wiki.miranda-ng.org/index.php?title=Plugin:CmdLine/ru</a> <br/> Предварительно создать константу в системе Directum: <strong>JabberTime</strong> <br/> В планировщике заданий<sup><a href="#fn__2" id="fnt__2" class="fn_top">2)</a></sup>: Задать периодичность запуска данного скрипта. </p> <p> <strong>Скрипт:</strong> </p> <pre class="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</pre> </div> <div class="footnotes"> <div class="fn"><sup><a href="#fnt__1" id="fn__1" class="fn_bot">1)</a></sup> На сервер запускающий скрипт</div> <div class="fn"><sup><a href="#fnt__2" id="fn__2" class="fn_bot">2)</a></sup> На сервере запускающий скрипт</div> </div>