使用Python中的特定列字段从ServiceNow中提取更改请求CSV

问题描述

我现在有


import requests
import json
import csv

# Set the request parameters
url= 'dev.service-Now.com/change_request_list.do?CSV&'
user = 'myuser'
pwd = 'mypass'

# Set proper headers (Unsure if this is needed)
headers = {"Accept":"application/json"}

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


with open('out.csv','w') as f:
    writer = csv.writer(f)
    for line in response.iter_lines():
        writer.writerow(line.decode('utf-8').split(','))

这从ServiceNow获取我想要的数据,但是缺少某些字段。我需要“已打开”和“已关闭”列,并且不确定如何使用我的代码进行查询

任何帮助都是完美的!我真的对使用请求很陌生。

解决方法

乍一看,您的代码看起来正确。我认为您只需要更新用于提供List参数的Web服务URL。 IE: sysparm_default_export_fields=all

在那之后,您应该得到一个包含每个字段的响应,包括系统创建的字段,例如sys_id和created_on。另外,您可以在ServiceNow中创建一个新视图,并在URL中提供dev.service-now.com/change_request_list.do?CSV&sysparm_default_export_fields=all参数。

,

这是使用Rest Table API的解决方案,可让您控制要提取的字段。我还添加了sysparm_query来限制行。

import requests
import json
import csv
from urllib.parse import urlencode

url = 'https://dev.service-now.com/api/now/table/change_request'
user = 'myuser'
pwd = 'mypass'

fields = ['number','short_description','opened_at','closed_at']
params = {
    'sysparm_display_value': 'true','sysparm_exclude_reference_link': 'true','sysparm_limit': '5000','sysparm_fields': ','.join(fields),'sysparm_query': 'sys_created_on>2020-09-15'
}
headers = {"Accept":"application/json"}

response = requests.get(url + '?' + urlencode(params),auth=(user,pwd),headers=headers)
response.raise_for_status()
rows = response.json()['result']

with open('out.csv','w') as f:
    writer = csv.writer(f)
    writer.writerow(fields)
    for row in rows:
        outputrow = []
        for field in fields:
                outputrow.append(row[field])
        writer.writerow(outputrow)