Skip to content

Group Push

Example of Equipment Objects: We have put some notes to explain each of sections and the usage in the projection model.

You can take this as a sample and start working on the model in your app. This model also available in the TstObjectOffline app and all db objects are deployed to all environments. So you can have a look.

Sample User case for Equipment Objects with Group Push

Group Push Group Push

  1. User Filter - You can define multiple user filters targeting different user mapping. Below example defines User mapping based on User Allowed Site table. USER <-> CONTRACT
  2. User Filter View - This is the base view for the user filter. In this example this is a view based on user allowed sites table and additional JOIN. This is a view because then application have flexibility to define the logic by JOINING multiple tables. This view should have columns which identifies the user and also filter columns which will map to the base sync table ‘Equipment Object’. Note1 User Filter View has a limitation on a number of rows returned per user. Allowed combinations of filter column values for a user are converted to SQL condition, which is limited to 4000 charactes. So, for examnple, instead of all sites returned for IFSAPP user, the view should returned one row with null value for site column. This limitation will be weakened to 32K when IFS switches to 32K VARCHAR2 type in database. To work around this problem, a user that is allowed to see almost all, but not all, sites, may be assigned a special permission set filter rather than User Filter. Note2: This user filters can be a draw back if we see different combinations for different users. So assumption is users have limited groups where we run few unique SQLs and share data between users.
  3. User Id column - Column name of the user identifier (Identity of the FND_USER). In this example it’s userid.
  4. User Filter columns - We can define multiple filter columns. Filter column is an existing column in the user filter view above and then later it will map to the sync entity (EQ OBJECT).
  5. User Filter column -We have single filter column which is CONTARCT in this example.
  6. User Filter column condition - This is optional condition you can supply to the filter logic to override the behaviour. For example in this test case we want to send all data to IFSAPP. So here we are adding ‘*’ to allow IFSAPP to access all sites.
  7. User Filter trigger - You can define multiple triggers for user filter. So when ever trigger data changed, GP functionality collect data based on the user filter and send Updates to devices.
  8. Grouped Push Entity - This is the grouped push entity ‘Equipment Objects’
  9. Ignore Guard condition and Ownership Query - Time being please keep empty Guard and ownership query. This will be removed.
  10. Apply user filter - You can apply one user filter per GP entity. GP functionality will use this to filter data for individual users.
  11. Langue dependent - This means user will get data based on their lng code defined in the fnd user properties as well. This is only required if the data is lng dependent. Otherwise you skip this and FW will user either GP User lng code or system defaults.
  12. Base View - This is optional base view where you want a different view than the entity’s base view. In this example we used public view because we wanted to avoid session user filter in the base view. If you use base view in this example, the you need to grant all sites allowed for all engineers to the GP user (one GP user will be created per application).
  13. Default Where - You can add optional where condition. In this example we only wanted to consider specific companies because they are the only companies we wanted to consider for all users. This will common for all users. So this can be a another view or sub select in mWo where you defined mobile enabled sites/companies in configurable way.
  14. Change Detection - Each GP entity require a mandatory change detection section where you define the trigger columns.
  15. Trigger - You can have multiple Triggers for the entity. This tells FW to react on any changes in the trigger table columns. In this example we use table trigger for Equipment Objects.
  16. Trigger Columns - Also you will need to define all columns you want to send back to the device when changes are happened

Change Detection Block

  • trigger on Entity - Define the trigger based on the Entity Table Tst_User_Info_Tab.
  • trigger on Reference - Define the trigger based on reference table Tst_Company_Tab.
    • targettable - Define the target table of the reference table
    • mapping - Mapping between reference trigger table and the target entity table
    • arguments - Define mapping arguments in the mapping SQL.
  • guardfunction - Guard Function Reference which can be used to stop unnecessary change trigger checks
changedetection {  
      trigger on Tst_User_Info_Tab {  
         attributes {  
            attribute      Identity;  
            attribute      Name;  
            attribute      Male;  
            attribute      Valid;  
            attribute      Modified;  
            attribute      Timestamp;  
            attribute      Priority;  
            attribute      Salary;  
            attribute      Address;  
            attribute      Address2 {  
               tablecolumns Address_2;  
            attribute      AddressType;  
            attribute      Picture;  
            attribute      Description;  
            attribute      Company;  
            attribute      CompanyName {  
               tablecolumns Company;  
            attribute      FullAddress {  
               tablecolumns AddressType, Address, Address_2;  
            attribute      Vip;  
         objkey Objkey;  
         guardfunction MyGuardFunction(Priority);  

      trigger on Tst_Company_Tab {  
         attributes {  
            attribute CompanyName {  
               tablecolumns Name;  
         targettable Tst_User_Info_Tab;  
         mapping "SELECT objkey FROM tst_user_info WHERE company = :Company AND Name = :Name";  
         arguments {  
            Company, Name  
         guardfunction CompanyGuardFunction(CompanyName);