Class: SalesforceBulkApi::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/salesforce_bulk_api/connection.rb

Constant Summary collapse

@@XML_HEADER =
'<?xml version="1.0" encoding="utf-8" ?>'
@@API_VERSION =
nil
@@LOGIN_HOST =
'login.salesforce.com'
@@INSTANCE_HOST =

Gets set in login()

nil

Instance Method Summary collapse

Constructor Details

#initialize(api_version, client) ⇒ Connection

Returns a new instance of Connection.



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/salesforce_bulk_api/connection.rb', line 11

def initialize(api_version,client)
  @client=client
  @session_id = nil
  @server_url = nil
  @instance = nil
  @@API_VERSION = api_version
  @@LOGIN_PATH = "/services/Soap/u/#{@@API_VERSION}"
  @@PATH_PREFIX = "/services/async/#{@@API_VERSION}/"

  ()
end

Instance Method Details

#get_request(host, path, headers) ⇒ Object



60
61
62
63
64
65
66
67
# File 'lib/salesforce_bulk_api/connection.rb', line 60

def get_request(host, path, headers)
  host = host || @@INSTANCE_HOST
  path = "#{@@PATH_PREFIX}#{path}"
  if host != @@LOGIN_HOST # Not login, need to add session id to header
    headers['X-SFDC-Session'] = @session_id;
  end
  https(host).get(path, headers).body
end

#https(host) ⇒ Object



69
70
71
72
73
74
# File 'lib/salesforce_bulk_api/connection.rb', line 69

def https(host)
  req = Net::HTTP.new(host, 443)
  req.use_ssl = true
  req.verify_mode = OpenSSL::SSL::VERIFY_NONE
  req
end

#loginObject

private



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/salesforce_bulk_api/connection.rb', line 25

def ()
  client_type = @client.class.to_s
  case client_type
  when "Restforce::Data::Client"
    @session_id=@client.options[:oauth_token]
    @server_url=@client.options[:instance_url]
  else
    @session_id=@client.oauth_token
    @server_url=@client.instance_url
  end
  @instance = parse_instance()
  @@INSTANCE_HOST = "#{@instance}.salesforce.com"
end

#parse_instanceObject



76
77
78
79
80
# File 'lib/salesforce_bulk_api/connection.rb', line 76

def parse_instance()
  @instance=@server_url.match(/https:\/\/[a-z]{2}[0-9]{1,2}/).to_s.gsub("https://","")
  @instance = @server_url.split(".salesforce.com")[0].split("://")[1] if @instance.blank?
  return @instance
end

#post_xml(host, path, xml, headers) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/salesforce_bulk_api/connection.rb', line 39

def post_xml(host, path, xml, headers)
  host = host || @@INSTANCE_HOST
  if host != @@LOGIN_HOST # Not login, need to add session id to header
    headers['X-SFDC-Session'] = @session_id;
    path = "#{@@PATH_PREFIX}#{path}"
  end
  i = 0
  begin
    https(host).post(path, xml, headers).body
  rescue
    i += 1
    if i < 3
      puts "Request fail #{i}: Retrying #{path}"
      retry
    else
      puts "FATAL: Request to #{path} failed three times."
      raise
    end
  end
end