Your IP : 172.28.240.42


Current Path : /var/www/html/clients/wiki.e-nk.ru/data/pages/directum/
Upload File :
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>