Please help.

I created an object called UsrAppMobNotifications, which includes a Boolean variable UsrBoolRead. In the mobile application version 8.1, I need to set up a business rule so that when a user opens a record of this object, the UsrBoolRead variable becomes true.

 

The code of the mobile app's record page (UsrMobileUsrAppMobNotificationsRecordPageSettingsPortal) doesn't contain any blocks (like handlers).

Question 1: How can I add my own business rule?

Question 2: I tried to create a rule based on examples, but it doesn't work.



My rule^

Terrasoft.sdk.Model.addBusinessRule("UsrAppMobNotifications", {

name: "SetUsrBoolReadTrueRule",

ruleType: Terrasoft.RuleTypes.Custom,

events: [Terrasoft.BusinessRuleEvents.Load],

executeFn: function(model, rule, column, customData, callbackConfig) {

model.set("UsrBoolRead", true);

Ext.callback(callbackConfig.success, callbackConfig.scope);

}

});

Like 0

Like

1 comments

Hello.

Please be advised that adding business rules to a page using the Terrasoft.sdk.Model.addBusinessRule(name, config) method is only supported on the old user interface. Unfortunately, the feature to create business rules on the mobile application is not yet available, as it is currently under development. However, I can assist you in setting up card-level business rules, that might be helpful for you.

At the moment, the difference between the rules on the card and the model is insignificant. Namely, the difference is that the card has Visibility rules that can show or hide card elements. Therefore, let's consider this particular example, and try to hide a column under a condition.

1. Set up the rules in the web.

2. The names of the controls ("Code" and "Element code") must be given according to the names of the columns. That is, if the column is called UsrText, then the control should be called that way (because the names are generated by the web by default):

3. The rule that hides the UsrText field can be configured as follows:

When saving, do not forget to click Save in the card itself.

4. Add a new (or existing) section in the mobile application wizard and configure the card properly.

5. Go to the Configuration (WorkspaceExplorer) and look for the card setup scheme (scheme name format: Mobile[Object name]RecordPageSettings[Workspace name]):

In this case, the object name is Rules.

6. Open this schema. Open its metadata (Actions → Open metadata) and look at its metadata (Metadata (Read-Only) section) and copy its Uid, PackageUid and CreatedInPackageUId.



7. Export the rules configured in step 3.

8. This metadata needs to be slightly adapted to the mobile platform. Open the downloaded metadata file and make the following changes:

а) Change the Uid. You can either generate it or simply change a few digits/characters in the current value. The old UId must be changed throughout the scheme (at least 2).

b) Give a new name to the Addon in Name and A2. The format will be as follows: [Object name]RecordPageSettingsBusinessRule (for example, RulesRecordPageSettingsBusinessRule).

c) Replace all "EntitySchemaManager" with "ClientUnitSchemaManager", if any.

d) In B6, write the PackageUId from step 6.

e) In AD1 and TargetSchemaUId, write the UId from step 6.

f) In A5 we write the CreatedInPackageUId from step 6.

g) Replace all the names of the controls generated on the web with the corresponding column names. You can search for them using the following masks: LookupAttribute_, Input_, ComboBox_.

For example, instead of LookupAttribute_6wy705z, you should use UsrContactType.

h) Save the changes.

9. Import this modified schema. Select the desired package in the Configuration, click "Add" and select the "Import" item in the list (at the moment it is the last in the list).

As a result, in the package in which this section was added in the mobile application wizard, an Addon scheme with rules that are linked to the card configuration scheme in the mobile application should appear.

10. After that, synchronize the mobile app with Creatio and check the rule's operation.

Show all comments

I have a detail in my mobile section that should appear only if type de record is A ! 

How to Hide/Show detail in mobile based on a condition please ?

Like 1

Like

1 comments

This should work for the embedded detail. You need to create a custom business rule to check the condition and then use something like:

var view = this.getView();
        var panel = view.getPanel();
        var type = record.get("UsrDriverCheckType");
        var isNeededType = (type && type.getId() === "079acedd-585f-4a0e-aff0-eb419ec09925");
        var panelItems = panel.getItems();
        for (var i = 0, ln = panelItems.getCount(); i < ln; i++) {
            var item = panelItems.items[i];
            if (item.getName() === "UsrSchema11DetailEmbeddedDetail") {
                var isItemHidden = item.getHidden();
                if (type && isNeededType) {
                    if (!isItemHidden) {
                        item.setHidden(true);
                    }
                } else if (type) {
                    if (isItemHidden) {
                        item.setHidden(false);
                    }
                }
            }
        }

This should hide the detail with UsrSchema11DetailEmbeddedDetail name.

Show all comments
mobile application
Mobile_Creatio

I want to get the current day value to compare it to a field ! how can i get it using business rules in mobile ?

Like 0

Like

1 comments

Hello,

 

You need to use a custom business rule (like described  in the Academy article here), get column value using record.get() method and then compare it to the instance of the Date like it's done in JS (using getDate(), getMonth() etc. methods).

Show all comments
mobile
Usage
statistics
Mobile_Creatio
8.0

Hello Creatio-Community,

do you know where to find the results from the system setting "Enable gathering mobile application usage statistics" (CollectMobileAppUsageStatistics)? I have not been able to find a lookup or something similar.

Like 0

Like

1 comments

Hello,

 

It should be saved locally on the mobile device you are using.

 

Best regards,

Yuliya.

Show all comments

Hello,



I am trying to sort list in Mobile.



I was able to sort Detail List, the list located in Section > Related/History Tab, but the sorting algo won't take effect in the Section List and Embedded Detail.



Here's my other post: https://community.creatio.com/questions/mobile-list-sorting

 

What am I missing here? Is sorting only available for Related/History Tab detail list?

Like 0

Like

2 comments

Update:



I was able to make it worked but only for Classic Mobile UI.



I need something like Terrasoft.sdk.RecordPage.configureEmbeddedDetail that will work for Freedom UI in mobile.

Hello Solem Khan,

1. Prepare JSON sorting config:

"sortingConfig": {
    "default": [
         {"columnName": "Name", "direction": "desc"}
     ],
}

2. Prepare diff for viewModelConfig. Actually, add sortingConfig to viewModelConfig → attributes → Items → modelConfig.

[
 {
  "operation":"insert",
  "name":"Attribute_Items_SortingConfig",
  "parentName":"Attribute_Items_ModelConfig",
  "propertyName":"sortingConfig",
  "values":{
   "default":[
    {
     "columnName":"Name",
     "direction":"desc"
    }
    ]
  }
 }
]

3. Add this diff to scheme. For instance, open scheme MobileFUIUsrSectionGridPageSettingsDefaultWorkplace and add diff to section with name = "settings" in block values (in “stringified” format):

"viewModelConfigDiff": "[{\"operation\":\"insert\",\"name\":\"Attribute_Items_SortingConfig\",\"parentName\":\"Attribute_Items_ModelConfig\",\"propertyName\":\"sortingConfig\",\"values\":{\"default\":[{\"columnName\":\"Name\",\"direction\":\"desc\"}]}}]"

If it’s needed to sort by several columns, set configs in “default“ property like this:

"viewModelConfigDiff": "[{\"operation\":\"merge\",\"name\":\"Attribute_ContactCareerDetailV2EmbeddedDetail_SortingConfig\",\"values\":{\"default\":[{\"columnName\":\"StartDate\",\"direction\":\"desc\"},{\"columnName\":\"Primary\",\"direction\":\"desc\"}]}}]"

Best regards, Anhelina!

Show all comments
Mobile_Creatio

Sorting in setup for mobile do not reflect in actual.



Here's what I did:

//New Module UsrMobileActivityModuleConfig :
Terrasoft.sdk.GridPage.setOrderByColumns("Activity", {
	column: "StartDate",
	orderType: Terrasoft.OrderTypes.DESC
});

//MobileApplicationManifestDefaultWorkplace > Models :
"Activity": {
			"RequiredModels": [
				"Activity",
				"ActivityPriority",
				"ActivityType",
				"ActivityCategory",
				"ActivityStatus",
				"CallDirection",
				"ActivityFile",
				"FileGroup",
				"ActivityParticipant",
				"Contact",
				"ActivityParticipantRole"
			],
			"ModelExtensions": [],
			"PagesExtensions": [
				"MobileActivityRecordPageSettingsDefaultWorkplace",
				"UsrMobileActivityModuleConfig"
			]
		},

//MobileApplicationManifestDefaultWorkplace > ModelDataImportConfig:
{
				"Name": "Activity",
				"SyncColumns": [
					"Account",
					"Opportunity",
					"StartDate"
				]
},

 

Like 0

Like

6 comments

Hi Solem,

 

I've created the very same rule and test it at the moment and sorting is ascending (tested descending first and then tried ascending and it worked in both cases):

 

--Rule

--Result

If you perform this setup locally try recycle the application pool in IIS and relogin to the mobile application.

Oleg Drobina,



I am installing the maintenance tool to try clearing redis and restarting app_pool.



Can you show me the config for the sort in your module? Not sure if I missed something.

Solem Khan Abdusalam,

 

It's absolutely same as in your example. The code is in my previous messge, here is the text (module name - UsrMobileActivityModuleConfig):

Terrasoft.sdk.GridPage.setOrderByColumns("Activity", {
	column: "StartDate",
	orderType: Terrasoft.OrderTypes.ASC
});

Added into PagesExtension for Activity model:

"Models": {
		"Activity": {
			"RequiredModels": [
				"Activity",
				"ActivityPriority",
				"ActivityType",
				"ActivityCategory",
				"ActivityStatus",
				"CallDirection",
				"SocialMessage",
				"SysFile",
				"FileGroup"
			],
			"ModelExtensions": [],
			"PagesExtensions": [
				"UsrMobileActivityActionsSettingsUsrForTest",
				"UsrMobileActivityGridPageSettingsUsrForTest",
				"UsrMobileActivityRecordPageSettingsUsrForTest",
				"UsrMobileActivityModuleConfig"
			]
		},

After relogin it worked correctly.

Oleg Drobina,



Made a trial account. Tried doing it there and it is not working.

Installed Maintenance tool to clear redis cache and restart app_pool, still not working. This is weird.

Oleg Drobina,



I was able to sort it, Yehey!



Problem is it only worked for Classic View, we are using Mobile Freedom UI where the following is not working:

 

Terrasoft.sdk.GridPage.setOrderByColumns
Terrasoft.sdk.RecordPage.configureEmbeddedDetail

Do you have any idea how to sort in Freedom UI for Mobile?

Solem Khn,

Hi,

 

Are you able to fix your issue in Freedom UI?

Show all comments
mobile application
Mobile_Creatio

I want to remove the ability to add new records in lookup in mobile .

How can i hide the "+" button ?

Like 0

Like

1 comments

Hello,

Could you please clarify where exactly you want to hide "+" sign, because I can't find such in any of basic lookups. Add a screenshot if possible.

Thank you in advance!

Show all comments
Mobile app
Mobile_Creatio

I am trying to get the current user role in mobile but it is not working !

 

Terrasoft.sdk.Model.addBusinessRule("Activity", {

  name: "GetRoleFromtheUser",

  ruleType: Terrasoft.RuleTypes.Custom,

  triggeredByColumns: ["UsrVisitType","UsrTypeDeVisiteManager"],

  events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],

  executeFn: function(record, rule, column, customData, callbackConfig) {



    var myrecord = record; 

    var currentUser =Terrasoft.CurrentUserInfo.userId;

    var store = Ext.create('Terrasoft.store.BaseStore', {

      model: 'SMVwUserRoles'

    });

    var queryConfig = Ext.create('Terrasoft.QueryConfig', {

      columns: ['SMId', 'SMUserName', 'SMRoleName'],

      modelName: 'SMVwUserRoles'

    });

    store.loadPage(1, {

      queryConfig: queryConfig,

 

      filters: Ext.create('Terrasoft.Filter', {

        property: 'SMId',

        value: currentUser

      }),

      callback: function(records, operation, success) {

        var loadedRecord = records[0];

        if (loadedRecord) {

          var role = loadedRecord.get('SMRoleName');                                                                                                    

          if (role=='Sales Management') {                                                                                                                   

            record.changeProperty("UsrVisitType", {

                 hidden: true,

              readOnly: true

               });

          }else{

            record.changeProperty("UsrTypeDeVisiteManager", {

                 hidden: true

               });

          }

          }

        },

      });



Ext.callback(callbackConfig.success, callbackConfig.scope, [hidden,readOnly]); 

  }

});

Any idea please ?

Like 1

Like

1 comments

Hello!

You’re thinking in a right way and I would recommend you to change the logic of getting the role a bit. I tested this code on basic table SysAdminUnitInRole where we have a column SysAdminUnitRoleId

var currentUser =Terrasoft.CurrentUserInfo.userId;
var store = Ext.create('Terrasoft.store.BaseStore', {
  model: 'SysAdminUnitInRole'
});
var queryConfig = Ext.create('Terrasoft.QueryConfig', {
  columns: ['SysAdminUnitRoleId'],
  modelName: 'SysAdminUnitInRole'
}); 

Variable records structure looks like this:

 

And each class contains SysAdminUnitRoleId:

 

I used ID from loadedRecord.get('SysAdminUnitRoleId') and it works for me to see the role. You can do it in two ways:

  1. Create a loop for each “records” element and check if SysAdminUnitRoleId is equal to the user's current role id
  2. If you want to use “role=='Sales Management'” you can create a new object to display extensions of ID and role names.

P.S. Check if you added models to MobileApplicationManifestDefaultWorkplace:

"Models": { 
			"Activity": {
			"RequiredModels": ["SysAdminUnitInRole"],
			"ModelExtensions": ["UsrActivityModel"],
			"PagesExtensions": []
		}
	},

 

Show all comments

Hi Community,

 

What is the correct syntax to add multiple or array of filter to store.loadPage in mobile. We've tried below but it is not working.

Like 0

Like

1 comments

Hello Fulgen,

 

Something like that:

...
var filtersConfig = {
				type: Terrasoft.FilterTypes.Group,
				logicalOperation: Terrasoft.FilterLogicalOperations.And,
				subfilters: [
					{
						property: "Order",
						value: currentOrderId
					},
					{
						property: "Product",
						value: productId
					}
				]
			};
...
store.loadPage(1, {
			isCancelable: true,
			filters: Ext.create("Terrasoft.Filter", filtersConfig),
			queryConfig: queryConfig,
			callback: function(loadedRecords, operation, success) {
...

 

Show all comments

I have been trying to remove the preview page from mobile app.

When I select on record i want to go directly to edit page and not preview page.

I tried to add this code to my Manifest, but it did not work:

Like 0

Like

4 comments

Hello,

 

8.0 interface account page has no preview page and edit page is opened automatically for it. So there is no need to remove preview page from this model.

Oleg Drobina

Hello,

then what is the solution ?

There is solution for this with the old versions?

Hello. I found a solution. You need to extend the grid controller and replace the openpreview to this:

That will open directly the edit page.

Show all comments