I would like to disable the mini page that appears before the main page in Freedom UI. Currently, when we click on "Next Step," it first opens a mini page before navigating to the main page. Instead, I want it to directly open the main page without this intermediate step.

Like 3

Like

1 comments

Hello,

 

When clicking on the "Complete" button from the next steps, the system will show you the Freedom UI mini page, as this is a Next Steps core logic.

The only way to avoid opening this mini page is to develop your only Next Steps tiles and assign different logic for the complete button.

Show all comments

Overview of the Component

The setup of this new multiselect control involves two key steps:

  1. Creating an Object to Store Data
    You first create an object that includes two lookup columns. One column holds the selected lookup value (for example, “Contact”), and the other connects the multiselect entries to the current record (for example, “Account”).

Adding A new Object

  1. Adding Contact lookup

    Adding Account lookup

 

 

The example displayed is created to connecting multiple Contact to A single Account

 

  1. Adding the Multiselect Control to the Page
    Drag the multiselect control from the component icon onto the page. In its settings, configure:
    • Select lookup: Choose the lookup source from which users will select values.
    • Multiselect value storage: Link to the newly created object that holds the record’s selected values.
    • Apply filter by page data: Connect the multiselect to the current page’s data source.

Once set up, users can add multiple values from the lookup, and each selection creates a corresponding row in the related list.

 

Shortcomings in “Add” Mode

While the component works well when editing an existing record, there are two key shortcomings discovered when using it in an “add” or model/mini page context:

  1. Foreign Key Constraint Error on New Records
    When attempting to add a new value in an add page, the system may throw the error:

    23503: insert or update on table "UsrMuItiContactlnAccount" violates foreign key constraint "FKImBZBpEIYcV8tLhm1jnSSWl"
    This issue typically occurs because the record is not yet saved—meaning there isn’t a valid primary key or reference to associate with the new multiselect entry.

  2. Inactivity on Form Pages in Add Mode
    In form pages where the record is in “add” mode, the multiselect component remains unresponsive or “unclickable” until the record is saved. This behavior prevents users from interacting with the control, undermining the intended streamlined user experience.

 

Workarounds to Overcome These Issues

The solution to both issues involves ensuring that the record is saved before the multiselect control is utilized. By forcing a save operation, you establish the necessary references and context for the multiselect component to function correctly.

1. Saving the Record in a Model/Mini Page

To resolve the foreign key constraint error on add pages, a custom handler can be implemented that listens for a specific attribute change (in this example, ActivityDS_UsrScheduleDateTime_arkp9vi) and triggers a save operation. Once the record is saved, the component can properly reference the new record’s ID. Consider the following handler:

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) => {
        try {
            if (request.silent === false) {
                if (request.attributeName === 'ActivityDS_UsrScheduleDateTime_arkp9vi') {
 
                    console.log("Event 2 Triggered");
 
                    const saveResult = await request.$context.executeRequest({
                        type: "crt.SaveRecordRequest",
                        preventCardClose: true,
                        $context: request.$context
                    });
                    console.log("Record saved successfully:", saveResult);
                    const saveResultId = await request.$context.Id;
                    console.log("Record ID", saveResultId);
 
                    // Additional logic could be added here to navigate or update UI
                    return saveResult;
                }
            }
            return await next?.handle(request);
        } catch (error) {
            console.error("Error in attribute change handler:", error);
            return await next?.handle(request);
        }
    }
}

How It Works:

  • The handler monitors changes to a specified attribute.
  • Upon detecting the attribute change and confirming that the request is not silent, it executes a crt.SaveRecordRequest to save the new record.
  • Once saved, the record obtains a valid ID, thus allowing subsequent multiselect operations to avoid the foreign key constraint error.

2. Activating the Multiselect on Form Pages

For form pages in add mode, the same principle applies: the record must be saved before the multiselect control becomes interactive. A similar handler can be used to save the record when the relevant attribute changes. This ensures that as soon as the record is saved, the multiselect component becomes active and clickable:

{
	request: "crt.HandleViewModelAttributeChangeRequest",
	handler: async (request, next) => {
		try {
			if (request.silent === false) {
				if (request.attributeName === 'ActivityDS_UsrScheduleDateTime_arkp9vi') {
 
					 console.log("Event 2 Triggered");
 
					const saveResult = await request.$context.executeRequest({
 
						type: "crt.SaveRecordRequest",
						preventCardClose: true,
						$context: request.$context
 
					});
					console.log("Record saved successfully:", saveResult);
					const saveResultId = await request.$context.Id;
					console.log("Record ID",saveResultId);
					if (saveResultId)
					{
 
						const handlerChain = sdk.HandlerChainService.instance;
						await handlerChain.process({
 
							type: "crt.OpenPageRequest",
							$context: request.$context,
							schemaName: "UsrPage_hio598w",
							// Replace with your actual page schema name
							modelInitConfigs: [
 
								{
									action: sdk.ModelInPageAction.Edit,
									// Open the record in edit mode
									recordId: saveResultId
								}
 
							]
						});
					}
					return saveResult;
				}
			}
 
			return await next?.handle(request);
		} catch (error) {
			console.error("Error in attribute change handler:", error);
			return await next?.handle(request);
		}
	}
}

How It Works:

  • Attribute Monitoring: The handlers detect a specific attribute change that signals the user is beginning to interact with the canvas.
  • Record Saving: A save operation is executed, ensuring the record obtains a valid ID.
  • For Form Pages: Once the record is saved, the handler forcibly navigates to the edit mode using the handler chain service, ensuring the multiselect component is active and fully interactive.

 

Have a suggestion or another workaround?
If you have any additional ideas, recommendations, or alternative workarounds, please comment below and let us know.

Like 2

Like

Share

2 comments

Great thread, this is an underrated often asked feature that I am glad to see deployed! But more guidance from the academy on it's workings and limitations is welcome. 

For example: If we import data in Excel, how do we import with multiple values in a lookup ?

Damien Collot,

Technically, the multi-select component is just a different visual representation of a 1:many list (detail). To import values to it, it would be the same as importing to any 1:many list. I typically import this sort of thing in two steps, import the main records first and include some identifying value, then second import to the 1:many object and link up to the parent record using the identifying value. 

Ryan

Show all comments

Hi, folks. By default, custom angular components have no setting UI panel, as on screen. I haven't found any info in docs, so maybe here somebody knows how to add user-friendly way to set up component?

Like 0

Like

2 comments

Hello,
​​​​​​​
Unfortunately, for now, the system does not support such no-code option. However, already informed our developers about this option, and they will work on this feature in future versions. 

Thank you for helping us improve the system!


Best regards,
Ivan

Ivan Savenko,

ok, thx. Maybe there is some way to detect when page opened in configuration mode?

Show all comments

Hello Community,

I added an expanse list like below:

I find the Apply column quite wide, and I want to narrow it down, but I can’t do it through the interface (perhaps the width has hit the minimum column width). I have also gone into the source and adjusted the parameters, but it still has no effect. Anyone with experience, please help me. Thanks very much

File attachments
Like 0

Like

2 comments
Best reply

Hi,

 

Unfortunately, the current version does not allow for changing the minimum column width. We have not received similar requests before, which is why the implementation of this functionality was not considered. Based on your request, I will create a suggestion for implementation, and we will collect user feedback to assess the possibility of adding this functionality in future versions. 

 

Please stay tuned for updates, and thank you for helping us improve our products!

Hi,

 

Unfortunately, the current version does not allow for changing the minimum column width. We have not received similar requests before, which is why the implementation of this functionality was not considered. Based on your request, I will create a suggestion for implementation, and we will collect user feedback to assess the possibility of adding this functionality in future versions. 

 

Please stay tuned for updates, and thank you for helping us improve our products!

Sergii Zhmurko,

Thanks very much

Show all comments

Hello, I have a [Object A] form page where I have an Expanded List (detail) inside it [Object B] created. In [Object B] I need to have multiple records, so now I need to make a relationship between [Object A] and [Object B], but the app doesn't show me a relationship between IDs or anything like that.

I've already tried manually creating a Lookup inside [Object B] pointing to [Object A], but I was wondering if there's a better way to do it?

Like 1

Like

1 comments
Best reply

Hello,

You need to create one-to-many relations between these objects. To do this, you need to create a lookup column in each object that will refer to another object. After that, you will be able to use filters and relationships to display and customize the necessary lists.
You can't do it using no-code elements because this connection is set up at the object level.

Hello,

You need to create one-to-many relations between these objects. To do this, you need to create a lookup column in each object that will refer to another object. After that, you will be able to use filters and relationships to display and customize the necessary lists.
You can't do it using no-code elements because this connection is set up at the object level.

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

Hello Creatio Community,

 

I am currently working on a page in Freedom UI which contains a detail. The detail's object resides in Classic UI. I need to apply field validation on this detail while performing inline editing within the Freedom UI.

 

Here's a brief overview of what I'm trying to achieve:

  1. The main page is in Freedom UI.
  2. The detail object is in Classic UI.
  3. I need to implement field validation on the detail during inline editing.

     

I've attempted a few approaches, but none seem to provide the desired results. Has anyone faced a similar challenge or can provide guidance on how to achieve this functionality?

Any help or pointers would be greatly appreciated.

 

Thank you!

Like 0

Like

1 comments

Hello Kumar,
Looks like this task is impossible for now because Freedom UI doesn't allow getting the value of one control (attribute) in the code of custom validator for another control.

We have this task registered on our R&D team and will get this possibility in future releases, please follow the updates.

Best regards, Anhelina!
 

Show all comments

Hello.

I have a freedom UI FormPage, which may be opened from Business process (Open edit page element). I want to override Cancel button handler in such way that to cancel current business process. I need to know process id (SysProcessLog table) or process element id (SysProcessElementLog table). How could I obtain them in Freedom UI? For example in Classic UI edit page there was dedicated attribute called ProcessData. I looked through request.$context and didn't find anything similar.

 

Creatio version is 8.1.2

Like 0

Like

2 comments

Hello!

 

To find information, you can read the data from SysProcessData, more information which contains the interrelationship between the process instance and the subprocess, the relationship to the process scheme, the relationship to the process scheme element if the instance is a subprocess, and the current status of the process instance. Also, the internal state of the process is a snapshot of the values of the parameters at times when the process elements are executed.

 

Also, this article could be useful:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/development-tools/external-ides/examples/develop-c-sharp-code-in-a-custom-project

 

Kyrylo Atamanenko,

Thanks for an answer. But to read all those information I need to know Id of an element being executed. For example in Classic UI it is obtained like 

this. 

const processElementUId = this.get("ProcessData").procElUId;

And the question is there analogue in Freeom UI page?

Show all comments

Hey community,

          The issue is that I have a quick filter field, and when the zoom-in % of the screen is at 75% or greater, the field dropdown visibility is not proper. I'm trying to modify the CSS so that it works irrespective of the screen zoom. Is there a way to do this?





 

Like 0

Like

2 comments

Hello,

 

Please provide a screenshot of how the issue looks on your end.

Hi Mira Dmitruk,

    

In the image provided above, the screen zoom level is below 75%, resulting in the Quick Filters dropdown appearing correctly.

In the image above, with the screen zoomed in beyond 75%, the Quick Filters dropdown remains inaccessible, unless the filter is double-tapped, thereby revealing the dropdown.

Show all comments