Объявление

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

Как перенести данные из HP Service Desk 4.5 в OMNITRACKER

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

  • Как перенести данные из HP Service Desk 4.5 в OMNITRACKER

    Общие сведения
    Перенос данных является важнейшей частью проекта миграции.

    Все задачи по переносу данных полностью решаются с помощью встроенного в OT механизма импорта. Для каждой папки в OT необходимо настроить соответствующий импорт, содержащий запрос к источнику данных (в данном случае это БД HP SD), а также определение отображения (mapping) столбцов таблицы результата запроса на поля информационного объекта этой папки.

    Чтобы создать новый импорт или редактировать/выполнить существующий кликни правой кнопкой мыши на папке в OT и выбери пункт "Импортировать объекты…".

    Прежде чем продолжить, может быть полезным кратко ознакомиться с разделом User Interface\Data Import and Export\Data Import руководства администратора OT.

    Среди прочих настроек импорта особенно полезными для нас будут настройки Import Folder Settings. Чтобы перейти к ним в настройках импорта (Import Settings) перейди на закладку Field Mapping, в окне Import Folder Settings выбери интересующий объект и нажми кнопку "Edit…".

    [attachment=3:3qu6ovvo]RecordsImportSettings.png[/attachment:3qu6ovvo]

    Опишем здесь назначение всех вариантов:
    Add objects — просто добавляет объекты без учёта, того что уже находится в базе OT. Не рекомендуется пользоваться этим, поскольку после нескольких последовательно выполненных импортах одного и того же объекта, в папке OT они размножатся в соответствии с количеством выполнений импорта.
    Add and modify objects — если в результате запроса возвращаются такие значения, первичный ключ которых не найден в базе OT, для них создаются новые объекты. Для тех записей, первичный ключ которых уже есть в OT, происходит модификация значений полей объекта, если значения как-либо отличаются. Удобная вещь для синхронизации объектов в одну сторону. Однако при этом не происходит удаления существующих в OT объектов в случае, если они пропали из результата импорта.
    Add, modify and delete objects — тоже самое, что и предыдущее, только лишние в OT объекты удаляются. Удобно для полной синхронизации: после импорта количество и состав объектов полностью совпадает с источником.
    Add new objects only — и так понятно;
    Modify existing objects only — просто обновляет объекты (если есть изменения) по первичному ключу. Удобно, для коррекции данных (например, если забыли импортировать какое-то поле или положили его не туда), при этом не нужно удалять все импортированные записи и импортировать их заново.
    Update references only — только управление связями. Нужно для того, когда связываемые объекты уже присутствуют в базе, а между ними задаётся только связь.

    Схема переноса данных показана на рисунке.

    [attachment=2:3qu6ovvo]800px-HPtoOT_Data_Migration.png[/attachment:3qu6ovvo]

    Импорт данных происходит последовательно, начиная с тех объектов, которые в себе не хранят связей с другими (например, справочники). При выполнении очередного импорта необходимо удостовериться, что объекты, на которые может ссылаться импортируемая запись уже присутствуют в базе OT.

    Отображение данных HP OV Service Desk 4.5 на папки Omintracker
    [attachment=1:3qu6ovvo]SD-OT-objects.PNG[/attachment:3qu6ovvo]

    Особенности

    1. Поле SDOID в OT имеет тип Text(20). Если создавать поле, имеющий численный тип, то при импорте возникает ошибка. Вследствие этого все внутренние идентификаторы в запросе преобразовываются в текст с помощью функции CAST.

    2. Некоторые элементы SQL-запроса являются ключевыми словами в OT. Поэтому для того, чтобы запрос нормально воспринимался трекером, необходимо это ключевое слово окружать символами ". Если этого не делать, то ошибка будет выглядеть примерно так:

    [attachment=0:3qu6ovvo]ODBC-err.png[/attachment:3qu6ovvo]

    3. По невыясненным причинам может не работать установка связи по имени. Пример: в тестовой среде импорт связи "Заявка → ИТ-услуга" по имени (Identifying Field = Имя) проходил нормально, после переноса конфигурации в продуктивную среду тот же самый импорт отказывался работать правильно, ссылаясь на то, что требуемого значения (ИТ-услуги) нет в справочнике. Поэтому везде, где можно необходимо использовать связи через внутренние идентификаторы (OID) самого Service Desk. Пока это удавалось.

    4. При переносе временных параметров необходимо учесть, что в БД SD они хранятся GMT, что значит, что относительно Московского времени они будут смещены назад на 3 часа. Таким образом, в импорте должна быть применена коррекция, учитывающая это смещение.

    Пример запроса для извлечения данных по заявкам - смотри в сообщении http://www.omniway.ru/forum/viewtopi...=50&p=132#p132
    С уважением,
    Савичев Илья
    OmniWay
    http://www.omniway.ru

  • #2
    Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

    Здравствуйте!

    Вопросик по поводу миграций с SDesk 4.5

    как можно настроить импорт вложений КЕ с деска в трекер

    в деске файлы лежат на жест.диске, все переименованные и большое количество вложенных папок

    Спасибо!
    С Уважением
    Орлов Александр
    "Выксунский Металлургический Завод"

    Комментарий


    • #3
      Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

      Очень просто.
      После импорта записей (заявок, нарядов, чего угодно) из SD в ОТ у вас в ОТ должен быть идентификатор записи в SD (OID).
      Алгоритм скрипта:
      • для каждой записи ОТ с SDOID смотрим в rep_attachments - есть ли вложения,[/*:m:1dewcppo]
      • если есть - для каждого вложения в списке строим имя файла и путь к файлу;[/*:m:1dewcppo]
      • добавляем вложение к записи и сохраняем ее.[/*:m:1dewcppo]
      С уважением, Сергей Осадчий

      Комментарий


      • #4
        Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

        Александр, у Вас получилось импортировать вложения, код скрипта не нужен?
        С уважением, Сергей Осадчий

        Комментарий


        • #5
          Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

          Нет, Сергей, еще не занимался этим(был в отпуске), но
          код посмотреть не помешало бы.

          у нас ОТ пока в ограниченной тестовой эксплуатации, и постепенно все рули от SD переходят к ОТ
          С Уважением
          Орлов Александр
          "Выксунский Металлургический Завод"

          Комментарий


          • #6
            Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

            Сообщение от aleXis
            Нет, Сергей, еще не занимался этим(был в отпуске), но
            код посмотреть не помешало бы.

            у нас ОТ пока в ограниченной тестовой эксплуатации, и постепенно все рули от SD переходят к ОТ
            Александр, держите! Давненько уже писал...

            Код:
            Option Explicit
            Const ForReading = 1, ForAppending = 8, TristateUseDefault = -2
            
            Dim OtApplication, OtSession
            Dim OtRequestFolder, OtRequests, OtRequest, OtFilter
            Dim OtExternalDatabase, OtResultSet
            Dim att_path_prefix, scoid, sqlstring, row_index
            Dim att_name, att_oid, att_fname, att_filename, att_path, att_filepath
            Dim fso, logname, fso_log, log
            
            logname = "AttachmentsImport.log"
            
            Set fso = CreateObject("Scripting.FileSystemObject")
            Set fso_log = CreateObject("Scripting.FileSystemObject")
            Set log = fso.OpenTextFile(logname, ForAppending, False, TristateUseDefault)
            
            Set OtApplication = CreateObject("OtAut.OtApplication")
            ' подключаемся к серверу OT
            Set OtSession = OtApplication.MakeSessionEx("***", 5085, "***", "***", "ru")
            ' открываем нужную папку
            Set OtRequestFolder = OtSession.RequestFolders("Incidents")
            ' начало пути к файлам вложений на FTP ServiceDesk, изменить в зависимости от OtRequestFolder
            att_path_prefix = "C:\SDAttachments\SD\Servicecall"
            
            ' подключаемся к БД ServiceDesk через ODBC
            Set OtExternalDatabase = OtSession.GetExternalDatabase("DSN=***;UID=***;PWD=***", 1)
            
            ' ищем заявки с непустым полем SCOID - алиас для разных объектов будет разный?
            Set OtFilter = OtRequestFolder.MakeFilter()
            OtFilter.UserField("SDOID") = Empty
            OtFilter.UserFieldMin("Number") = 60000
            OtFilter.UserFieldMax("Number") = 80000
            OtFilter.NegateField("SDOID") = True
            ' OtRequests - список найденных объектов
            Set OtRequests = OtRequestFolder.Search(OtFilter, False)
            
            ' для каждого объекта в списке найденных:
            For Each OtRequest In OtRequests 
            		' scoid - OID объекта в ServiceDesk, ahs_att_oid в таблице rep_attachments
            	scoid = OtRequest.UserFields("SDOID").Value 
            		' cast(ahs_oid as nvarchar) необходим, так как ODBC ругается на слишком большое число
            	sqlstring = "select ahs_basename, cast(ahs_oid as nvarchar(20)) from rep_attachments where ahs_att_oid = " & scoid
            		' ищем в БД ServiceDesk вложения для текущего объекта
            	Set OtResultSet = OtExternalDatabase.OpenResultSet(sqlstring)
            
            		' если вложения есть,
            	If OtResultSet.RowCount > 0 Then
            		' для каждого вложения в списке вложений текущего объекта:
            		For row_index = 0 To OtResultSet.RowCount - 1
            				' att_name - наименование вложения (логическое имя файла)
            			att_name = OtResultSet.Value(0, row_index)
            				' att_oid - OID вложения в ServiceDesk, нужен для построения имени файла ОС
            			att_oid = OtResultSet.Value(1, row_index)
            
            				' строим путь к файлу ОС в формате XXX\XXX\XXX\XXX\XXX\XXX\XXX\XXX\XXX\XXX\XX
            				' путь - это OID объекта в формате HEX с прибавкой нулей в начало до 128 бит
            			att_path = BaseConvertFromDec(16, CDbl(scoid))
            			att_path = "000\000\000\000\000\000\0" & Mid(att_path, 1, 2) & "\" & Mid(att_path, 3, 3) & "\" & Mid(att_path, 6, 3) & "\" & Mid(att_path, 9, 3) & "\" & Mid(att_path, 12, 2)
            				' строим имя файла ОС в формате XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
            				' имя файла - это OID вложения в формате HEX с прибавкой нулей в начало до 128 бит
            			att_filename = BaseConvertFromDec(16, CDbl(att_oid))
            			att_filename = "00000000-0000-0000-000" & Left(att_filename, 1) & "-" & Right(att_filename, 12)
            				' полный путь к файлу ОС
            			att_filepath = att_path_prefix + "\" + att_path + "\" + att_filename
            
            			If fso.FileExists(att_filepath) Then
            				log.WriteLine(Date & " " & Hour(Now)&":"&Minute(Now)&":"&Second(Now) _
            				& " Заявка #" & OtRequest.UserFields("Number").Value & ", вложение " & att_name)
            					' добавляем вложение к текущему объекту
            				OtRequest.Attachments.Add att_filepath, att_name, att_name
            					' сохраняем текущий объект
            				OtRequest.SaveEx(1023)'не проверять ничего при сохранении
            			End If
            		Next
            	End If
            Next
            
            log.Close
            ' отключаемся от сервера OT
            OtSession.Logoff()
            MsgBox("All done!")
            
            ' Function BaseConvertFromDec(nBase, nDec)
            ' Purpose: Converts a positive number from base 10 to any base from 2 to 36.
            ' Parameters:
            ' nBase - The base to convert to. It must be a number between 2 and 36.
            ' nDec  - The number to be converted. It must be >= 0 or an error will be returned.
            ' Returns: A string that is the decimal number expressed in the New base.
            Function BaseConvertFromDec(nBase, nDec)
            	Dim arrChar, i, nCount, nLargestExp, strResult
            	If nBase < 2 Or nBase > 36 Then
            		BaseConvertFromDec = "ERROR: Invalid Base"
            		Exit Function
            	End If
            	If nDec = 0 Then
            		BaseConvertFromDec = "0"
            		Exit Function
            	End If
            	If nDec < 0 Then
            		BaseConvertFromDec = "ERROR: Negative Input"
            		Exit Function
            	End If
            	arrChar = Array("0","1","2","3","4","5","6","7","8","9", _
            		"A","B","C","D","E","F","G","H","I","J","K","L","M", _
            		"N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
            	Do Until nBase^nLargestExp >= nDec
            		nLargestExp = nLargestExp + 1
            	Loop
            	nLargestExp = nLargestExp - 1
            	If nLargestExp < 0 Then nLargestExp = 0
            	For i = nLargestExp To 0 Step -1
            		nCount = 0
            		Do Until nBase^i > nDec
            			nCount = nCount + 1
            			nDec = nDec - nBase^i
            		Loop
            		strResult = strResult & arrChar(nCount)
            	Next
            	BaseConvertFromDec = strResult        
            End Function
            С уважением,
            Цимбалистов Александр
            Команда российского форума OMNITRACKER
            http://www.omniway.ru/forum/

            Комментарий


            • #7
              Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

              Спасибо!
              попробуем
              С Уважением
              Орлов Александр
              "Выксунский Металлургический Завод"

              Комментарий


              • #8
                Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

                перенесли вложения по персоналу и КЕ из ServiceDesk, СПАСИБО БОЛЬШОЕ!!!
                С Уважением
                Орлов Александр
                "Выксунский Металлургический Завод"

                Комментарий


                • #9
                  Re: Как перенести данные из HP Service Desk 4.5 в OMNITRACKE

                  Сообщение от aleXis
                  перенесли вложения по персоналу и КЕ из ServiceDesk, СПАСИБО БОЛЬШОЕ!!!
                  Отлично! Пожалуйста!
                  С уважением,
                  Цимбалистов Александр
                  Команда российского форума OMNITRACKER
                  http://www.omniway.ru/forum/

                  Комментарий

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