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 0

    Like

    2 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

    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 4

    Like

    2 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.

    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

    3 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.

    Show all comments

    Hello,
     

    Can any one help me how to get "Description" of a lookup type field and Populate it in any Other Field via code in freedomUI ? 

    Like 0

    Like

    2 comments
    Best reply

    I'm positive there is a way to register the field as an attribute for the Lookup's data source, I've just not figured out or tested how to do that yet. Likely info here https://academy.creatio.com/docs/developer/front_end_development_freedo…

    As for now, you could do the following - in this example I have a lookup for ContactType and will retrieve the Description once selected. You'll ned to know the actual attribute name for the lookup which you can see in the viewDiffConfig for the control as:
    control: "$SomeAttributeName"  (this is the attribute name, minus the "$")

    Then, add a change request handler like this: 

    {
    	request: "crt.HandleViewModelAttributeChangeRequest",
    	handler: async (request, next) => {
    		// listen for changes to the Lookup field attribute
    		if (request.attributeName === "LookupAttribute_spr6dlv" && !request.silent) {
    			// get the selected value
    			var lookupVal = await request.$context.LookupAttribute_spr6dlv;
    			// retrieve the description
    			const model = await sdk.Model.create("ContactType");
    			const results = await model.load({
    				attributes: ["Description"],
    				parameters: [{
    					type: sdk.ModelParameterType.PrimaryColumnValue,
    					value: lookupVal.value
    				}]
    			});
    			const desc = results[0].Description;
    			// set the other column's attribute with the description
    			request.$context.SomeOtherAttribute = desc;
    		}
     
    		return next?.handle(request);
    	}
    }

    Ryan

    Hi,

     

    Example of retrieving description value of the lookup:

    const accountCategoryModel = await sdk.Model.create("AccountCategory");
    					const accountCategory = await accountCategoryModel.load({
    						attributes: ["Id", "Name", "Description"],
    						parameters: [{
    							type: sdk.ModelParameterType.PrimaryColumnValue,
    							value: "38ea507c-55e6-df11-971b-001d60e938c6"
    						}]
    					});
    					console.log("The result: ", accountCategory);

    value: "38ea507c-55e6-df11-971b-001d60e938c6" - Id here can be dynamically set as some variable that is received from the context. To set the result for the column (in this case for the UsrSubjectDetails):

    request: "crt.HandleViewModelAttributeChangeRequest",
        handler: async (request, next) => {
          if (request.attributeName === 'UsrSubject') {
            const isFieldsShouldBeSynchronized = request.oldValue === await request.$context.UsrSubjectDetails;
            if (isFieldsShouldBeSynchronized) {
              request.$context.UsrSubjectDetails = "some value";
            }
          }

     

    I'm positive there is a way to register the field as an attribute for the Lookup's data source, I've just not figured out or tested how to do that yet. Likely info here https://academy.creatio.com/docs/developer/front_end_development_freedo…

    As for now, you could do the following - in this example I have a lookup for ContactType and will retrieve the Description once selected. You'll ned to know the actual attribute name for the lookup which you can see in the viewDiffConfig for the control as:
    control: "$SomeAttributeName"  (this is the attribute name, minus the "$")

    Then, add a change request handler like this: 

    {
    	request: "crt.HandleViewModelAttributeChangeRequest",
    	handler: async (request, next) => {
    		// listen for changes to the Lookup field attribute
    		if (request.attributeName === "LookupAttribute_spr6dlv" && !request.silent) {
    			// get the selected value
    			var lookupVal = await request.$context.LookupAttribute_spr6dlv;
    			// retrieve the description
    			const model = await sdk.Model.create("ContactType");
    			const results = await model.load({
    				attributes: ["Description"],
    				parameters: [{
    					type: sdk.ModelParameterType.PrimaryColumnValue,
    					value: lookupVal.value
    				}]
    			});
    			const desc = results[0].Description;
    			// set the other column's attribute with the description
    			request.$context.SomeOtherAttribute = desc;
    		}
     
    		return next?.handle(request);
    	}
    }

    Ryan

    Show all comments

    Hello,

    Lookup fields on Freedom UI have a feature that let user create a new record from lookup Field, like on the following screenshot (Owner field on Account Form Page):

    I'd like to set some default values on such created record. For example, I'd like to set the new contact's account to current account record. I'm able to do this while using simple buttons, but I don't see such possibility for lookups.

    It will be ok, even if the answer requires some coding, I have nothing against :)

     

    Like 0

    Like

    4 comments

    Hello,

    You can set the default value for the column if the object settings:


     

    Hi,
    I know that its possible to set default value on the object level, but unfortunately it doesn't solve my problem. Let's see an example:

    In Account, I have two important fields: Owner (which is my company employee, who takes care about the customer) and Primary contact (which is my customer, related with the account). Both fields refer to Contact records.

     

    In Contact, I have a Type lookup, which I use to recognize whether a contact is my company employee or a customer.

     

    I'd like to set Type to my company Employee, when adding record from Owner field, or set it to Customer otherwise. I can't do it by setting a default value on the object level.

     

    Anyway, thank you for your answer :)

     

    Hello again, do anyone know answer for my question? :)

    Maybe try to set value through Business Rules. It can do this as much as I understood your query.

    Show all comments