Your IP : 172.28.240.42


Current Path : /var/www/html/clients/wiki.e-nk.ru/data/cache/f/
Upload File :
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=&quot;Действующая&quot;
// Установить время последнего выполнения сценария 
LastExecTime = Конст(&quot;JabberTime&quot;;;)
// Установить время последнего выполнения сценария 
CurrDate = Today()
CurrTime = Time()
ExecTime = Format(&#039;%s %s&#039;; ArrayOf(CurrDate; CurrTime))
Конст(&quot;JabberTime&quot;; ExecTime)
  
// Определить если время последнего выполнения не указано, значит выполняем первый раз.
// Поэтому ничего выполнять не будем, запомним только время выполнения.
// Отключить обработку исключений, чтобы можно было определить, что была ошибка при 
// выполнении и откатить времы выполнения
ExceptionsOff()
FreeException()
if LastExecTime &lt;&lt;&gt;&gt; &quot;&quot;
  // Создать список пользователей и их e-mail адресов
  UserList = CreateList()
  WrkRef = References.РАБ.GetComponent()
  UserReq = WrkRef.DataSet.Requisites(&quot;Пользователь&quot;)
  ContactReq = WrkRef.DataSet.Requisites(&quot;Реквизит&quot;)
  Table = WrkRef.DataSet.SQLTableName

  // Определить работников, для которых заведен пользователь в системе 
  WrkRef.AddWhere(Format(&#039;%s.%s is not null&#039;; 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 &lt; UserList.Count
    // Определить пользователя
    User = ServiceFactory.GetUserByCode(UserList.Names(iUser))
    UserCode = UserList.Names(iUser)
    UserNameJID = User.Name 
    // Определить Jabber
    //JID = UserList.Values(iUser)
    JID = UserNameJID&amp;&quot;@jabber.prettl.su&quot;
    if JID &lt;&lt;&gt;&gt; &quot;&quot;
      // Достать все задания, стартованные с момента последнего выполнения сценария
      Search = Searches.CreateNew(ckJob)
      Criteria = Search.SearchCriteria
      CriterionPerformer = Criteria.Add(&#039;Performer&#039;)
      CriterionPerformer.Add(User.Code)
      
      CriterionDate = Criteria.Add(&#039;StartDate&#039;)
      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(&#039;%s%s.isb&#039;; ArrayOf(TempFolder; JobID))
        if (not JobInfo.IsRead) and (JobState &lt;&gt; wsAborted) and (((JobState &lt;&gt; wsDone) 
            and ((JobKind = jkJob) or (JobKind = jkControlJob))) or (JobKind = jkNotice))
          if JobKind = jkNotice
            JobKind = &#039;Уведомление от&#039;  
            x=CreateHyperlink(JobID;&quot;Уведомление&quot;)
          else
            if JobKind = jkControlJob
              JobKind = &#039;Задание-контроль от&#039;
              x=CreateHyperlink(JobID;&quot;Задание-контроль&quot;)
            else
              JobKind = &#039;Задание от&#039;
              x=CreateHyperlink(JobID;&quot;Задание&quot;)
            endif
          endif
          Params = ArrayOf(JobKind; Author; Subject; Trim(JobInfo.State.Name))
          Tema = Format(&quot;%s %s. %s. %s&quot;; Params)
          // Достать текст по текущей задаче
          Text = Task.GetFullText(true)
          // Создать файл-ссылку на задание
          FileName = JobID
   
          str=&quot;C:\Program Files\Miranda NG\MimCmd.exe message &quot;
          
          //delete--
          //JID=&quot;warpinterdictor@jabber.prettl.su&quot;
          //delete--
          
          cmd_line=str&amp;JID&amp;&#039; &#039;&amp;&#039;&quot;&#039;&amp;Tema&amp;&#039; Ссылка: &#039;&amp;x&amp;&#039;&quot;&#039;
          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>