When making changes to the section list and/or section pages for the mobile app, should I create a new packages or is it ok to leave the current package as "custom" and make the changes via the mobile application wizard?

Like 0

Like

1 comments

Hi!

It is normal to leave the current package as "custom". You can change the package only if you want to keep some functionality in a separate package. 

Best regards, 
Anton

Show all comments

Hello, I would like to get assistance on how to implement the "Account Addresses" detail within contacts section, inside activities for the mobile app. When you view a contact in the mobile app and see their addresses in the "Account addresses" detail you can click the address and it will open the native maps app on your phone so you can get directions. 

 

How do I set this up within the activities section of the mobile app so that if I put in a location, it can be a clickable field similar to Contacts section?

 

Also, is there a way to pull in the contact's address to the activity that can be clicked to open the maps app?

 

Thank you,

 

Eric

Like 2

Like

1 comments

Hello Eric,
Thank you for your question.

Yes, it is possible. For the example, in Configuration menu i added an object (UsrActivityAddress) with a parent object - BaseAddress and a column UsrActivity with data source - Activity, which links UsrActivityAddress with Activity. 

Then go to Mobile application wizard. Here i created a custom workplace and added Activity section to the workplace. In page setup:


Save and go to Configuration. There search you need to search for the name of the detail that mobile wizard provides for the detail on the page you just added. For this search for MobileActivityRecordPageSettings[plus the name of workplace you are adding activity with address to]. In my case it was UsrMobileActivityRecordPageSettingsUsrTestMobile. After that scroll down and find items which represent fields that you added to mobile section page wizard. The name of the detail looks might look like this "UsrSchema302ae53eDetailEmbeddedDetail". Copy the value and go to the top of file.

Then you need to add viewConfigDiff:1
Here you delete those details fields from you mobile page layout and you merge AddressPreview component. If the column name was Address in viewConfigDiff it becomes [name of your detail in mobile wizard]_ItemLayout_[column name]. 

Also note, that this component is not described on the Academy and designed for internal usage thus in not recommended for public usage in current version.

Hope this helps
 

Show all comments

Hello,

 

how is it possible to implement action to create account address by geolocation in mobile app?

 

I see, that Creatio field sales can get location of check-in. So, if we use similar functionality, we have just to find address of these coordinates.

Do you have any idea how to do that?

 

Thank you!

Vladimir

Like 2

Like

4 comments

Hi Vladimir! How are you? It seems you could use for example this service from Google Maps Platform:   https://developers.google.com/maps/documentation/geocoding/requests-rev…

Uriel Nusenbaum,

Thank you for this information. Do you know, does this service require any lincense from Google?

 

Vladimir Sokolov,

You should configure an API Key follow this article: https://developers.google.com/maps/documentation/geocoding/cloud-setup and here you have the pricing information: https://mapsplatform.google.com/pricing/
You have the option to try the service and several requests per month for free.
Regards.
 

Hello Vladimir,
Thank you for your question.

After consulting with R&D team i got some information regarding your case. Mobile phones have build-in API to work with geolocation however currently it is impossible to customize our mobile application directly. Javascript also has some methods to determine user's geolocation like getCoordinates. 
So the possible workaround right now is to create service that will receive coordinates from and send them to an external service like Google Geolocation.

Hope this helps and let me know if you any question left.

Show all comments

Hello friends!

 

We've been working on creating custom branded mobile applications for android and iOS.  Still working on finishing iOS, but Android is done, with the exception of one issue that I cannot resolve.  Everything is branded using our images, with the exception of the launcher icon itself.  I added all of our custom images to the src folder and all of the images in the application were updated as expected (including notification icons). Any icon used for the launcher should be in the "mipmap_xxxx" folders and we have added equivalents in the SDKConsoleUtility/src folder.  We know this is working, since the notification icons are using our custom icons.  As a final attempt, I replaced every instance of a creatio icon image I could find in all of the source repository files and still the launcher icon is the creatio icon.  
 

Has anyone successfully custom branded the mobile app for Android and was able to use a custom application launcher icon?


As a reference, we've been following the academy article here:  Brand and publish mobile apps basics | Creatio Academy

Please let me know what I'm missing.

Thank you!

Jeremy


 

Like 0

Like

3 comments

Hello Jeremy,

To change the launcher icon you have to specify the "app_icon_path" in the SDK.config file from the article that you've mentioned

For example:

"app_icon_path": "../res/AppIcon.png"

Anhelina,

Hi Anhelina

 

The config value "app_icon_path"  is for iOS only, according to the documentation here: SDKConsole utility parameters | Creatio Academy

 

For Android, there is a value for "native_resources_path" that is the path to the src folder with the custom image resources.  This value is set and working as all of other images in the app have been referencing our custom images there. It's just not using our image for the application launcher icon.

 

Any ideas?

 

Jeremy Couzens,

It usually works with native_resources_path for Android. The default folder is res/android/res, and folders with resources should be placed inside, as is done in Android projects. The directory can contain subdirectories with drawable, drawable-xhdpi, and other icons.

Maybe the reason is the file type? You can use the xml and webp
In another case, it's hard to understand the reason remotely.

Show all comments

Hi guys,

 

Is there a way to sort a detail by a specific field in Freedom Mobile? I'm using this approach that works in Classic, but it does not seem to work when I switch to the Freedom version:

 

Terrasoft.sdk.GridPage.setOrderByColumns("Account", {
    column: "CreatedOn",
    orderType: Terrasoft.OrderTypes.DESC
});

 

Thanks!

Like 0

Like

1 comments

Hello,

 

This approach won't work in Freedom UI, this one is for classic UI. Here is the example of the code for ActivityDetailV2EmbeddedDetail out-of-the-box

"ActivityDetailV2EmbeddedDetail": {
                "properties": {"readonly": true},
                "modelConfig": {
                    "path": "ActivityDetailV2EmbeddedDetailDS",
                    "cacheConfig": {},
                    "sortingConfig": {
                        "default": [{
                            "columnName": "CreatedOn",
                            "direction": "asc"
                        }],
                        "name": "Attribute_ActivityDetailV2EmbeddedDetail_SortingConfig"
                    },
                    "name": "Attribute_ActivityDetailV2EmbeddedDetail_ModelConfig"
                },
                "name": "Attribute_ActivityDetailV2EmbeddedDetail"
            },

added to the MobileCaseRecordPageSettings (edit page of the case section in mobile). The code for your detail should be found in the same schema and modified.

Show all comments

Hi team, 

 

I have a case when after trigger record.save() on the page I want to reload the embedded details. The record is saved correctly and entered on the success method. How can force the reload of the store for the detail?

 

Thanks!

Like 0

Like

1 comments

Hello Federico,

 

It should be tested, but if I remember correctly if controller is used for the action the

 

controller.refreshDirtyData();

 

method can be called to force reload all details on the page. You can also find its uage in the MobileActivityGridPageControllerV2 from the Mobile package.

 

There is also an option that our R&D team used, the case was the following: changes were applied on the edit page and data on all previous pages should've been updated. For this purpose the following approach was used:

completeDataSaving: function(operation) {
		let operationConfig = this.createPageOperationConfig(operation);
		return Terrasoft.BaseEditPageController.superclass.completeDataSaving.apply(this, arguments).then(() => {
			let pageHistoryItem = this.getPageHistoryItem();
			let useOptimisticEditing = this.useOptimisticEditing();
			if (useOptimisticEditing) {
				Terrasoft.PageNavigator.refreshPreviousPages(operationConfig, pageHistoryItem);
			} else {
				Terrasoft.PageNavigator.markPreviousPagesAsDirty(operationConfig);
			}
			this.doAfterSaving(operationConfig);
		});
	}

But this is more for the previous edit pages rather than for the current edit page. Examples of Terrasoft.PageNavigator.refreshPreviousPages() can be found in base-edit-page-controller.js and in the base-preview-page-controller.js

Show all comments

Hi there - I'm trying to figure out where to put this schema in Creatio configuration to allow for a button in mobile.  I've found this article but it isn't clear how/where to apply this:

 

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/mobile-development/customization/freedom-ui/customize-page/references/common-components

 

Thank you!

Like 0

Like

2 comments

Hi!

Please contact our support team at support@creatio.com and describe your situation to us. We will be happy to help you. 

Best regards,
Anton

Hello,

In this article, you can find the description of the page, on which the button component should be added.

Show all comments

Hello, 



I am trying to filter lookup values in the mobile application based on two columns "UsrStartDate" and "UsrEndDate". These two columns are present in the lookup object. But somehow the rule is not working. Any Comments?

Terrasoft.sdk.Model.addBusinessRule("UsrDisplayImages",
	{
		ruleType:Terrasoft.RuleTypes.Filtration,
		events:	
			[
				Terrasoft.BusinessRuleEvents.Load,
				Terrasoft.BusinessRuleEvents.Insert,
				Terrasoft.BusinessRuleEvents.ValueChanged
			],
		triggeredByColumns:["UsrCurrent_Program"],
		filters:Ext.create("Terrasoft.Filter",
			{
				modelName:"UsrDisplay_img_CurrentProgram",
				property:"UsrEndDate",
				comparisonOperation:Terrasoft.ComparisonTypes.GreaterOrEqual,
				value: new Date() // current date	
			})
	});

this is the rule placed in another module : "UsrMobileFilterModelConfig"

Also attaching the code of manifest file 

{
  "SyncOptions": {
    "SysSettingsImportConfig": [],
    "ModelDataImportConfig": [
      {
        "Name": "UsrDisplayImages",
        "SyncColumns": [
          "UsrName",
          "UsrSales_Rep_Name",
          "UsrCurrent_Program",
          "UsrIncentive",
          "UsrComments",
          "UsrBrand",
          "UsrSpiff_Month",
          "UsrColumn3",
          "UsrCustomer_Name_text",
          "UsrPreview",
          "UsrNewSpiffMonth",
          "UsrAmount",
          "UsrCases_Shipped",
          "UsrCases1_Displayed",
          "UsrSales_Rep",
          "UsrColumn11",
          "UsrCustomer_Name"
        ]
      },
      {
        "Name": "Employee",
        "SyncColumns": [
          "Manager"
        ]
      },
      {
        "Name": "UsrDisplay_img_CurrentProgram",
        "SyncColumns": [],
        "Ignore": false,
        "QueryFilter": {
          "items": {
            "dab489b7-06c4-4f1a-b588-0fe00e965bf7": {
              "filterType": 1,
              "comparisonType": 8,
              "isEnabled": true,
              "trimDateTimeParameterToDate": true,
              "leftExpression": {
                "expressionType": 0,
                "columnPath": "UsrEndDate"
              },
              "isAggregative": false,
              "dataValueType": 8,
              "rightExpression": {
                "expressionType": 1,
                "functionType": 1,
                "macrosType": 4
              }
            },
            "5c38cd37-a1bd-49bb-9cd8-2f11e8b7fbee": {
              "filterType": 1,
              "comparisonType": 6,
              "isEnabled": true,
              "trimDateTimeParameterToDate": true,
              "leftExpression": {
                "expressionType": 0,
                "columnPath": "UsrStartDate"
              },
              "isAggregative": false,
              "dataValueType": 8,
              "rightExpression": {
                "expressionType": 1,
                "functionType": 1,
                "macrosType": 4
              }
            }
          },
          "logicalOperation": 0,
          "isEnabled": false,
          "filterType": 6,
          "rootSchemaName": "UsrDisplay_img_CurrentProgram"
        },
        "SyncFilter": null
      },
      {
        "Name": "UsrDisplay_img_yes_no_lookup",
        "SyncColumns": []
      },
      {
        "Name": "UsrDisplay_Img_Spiff_Month",
        "SyncColumns": []
      },
      {
        "Name": "Contact",
        "SyncColumns": []
      },
      {
        "Name": "SocialMessage",
        "SyncColumns": [
          "EntityId"
        ]
      },
      {
        "Name": "SysFile",
        "SyncColumns": [
          "RecordId",
          "Name",
          "Type",
          "Data",
          "Size",
          "RecordSchemaName"
        ],
        "QueryFilter": {
          "items": {
            "DesignerDefaultRecordSchemaNameFilter": {
              "filterType": 4,
              "comparisonType": 3,
              "isEnabled": true,
              "trimDateTimeParameterToDate": false,
              "leftExpression": {
                "expressionType": 0,
                "columnPath": "RecordSchemaName"
              },
              "rightExpressions": [
                {
                  "expressionType": 2,
                  "parameter": {
                    "dataValueType": 1,
                    "value": "UsrDisplayImages"
                  }
                }
              ]
            }
          },
          "logicalOperation": 0,
          "isEnabled": true,
          "filterType": 6
        }
      },
      {
        "Name": "FileGroup",
        "SyncColumns": []
      },
      {
        "Name": "UsrDisplay_Image_Status",
        "SyncColumns": []
      },
      {
        "Name": "UsrBrand",
        "SyncColumns": []
      },
      {
        "Name": "Account",
        "SyncColumns": []
      }
    ]
  },
  "Modules": {
    "UsrDisplayImages": {
      "Group": "main",
      "Model": "UsrDisplayImages",
      "Position": 0,
      "isStartPage": false,
      "Title": "UsrDisplayImagesSectionTitle",
      "Hidden": false,
      "screens": {
        "start": {
          "schemaName": "UsrMobileUsrDisplayImagesGridPageSettingsDefaultWorkplace"
        },
        "edit": {
          "schemaName": "UsrMobileUsrDisplayImagesRecordPageSettingsDefaultWorkplace"
        }
      }
    }
  },
  "Models": {
    "UsrDisplayImages": {
      "RequiredModels": [
        "UsrDisplayImages",
        "Employee",
        "UsrDisplay_img_CurrentProgram",
        "UsrDisplay_img_yes_no_lookup",
        "UsrDisplay_Img_Spiff_Month",
        "Contact",
        "SocialMessage",
        "SysFile",
        "FileGroup",
        "UsrDisplay_Image_Status",
        "UsrBrand",
        "Account"
      ],
      "ModelExtensions": [],
      "PagesExtensions": [
        "UsrMobileUsrDisplayImagesActionsSettingsDefaultWorkplace",
        "UsrMobileUsrDisplayImagesGridPageSettingsDefaultWorkplace",
        "UsrMobileUsrDisplayImagesRecordPageSettingsDefaultWorkplace",
        "UsrMobileFilterModelConfig"
      ]
    },
    "SocialMessage": {
      "RequiredModels": [],
      "ModelExtensions": [],
      "PagesExtensions": []
    },
    "SysFile": {
      "RequiredModels": [],
      "ModelExtensions": [],
      "PagesExtensions": []
    }
  },
  "ModuleGroups": {
    "main": {}
  },
  "UseUTC": true,
  "Remove": {
    "SyncOptions": {
      "ModelDataImportConfig": [
        {
          "Name": "UsrDisplay_img_CurrentProgram",
          "QueryFilter": null
        }
      ]
    }
  }
}

 

Like 0

Like

1 comments

Hello,

Are these rules configured on a Classic or a Freedom UI page?

If it's a Freedom UI then these types of rules won't work, see this discussion.

Show all comments

Hello,

 

is it possible to log calls from mobile application? When I click on the 'call' icon and dealer is started with selected number, I need to create a record, that call was done from the mobile

 

Thank you!

Vladimir

Like 0

Like

1 comments

Hello Vladimir,



There is no such option for now.

However, we've registered it in our R&D team backlog for consideration and implementation in future application releases.

 

Thank you for helping us to improve our product.

Show all comments

Hello Community,

 

We are currently working on a custom button for contact edit page in mobile application which will reload the page and shows a popup . We have an issue with the reload. I have tried using this.reloadEntity and location.reload. But it is navigating to the list page and the popup is not showing. Can anyone please help me on this.

 

Regards,

Pavan Manne.

Like 1

Like

1 comments

Hello Pavan,

 

I guess you need to use refreshDirtyData method as described here. location.reload should reload the mobile app completely and you will be redirected either to the start page with the list of sections or to the section list of your current record and this.reloadEntity cannot be used in mobile app, it's only for desktop app.

Show all comments