ServiceNow — Как использовать SOAP для загрузки отчетов

Мне нужно автоматизировать загрузку отчетов из serviceNow.

Мне удалось автоматизировать это с помощью python, selenium и win32com следующим способом.
https://test.service-now.com/sys_report_template.do?CSV&jvar_report_id=92a....7aa

И с помощью selenium получить доступ к serviceNow, а также изменить firefox параметр загрузки по умолчанию, чтобы выгрузить файл в папку на windows машине.

Однако, поскольку все это может быть перенесено на сервер linux, мы хотели бы перенести его на SOAP или CURL.

Я наткнулся на serviceNow библиотек для python здесь.

Я попробовал это, и следующий код работает, если я установил логин, пароль и имя экземпляра, как указано на сайте, используя следующее из ServiceNow.py

class Change(Base):
    __table__ = 'change_request.do'

и следуйте скрипту на стороне клиента, как указано на сайте.

# Fetch changes updated on the last 5 minutes
changes = chg.last_updated(minutes=5)
#print changes client side script.

for eachline in changes:
    print eachline

Однако, когда я заменяю URL на sys_report_template.do, я получаю сообщение об ошибке

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\SOAPpy\Parser.py", line 1080, in _parseSOAP
    parser.parse(inpsrc)
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "C:\Python27\Lib\xml\sax\xmlreader.py", line 125, in parse
    self.close()
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 220, in close
    self.feed("", isFinal = 1)
  File "C:\Python27\Lib\xml\sax\expatreader.py", line 214, in feed
    self._err_handler.fatalError(exc)
  File "C:\Python27\Lib\xml\sax\handler.py", line 38, in fatalError
    raise exception
SAXParseException: <unknown>:1:0: no element found

Вот соответствующий код

from servicenow import ServiceNow
from servicenow import Connection
from servicenow.drivers import SOAP

# For SOAP connection
conn = SOAP.Auth(username='abc', password='def', instance='test')

rpt  = ServiceNow.Base(conn)
rpt.__table__ = "sys_report_template.do?CSV"

#jvar_report_id replaced with .... to protect confidentiality
report = rpt.fetch_one({'jvar_report_id': '92a6760a......aas'})

for eachline in report:
    print eachline

Итак, мой вопрос, что можно сделать, чтобы заставить эту работу? Я искал в Интернете ресурсы и помощь, но ничего не нашел.

Любая помощь приветствуется.


person Anil_M    schedule 11.05.2016    source источник


Ответы (2)


После долгих исследований я смог использовать следующий метод, чтобы получить отчет в формате csv из servicenow. Я думал, что опубликую здесь, если кто-то еще столкнется с подобной проблемой.

import requests
import json

# Set the request parameters
url= 'https://myinstance.service-now.com/sys_report_template.do?CSV&jvar_report_id=929xxxxxxxxxxxxxxxxxxxx0c755'
user = 'my_username'
pwd = 'my_password'

# Set proper headers
headers = {"Accept":"application/json"}

# Do the HTTP request
response = requests.get(url, auth=(user, pwd), headers=headers )
response.raise_for_status()
print response.text

response.text теперь есть отчет в формате csv.
Далее мне нужно выяснить, как проанализировать объект response, чтобы извлечь csv данные в правильном формате.
Когда закончу, я опубликую здесь. Но пока это отвечает на мой вопрос.

person Anil_M    schedule 15.05.2016

Я попробовал это, и он работает, как и ожидалось. `импортировать запросы импортировать json

url= 'https://myinstance.service-now.com/sys_report_template.do?CSV&jvar_report_id=929xxxxxxxxxxxxxxxxxxxxxx0c755' user = 'my_username' pwd = 'my_password'

ответ = запросы.получить (url, auth = (пользователь, pwd), заголовки = заголовки)

имя_файла = "abc.csv"

с open(file_name, 'wb') as out_file: out_file.write(response.content) del response`

person Ankur    schedule 25.12.2018