6

Is it possible to get a value from the environment variables defined at local.properties configuration file and access it via the impex file?

Ex.

$someMacro=<some variable from config>

Thank you!

Sanchit Khera
  • 1,005
  • 1
  • 16
  • 47
user1865775
  • 183
  • 1
  • 9

2 Answers2

13

You can add this to your impex:

# Import config properties into impex macros
UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true]

All your configurations from local.properties, etc. are now loaded and can be used via $config- prefix, say for example:

local.properties

your.config.property=322

So your impex would look something like:

# Import config properties into impex macros
UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true]

$variable=$config-your.config.property

INSERT_UPDATE SampleItem;code[unique=true];name
;sample1;$variable

# OR you can just directly use the config macro
INSERT_UPDATE SampleItem;code[unique=true];name
;sample1;$config-your.config.property

Hope this works for you.

EDIT: Please also note that if there was no such property found, the value stored on the sample above shall be exactly: $config-your.config.property.

Atsusa Kai
  • 146
  • 1
  • 4
1

To complete @Atsusa Kai answer, the line with a header alone can be avoided.

It's quite ugly to have this line just to load the properties... but that's actually what is mentionned in the ConfigPropertyImportProcessor class comment :

  /**
   * Impex ImportProcessor that injects all config properties as impex definitions.
   * All defined configuration properties are added as impex macro definitions with
   * the prefix of "config-". For example the config key <tt>mail.smtp.server</tt>
   * can be accessed via the macro <tt>$config-mail.smtp.server</tt>.
   * In order to use this import processor and to load the configuration properties
   * the following must be added to the top of the impex file:
   *
   * <tt>UPDATE GenericItem[processor=de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor];pk[unique=true]</tt>
   */

The alternative is to used a beanshell command that are tailored for this kind of action.

You can replace the UPDATE GenericItem line by

#%new de.hybris.platform.commerceservices.impex.impl.ConfigPropertyImportProcessor().init(impex)

but you need to enable code execution.

Community
  • 1
  • 1
alain.janinm
  • 19,951
  • 10
  • 65
  • 112