class RsServiceNow::Record
Public Class Methods
new(user, password, instance, proxy = nil)
click to toggle source
# File lib/rs_service_now/record.rb, line 7 def initialize user, password, instance, proxy = nil @user = user @password = password @url = "https://#{instance}.service-now.com" @proxy = proxy end
Public Instance Methods
_export(table, encoded_query, max_export)
click to toggle source
# File lib/rs_service_now/record.rb, line 35 def _export table, encoded_query, max_export client = setup_client table get_keys_result = get_keys(client, encoded_query) num_entries = get_keys_result[:count].to_i keys = get_keys_result[:sys_id].split(/,/) index = 0 export = [] while index < num_entries # Use a URL to retrieve an XML export as documented at http://wiki.servicenow.com/index.php?title=Exporting_Data xml = open("#{@url}/#{table}.do?XML&" + "sysparm_order_by=sys_id&" + "sysparm_query=#{CGI.escape(encoded_query + '^')}" + "sys_id#{CGI.escape('>=') + keys[index]}&" + "sysparm_record_count=#{max_export}", :http_basic_authentication => [@user, @password] ).read records = Hash.from_xml(xml)["xml"][table] if records.is_a? Array export.push *records else export.push records end index = index + max_export end export end
_get(table, sys_id)
click to toggle source
# File lib/rs_service_now/record.rb, line 71 def _get table, sys_id client = setup_client table response = client.call(:get, :message => {:sys_id => sys_id}) response.hash[:envelope][:body][:get_response] end
_insert(table, parameters)
click to toggle source
# File lib/rs_service_now/record.rb, line 89 def _insert table, parameters client = setup_client table response = client.call(:insert, :message => parameters) response.hash[:envelope][:body][:insert_response][:sys_id] end
_request(table, encoded_query)
click to toggle source
# File lib/rs_service_now/record.rb, line 14 def _request table, encoded_query client = setup_client table num_entries = get_keys(client, encoded_query)[:count].to_i index = 0 result = [] while index < num_entries response = client.call(:get_records, :message => {:__encoded_query => encoded_query, :__first_row => index, :__last_row => (index + 250)}) index = index + 250 records = response.hash[:envelope][:body][:get_records_response][:get_records_result] if records.is_a? Array result.push *records else result.push records end end result end
_update(table, parameters)
click to toggle source
# File lib/rs_service_now/record.rb, line 95 def _update table, parameters if parameters[:sys_id].nil? raise "You must supply the sys_id of the record to update" end client = setup_client table client.call(:update, :message => parameters) end
get_keys(client, encoded_query)
click to toggle source
# File lib/rs_service_now/record.rb, line 66 def get_keys client, encoded_query response = client.call(:get_keys, :message => {:__encoded_query => encoded_query, :__order_by => "sys_id"}) response.hash[:envelope][:body][:get_keys_response] end
setup_client(table)
click to toggle source
# File lib/rs_service_now/record.rb, line 77 def setup_client table Savon.client do |globals| globals.wsdl "#{@url}/#{table}.do?WSDL" globals.basic_auth [@user, @password] globals.convert_request_keys_to :none globals.namespace_identifier :u if @proxy globals.proxy @proxy end end end