Объявление

Свернуть
Пока нет объявлений.

Работа с компонентами Оmnitracker через COM

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Работа с компонентами Оmnitracker через COM

    Java
    Для работы требуется библиотека Jacob
    В java.library.path требуется прописать путь к файлу dll

    Код:
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Variant;
    ActiveXComponent objApplication = new ActiveXComponent("OtAut.OtApplication");
    Variant conRet = objApplication.invoke("MakeSessionEx", new Variant[]{
        new Variant(%Host%),
        new Variant(%Port%),
        new Variant(%Login%),
        new Variant(%Password%),
        new Variant("ru")
    });
    ActiveXComponent objSession = new ActiveXComponent(conRet.toDispatch());
    try {
        ActiveXComponent objRequest = objSession.invokeGetComponent("GetRequestByUniqueID", new Variant(1000902));
        System.out.println("Name : " + objRequest.getProperty("Name"));
        ActiveXComponent objField = objRequest.invokeGetComponent("UserFields", new Variant("Name"));
        System.out.println("OTHER NAME: " + objField.invoke("TValue").getString());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        objSession.invoke("Logoff", new Variant[] {});
    }
    Python
    Для работы требуется библиотека pypiwin32 сам python 32x разрядны

    Код:
    from win32com.client import Dispatch
    from win32com.client import gencache
    # win32com/client/makepy.py в списке выбираем OmniTracker automation... после выполнения будет создана папка
    # SOME_DISK:/some_path/{Идентификатор} идентификатор используется при вызове EnsureModule
    gencache.EnsureModule('{BFC91F06-88ED-11D0-A77E-444553540000x0x1x0}', 0, 1, 7)
    application = Dispatch("OtAut.OtApplication")
    session = application.MakeSessionEx(%Host%, %Port%, "%Login%", "%Password%", "ru")
    # Поиск по папке нарядов
    folder = session.RequestFolders("Workorder")
    group_filter = folder.MakeFilter()
    # Рабочая группа OmniTracker
    group_filter.SetSpecialField("AssignmentGroup.UNIQUE_ID", 4850)
    for request in folder.Search(group_filter, False):
          print request.UserFields("Summary").TValue
    Ruby
    Для работы использовать класс WIN32OLE (http://ruby-doc.org/stdlib-1.9.3/lib.../WIN32OLE.html)

    Код:
    # coding: utf-8
    require 'win32ole'
    application =  WIN32OLE.new('OtAut.OtApplication')
    session = application.MakeSessionEx(%Host%, %Port%, "%Login%", "%Password%", "ru")
    folder = session.RequestFolders("Workgroups")
    filter = folder.MakeFilter()
    help = filter.setproperty('SpecialField', 'UNIQUE_ID', 26519050)
    folder.Search(filter, false).each { | x | puts x.Name.encode "UTF-8"}

    Последний раз редактировалось Ivan; 17-10-2016, 09:22.

  • #2
    Добавлю вариант на PowerShell
    И источник откуда сам смотрел) purple-screen.com/?p=104
    PHP код:
     Param (
        [
    Parameter(Mandatory $false)] # Must be Mandatory = $TRUE after test finished
            
    [int]$Number 76257,

        [
    Parameter(Mandatory $false)]
            [
    string]$Server 'omnit.ad.upc.intranet',
        
        [
    Parameter(Mandatory $false)]
            [
    int]$Port 5085,

        [
    Parameter(Mandatory $false)]
            [
    pscredential]$Credential,
        
        [
    Parameter(Mandatory $false)]
        [
    ValidateSet("ZNI""ZNO"'NRD')]
            [
    string]$Type "NRD"
    )

    function 
    Clear-Matches {
        if ((
    $Matches Measure-Object).Count -gt 0){
            
    $script:Matches $null
        
    # End If
    # End Function


    Switch ($Type){
        
    'ZNI'{[string]$Folder "01. Деятельность\03. ЗНО"}
        
    'ZNO'{[string]$Folder "01. Деятельность\04. ЗНИ"}
        
    'NRD'{[string]$Folder "Workorder"}
    # End Switch

    If (![string]::IsNullOrEmpty($Credential)){
        
    $OTLogin $Credential.UserName
        $OTPass 
    $Credential.GetNetworkCredential().Password
    # End If

    # Using parameters create Com Object and connect to Omnitracker Server
    $otApp = New-Object -ComObject OtAut.OtApplication
    $otApp
    .LoginTimeout 0
    $otSession 
    $otApp.MakeSession($Server$Port"$OTLogin""$OTPass")


    # Open Folder (ZNI, ZNO or NRD) and create filter
    #$otFolder = ($otFolders | ? Path -eq $Folder)
    $otFolder $otSession.RequestFolders where alias -eq $Folder
    $otFilter 
    $otFolder.MakeFilter()
    #$otFilter.SetSearchExpression("Number:$Number")
    $otFilter.Save() # ?Dont now what it mean?
    $otFilter.UserField("Number") = $Number 

    Комментарий


    • #3
      Уважаемый Ivan,
      можете плиз подтвердить, что для работы с omnitracker COM подходит только 32-х разрядный python?
      А то у меня в никакую не получается выполнить
      gencache.EnsureModule('{BFC91F06-88ED-11D0-A77E-444553540000x0x1x0}', 0, 1, 7) Заранее спасибо!

      Комментарий


      • #4
        64-bit python и 64-bit OtAut -
        Сергей Осадчий

        Комментарий


        • #5
          А кто-нибудь "дружил" ОМНИ с 1С?
          Столкнулись тем, что из ОТ открывать соединение с 1С по COM - это потрясающе долгий процесс, который при этом умудряется вешать все намертво. Только на установление соединения уходит почти 30 секунд. При организации обратной передачи данных - из 1С в ОТ - все летает.
          Непонятно, проблема в конкретно нашем сервере/конфигурации 1С, или собственно в том, что "это же 1С, что вы хотели"

          Комментарий


          • #6
            Обменивается xls файлами через обработки\импорты.

            Комментарий


            • #7
              Файлами грустненько и неудобно ) COM лучше.

              Комментарий


              • #8
                Сообщение от Ann Посмотреть сообщение
                Файлами грустненько и неудобно ) COM лучше.
                API на стороне 1С, SOAP на стороне OMNI?

                Комментарий


                • #9
                  Подскажите как закрыть задачу, пытаюсь сделать скрипт для закрытия задач через python
                  В самом OT при переводе статуса задачи в состояние "Завершено" обновляется форма и появляется возможность выбора "кода закрытия"
                  через python я не понимаю как это сделать, я могу изменить статус, указать комментарий, но не могу изменить состояние "Closure code"



                  PHP код:
                  ....
                  group_filter.SetSpecialField("Status""В работе")

                  for 
                  request in folder.Search(group_filterFalse):

                       
                  chech request.UserFields("ID")

                       if 
                  str(chech.Value) == "IN-123456":
                            
                  request.UserFields("Status").TValue 'Завершено'
                            
                  request.UserFields("Closure code").TValue 'Решено'
                            
                  request.SaveEx(1024)

                           
                  #output: Смена состояний в поле 'Статус' не может быть произведена, так как поле 'Код закрытия' не содержит значений 

                  UPD: Разобрался,посмотрел на аналогии проблемы из других веток форума. нужна была ссылка на объект из папки "Коды закрытия"
                  Последний раз редактировалось werew34; 21-09-2021, 12:27.

                  Комментарий

                  Обработка...
                  X