Hello, 

 

Do you know how to mask first 12 digits of a Credit Card in Freedom UI Creatio?

 

Example :-

Credit Card Number :- 2345-2121-1225-8909

After masking I want to see as ****-****-****-8909 in Freedom UI.

 

Thanks,

Like 1

Like

1 comments

You can try using the password input which will mask the entire text as ****. This control doens't appear in the toolbox, so to add it, you could add an input, then in the code change "type": "crt.Input" to "type": "crt.PasswordInput". You can see an example of this control in the page SysUserProfilePage (user profile page)

 

If you need it more how you described, showing the last 4 digits, you would need to implement your own custom control. You can see details for that here: https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

 

Ryan

Show all comments

I have a problem filtering a lookup filed using Freedom UI.

The issue here:

The first lookup filed linked to the Contact entity

The second lookup filed's entity Account, contains a field "SMPrimaryAccountOwner" and it should be equal to the first filed value. 



Here is the filter:

 

{
				request: "crt.LoadDataRequest",
				handler: async (request, next) => {
					// filter the contact lookup for the account
					debugger;
					if(request.dataSourceName !== "LookupAttribute_emk4fel_List_DS") {
						return await next?.handle(request);
					}
 
 
					const account = await request.$context.LookupAttribute_r6avpkd;
					if (account) {
						const filter = new sdk.FilterGroup();
						await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "SMPrimaryAccountOwner.Id", account.value);
 
						// note, these lines are only needed due to an issue with filters in Creatio-DevKit SDK
						// expected to be fixed in Creatio 8.1
						//const newFilter = Object.assign({}, filter);
						//newFilter.items = filter.items;
 
						request.parameters.push({
							type: sdk.ModelParameterType.Filter,
							value: filter
						});
					}
 
					return await next?.handle(request);
 
				}
			}



And here is the error on the console:



 

Maybe anyone here had the same issue.

Like 0

Like

2 comments
Best reply

Try changing to just the field "SMPrimaryAccountOwner" and not the ".Id" part at the end.

await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "SMPrimaryAccountOwner", account.value);

Also, even if you're on 8.1 the commented lines are necessary - the issue that works around was *not* fixed in 8.1.

Ryan

Try changing to just the field "SMPrimaryAccountOwner" and not the ".Id" part at the end.

await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "SMPrimaryAccountOwner", account.value);

Also, even if you're on 8.1 the commented lines are necessary - the issue that works around was *not* fixed in 8.1.

Ryan

Try adding the filter for "SMPrimaryAccountOwner" and not "SMPrimaryAccountOwner.Id", as in: 

await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "SMPrimaryAccountOwner", account.value);

Also, the workaround that is commented out is still needed in 8.1. It was not fixed in 8.1.

Ryan

Show all comments

Hi everyone,

 

How can we override the onClick functionality of the attachment link? Or is there any way to disable the link?



Thanks & regards,

Ramya

Like 0

Like

3 comments

Hello Ramya,

 

We thought on overriding the logic of the crt.DownloadEntityFileRequest request, but the handler doesn't trigger upon clicking the file. I will ask our R&D team to make it possible to control the download of files out-of-the-box and do it in the nearest releases.

 

Thank you!

Oleg Drobina,

 

Thank you for the swift response. Since overriding is not possible as of now, is there any way to disable the link? Something similar to the Classic UI diff value "showValueAsLink" : false?



Regards,

Ramya

Oleg Drobina,

 

Can you also elaborate what handler is getting called if it is not "crt.DownloadEntityFileRequest" ?

Show all comments

Is there any way  to change the color of all tabs on all the  record pages across the system by using low code

Like 0

Like

3 comments

Hello,

 

There is no such functionality for now. 

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

 

hank you for helping us to improve our product. 

 

So now if we have to use this functionality how we can achieve  this using by code?

Surbhi Garg,

 

We don't have an example of it's implementation for now.

Show all comments

Hi everyone,

 

Is there a way to obtain the ID of the selected file in attachments in a Freedom UI section? Looking for an equivalent of activeRow / this.get("SelectedRows") for Freedom UI.

 

Regards,

Ramya

Like 0

Like

3 comments
Best reply

Yes. This is something I would need as well. I've not tried this, but maybe it's possible to add to the rowToolbarItems for the attachments list and get the selected Id from the handler there?

Ryan

Yes. This is something I would need as well. I've not tried this, but maybe it's possible to add to the rowToolbarItems for the attachments list and get the selected Id from the handler there?

Ryan

Ryan Farley,

 

Thanks a lot for the response. This worked!

You can pass the attachment Id in the params as mentioned below:

"rowToolbarItems": [{
	"type": 'crt.MenuItem',
	"caption": 'Get attachment id',
	"icon": 'open-button-icon',
	"clicked": {
		"request": 'psg.MyCustomHandler',
		"params": {
			"Id": "$AttachmentList.AttachmentListDS_Id"
		}
	}
}]

Regards,

Ramya

Ramya R,

Glad to hear this list can also be extended, great news. 

Ryan

Show all comments

Hello Community, 

 

Is it possible to change the default filter column when using Search Filter? 

 

I wanted to filter a list page by text in a specific column all the time. But in Search Filter, It changes to Everything on reloading the page. 

How can we set default column for a search filter. 

 

Any suggestions are really helpful.

 

Thanks

Gargeyi.G

 

 

Like 0

Like

1 comments

Hello,

 

Your business task can be only achieved with the help of a separate development process. 

You can use 'entity schema query' filters in particular. Here is the guide on this topic

https://academy.creatio.com/docs/developer/front_end_development/data_o…

You can also use this community post with the example of such logic https://community.creatio.com/questions/default-filter-section

Show all comments

Hi Team,

 

To provide some context, I have three objects - A, B and C. Object C acts as a linking object between A and B

 

Currently, I have a page (object A) with detail (object C) on it. By clicking on "Add" button I open separate page (object C), that contains list (object B) with multiply selection. I need to filter out the records in list, that already exists in detail. After that I need to create records in object C using the selected records from list, along with the passed Id from the page (object A).

 

So, I have two questions:

1) How can I pass the Id from the page (object A) to page (object C), in order to filter out records in the list.

2) How can I filter out records (object B), that already exists in detail (object C).

 

I have successfully implemented it in Classic UI, but I'm unable to replicate it in Freedom UI due to the absence of a Sandbox

Like 1

Like

4 comments

Hello,



It could be achieved only with development tools.



Unfortunately, we don't have the exact examples of how to implement your business task, 

 

But you can try to check the article on how to filter a Lookup on a Creatio Freedom UI Page and change the code according to your needs:

https://customerfx.com/article/dynamically-filtering-a-lookup-on-a-crea…

You can also try to use Javascript's built-in Broadcast Channel API instead of the sandbox. See https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API

Ryan

Ryan Farley,

There is a way to use Broadcast Channel API  from freedom UI to Classic?

Found it: this works for me

subscribeSandboxEvents: function() {
					this.callParent(arguments);
 
					const bc = new BroadcastChannel("MyMessage");
                    bc.onmessage = async (event) => {
						debugger;
                        const MyObject = event.data;
 
                        bc.close();
                    };
				},

 

Show all comments

Hi Creatio Community,

We want to customize/extend functioanilty of the Account Form page found in Customer360 app.

Which is the right way to do it ?

Sasori

Like 0

Like

2 comments

Hi Community,

Any update regarding the topic?

Sasori

Greetings,



Firstly, please make sure that you are working in Freedom UI before applying any changes. You may apply the changes directly through UI or via customizing the package contents.

You may do so by following this Academy article:

https://academy.creatio.com/docs/user/platform_basics/freedomUI/turn_on_the_freedom_ui/general_procedure?_gl=1*h5poxo*_gcl_au*NDEwODkzNDYzLjE2ODk1OTEzNjc.



Second, you need to apply a few, certain changes to the app through the configuration. You may find more information on this subject here:



https://academy.creatio.com/docs/developer/development_tools/packages/packages_basics/overview

https://academy.creatio.com/docs/developer/architecture/composable_architecture/overview

https://academy.creatio.com/docs/developer/marketplace_app_development/app_compatibility/configure_the_app_for_composable_architecture_compatibility/overview



If you would like to export your packages for further customization on other applications, you can find more information on this subject using this guide:

https://academy.creatio.com/docs/developer/getting_started/transfer_application/overview



In regards to renaming packages.

Unfortunately, you can't rename the package once it is already exported, renaming the archive wouldn't change the package name itself. You can try to rename the package when it is still in the dev environment in the SQL console changing the name of the corresponding record in the SysPackage table. We don't recommend to do this, however, if it is really needed you can backup the database, change the name, generate the source code for all and compile all. After that, if while testing the functionality no errors would occur you can export the package and transfer it. 



 

Show all comments

In Freedom UI sections (ie Customer 360 Accounts and Contacts sections) I can't find the way to apply an advanced filter.

I see it's possible to create folders and set their filters but I don't find the same "Switch to advanced mode" action available in classic UI Creatio sections.

How can a user apply an advanced filter without the need of folders?

Thanks

Like 6

Like

4 comments

Did you find a method to apply advanced filters? I have the same problem here. 

Matthias Bendel,

 

At the moment there is not such functionality in the Freedom UI, but we already registered this idea for our R&D team and it may appear in future releases.

Hi! Is there any news regarding this feature?

 

Csilla Kiss,

Hello!

 

We are still working on this functionality, the R&D team has a task, so it should be available soon in new releases. 



Best regards,

Anton

 

Show all comments

Hi,

I've created a custom FreedomUI page for AccountAddress object. I'd like to implement some kind of automation for two lookup fields: Country and Region. It consists of two parts:

1. When I choose a region from list, the country should be set to region's country. For example, if I choose Texas region, I expect that country will be set to United States

2. When I choose a country, regions lookup should display only these regions, which are connected with selected country.

I haven't any problem with implementation of the first part. But the second part doesn't work I expected. I use handler for crt.LoadDataRequest to append a filter parameter when loading regions list. The problem is that this handler runs only once, at first list load. It doesn't execute when I change country, although I trigger such request from other handler (crt.HandleViewModelAttributeChangeRequest). Here is the crucial of my code:

{
	request: 'crt.LoadDataRequest',
	handler: async (request, next) => {
        if (request.dataSourceName === 'Region_List_DS') {
	        const predefinedFilter = await request.$context.Region_filter;
	        request.parameters.push({
		        type: "filter",
		        value: predefinedFilter
	        });
        }
 
		return await next?.handle(request);
	}
},
{
	request: 'crt.HandleViewModelAttributeChangeRequest',
	handler: async (request, next) => {
        if (request.attributeName === 'EvCountry' && request.value?.value != null && (request.oldValue?.value == null || request.value.value !== request.oldValue.value)) {
			const countryId = request.value?.value;
            request.$context.EvRegion_filter = {
				"items": {
					"1954b2e1-ea91-4014-b785-cda17020595c": {
						"items": {
							"CustomFilters": {
								"items": {
									"customFilterCountry_Region_1664cb4d-2690-48d6-bcdf-0c8075824efa": {
										"filterType": 1,
										"comparisonType": 3,
										"isEnabled": true,
										"trimDateTimeParameterToDate": false,
										"leftExpression": {
											"expressionType": 0,
											"columnPath": "Country"
										},
										"rightExpression": {
											"expressionType": 2,
											"parameter": {
												"dataValueType": 10,
												"value": countryId
											}
										}
									}
								},
								"logicalOperation": 0,
								"isEnabled": true,
								"filterType": 6
							}
						},
						"logicalOperation": 0,
						"isEnabled": true,
						"filterType": 6
					}
				},
				"logicalOperation": 0,
				"isEnabled": true,
				"filterType": 6
			};
 
			const handlerChain = sdk.HandlerChainService.instance;
			const result = await handlerChain.process({
				type: "crt.LoadDataRequest",
				$context: request.$context,
				config: {
					loadType: "load"
				},
				dataSourceName: "EvRegion_List_DS",
			});
		}
 
		return next?.handle(request);
	}
}

The problem is that my trigger (handlerChain.process call) doesn't run crt.LoadDataRequest, and result variable contains full, unfiltered list of regions.

Like 1

Like

5 comments

Hello,

 

Thank you for the code and description!

 

We've verified the issue and discussed it with our core R&D team: in 8.0.9 there will be a possibility to add filtration business rules using wizard capabilities in Freedom UI. Please wait until this version is released and use this rule type to create dynamic filtration in Freedom UI interface.

Oleg Drobina,

as filtration business rules do not cover all cases of filtration, when can we wait for trigger fix?

We have tested in 8.0.9 and have the same issue as described



Thank you!

Vladimir

Vladimir Sokolov,

 

indeed filtration rules (along with static filtering business rules) don't cover all cases, but most of them. As for the list loading and the LoadDataRequest - in 8.1.0 there will be new "filterAttributes" attribute added for each list of each data source with the boolean "loadOnChange" property that will allow dynamic setup of filters in the lists (including combobox). It will look like this:

"filterAttributes": [
					{
						"loadOnChange": true,
						"name": "AccountItems_FILTER_BY_ACTIVE_ROWS"
					}

where AccountItems_FILTER_BY_ACTIVE_ROWS will be the filter itself. So in 8.1.0 all filtration cases should be covered by this functionality.

Hello,

 

Glad to inform you that in 8.1.1 we've added the possibility to use custom filters in page schema handlers when working with SDK. So you can upgrade your apps and you will be able to use custom filtration on the page.

Hi Oleg,

 

Do you have the code / Procedure to do this in 8.1.1 ?

Show all comments