class SalesforceBulkAPINotifier::SalesforceService
Constants
- API_VERSION
Attributes
instance_url[R]
Public Class Methods
new()
click to toggle source
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 6 def initialize con = Faraday.new(url: "https://#{SalesforceBulkAPINotifier.salesforce_host}") do |c| c.adapter :httpclient c.request :json end # https://help.salesforce.com/articleView?id=remoteaccess_oauth_username_password_flow.htm&language=ja&type=0 response = con.post("/services/oauth2/token", { grant_type: :password, username: SalesforceBulkAPINotifier.salesforce_user_id, password: SalesforceBulkAPINotifier.salesforce_password, client_id: SalesforceBulkAPINotifier.salesforce_client_id, client_secret: SalesforceBulkAPINotifier.salesforce_client_secret, format: :json, }) data = JSON.parse(response.body) @access_token = data['access_token'] @instance_url = data['instance_url'] end
Public Instance Methods
annotate(job_info)
click to toggle source
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 78 def annotate(job_info) user_name = get_user_name(job_info['createdById']) error_rate = ((job_info['numberRecordsFailed'].to_f / job_info['numberRecordsProcessed'].to_f) * 100).floor(2) job_status = {success: true, message: "Success", error_rate: error_rate, user_name: user_name} if job_info['state'] == 'Failed' job_status[:success] = false job_status[:message] = "Job state is Failed" elsif error_rate >= SalesforceBulkAPINotifier.error_rate && job_info['state'] == "Closed" job_status[:success] = false job_status[:message] = "Error rate is #{error_rate}%. Error percentage is higher than #{SalesforceBulkAPINotifier.error_rate}%" else end job_status end
get_all_jobs()
click to toggle source
ref. developer.salesforce.com/docs/atlas.ja-jp.api_bulk_v2.meta/api_bulk_v2/get_all_jobs.htm
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 41 def get_all_jobs res = rest_api_client.get("/services/data/v#{API_VERSION}/jobs/ingest") raise res if res.status != 200 data = JSON.parse(res.body) jobs = data['records'] done = data['done'] until done res = rest_api_client.get(data['nextRecordsUrl']) raise res if res.status != 200 data = JSON.parse(res.body) done = data['done'] jobs += data['records'] end jobs end
get_job_info(sf_job_id)
click to toggle source
ref. developer.salesforce.com/docs/atlas.ja-jp.api_bulk_v2.meta/api_bulk_v2/get_job_info.htm
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 59 def get_job_info(sf_job_id) res = rest_api_client.get("/services/data/v#{API_VERSION}/jobs/ingest/#{sf_job_id}") raise res if res.status != 200 JSON.parse(res.body) end
get_user_name(user_id)
click to toggle source
ref. developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_user_password.htm
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 66 def get_user_name(user_id) res = rest_api_client.get("/services/data/v#{API_VERSION}/sobjects/User/#{user_id}") raise res if res.status != 200 JSON.parse(res.body)['Name'] end
rest_api_client()
click to toggle source
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 28 def rest_api_client return nil unless @instance_url && @access_token @rest_api_client ||= Faraday.new(url: @instance_url) do |c| c.adapter :httpclient c.request :json c.headers['Authorization'] = "OAuth #{@access_token}" c.headers['Content-Type'] = 'application/json' c.headers['charset'] = 'UTF-8' end end
screening_by_time(jobs, started_at)
click to toggle source
# File lib/salesforce_bulkapi_notifier/salesforce_service.rb, line 72 def screening_by_time(jobs, started_at) jobs.map do |job| job if job['systemModstamp'].to_datetime >= started_at end.compact end