Retail:Store Server BP Segmentation
Depending on the country and law, it is possible that restrictions apply on what data can be present on a store server. Also in the case of external stores (franchising) there can be restrictions.
Therefore the OB Commerce suite provides advanced logic for sharing business partner/customer data with stores in your organization. This concept is called BP Segmentation.
BP synchronization and segmentation plays a role in 2 distinct moments:
- store server creation
- runtime sync
Runtime sync is relevant when a BP is created through WebPOS. When the store server is offline then the BP can be created in the central server and needs to be synchronized back to the store server (when it gets back).
How business partner are segmentated
Changes done to a business partner will be synchronized to specific stores to which the business partner is linked.
The logic makes a distinction between business partners which are standard store customers. A standard store customer is only synchronized to a store to which it is explicitly linked. A standard store customer is a normal customer. A non-standard customer for example is then a sales representative or the default store customers. So non-standard customers are more for internal WebPOS usage.
Non-standard customers are synchronized to all the stores.
For standard customers there are 2 ways in which a business partner can be explicitly linked to a store:
- through the default store property in the Business Partner window. This field is used for the first store to which a BP is linked.
- defining a store in the 'Business Partner by Server' window. This window/table is used for any subsequent stores (after the first) to which a business partner is linked.
Both the table that stores the business partner-store relation and the flag to determine if a business partner is a standard customer are initialized using the following ant task:
ant -f modules/org.openbravo.retail.storeserver.synchronization/build.xml initialize.bp.segmentation.tables
After this initialization there are so-called event handlers which update the 'standard customer' flag and the default store/BP by server table based on the usage of the Business Partner. For example when an order is created for a business partner in a store, the business partner will be automatically added to the store if it was not already included. If it is the first store then the 'Default Store' property is set, for the relation to the second or third, etc. store the BP by server table is used.
Synchronizing Related Tables
When a business partner is included in a store by adding a row to the Business Partner by Server window, it is required to synchronize to the store the relevant rows of c_bpartner and other tables related to it. The list of tables related with c_bpartner is defined in this window:
This tables, along with c_bpartner, are synchronized to the server by "touching" (updating the updated column to the current timestamp) the relevant rows, so that the changes are detected by SymmetricDS, whose business partner router will now be able to route these data to the proper store, as the router takes into account the Business Partner by Server window.
When entering a new record it is probably easiest to look at an existing example to find how to set the correct values:
- common case: when directly referencing the C_Bpartner table (the most common case) then you can use the C_Bpartner_Location record as an example. The reference type in this case should be: 'References a table related with business partner'
- special case: there is join table which references c_bpartner (or c_bpartner related table) and another table. This is the case for C_Location, it is referenced from C_Bpartner_Location which references also C_Bpartner. For these tables related to the C_Bpartner using a join table the special reference type: 'Referenced by a table related with business partner'