【问题标题】:ServiceNow - How to use SOAP to download reportsServiceNow - 如何使用 SOAP 下载报告
【发布时间】:2016-05-11 15:36:16
【问题描述】:

我需要自动从serviceNow 下载报告。

我已经能够通过以下方法使用 pythonseleniumwin32com 使其自动化。
https://test.service-now.com/sys_report_template.do?CSV&jvar_report_id=92a....7aa

并使用selenium 访问serviceNow 以及修改firefox 默认下载选项以将文件转储到windows 机器上的文件夹中。

但是,由于所有这些都可以移植到linux 服务器,我们希望将其移植到SOAPCURL

我遇到了serviceNowpythonhere 的库。

如果我使用ServiceNow.py 中的以下内容设置站点上列出的登录名、密码和实例名称,我已经尝试过了,以下代码可以正常工作

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

并遵循site 中列出的客户端脚本。

# 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

所以,我的问题是,可以做些什么来完成这项工作? 我在网上寻找资源和帮助,但没有找到。

感谢任何帮助。

【问题讨论】:

    标签: python soap servicenow


    【解决方案1】:

    经过大量研究,我能够使用以下方法从servicenow 获取csv 格式的报告。我想我会在这里发帖以防其他人遇到类似问题。

    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 数据。
    完成后,我会在这里发布。但现在这回答了我的问题。

    【讨论】:

      【解决方案2】:

      我试过了,它按预期工作。 `导入请求 导入json

      url='https://myinstance.service-now.com/sys_report_template.do?CSV&jvar_report_id=929xxxxxxxxxxxxxxxxxxxx0c755' 用户 = '我的用户名' pwd = '我的密码'

      response = requests.get(url, auth=(user, pwd), headers=headers )

      file_name = "abc.csv"

      使用 open(file_name, 'wb') 作为 out_file: out_file.write(response.content) 删除响应`

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多