class UseSalesforceDataLoader
@see developer.salesforce.com/docs/atlas.en-us.dataLoader.meta/dataLoader/loader_params.htm Standard file layout (allow different layout):
-
conf_dir/
-
key.txt
-
process-conf.xml
-
map.sdl
-
Constants
- BASE_ENTRIES
@note internal use ref. developer.salesforce.com/docs/atlas.en-us.dataLoader.meta/dataLoader/loader_params.htm
- ENTRIES_XML_TEMPLATE
@note internal use
- PROCESS_XML_TEMPLATE
@note internal use
- VERSION
Attributes
@return [String] @see PROCESS_XML_TEMPLATE
@return [String] @see PROCESS_XML_TEMPLATE
@return [String] path of conf_key_file. @see conf_dir=
@return [String] path of conf_map_file
@see conf_dir=
@return [String] path of conf_process_xml_file
@see conf_dir=
Set/get sfdc.endpoint
in XML config. @return [String] @example
dataloader.endpoint = 'https://' + 'test.salesforce.com'
@return [String] @see BASE_ENTRIES
Set/get sfdc.password
in XML config. @return [String] @example
dataloader.password = '0123456789'
@return [String] @see PROCESS_XML_TEMPLATE
Set/get sfdc.username
in XML config. @return [String] @example
dataloader.usrname = 'foo@example.com'
Public Class Methods
@param jar [String] path of dataloader-NN.N.N-uber.jar. @param java [String] path of java runtime. @param java_opt [String] command line option for java runtime. @example
UseSalesforceDataLoader.new('/usr/lib/dataloader-42.0.0-uber.jar', '/usr/bin/java', '-Dfile.encoding=UTF-8')
# File lib/use_salesforce_dataloader.rb, line 80 def initialize(jar, java = nil, java_opt = nil, dataloader_major_version: 42) @dataloader_major_version = dataloader_major_version java = exec_command('which java') unless java path_check(java) path_check(jar) j = [java, java_opt, '-cp', jar].compact.join(' ') @encrypt = "#{j} com.salesforce.dataloader.security.EncryptionUtil" @process = "#{j} -Dsalesforce.config.dir='%s' com.salesforce.dataloader.process.ProcessRunner process.name='%s'" end
Public Instance Methods
Setter for @conf_dir
, set values @conf_key_file
, @conf_process_xml_file
and @conf_map_file
at the same time.
# File lib/use_salesforce_dataloader.rb, line 14 def conf_dir=(path) @conf_dir = path @conf_key_file = @conf_dir + '/key.txt' @conf_map_file = @conf_dir + '/map.sdl' @conf_process_xml_file = @conf_dir + '/process-conf.xml' @conf_dir end
Generate XML config @return [String] xml config
# File lib/use_salesforce_dataloader.rb, line 134 def conf_process_xml entries = BASE_ENTRIES.merge(default_overwrite_entries) entries.merge!(@overwrite_entries) if @overwrite_entries entries_xml = entries .select{|k, v| v} .map{|k, v| ENTRIES_XML_TEMPLATE % [k, v.to_s.encode(xml: :text)]} .join .chomp PROCESS_XML_TEMPLATE % [@bean_id.to_s.encode(xml: :text), @bean_description.to_s.encode(xml: :text), @property_name.to_s.encode(xml: :text), entries_xml] end
internal use @see conf_process_xml
@return [Hash]
# File lib/use_salesforce_dataloader.rb, line 181 def default_overwrite_entries path_check(@conf_key_file) encrypt_password = encrypt("-e '#{@password}' '#{@conf_key_file}'") { 'sfdc.endpoint' => @endpoint, 'sfdc.username' => @username, 'sfdc.password' => encrypt_password, 'process.encryptionKeyFile' => @conf_key_file, 'process.lastRunOutputDirectory' => @conf_dir, 'process.statusOutputDirectory' => @conf_dir, 'process.mappingFile' => @conf_map_file, } end
@note
$ java -cp ./lib/dataloader-43.0.0-uber.jar com.salesforce.dataloader.security.EncryptionUtil Utility to encrypt a string based on a static or a provided key Options (mutually exclusive - use one at a time): -e <plain text> <Path to keyfile> Encrypt a plain text value, keyfile path -d <encryptText> <Path to keyfile> Decrypt an encrypted text back to plain text value using keyfile -k [Path to Keyfile] Generate keyfile with optional keyfile path
$ java -cp ./lib/dataloader-42.0.0-uber.jar com.salesforce.dataloader.security.EncryptionUtil Utility to encrypt a string based on a static or a provided key Options (mutually exclusive - use one at a time): -g <seed text> Generate key based on seed -v <encrypted> <decrypted value> [Path to Key] Validate whether decryption of encrypted value matches the decrypted value, optionally provide key file -e <plain text> [Path to Key] Encrypt a plain text value, optionally provide key file (generate key using option -g)
internal use @param [String] options @return [String]
# File lib/use_salesforce_dataloader.rb, line 169 def encrypt(options) cmd = if @dataloader_major_version < 43 "#{@encrypt} #{options} | sed 's/^.*) \- //g'" else "#{@encrypt} #{options} | tail -1" end exec_command(cmd) end
@note
Original: dataloader/bin/process.sh Usage: dataloader/bin/process.sh [conf-dir] <process-name>
Return command line string for execute dataloader by named process. @param name [String] @return [String] command line
# File lib/use_salesforce_dataloader.rb, line 101 def process_cmd(name) path_check(@conf_dir) path_check(@conf_process_xml_file) @process % [@conf_dir, name] end
Save encrypt key file @see conf_key_file
@return [String] conf_key_file
# File lib/use_salesforce_dataloader.rb, line 110 def save_conf_key_file if @dataloader_major_version < 43 open(@conf_key_file, 'w:UTF-8') do |o| o.print encrypt("-g #{text_seed}") end else encrypt("-k '#{@conf_key_file}'") end @conf_key_file end
Save conf xml file @see conf_process_xml
@return [String] conf_process_xml_file
# File lib/use_salesforce_dataloader.rb, line 124 def save_conf_process_xml_file @conf_process_xml_file.tap do |f| open(f, 'w:UTF-8') do |o| o.print conf_process_xml end end end
Private Instance Methods
internal use @param [String] cmd @return [String] stdout of cmd
# File lib/use_salesforce_dataloader.rb, line 210 def exec_command(cmd) o, e, s = Open3.capture3(cmd) raise "Something wrong" unless e.empty? and s.success? o.chomp end
internal use @return [true, false]
# File lib/use_salesforce_dataloader.rb, line 203 def path_check(f) raise "Path not found: #{f}" unless File.exist?(f) end
interal use @return [String] random seed
# File lib/use_salesforce_dataloader.rb, line 197 def text_seed rand(0xffff_ffff).to_s(16) end