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

Hello,
I have some questions about lists in Creatio Freedom UI.

1. Is there any way to make a field read-only on a list while allowing it to be edited from the form page? I tried to use object-level business rules, but I couldn't disable the field only on the list. Fields are not available in the page-level business object on the list view.
2. Is it possible to add a custom validation for some fields on the list?
3. Is it possible to handle every field change, like on a form page? Some of my fields are being calculated live on the form page, using `crt.HandleViewModelAttributeChangeRequest`. I'd like to do the same on the list page or at least make those fields read-only on the list page.
4. I found a crt.SaveRecordsRequest request during debugging that allows me to review user changes before saving. But when I try to open a mini page using request.$context.executeRequest, nothing happens.
5/ Do you know of any more helpful requests related to lists? I found some more, like `crt.SaveDataRequest`, but it seems to have a restricted scope, so I can't add my own handler for it.
 

Like 1

Like

2 comments

Hey,
1.Yes you can deselect the inline editing of records option in the designer page for the detail.
2.Yes it is possible through code - but can you pls elaborate on what you mean by custom?
3.No you can't do the live calculation on the list page

Hello Eryk,
Thank you for your question!

Regarding your forth question. The following code should work
handler implementation code
Note that you also need to add @creatio-devkit/common library to your module dependencies as well as pass parameter it's function.
import deps and pass parameter to function
You can find some examples of how to open a page in custom handler here.

Regarding you fifth question. Could you please clarify and provide example on how you are implementing your logic? 
 

Show all comments

We run code on our leads page that when the page is saved with required fields that aren't populated we have pop-ups to prompt the user to collect the data in sequence. The sequence in which these pop-ups happen appears to be based on the business rules of the page... How do we update the order of the business rules (to force an order update of which fields get marked as required, and in turn the pop-up sequence)?

 

Thank you for any insight.

Like 1

Like

1 comments

Good day!

Would it be possible for You to provide us with the code You are attempting to run along with the screenshots of the pop-ups that You end up seeing?

Show all comments

Hello, We've followed the steps here https://academy.creatio.com/docs/8.x/no-code-customization/customizatio… to create a Freedom UI page for an existing object (Leads) and can view the Freedom UI in the web interface, however we do not see the option to enable the Freedom UI for this section in the Mobile Application Wizard. There should be a checkbox next to the Leads section to enable the freedom UI but we do not see it. How do we do this?

 

Thank you,


Eric

Like 0

Like

3 comments

Good afternoon!
 

To do this, you need to enable the "UseMobileFlutterFirst" feature here:

https://mywebsite.creatio.com/0/flags


image.png

Regards,
Anton

Hi Anton, thank you for the reply. I enabled "UseMobileFlutterFirst" as you described but I still do not see the checkbox to enable freedomUI in the mobile app wizard for our leads section. Is there anything else I need to do?

 

Also, it looks like you posted an image but it didn't load for me in case that included an additional step.

 

Eric

Eric Curran,

Please contact technical support at support@creatio.com

Show all comments

I am applying a complex filter to a page using the "Apply filter by page data" option.  I set up two parameter filters, but they are logically connected by an AND condition.  Is there a way to construct these filters allowing for complex structures?

Like 2

Like

3 comments

Hello!
Please provide examples of how you implement filters.

In the List Settings below, I need the results from more than one filter condition, more than just Account.ID=Opportunity.Account. 

Adding a second filter is possible, but the two filters are intrinsically connected by an AND operator, and there is no obvious way to specify a complex filter here.

John DeFayette,


Hello,

At the moment, it is not possible to set up such filtering. 

We have informed the development team about this need and registered an idea for such an improvement, so this feature may be available in the future.

Thank you for helping to make our product better.

Best regards,
Pavlo

Show all comments

Hi team,
I need assistance with hiding the 'Run Process' button and customizing the 'New' button on the desktop page. Thanks in advance for your help.

Regards,
Mahalaxmi Ganesan

Like 0

Like

2 comments

Hi Mahalaxmi

 

You can hide the 'Run Process' button by using this marketplace addon: https://marketplace.creatio.com/app/experceo-ui-wizard-creatio

After installing the Addon, go to Lookups -> ExpUIWizard Configurations and enable the 'Hide Run Process' Configuration.

 

Thank you

Mohamed

Hi Mohamed Ouederni,


Thanks for the reply, this works fine, but is it possible to make it user specific?

Regards,
Mahalaxmi Ganesan

Show all comments

Hello!

On a page, I want to be able to create a pop-up after a certain action, and also, after completing another separate action, to refresh the page. I have 2 business processes, which post the messages using Script Tasks

First Business process:
var userConnection = Get("UserConnection");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection,"PopupReturnedMailSent", "Mail has been sent to client!");
return true;

Second Business process:
var userConnection = Get("UserConnection");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection,"RefreshPage","");
return true;

In my client module, I wrote the following code:
init: function() {
    this.callParent(arguments);

    Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.onServerMessageReceived, this);
    this.subscribeForWebsocketEvents();
},

onServerMessageReceived: function(scope, message) {
    var sender = message && message.Header.Sender;

    if (sender === "PopupReturnedFlowApiError") {
        Terrasoft.showInformation("An error occured. Please retry."); //Opportunity Inactive
    }

    if (sender === "RefreshPage") {
        this.reloadEntity();
    }
},

destroy: function() {
    Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.onServerMessageReceived, this);
    this.unsubscribeForWebsocketEvents(); 
    
    this.callParent(arguments);
},

subscribeForWebsocketEvents: function() {                 
    this.Terrasoft.ServerChannel.on(this.Terrasoft.EventName.ON_MESSAGE,                     
                                    this.onWebsocketMessage, this);             
},             
unsubscribeForWebsocketEvents: function() {                 
    this.Terrasoft.ServerChannel.un(this.Terrasoft.EventName.ON_MESSAGE,                     
                                    this.onWebsocketMessage, this);             
}

I get the following error in the console:


The functionality is still working, but I get these errors in console. I noticed that the Refresh sender doesn't need subscribeForWebsocketEvents and unsubscribeForWebsocketEvents functions, but I think these are needed for the pop-up sender.
 

Like 0

Like

2 comments

In the subscribeForWebsocketEvents and unSubscribeForWebsocketEvents you're referencing a function named onWebsocketMessage but your actual function is named onServerMessageReceived.

That is the cause of the error. Update those functions to use onServerMessageReceived.

Ryan

Good morning Ryan Farley,

 

Thank you, I thought onWebsocketMessage is a core function that must be called for pop-up, but it works without it, as you said :)

 

Final code:

init: function() {
	this.callParent(arguments);
	// register our function to receive messages
	Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.onServerMessageReceived, this);
},
 
onServerMessageReceived: function(scope, message) {
	var sender = message && message.Header.Sender;
 
	if (sender === "PopupReturnedFlowApiError") {
		Terrasoft.showInformation("An error occured. Please retry.");
	}
 
	if (sender === "RefreshPage") {
		this.reloadEntity();
	}
},
 
destroy: function() {
	// unregister so we no longer get messages
	Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.onServerMessageReceived, this);
	this.callParent(arguments);
},
Show all comments

Is it possible to trigger the Freedom UI Live Data Refresh mechanism (LiveEditing feature) for a specific record from C# code? We have a C# process that is updating data directly in the database for performance reasons, but in certain circumstances we may want to trigger the Live Data Refresh of the record(s). Is this possible in any way? Or do we have to implement a workaround by refreshing from JS code when we think we may have to (so would be over-refreshing and not using the Live Data refresh mechanism).

Like 0

Like

1 comments
Best reply

You can see how that feature works by looking at the "LiveEditingBaseEntityEventListener" source code schema. In initial versions you could see they were just using MsgChannelUtilities.PostMessage and the message name, but in 8.1.2 that has been abstracted away. Still you could execute the same way as implemented in that schema.

Ryan

You can see how that feature works by looking at the "LiveEditingBaseEntityEventListener" source code schema. In initial versions you could see they were just using MsgChannelUtilities.PostMessage and the message name, but in 8.1.2 that has been abstracted away. Still you could execute the same way as implemented in that schema.

Ryan

Show all comments

In My on-premises Instance, I have performed the below steps.

 

  1. Updated the below system settings 

ExchangeListenerServiceUri

BpmonlineExchangeEventsEndpointUrl

 

  1. I have installed Docker Desktop software and downloaded the "Creatio Email Listener". I successfully launched the CreatioEmail container.
  2. However, we encountered an error while configuring the 0/ServiceModel/ExchangeListenerService.svc file in the web configuration.

 

Updated the below tags in Web.conf file:

 <system.serviceModel>
   <serviceHostingEnvironment minFreeMemoryPercentageToActivateService="1" aspNetCompatibilityEnabled="True" multipleSiteBindingsEnabled="True" />
   <extensions configSource="Terrasoft.WebApp\ServiceModel\Extensions.config" />
   <services>
       <service name="Terrasoft.WebApp.Loader.ServiceModel.AuthService" behaviorConfiguration="RestServiceBehavior">
           <endpoint name="AuthServiceEndPoint" address="" binding="webHttpBinding" behaviorConfiguration="RestServiceBehavior" bindingNamespace="http://Terrasoft.WebApp.ServiceModel" contract="Terrasoft.Core.ServiceModelContract.IAuthServiceEx" />
       </service>
       <service name="Terrasoft.WebApp.Loader.ServiceModel.TotpSetupService">
           <endpoint name="TotpSetupServiceEndPoint" address="" binding="webHttpBinding" behaviorConfiguration="RestServiceBehavior" bindingNamespace="http://Terrasoft.WebApp.ServiceModel" contract="Terrasoft.WebApp.Loader.ServiceModel.TotpSetupService" />
       </service>
       <service name="MyNamespace.MyServiceType" behaviorConfiguration="MyServiceTypeBehaviors">
           <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
       </service>
   </services>
   <behaviors>
       <serviceBehaviors>
           <behavior name="RestServiceBehavior">
               <serviceMetadata httpGetEnabled="true" />
               <!-- Add other behaviors if needed -->
           </behavior>
           <behavior name="MyServiceTypeBehaviors">
               <serviceMetadata httpGetEnabled="true" />
           </behavior>
       </serviceBehaviors>
   </behaviors>
   <bindings configSource="Terrasoft.WebApp\ServiceModel\http\bindings.config" />
</system.serviceModel>

 

Error message:

 

user: Default_user/1B4B9325-66CC-DF11-9B2A-001D60E938C6 file: http://localhost/core/hash/ng-core/src/polyfills.js line: 1 column: 21234 message: Uncaught Terrasoft.UnauthorizedException:
date: Tue Jun 18 2024 12:31:37 GMT+0530 (India Standard Time) stack: undefined

 

We followed the below Link:

 

https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-deployment/containerized-components/email-listener-synchronization-service#:~:text=The%20Email%20Listener%20(formerly%20Exchange,and%20controlled%20use%20of%20resources.

 

 

Like 1

Like

5 comments

Hi,

 

We recommend updating the Email Listener to the latest version. 

To install the module, request the helm package from Creatio support.  

 

The address for Creatio support is support@creatio.com

We have raised an #SR-01305366 

The issue has been resolved.
Note: Once we successfully registered the Docker repository, we were able to configure the email listener for Creatio.

Show all comments

Hi!
Is it possible to show all emply madatory fields in one message? 

Like 0

Like

3 comments

Hello,

Usually, the Mandatory Error message will show all the Mandatory fields that are not filled

Not in Classic UI as i understand

Hello,

Unfortunately, currently, it is not possible to display the names of all required fields that are not filled in. 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