class UseSalesforceDataLoader

@see developer.salesforce.com/docs/atlas.en-us.dataLoader.meta/dataLoader/loader_params.htm Standard file layout (allow different layout):

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

bean_description[RW]

@return [String] @see PROCESS_XML_TEMPLATE

bean_id[RW]

@return [String] @see PROCESS_XML_TEMPLATE

conf_key_file[RW]

@return [String] path of conf_key_file. @see conf_dir=

conf_map_file[RW]

@return [String] path of conf_map_file @see conf_dir=

conf_process_xml_file[RW]

@return [String] path of conf_process_xml_file @see conf_dir=

endpoint[RW]

Set/get sfdc.endpoint in XML config. @return [String] @example

dataloader.endpoint = 'https://' + 'test.salesforce.com'
overwrite_entries[RW]

@return [String] @see BASE_ENTRIES

password[RW]

Set/get sfdc.password in XML config. @return [String] @example

dataloader.password = '0123456789'
property_name[RW]

@return [String] @see PROCESS_XML_TEMPLATE

username[RW]

Set/get sfdc.username in XML config. @return [String] @example

dataloader.usrname = 'foo@example.com'

Public Class Methods

new(jar, java = nil, java_opt = nil, dataloader_major_version: 42) click to toggle source

@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

conf_dir() click to toggle source

@return [String] path of conf_dir @see conf_dir=

# File lib/use_salesforce_dataloader.rb, line 24
def conf_dir
  @conf_dir
end
conf_dir=(path) click to toggle source

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
conf_process_xml() click to toggle source

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
default_overwrite_entries() click to toggle source

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
encrypt(options) click to toggle source

@note

ref. github.com/forcedotcom/dataloader/commit/dda55319ebf741b3fc3e2baf45d49b82e598f2fa#diff-8943e367622f270c051690266c3b9d44

$ 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
process_cmd(name) click to toggle source

@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_conf_key_file() click to toggle source

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_process_xml_file() click to toggle source

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

exec_command(cmd) click to toggle source

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
path_check(f) click to toggle source

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
text_seed() click to toggle source

interal use @return [String] random seed

# File lib/use_salesforce_dataloader.rb, line 197
        def text_seed
  rand(0xffff_ffff).to_s(16)
end