I am trying to create a folder in the Contacts Freedom UI List Page that only contains Contact records that are currently active. I know there is a field in the System Administration Object that is an Active status field (shown in the Users list page). I am trying to access this field; however, it is not showing up in the dropdown list of columns in the filter builder popup page. Any help would be great. I attached an image showing the columns currently visible to me for that System Admin Object. 

Like 0

Like

2 comments
Best reply

It would look like this - I typically also add Type=4 for users (although that’s a little redundant) and also add Connection Type=0 to get employee users (not external/portal users). 

Basically, from your screenshot, click "Quantity". Then set count > 0 (or click count to change to exists), then add the sub-conditions under that.

Ryan

It would look like this - I typically also add Type=4 for users (although that’s a little redundant) and also add Connection Type=0 to get employee users (not external/portal users). 

Basically, from your screenshot, click "Quantity". Then set count > 0 (or click count to change to exists), then add the sub-conditions under that.

Ryan

Ryan Farley,

Thank you Ryan for your time and help! This solution worked for me. 

Show all comments

I need to create a mask for this text field, it is a document, which has 11 digits, and is written as follows: ###.###.###-##.

I also want to limit the quantity and leave only periods and hyphens for typing.

The quantity entered is 11, but with the mask it becomes 14, I don't know if it is possible to block this.

Can anyone help me with this?

{
	"operation": "insert",
	"name": "Input_CPF",
	"values": {
		"type": "crt.Input",
		"multiline": false,
		"label": "$Resources.Strings.PDS_SCCPF_luo5kno",
		"labelPosition": "auto",
		"control": "$PDS_SCCPF_luo5kno"
	},
	"parentName": "FlexContainer_6gej1t9",
	"propertyName": "items",
	"index": 1
}
Like 0

Like

2 comments
Best reply

Hello,

 

In order to create the mask for the text field you can add a handler that will apply formatting to the text field value when user are typing.

 

You can use the following code snippet as an example:

 

{
	request: "crt.HandleViewModelAttributeChangeRequest",
	handler: async (request, next) => {
		if(request.attributeName == "PDS_SCCPF_luo5kno"){
			let value = await request.$context.PDS_SCCPF_luo5kno; 
			value = value.replace(/\D/g, ""); // Remove non-digit characters
			if (value.length > 11){
				value = value.slice(0, 11); // Limit to 11 digits
			}
			let formatted = "";
			if (value.length > 0) {
				formatted += value.slice(0, 3);
			}
			if (value.length >= 4) {
				formatted += "." + value.slice(3, 6);
			}
			if (value.length >= 7) {
				formatted += "." + value.slice(6, 9);
			}
			if (value.length >= 10) {
				formatted += "-" + value.slice(9, 11);
			}
			request.$context.PDS_SCCPF_luo5kno = formatted;
 			request.preventAttributeChangeRequest = true;
		}
		return next?.handle(request);
	}
}

Hello,

 

In order to create the mask for the text field you can add a handler that will apply formatting to the text field value when user are typing.

 

You can use the following code snippet as an example:

 

{
	request: "crt.HandleViewModelAttributeChangeRequest",
	handler: async (request, next) => {
		if(request.attributeName == "PDS_SCCPF_luo5kno"){
			let value = await request.$context.PDS_SCCPF_luo5kno; 
			value = value.replace(/\D/g, ""); // Remove non-digit characters
			if (value.length > 11){
				value = value.slice(0, 11); // Limit to 11 digits
			}
			let formatted = "";
			if (value.length > 0) {
				formatted += value.slice(0, 3);
			}
			if (value.length >= 4) {
				formatted += "." + value.slice(3, 6);
			}
			if (value.length >= 7) {
				formatted += "." + value.slice(6, 9);
			}
			if (value.length >= 10) {
				formatted += "-" + value.slice(9, 11);
			}
			request.$context.PDS_SCCPF_luo5kno = formatted;
 			request.preventAttributeChangeRequest = true;
		}
		return next?.handle(request);
	}
}

Thanks so much.
It worked wonderfully.

Show all comments

Dear,
I made a forecast on the products ordered by customers in order to obtain the total quantities per product ordered over several years and by year.
Now I would like to display this data on the account page as a table filtered by account.
Is it possible to access the forecast tables and display filtered data (by account) ?

Thank you,
Nicolas

Like 0

Like

1 comments

Dear Nicolas,

You can implement this logic in Freedom UI pages using "Apply filter by page data". 


Below, you can see an example of this binding using "Case Lifecycle" list as an example:

image.png

Here is a link on how to set this up: https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ui-and-business-logic-customization/element-setup-examples/components/set-up-list-components#title-2761-2 

I hope this helps. Have a great day!

Show all comments

Hi.
Newbie here, so bear with me.  Best I start with an example --  

  • We have 200+ users who are sales reps and 2 Admins.
  • Some of these sales reps are managers of a sub-set of other subordinate reps.
  • Now, a rep quits, and it's up to an admin (in another country BTW) to manually go in and reassign his dozens of opportunities to a new sales rep.  This is a task his manager should be able to do, but can't (because only an admin can change other users' records).

This is just one example of a typical issue we run into, that could be fixed by giving "modify" rights to one user over certain other user's records -- or a "superuser" as exists in our other systems.

In Creatio, I am told only the individual rep can change his own "opportunities".  His manager cannot.  (The Admins of course can change everything about everyone, so logically we can not give admin rights to the managers.)

Is there a way around this?  
Perhaps the next release of Creatio will have some sort of granularity of "rights"? 

Thanks!
Rob

 

Like 0

Like

4 comments
Best reply

Creatio does have this, or at least it can work like this. If you're using organizational roles, each organizational role can have a management role. The management role inherits the permissions of the users in the organizational role. Meaning, if you create an org role called "sales" and then add an management role for the sales org role, the people in the management role inherit the permissions of the users in the org role. See https://academy.creatio.com/docs/8.x/setup-and-administration/administration/user-and-access-management/user-management/organizational-roles#title-2266-2

Note, this often means you also need to setup object/record permissions for things based on these roles as well, instead of by users (so the permissions can be inherited by the managers of the role). For example, you could add record access permissions that if anyone in "sales" creates a record, that edit permissions is given to anyone in the "sales managers role".

Ryan

Creatio does have this, or at least it can work like this. If you're using organizational roles, each organizational role can have a management role. The management role inherits the permissions of the users in the organizational role. Meaning, if you create an org role called "sales" and then add an management role for the sales org role, the people in the management role inherit the permissions of the users in the org role. See https://academy.creatio.com/docs/8.x/setup-and-administration/administration/user-and-access-management/user-management/organizational-roles#title-2266-2

Note, this often means you also need to setup object/record permissions for things based on these roles as well, instead of by users (so the permissions can be inherited by the managers of the role). For example, you could add record access permissions that if anyone in "sales" creates a record, that edit permissions is given to anyone in the "sales managers role".

Ryan

Ok, Thanks -- that's kind of what I thought, with my rudimentary experience with roles (and Creatio in general).

So, applying this to our large sales organization ...
Instead of implementing a single "sales" role, we would need to implement a "superuser" role, but for each sales division -- perhaps?

For example, we have 8 sales regions, like "Asia" and "Europe" and "South America".  There are 30-50 sales reps in each region.
We don't want all their "issues" trickling up to one admin, so as I mentioned we want a "SuperUser" in each region:  "SuperUser-Asia", SuperUser-India" and so on.  I guess these would be "management" roles in Creatio.

So, we would have to divide up the Sales Reps (users) into separate orgs (one for each region) so that their data would be visible to their SuperUser? 
Can I create separate orgs in Creatio, all living underneath the main Company org?

Thanks -- any suggestions you have are appreciated!

Rob

Yes, the roles are hierarchical. Each sub role inheriting the permissions of the roles before. You can have a role for sales, then sub roles for each division. Each division can have a managers role which could give them inherited permissions for the division they manage.  

I will have to review this with our integrator.   They are telling us that in the forthcoming release of Creatio, there are some enhancements to roles and permissions -- Are there any hints or documentation as to what this might be?   We need to allow certain roles to be able to edit specific data but not all.

(For example, a salesman creates a customer account DuPont Paints and can assign it to a "master" account DuPont International. This is really something that his local manager admin should also able to do, but can't)

Show all comments

Hello, 

We are trying to Implement a custom campaing element, SMS. 
We are following instructions from this website  : https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/8.1/platform-customization/classic-ui/marketing-campaigns-basics/examples/implement-a-campaign-element#title-1455-3
We are facing a issue.
We created a test package named FZCreateCampaignElement which depends on our package FZCustomer360. Other package FZCustomer360 depends on : CrtBaseFinserv,
CrtBulkEmailInC360 ,CrtCampaignElements ,CrtCampaignInC360,CrtCampaignUtils,CrtContactToLeadInC360,CrtCustomer360App,CrtDigitalAdsInC360,CrtEngagementInC360,CrtEventInC360,CrtFinservSalesAndServiceApp,CrtLeadOppMgmtInC360,CrtOpportunityInC360,CrtSLAInC360,MarketingCampaign

Successfully we did this steps : 

1. Create a marketing campaign element
2. Create a property panel for the campaign element
3. Add the element to the element area of the Campaign Designer

At step 4 when (4. Create an executable element for the campaign element ) we created   executable element, we could not publish it since the class CampaignFlowElement could not be inherited.


Like 0

Like

2 comments

Hello,

Please reattach your screenshot since its corrupted and cannot be reviewed. In general please make sure your package where the element is developed is not the assembly package and that the product that you are working in is of marketing build (like sales-enterprise-marketing-service-enterprise).

Hi Enjio! How are you? As a quick workaround, you could use "Add Data," element add a record, for example, in a "LogSMS" custom entity, and create a BP that has a trigger on that table and the logic for sending the SMS.

Show all comments

Hello;
In my 7.17 version i create a file repository override class and it work correctly
when I try to upgrade to 8,2,1 the FileService core class change and it create fileRepository object based on interface not class (ClassFactory.Get) and it run based method loadFile not override one.
Is it any solution to set the the default class for interface

Like 0

Like

5 comments

Hi,

Yes, starting from version 8.x, Creatio uses dependency injection (DI) more actively, including for services like IFileRepository, which is now resolved via ClassFactory.Get<IFileRepository>().

To override the default implementation, you can register your custom class as the default for the interface in the dependency container.
 

Solution: Register your class for the interface

You have to create your own AppEventListener and bind your class to the appropriate interface there.

 

public class UsrAppEventListener : AppEventListenerBase
{
	public override void OnAppStart(AppEventContext context) 	{
		base.OnAppStart(context);
		ClassFactory.Bind<IFileRepository, CustomFileRepository>(reuseType: ReuseType.Singleton);
    }
}

 

Where:

  • CustomFileRepository is your custom class that implements IFileRepository
  • ReuseType.Singleton (or None) depends on your usage

⚠️ Important: Ensure your class fully implements the IFileRepository interface.

This way, when FileService calls ClassFactory.Get<IFileRepository>(), it will receive your custom implementation.

TU Irina

Tomasz Branicki,

Hi Irina.
I finally manage to upgrate creatio properly so i can try your sollution.
write now i gut such error

Terrasoft.Core.InstanceActivationException
 HResult=0x80131600
 Message=Error creating an instance of the "Terrasoft.Configuration.IFileRepository" class
 Source=<Cannot evaluate the exception source>
 StackTrace:
<Cannot evaluate the exception stack trace>

 This exception was originally thrown at this call stack:
   [External Code]

Inner Exception 1:
ActivationException: Error activating IFileRepository
More than one matching bindings are available.
Matching bindings:
 1) binding from IFileRepository to FileRepository
 2) binding from IFileRepository to UsrFileRepository
Activation path:
 1) Request for IFileRepository

Suggestions:
 1) Ensure that you have defined a binding for IFileRepository only once.

My class is describe like that

    [Terrasoft.Core.Factories.Override]
   public class UsrFileRepository : FileRepository.

can you give me a hand :)

regards
Tomek

Iryna Oriyenko,

Hi Irina.
I finally manage to upgrate creatio properly so i can try your sollution.
write now i gut such error

Terrasoft.Core.InstanceActivationException
 HResult=0x80131600
 Message=Error creating an instance of the "Terrasoft.Configuration.IFileRepository" class
 Source=<Cannot evaluate the exception source>
 StackTrace:
<Cannot evaluate the exception stack trace>

 This exception was originally thrown at this call stack:
   [External Code]

Inner Exception 1:
ActivationException: Error activating IFileRepository
More than one matching bindings are available.
Matching bindings:
 1) binding from IFileRepository to FileRepository
 2) binding from IFileRepository to UsrFileRepository
Activation path:
 1) Request for IFileRepository

Suggestions:
 1) Ensure that you have defined a binding for IFileRepository only once.

My class is describe like that

    [Terrasoft.Core.Factories.Override]
   public class UsrFileRepository : FileRepository.

can you give me a hand :)

regards
Tomek

Iryna Oriyenko,

Hi Iryna;
I find solution
I used rebind except bind.
thank you for help

 

regards Tomek

Show all comments

How do I know what the current app package is?

Thanks,

Like 0

Like

2 comments

The new behavior is Creatio tries to make it's best judgement of where to save things, it does NOT use the Current Package setting. It's not often correct in where it decides to save things IMO and a bit frustrating, so there's really no where to see it because the system will decide differently based on what item you're trying to save. This article shows how to force save a page into a certain application's pacakge or to turn off the new way and revert back to using the Current Package system setting instead: https://customerfx.com/article/reverting-the-behavior-for-saving-pages-in-the-creatio-freedom-ui-designer-to-use-current-package-setting/

Ryan

Thanks Ryan,

we are trying to have App/package structure where one App has all of the objects and then all of the different apps are dependent on the Data from the DB package.

Intention is to deliver independently from data model different apps for different projects ongoing in the customer

This would work fine with classic but now we are running into some question because of this "smart" behavior.

Last example was Creatio added a field in the activity object to link to custom object when we added a list to the page of the custom object

Do you think this approach would fix these issues?

 

Thanks again

Show all comments

Hello,

Could I get some help understanding or directing me to an article that thoroughly explains the lookup titled "Package in installed application?"

What does the "Primary" check box do? What does the "Current package" check box do?

Can a package be named in more than one row, aka, more than one application?

I cannot locate an academy article explaining this function.

Like 0

Like

1 comments

Hello community,
Is there a system setting that allows you to set the default culture for all users?
In other words, imagine the following scenario:
1- Users have been created with the culture English (United States)
2- Portuguese was installed and this language was set as default.
3- I want all users to have this new language.

Without having to go to each user and change the culture, is there a feature that allows me to change the culture of all users at once?

 

Thank you!

Andreia

Like 0

Like

2 comments

Greeting,

 

Currently, there is no option to modify the "Primary culture" system setting, which is responsible for the default culture in the system. 

 

By default, English is set as the base culture for all system builds to ensure the proper functioning of our product, including multilingual templates and localized user experiences.

 

If you need to change the language, this can be done in the system user profile for each individual user. 

 

Modifying the "Primary culture" system setting could result in incorrect functionality, so it is essential to adjust the language preference at the user level.

 

We understand that this limitation may cause challenges, and we have already submitted a request to our R&D department to explore implementing this functionality in future system releases.

 

Please let us know if you have other questions.

 

Thank you for reaching out!

Hello!
 

You can bulk change the value of the SysCultureId column for users in the SysAdminUnit table. The corresponding values can be found in the SysCulture table.
After that, the user will need to re-login in the system to apply the localization changes, or you can flush Redis so that all users are forced to re-authorize.
 

Please be careful when applying this approach and check it in detail on a test environment before implementing on prod.

Show all comments

Hi all mentors, 
     
     I notice there is an app on the marketplace named "Excel reports builder for Creatio" that can generate the excel report in section page directly. Is it also okay to send the excel file in BP directly to certain users? I've tried it but failed during the setup in BP. If there is any reference information or link, please kindly share. 

 

Like 0

Like

3 comments
Best reply

Jeffrey,

That option is only available for Custom Report types, not Section Reports as shown in your screenshot. If you create a new Excel report with type=Custom Report, it will show for that one.

Ryan

Hello,

Please note that OOTB business process element "Process file" can only generate Word reports, you can find more details about its functionality in this article:

https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/process-elements-reference/system-actions/process-file-element

Instead, you can use the "Generate Excel report" element that is a part of the "Excel reports builder for Creatio" app. 

Please note, that only the reports with "Custom report" type and a checked "Available in process" boolean can be used in the process.

Mira Dmitruk,


Hi, Mira, 

    Thank you for your help, however, I can't find "Available in process" setting in the Excel report setting, that may be the reason that I can't find it inside Excel in BP. What's the reason? I'm using 8.2.1.5446 Creatio cloud version, install the excel builder app few days ago. 
 


Jeffrey.

 

Jeffrey,

That option is only available for Custom Report types, not Section Reports as shown in your screenshot. If you create a new Excel report with type=Custom Report, it will show for that one.

Ryan

Show all comments