salesforcebulk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. data/.gitignore +4 -0
  2. data/.rbenv-version +1 -0
  3. data/Gemfile +2 -0
  4. data/README.md +143 -0
  5. data/Rakefile +22 -0
  6. data/lib/salesforce_bulk.rb +15 -0
  7. data/lib/salesforce_bulk/batch.rb +50 -0
  8. data/lib/salesforce_bulk/batch_result.rb +39 -0
  9. data/lib/salesforce_bulk/batch_result_collection.rb +29 -0
  10. data/lib/salesforce_bulk/client.rb +254 -0
  11. data/lib/salesforce_bulk/core_extensions/string.rb +14 -0
  12. data/lib/salesforce_bulk/job.rb +70 -0
  13. data/lib/salesforce_bulk/query_result_collection.rb +48 -0
  14. data/lib/salesforce_bulk/salesforce_error.rb +30 -0
  15. data/lib/salesforce_bulk/version.rb +3 -0
  16. data/salesforcebulk.gemspec +28 -0
  17. data/test/fixtures/batch_create_request.csv +3 -0
  18. data/test/fixtures/batch_create_response.xml +13 -0
  19. data/test/fixtures/batch_info_list_response.xml +27 -0
  20. data/test/fixtures/batch_info_response.xml +13 -0
  21. data/test/fixtures/batch_result_list_response.csv +3 -0
  22. data/test/fixtures/config.yml +7 -0
  23. data/test/fixtures/invalid_batch_error.xml +5 -0
  24. data/test/fixtures/invalid_error.xml +5 -0
  25. data/test/fixtures/invalid_job_error.xml +5 -0
  26. data/test/fixtures/invalid_session_error.xml +5 -0
  27. data/test/fixtures/job_abort_request.xml +1 -0
  28. data/test/fixtures/job_abort_response.xml +25 -0
  29. data/test/fixtures/job_close_request.xml +1 -0
  30. data/test/fixtures/job_close_response.xml +25 -0
  31. data/test/fixtures/job_create_request.xml +1 -0
  32. data/test/fixtures/job_create_response.xml +25 -0
  33. data/test/fixtures/job_info_response.xml +25 -0
  34. data/test/fixtures/login_error.xml +1 -0
  35. data/test/fixtures/login_request.xml +1 -0
  36. data/test/fixtures/login_response.xml +39 -0
  37. data/test/fixtures/query_result_list_response.xml +1 -0
  38. data/test/fixtures/query_result_response.csv +5 -0
  39. data/test/lib/test_batch.rb +258 -0
  40. data/test/lib/test_batch_result.rb +40 -0
  41. data/test/lib/test_core_extensions.rb +15 -0
  42. data/test/lib/test_initialization.rb +86 -0
  43. data/test/lib/test_job.rb +256 -0
  44. data/test/lib/test_query_result_collection.rb +87 -0
  45. data/test/test_helper.rb +32 -0
  46. metadata +222 -0
@@ -0,0 +1,14 @@
1
+ class String
2
+ # For converting "true" and "false" string values returned
3
+ # by Salesforce Bulk API in batch results to real booleans.
4
+ def to_b
5
+ if present?
6
+ if lstrip.rstrip.casecmp("true") == 0
7
+ return true
8
+ elsif lstrip.rstrip.casecmp("false") == 0
9
+ return false
10
+ end
11
+ end
12
+ self
13
+ end
14
+ end
@@ -0,0 +1,70 @@
1
+ module SalesforceBulk
2
+ class Job
3
+
4
+ attr_accessor :concurrency_mode
5
+ attr_accessor :external_id_field_name
6
+ attr_accessor :id
7
+ attr_accessor :operation
8
+ attr_accessor :sobject
9
+ attr_accessor :state
10
+ attr_accessor :created_by
11
+ attr_accessor :created_at
12
+ attr_accessor :completed_at
13
+ attr_accessor :content_type
14
+ attr_accessor :queued_batches
15
+ attr_accessor :in_progress_batches
16
+ attr_accessor :completed_batches
17
+ attr_accessor :failed_batches
18
+ attr_accessor :total_batches
19
+ attr_accessor :retries
20
+ attr_accessor :failed_records
21
+ attr_accessor :processed_records
22
+ attr_accessor :apex_processing_time
23
+ attr_accessor :api_active_processing_time
24
+ attr_accessor :total_processing_time
25
+ attr_accessor :api_version
26
+
27
+ def self.new_from_xml(data)
28
+ job = self.new
29
+ job.id = data['id']
30
+ job.operation = data['operation']
31
+ job.sobject = data['object']
32
+ job.created_by = data['createdById']
33
+ job.state = data['state']
34
+ job.created_at = DateTime.parse(data['createdDate'])
35
+ job.completed_at = DateTime.parse(data['systemModstamp'])
36
+ job.external_id_field_name = data['externalIdFieldName']
37
+ job.concurrency_mode = data['concurrencyMode']
38
+ job.content_type = data['contentType']
39
+ job.queued_batches = data['numberBatchesQueued'].to_i
40
+ job.in_progress_batches = data['numberBatchesInProgress'].to_i
41
+ job.completed_batches = data['numberBatchesCompleted'].to_i
42
+ job.failed_batches = data['numberBatchesFailed'].to_i
43
+ job.total_batches = data['totalBatches'].to_i
44
+ job.retries = data['retries'].to_i
45
+ job.processed_records = data['numberRecordsProcessed'].to_i
46
+ job.failed_records = data['numberRecordsFailed'].to_i
47
+ job.total_processing_time = data['totalProcessingTime'].to_i
48
+ job.api_active_processing_time = data['apiActiveProcessingTime'].to_i
49
+ job.apex_processing_time = data['apexProcessingTime'].to_i
50
+ job.api_version = data['apiVersion'].to_i
51
+ job
52
+ end
53
+
54
+ def aborted?
55
+ state? 'Aborted'
56
+ end
57
+
58
+ def closed?
59
+ state? 'Closed'
60
+ end
61
+
62
+ def open?
63
+ state? 'Open'
64
+ end
65
+
66
+ def state?(value)
67
+ self.state.present? && self.state.casecmp(value) == 0
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,48 @@
1
+ module SalesforceBulk
2
+ class QueryResultCollection < Array
3
+
4
+ attr_reader :client
5
+ attr_reader :batch_id
6
+ attr_reader :job_id
7
+ attr_reader :result_id
8
+ attr_reader :result_ids
9
+
10
+ def initialize(client, job_id, batch_id, result_id=nil, result_ids=[])
11
+ @client = client
12
+ @job_id = job_id
13
+ @batch_id = batch_id
14
+ @result_id = result_id
15
+ @result_ids = result_ids
16
+ @current_index = result_ids.index(result_id) || 0
17
+ end
18
+
19
+ def next?
20
+ @result_ids.present? && @current_index < @result_ids.length - 1
21
+ end
22
+
23
+ def next
24
+ if next?
25
+ replace(@client.query_result(job_id, batch_id, result_ids[@current_index + 1]))
26
+ @current_index += 1
27
+ @result_id = @result_ids[@current_index]
28
+ end
29
+
30
+ self
31
+ end
32
+
33
+ def previous?
34
+ @result_ids.present? && @current_index > 0
35
+ end
36
+
37
+ def previous
38
+ if previous?
39
+ replace(@client.query_result(job_id, batch_id, result_ids[@current_index - 1]))
40
+ @current_index -= 1
41
+ @result_id = @result_ids[@current_index]
42
+ end
43
+
44
+ self
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,30 @@
1
+ module SalesforceBulk
2
+ # An exception raised when any non successful request is made through the Salesforce Bulk API.
3
+ class SalesforceError < StandardError
4
+ # The Net::HTTPResponse instance from the API call.
5
+ attr_accessor :response
6
+ # The status code from the server response body.
7
+ attr_accessor :error_code
8
+
9
+ def initialize(response)
10
+ self.response = response
11
+
12
+ data = XmlSimple.xml_in(response.body, 'ForceArray' => false)
13
+
14
+ if data
15
+ # seems responses for CSV requests use a different XML return format
16
+ # (use invalid_error.xml for reference)
17
+ if !data['exceptionMessage'].nil?
18
+ message = data['exceptionMessage']
19
+ else
20
+ # SOAP error response
21
+ message = data['Body']['Fault']['faultstring']
22
+ end
23
+
24
+ self.error_code = response.code
25
+ end
26
+
27
+ super(message)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module SalesforceBulk
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "salesforce_bulk/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "salesforcebulk"
7
+ s.version = SalesforceBulk::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Javier Julio"]
10
+ s.email = ["jjfutbol@gmail.com"]
11
+ s.homepage = "https://github.com/javierjulio/salesforce_bulk"
12
+ s.summary = %q{Ruby support for the Salesforce Bulk API}
13
+ s.description = %q{This gem is a simple interface to the Salesforce Bulk API providing support for insert, update, upsert, delete, and query.}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency "active_support"
21
+ s.add_dependency "xml-simple"
22
+
23
+ s.add_development_dependency "mocha"
24
+ s.add_development_dependency "rake"
25
+ s.add_development_dependency "shoulda"
26
+ s.add_development_dependency "webmock"
27
+
28
+ end
@@ -0,0 +1,3 @@
1
+ Id__c,Title__c,IsPreview__c
2
+ 12345,This is a test video,
3
+ 23456,A second test!,true
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><batchInfo
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>751E00000004ZmUIAU</id>
4
+ <jobId>750E00000004NRfIAM</jobId>
5
+ <state>Queued</state>
6
+ <createdDate>2012-06-02T21:03:56.000Z</createdDate>
7
+ <systemModstamp>2012-06-02T21:03:56.000Z</systemModstamp>
8
+ <numberRecordsProcessed>0</numberRecordsProcessed>
9
+ <numberRecordsFailed>0</numberRecordsFailed>
10
+ <totalProcessingTime>0</totalProcessingTime>
11
+ <apiActiveProcessingTime>0</apiActiveProcessingTime>
12
+ <apexProcessingTime>0</apexProcessingTime>
13
+ </batchInfo>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><batchInfoList
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <batchInfo>
4
+ <id>751E00000004ZRbIAM</id>
5
+ <jobId>750E00000004N97IAE</jobId>
6
+ <state>Completed</state>
7
+ <createdDate>2012-05-31T01:22:47.000Z</createdDate>
8
+ <systemModstamp>2012-05-31T01:22:47.000Z</systemModstamp>
9
+ <numberRecordsProcessed>2</numberRecordsProcessed>
10
+ <numberRecordsFailed>0</numberRecordsFailed>
11
+ <totalProcessingTime>72</totalProcessingTime>
12
+ <apiActiveProcessingTime>28</apiActiveProcessingTime>
13
+ <apexProcessingTime>0</apexProcessingTime>
14
+ </batchInfo>
15
+ <batchInfo>
16
+ <id>751E00000004ZQsIAM</id>
17
+ <jobId>750E00000004N97IAE</jobId>
18
+ <state>Completed</state>
19
+ <createdDate>2012-05-31T01:23:20.000Z</createdDate>
20
+ <systemModstamp>2012-05-31T01:23:20.000Z</systemModstamp>
21
+ <numberRecordsProcessed>2</numberRecordsProcessed>
22
+ <numberRecordsFailed>0</numberRecordsFailed>
23
+ <totalProcessingTime>72</totalProcessingTime>
24
+ <apiActiveProcessingTime>28</apiActiveProcessingTime>
25
+ <apexProcessingTime>0</apexProcessingTime>
26
+ </batchInfo>
27
+ </batchInfoList>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><batchInfo
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>751E00000004ZRbIAM</id>
4
+ <jobId>750E00000004N97IAE</jobId>
5
+ <state>Completed</state>
6
+ <createdDate>2012-05-31T01:22:47.000Z</createdDate>
7
+ <systemModstamp>2012-05-31T01:22:47.000Z</systemModstamp>
8
+ <numberRecordsProcessed>2</numberRecordsProcessed>
9
+ <numberRecordsFailed>0</numberRecordsFailed>
10
+ <totalProcessingTime>72</totalProcessingTime>
11
+ <apiActiveProcessingTime>28</apiActiveProcessingTime>
12
+ <apexProcessingTime>0</apexProcessingTime>
13
+ </batchInfo>
@@ -0,0 +1,3 @@
1
+ "Id","Success","Created","Error"
2
+ "a00E0000002V30LIAS","true","false",""
3
+ "a00E0000002V30MIAS","true","false",""
@@ -0,0 +1,7 @@
1
+ ---
2
+ username: MyUsername
3
+ password: MyPassword
4
+ token: MySecurityToken
5
+ debugging: true
6
+ host: myhost.mydomain.com
7
+ version: 88.0
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <error xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <exceptionCode>InvalidBatch</exceptionCode>
4
+ <exceptionMessage>Records not processed</exceptionMessage>
5
+ </error>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><error
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <exceptionCode>UnsupportedContentType</exceptionCode>
4
+ <exceptionMessage>Unsupported content type: text/cs; charset=UTF-8</exceptionMessage>
5
+ </error>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><error
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <exceptionCode>InvalidJob</exceptionCode>
4
+ <exceptionMessage>Unable to find object: Video__c</exceptionMessage>
5
+ </error>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><error
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <exceptionCode>InvalidSessionId</exceptionCode>
4
+ <exceptionMessage>Invalid session id</exceptionMessage>
5
+ </error>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload"><state>Aborted</state></jobInfo>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><jobInfo
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>750E00000004N1NIAU</id>
4
+ <operation>upsert</operation>
5
+ <object>VideoEvent__c</object>
6
+ <createdById>005E00000017spfIAA</createdById>
7
+ <createdDate>2012-05-30T00:16:04.000Z</createdDate>
8
+ <systemModstamp>2012-05-30T00:16:04.000Z</systemModstamp>
9
+ <state>Aborted</state>
10
+ <externalIdFieldName>Id__c</externalIdFieldName>
11
+ <concurrencyMode>Parallel</concurrencyMode>
12
+ <contentType>CSV</contentType>
13
+ <numberBatchesQueued>0</numberBatchesQueued>
14
+ <numberBatchesInProgress>0</numberBatchesInProgress>
15
+ <numberBatchesCompleted>0</numberBatchesCompleted>
16
+ <numberBatchesFailed>0</numberBatchesFailed>
17
+ <numberBatchesTotal>0</numberBatchesTotal>
18
+ <numberRecordsProcessed>0</numberRecordsProcessed>
19
+ <numberRetries>0</numberRetries>
20
+ <apiVersion>24.0</apiVersion>
21
+ <numberRecordsFailed>0</numberRecordsFailed>
22
+ <totalProcessingTime>0</totalProcessingTime>
23
+ <apiActiveProcessingTime>0</apiActiveProcessingTime>
24
+ <apexProcessingTime>0</apexProcessingTime>
25
+ </jobInfo>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload"><state>Closed</state></jobInfo>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><jobInfo
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>750E00000004MzbIAE</id>
4
+ <operation>upsert</operation>
5
+ <object>VideoEvent__c</object>
6
+ <createdById>005E00000017spfIAA</createdById>
7
+ <createdDate>2012-05-29T23:51:53.000Z</createdDate>
8
+ <systemModstamp>2012-05-29T23:51:53.000Z</systemModstamp>
9
+ <state>Closed</state>
10
+ <externalIdFieldName>Id__c</externalIdFieldName>
11
+ <concurrencyMode>Parallel</concurrencyMode>
12
+ <contentType>CSV</contentType>
13
+ <numberBatchesQueued>0</numberBatchesQueued>
14
+ <numberBatchesInProgress>0</numberBatchesInProgress>
15
+ <numberBatchesCompleted>0</numberBatchesCompleted>
16
+ <numberBatchesFailed>0</numberBatchesFailed>
17
+ <numberBatchesTotal>0</numberBatchesTotal>
18
+ <numberRecordsProcessed>0</numberRecordsProcessed>
19
+ <numberRetries>0</numberRetries>
20
+ <apiVersion>24.0</apiVersion>
21
+ <numberRecordsFailed>0</numberRecordsFailed>
22
+ <totalProcessingTime>0</totalProcessingTime>
23
+ <apiActiveProcessingTime>0</apiActiveProcessingTime>
24
+ <apexProcessingTime>0</apexProcessingTime>
25
+ </jobInfo>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload"><operation>upsert</operation><object>VideoEvent__c</object><externalIdFieldName>Id__c</externalIdFieldName><contentType>CSV</contentType></jobInfo>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>750E00000004MzbIAE</id>
4
+ <operation>upsert</operation>
5
+ <object>VideoEvent__c</object>
6
+ <createdById>005E00000017spfIAA</createdById>
7
+ <createdDate>2012-05-29T21:50:47.000Z</createdDate>
8
+ <systemModstamp>2012-05-29T21:50:47.000Z</systemModstamp>
9
+ <state>Open</state>
10
+ <externalIdFieldName>Id__c</externalIdFieldName>
11
+ <concurrencyMode>Parallel</concurrencyMode>
12
+ <contentType>CSV</contentType>
13
+ <numberBatchesQueued>0</numberBatchesQueued>
14
+ <numberBatchesInProgress>0</numberBatchesInProgress>
15
+ <numberBatchesCompleted>0</numberBatchesCompleted>
16
+ <numberBatchesFailed>0</numberBatchesFailed>
17
+ <numberBatchesTotal>0</numberBatchesTotal>
18
+ <numberRecordsProcessed>0</numberRecordsProcessed>
19
+ <numberRetries>0</numberRetries>
20
+ <apiVersion>24.0</apiVersion>
21
+ <numberRecordsFailed>0</numberRecordsFailed>
22
+ <totalProcessingTime>0</totalProcessingTime>
23
+ <apiActiveProcessingTime>0</apiActiveProcessingTime>
24
+ <apexProcessingTime>0</apexProcessingTime>
25
+ </jobInfo>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><jobInfo
2
+ xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3
+ <id>750E00000004N1mIAE</id>
4
+ <operation>upsert</operation>
5
+ <object>VideoEvent__c</object>
6
+ <createdById>005E00000017spfIAA</createdById>
7
+ <createdDate>2012-05-30T04:08:30.000Z</createdDate>
8
+ <systemModstamp>2012-05-30T04:08:30.000Z</systemModstamp>
9
+ <state>Open</state>
10
+ <externalIdFieldName>Id__c</externalIdFieldName>
11
+ <concurrencyMode>Parallel</concurrencyMode>
12
+ <contentType>CSV</contentType>
13
+ <numberBatchesQueued>0</numberBatchesQueued>
14
+ <numberBatchesInProgress>0</numberBatchesInProgress>
15
+ <numberBatchesCompleted>0</numberBatchesCompleted>
16
+ <numberBatchesFailed>0</numberBatchesFailed>
17
+ <numberBatchesTotal>0</numberBatchesTotal>
18
+ <numberRecordsProcessed>0</numberRecordsProcessed>
19
+ <numberRetries>0</numberRetries>
20
+ <apiVersion>24.0</apiVersion>
21
+ <numberRecordsFailed>0</numberRecordsFailed>
22
+ <totalProcessingTime>0</totalProcessingTime>
23
+ <apiActiveProcessingTime>0</apiActiveProcessingTime>
24
+ <apexProcessingTime>0</apexProcessingTime>
25
+ </jobInfo>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sf="urn:fault.partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode>sf:INVALID_LOGIN</faultcode><faultstring>INVALID_LOGIN: Invalid username, password, security token; or user locked out.</faultstring><detail><sf:LoginFault xsi:type="sf:LoginFault"><sf:exceptionCode>INVALID_LOGIN</sf:exceptionCode><sf:exceptionMessage>Invalid username, password, security token; or user locked out.</sf:exceptionMessage></sf:LoginFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><n1:login xmlns:n1="urn:partner.soap.sforce.com"><n1:username>MyUsername</n1:username><n1:password>MyPasswordMySecurityToken</n1:password></n1:login></env:Body></env:Envelope>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
+ <soapenv:Body>
4
+ <loginResponse>
5
+ <result>
6
+ <metadataServerUrl>https://na9-api.salesforce.com/services/Soap/m/24.0/00DE0000000YSKp</metadataServerUrl>
7
+ <passwordExpired>false</passwordExpired>
8
+ <sandbox>false</sandbox>
9
+ <serverUrl>https://na9-api.salesforce.com/services/Soap/u/24.0/00DE0000000YSKp</serverUrl>
10
+ <sessionId>00DE0000000YSKp!AQ4AQNQhDKLMORZx2NwZppuKfure.ChCmdI3S35PPxpNA5MHb3ZVxhYd5STM3euVJTI5.39s.jOBT.3mKdZ3BWFDdIrddS8O</sessionId>
11
+ <userId>005E00000017spfIAA</userId>
12
+ <userInfo>
13
+ <accessibilityMode>false</accessibilityMode>
14
+ <currencySymbol>$</currencySymbol>
15
+ <orgAttachmentFileSizeLimit>5242880</orgAttachmentFileSizeLimit>
16
+ <orgDefaultCurrencyIsoCode>USD</orgDefaultCurrencyIsoCode>
17
+ <orgDisallowHtmlAttachments>false</orgDisallowHtmlAttachments>
18
+ <orgHasPersonAccounts>false</orgHasPersonAccounts>
19
+ <organizationId>00DE0000000YSKpMAO</organizationId>
20
+ <organizationMultiCurrency>false</organizationMultiCurrency>
21
+ <organizationName>Gmail</organizationName>
22
+ <profileId>00eE0000000oANhIAM</profileId>
23
+ <roleId xsi:nil="true" />
24
+ <sessionSecondsValid>7200</sessionSecondsValid>
25
+ <userDefaultCurrencyIsoCode xsi:nil="true" />
26
+ <userEmail>jjfutbol@gmail.com</userEmail>
27
+ <userFullName>Javier Julio</userFullName>
28
+ <userId>005E00000017spfIAA</userId>
29
+ <userLanguage>en_US</userLanguage>
30
+ <userLocale>en_US</userLocale>
31
+ <userName>jjfutbol@gmail.com</userName>
32
+ <userTimeZone>America/Panama</userTimeZone>
33
+ <userType>Standard</userType>
34
+ <userUiSkin>Theme3</userUiSkin>
35
+ </userInfo>
36
+ </result>
37
+ </loginResponse>
38
+ </soapenv:Body>
39
+ </soapenv:Envelope>