Skip to content
This repository has been archived by the owner on Oct 25, 2019. It is now read-only.

Commit

Permalink
Merge pull request #18 from xebialabs-community/mandeep
Browse files Browse the repository at this point in the history
Added ServiceNow timezone for Schedule task
  • Loading branch information
mandeepmehra committed Mar 24, 2017
2 parents a1e3527 + 4527cf7 commit a04370c
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 23 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -10,7 +10,7 @@ deploy:
provider: releases
api_key:
secure: MDy/R3WGvW3rGg9YEEBzGkZtKMK8EEwR/+xoX2ynXrEKGGiXEmCLeJ1i+X5v1N+Wn7y86t9zkwBtMRgWDbHOQMPRv+XcBpJXIKbS+KSkzKbDVEBk9m8Qh8XxhSDUWhjIBiVfUe4/jrEVHE9vIXGFoikLMf9IQyLgeOEkLDLs6ag=
file: build/libs/xlr-servicenow-plugin-4.1.5.jar
file: build/libs/xlr-servicenow-plugin-4.1.6.jar
skip_cleanup: true
on:
all_bracnhes: true
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -19,7 +19,7 @@ apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'maven'

version='4.1.5'
version='4.1.6'

license {
header rootProject.file('src/main/license/xebialabs_community.license')
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/servicenow/ScheduleTask.py
Expand Up @@ -8,10 +8,11 @@
from java.text import ParseException
from java.text import SimpleDateFormat
from sets import Set

from java.util import TimeZone

formatter = SimpleDateFormat( snFormat )
xlrFormat = SimpleDateFormat( xlFormat )
formatter.setTimeZone(TimeZone.getTimeZone(snTimeZone))

startDate = snData[startField]
print "------"
Expand Down
47 changes: 27 additions & 20 deletions src/main/resources/servicenow/ServiceNowClient.py
Expand Up @@ -18,16 +18,11 @@ def __init__(self, httpConnection, username=None, password=None):
self.accessToken = None
self.refreshToken = None
self.httpConnection = httpConnection

self.useOAuth = httpConnection['useOAuth']
if username is not None:
self.httpConnection['username'] = username
if password is not None:
self.httpConnection['password'] = password

if httpConnection['useOAuth'] == True:
tokenData = self.create_token(httpConnection)
self.set_token_header(tokenData)

self.httpRequest = HttpRequest(self.httpConnection, username, password)
self.sysparms = 'sysparm_display_value=%s&sysparm_input_display_value=%s' % (self.httpConnection['sysparmDisplayValue'], self.httpConnection['sysparmInputDisplayValue'])

Expand All @@ -36,28 +31,31 @@ def create_client(httpConnection, username=None, password=None):
return ServiceNowClient(httpConnection, username, password)

def get_change_request_states(self):
if self.useOAuth : self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s?element=state&name=task&sysparm_fields=%s&%s' % ('sys_choice', 'value,label', self.sysparms)
response = self.httpRequest.get(servicenow_api_url, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
return data['result']
self.throw_error(response)

def get_scorecards(self):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/pa/scorecards'
response = self.httpRequest.get(servicenow_api_url, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()
if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
return data['result']
self.throw_error(response)

def get_change_request_with_fields(self, table_name, number, fields):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s?number=%s&sysparm_fields=%s&%s' % (table_name, number, ",".join(fields), self.sysparms)
response = self.httpRequest.get(servicenow_api_url, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
Expand All @@ -66,19 +64,21 @@ def get_change_request_with_fields(self, table_name, number, fields):
self.throw_error(response)

def get_change_request(self, table_name, sysId):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s/%s?%s' % (table_name, sysId, self.sysparms)
response = self.httpRequest.get(servicenow_api_url, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
return data['result']
self.throw_error(response)

def create_record(self, table_name, content):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s?%s' % (table_name, self.sysparms)
response = self.httpRequest.post(servicenow_api_url, body=content, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == RECORD_CREATED_STATUS:
data = json.loads(response.getResponse())
Expand All @@ -90,9 +90,10 @@ def create_record(self, table_name, content):
# End create_record

def update_record(self, table_name, sysId, content):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s/%s?%s' % (table_name, sysId, self.sysparms)
response = self.httpRequest.put(servicenow_api_url, body=content, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
Expand All @@ -104,10 +105,11 @@ def update_record(self, table_name, sysId, content):
# End create_record

def find_record(self, table_name, query):
if self.useOAuth :self.issue_token()
servicenow_api_url = '/api/now/v1/table/%s?%s&%s' % (table_name, query, self.sysparms)
print "Servic Now URL = %s " % (servicenow_api_url)
response = self.httpRequest.get(servicenow_api_url, contentType='application/json', headers = self.headers)
self.revoke_token()
if self.useOAuth :self.revoke_token()

if response.getStatus() == SN_RESULT_STATUS:
data = json.loads(response.getResponse())
Expand Down Expand Up @@ -160,7 +162,7 @@ def print_record(self, myObj, outStr="", prefix="", header=True):

def throw_error(self, response):
print "Error from ServiceNow, HTTP Return: %s\n" % (response.getStatus())
self.revoke_token()
if self.useOAuth :self.revoke_token()
sys.exit(1)

def EmptyToNone(self,value):
Expand All @@ -171,6 +173,11 @@ def EmptyToNone(self,value):
else:
return value

def issue_token(self):
print "Issuing a new token"
tokenData = self.create_token(self.httpConnection)
self.set_token_header(tokenData)

def create_token(self, httpConnection):
servicenow_oauth_url = "/oauth_token.do"
content = {}
Expand Down Expand Up @@ -208,9 +215,9 @@ def set_token_header(self, tokenData):
self.headers['Authorization'] = "Bearer %s" % (self.accessToken)

def revoke_token(self):
if self.httpConnection['useOAuth'] == True :
httpRequest = HttpRequest(self.httpConnection, None, None)
servicenowApiUrl = "/oauth_revoke_token.do?token=%s" % self.accessToken
response = httpRequest.get(servicenowApiUrl)
servicenowApiUrl = "/oauth_revoke_token.do?token=%s" % self.refreshToken
response = httpRequest.get(servicenowApiUrl)
print "Revoking token"
httpRequest = HttpRequest(self.httpConnection, None, None)
servicenowApiUrl = "/oauth_revoke_token.do?token=%s" % self.accessToken
response = httpRequest.get(servicenowApiUrl)
servicenowApiUrl = "/oauth_revoke_token.do?token=%s" % self.refreshToken
response = httpRequest.get(servicenowApiUrl)
1 change: 1 addition & 0 deletions src/main/resources/synthetic.xml
Expand Up @@ -257,6 +257,7 @@
<property name="targetPhase" category="input" label="Phase to start release window" required="true" />
<property name="targetTask" category="input" label="Task to start release window" required="true" />
<property name="snFormat" category="input" label="ServiceNow date format" default="yyyy-MM-dd HH:mm:ss" />
<property name="snTimeZone" category="input" label="ServiceNow TimeZone" default="GMT" required="true" />
<property name="xlFormat" category="input" label="XLR date format" default="yyyy-MM-dd'T'HH:mm:ss'Z'" />
<property name="snData" category="input" label="Service Now Data Key-Value Map" kind="map_string_string" required="true" />
</type>
Expand Down

0 comments on commit a04370c

Please sign in to comment.