I Appendix: Configurator Auto-Populator

With release v22.0, the xcenter-spring-beans.xml has been removed (not deprecated). The Xadmin UI is now the one stop solution to configure broadcasters, integrations, Merchandise Hierarchy levels as well as Brazil and Italy country configurations for both cloud and on-premise solutions.

In order to facilitate a seamless upgrade for on-premise customers, Xadmin has been equipped with the config-auto-populator, a built-in tool to auto-populate the configurations from the xcenter-spring-beans.xml on Xadmin startup. It is expected that the retailer would continue to have the old xcenter-spring-beans.xml in the external configuration location along with a merged copy of xcenter.properties for this to work.

To merge xcenter.properties, locate the following commented out section at the very end of the xcenter.properties file for release v22. Follow its instructions to uncomment and copy values of all properties that are present in the old xcenter.properties file from a prior release.

#####-------------------------------------------------------------------
##### Auto Populate (Xoffice on premise only)
#####-------------------------------------------------------------------
## Starting from V22, xcenter-spring-beans.xml in external configuration 
## directory is removed. Configurations for broadcasters, integrations, and 
## merchandise hierarchy levels are stored in database and managed through 
## Xadmin UI. 
## To facilitate seamless upgrade, Xadmin provides "auto populate" feature.
## If xcenter-spring-beans.xml from a prior release is present in external 
## configuration directory, Xadmin automatically converts its XML based 
## configurations into database configurations for V22 during its start up 
## time.
## For auto populate to work, if any of the following properties are present 
## in prior release, uncomment and copy their values here for auto populate 
## to consume.

#cloud.sftp.host=localhost
#cloud.sftp.username=encrypted username
#cloud.sftp.password=encrypted password
#cloud.sftp.locate.workingDir=locate
#cloud.sftp.relate.workingDir=relate

#cloud.fts.relate.endpointUrl=localhost
#cloud.fts.relate.workingDir=relate

#cloud.http.locate.endpoint=https://HOST:PORT/Locate/faws/FileService/OROB-IMPORTS
#cloud.http.locate.timeout.connect=30
#cloud.http.locate.timeout.read=30
#cloud.http.locate.compress=true
#cloud.http.locate.oauth2=false
#cloud.http.locate.username=encrypted username
#cloud.http.locate.password=encrypted password

#avatax.config.orgCompanyIds = 1000:2729114,2000:2729115
#avatax.connectionURL=https://localhost:443
#avatax.connection.servicePath.prefix=/api/v2/content/data/companies
#avatax.ping.servicePath.prefix=/api/v2/utilities/ping
#avatax.connection.username=encrypted username
#avatax.connection.password=encrypted password
#avatax.config.download_time=IMMEDIATE
#avatax.config.accountId=2001508678
#avatax.config.getDelta=true

#ocds.orgChainIds=1000:1
#ocds.connectionURL=https://localhost:443
#ocds.connection.servicePath.prefix=/ords/ocds/omnichannel
#ocds.connection.username=encrypted username
#ocds.connection.password=encrypted password
#ocds.retainJobHistory=90
#ocds.offset=30
#ocds.request.limit=-1
#ocds.retailLocation.tillAccountability=false
#ocds.retailLocation.locale=en_US
#ocds.taxGroupIdForNonTaxable=0
#ocds.includeFutureDate=false
#ocds.vatRoundingCode=HALF_UP
#ocds.vatRoundingDigits=2
#ocds.vatRoundingAtTransLevel=true
#ocds.orgHierarchyActive=true
#ocds.retailLocationActive=true
#ocds.merchHierarchyActive=true
#ocds.dimensionTypeActive=true
#ocds.dimensionValueActive=true
#ocds.itemActive=true
#ocds.enterpriseItemActive=true
#ocds.relatedItemActive=true
#ocds.enterpriseItemLocActive=true
#ocds.itemLocActive=true
#ocds.itemUpcActive=true
#ocds.priceActive=true
#ocds.regularPriceChangeActive=true
#ocds.clearancePriceChangeActive=true
#ocds.promotionActive=true
#ocds.vatActive=true
#####-------------------------------------------------------------------
##### End of Auto Populate 
#####-------------------------------------------------------------------

On startup, the Xadmin Quartz scheduler now runs an AutoPopulateJob with no repeat interval. It auto populates only if there is an xcenter-spring-beans.xml file in the external configuration location and if there are no existing broadcasters, integrations, Merchandise Hierarchy Levels and Brazil/Italy country configurations in the database. It only runs for an on-premise solution. This job reads the spring bean definition from the Xml as an XmlDocument and uses XPath picks in the afore-mentioned configurations to generate SQLs and persist them into the corresponding database tables.

The configuration XML bean elements and attributes are mapped to the database tables and columns as follows:

Broadcasters

Broadcasters are configured in the "broadcasterManager" bean in the xcenter-spring-beans.xml file on a per organization basis. Each broadcaster bean referenced in the manager's "broadcasterList" property is mapped to a record in the cfg_broadcaster table with the bean's constructor-arg "orgId" and "broadcasterServiceId" serving as the record's primary keys. Any filters or modifiers specified in the broadcaster are mapped to records in the table cfg_broadcaster_filters and cfg_broadcaster_mods.

Note:

For Relate broadcaster of class "com.micros_retail.xcenter.broadcast.relate.RelateBroadcaster", its filters are ignored and not auto populated, because this broadcaster has built-in filters.

All broadcasters are initially populated as disabled. Manual enablement of broadcasters through the Broadcaster Management UI in Xstore Office is required.

Following is an example of broadcaster - postTransactionRelate_1

Bean Attribute/constructor-args/property Database Table Database Column Value if specific

postTransactionRelate_1

broadcasterServiceId

CFG_BROADCASTER

SERVICE_ID

NA

postTransactionRelate_1

orgId

CFG_BROADCASTER

ORGANIZATION_ID

NA

postTransactionRelate_1

class

CFG_BROADCASTER

TYPE

RELATE

postTransactionRelate_1_jaxws

endpointAddress

CFG_BROADCASTER

ENDPOINT_URL

NA

postTransactionRelate_1

retrySleepMillis

CFG_BROADCASTER

RETRY_SLEEP_MILLIS

NA

postTransactionRelate_1

workQueueBatchReadSize

CFG_BROADCASTER

BATCH_SIZE

NA

postTransactionRelate_1

pollingIntervalMillis

CFG_BROADCASTER

POLLING_INT_MILLIS

NA

postTransactionRelate_1

threadCount

CFG_BROADCASTER

THREAD_COUNT

NA

broadcasterBuilder

constructor-arg 1

CFG_BROADCASTER

CONNECT_TIMEOUT

NA

broadcasterBuilder

constructor-arg 3

CFG_BROADCASTER

REQUEST_TIMEOUT

NA

broadcasterBuilder

constructor-arg 6

CFG_BROADCASTER

USE_COMPRESSION_FLAG

NA
NA NA

CFG_BROADCASTER

ENABLED

false

NA NA

CFG_BROADCASTER

AUTH_MODE

ORCE_CUSTOM

NA NA

CFG_BROADCASTER

USER_NAME

NA
NA NA

CFG_BROADCASTER

PASSWORD

NA

removePCIData

NA

CFG_BROADCASTER_MODS

NA NA

Integrations

Integration jobs are configured in the "jobsList" bean referenced by the "jobDetails" property of the "xcenterJobScheduler" bean in the xcenter-spring-beans.xml file. With the exceptions of NFE and Italy Invoice export, which are discussed in the Country Pack Configurations section, integration jobs are mapped to records in the cfg_integration and cfg_integration_p tables.

  • Locate, Avalara, and attachment integration jobs are configured in the xcenter-spring-beans.xml file on a per org basis. An integration job is mapped to a record in the cfg_integration table for the org specified in its integration task property "organizationId".  

  • An OCDS scheduled or on-demand integration job configured in the xcenter-spring-bean.xml file is mapped to one or multiple records in the cfg_integration table, one for each organization specified in the "ocds.orgChainIds" property in the xcenter.properties file. In the following example, two cfg_integration records are created for an OCDS job, one for organization 1000 and another one for organization 2000.

    #####-------------------------------------------------------------------
    ##### ocds.orgChainIds is a comma separated Xstore organization and OCDS 
    ##### chain mappings. For example, the following maps organization 1000 
    ##### to chain 1, and organization 2000 to chain 2. 
    #####-------------------------------------------------------------------
    ocds.orgChainIds=1000:1,2000:2

  • A Relate integration job configured in the xcenter-spring-bean.xml file is mapped to one or multiple records in the cfg_integration table, one for each organization specified in the Xcenter table com_external_system_map for external system ORCE. In the following example, two cfg_integration records are created for a Relate job, one for organization 1000 and another one for organization 2000.
    Example cfg_integration records for Relate job.

All integrations are initially populated as disabled. Manual enablement of integrations through the Integration Management UI in Xstore Office is required.

Following is an example of Integration - Relate

Bean/Table  Attribute/constructor-args/property/column Xcenter Property Database table Database Column Value if specific

Bean relateFilePollFTSTask

NA NA

CFG_INTEGRATION

INTEGRATION_SYSTEM

ORCE

Bean relateFilePollFTSTask

NA NA

CFG_INTEGRATION

IMPLEMENTATION_TYPE

CLOUD

Bean relateFilePollFTSTask

NA NA

CFG_INTEGRATION

INTEGRATION_TYPE

REST

Bean relateFilePollFTSTask

NA NA

CFG_INTEGRATION

AUTH_MODE

OAUTH2

Table com_external_system_map

Column organization_id 

NA

CFG_INTEGRATION

ORGANIZATION_ID

NA

Table com_external_system_map

Column system_cd 

NA

CFG_INTEGRATION_P

STRING_VALUE for PROPERTY_CODE ORG_CODE

NA
NA NA

cloud.fts.relate.endpointUrl

CFG_INTEGRATION_P

STRING_VALUE for PROPERTY_CODE ENDPOINT_URL

NA
NA NA

cloud.fts.relate.workingDir

CFG_INTEGRATION_P

STRING_VALUE for PROPERTY_CODE WORKINGDIR

NA

Bean relateFilePollFTSTrigger

Property repeatInterval

NA

CFG_INTEGRATION_P

STRING_VALUE for PROPERTY_CODE FILE_POLL_DELAY 

NA

Country Pack Configurations

There are two country pack integration jobs configured in the xcenter-spring-beans.xml file: NFE and Italy Invoice export. Although they can be configured in the xml on an organization specific basis, they are mapped to Xadmin system settings in table cfg_system_setting which is not organization specific. This means once auto populated in v22, NFE or Italy invoice is either enabled for all organizations or none, and the integration start time is the same across organizations. If different start times are specified in the xcenter-spring-beans.xml file across different organizations, the last one overrides all previous ones in the Xadmin Settings.

All country pack integrations are initially populated as disabled. Manual enablement of integrations through Xadmin Settings in the Xstore Office UI is required.

Bean Attribute/constructor-args/property Database table Database column Value Comments

italyInvoiceExportDataTask

NA

CFG_SYSTEM_SETTING

CONFIG_ID

ItalyInvoiceExportEnabled

value is false

italyInvoiceExportDataTrigger

cronExpression

CFG_SYSTEM_SETTING

CONFIG_ID

ItalyInvoiceExportJobStartTime

NA

nfePushDataTask

NA

CFG_SYSTEM_SETTING

CONFIG_ID

BrNFEExportEnabled

value is false

nfePushDataTrigger

cronExpression

CFG_SYSTEM_SETTING

CONFIG_ID

BrNFEExportJobStartTime

NA

Merchandise Hierarchy Levels

The Merchandise Hierarchy Level table itm_merch_hierarchy_levels was introduced in v22. In prior releases, custom merchandise levels are configured in the xcenter-spring-beans.xml file as "merchandiseHierarchyInfo" bean. The configuration is not organization specific, so there can only be one version of merchandise levels defined across multiple organizations. Once auto populated in v22, custom merchandise levels are created in table itm_merch_hierarchy_levels for each organization defined in the system.

If no custom merchandise levels are specified in the xcenter-spring-beans.xml file, built-in default merch levels DEPARTMENT/SUBDEPARTM/CLASS/SUBCLASS are populated in table itm_merch_hierarchy_levels for each organization.

If no custom merch levels are specified in the xcenter-spring-beans.xml file, built-in default merch levels DEPARTMENT/SUBDEPARTM/CLASS/SUBCLASS are populated in table itm_merch_hierarchy_levels for each organization.

Bean Attribute/constructor-args/property Database table Database column

merchandiseHierarchyInfo

level1Code

ITEM_MERCH_HIERARCHY_LEVELS

LEVEL_CODE

merchandiseHierarchyInfo

level2Code

ITEM_MERCH_HIERARCHY_LEVELS

LEVEL_CODE

merchandiseHierarchyInfo

level3Code

ITEM_MERCH_HIERARCHY_LEVELS

LEVEL_CODE

merchandiseHierarchyInfo

level4Code

ITEM_MERCH_HIERARCHY_LEVELS

LEVEL_CODE