Hello Everyone,

 

How to convert input text value to ***** in Freedom UI.

 

Thanks.

Like 0

Like

1 comments

You can try using the password input which will mask the entire text as ****. This control doesn'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)

Ryan

Show all comments

Hello, 

 

I would like to set an upper limit on the size of an image that gets sent in an email. The image being sent is a variable in a form using the [#ImageName#] syntax. 

 

I have tried styling the element in div and img tags, but I think that this variable syntax does not respect styles.  

 

How can I style an image in an email template? 

 

Thanks!

Like 0

Like

1 comments

Hello,

 

Unfortunately, the logic of inserting an image through a macro into a letter template is not implemented in Creatio.

I am broadcasting your wish to the development team to consider the possibility of adding similar logic in future versions.

Show all comments

Hello All,

Can Anyone knows, on clicking on tab open popup window in Freedom UI ?

Like 0

Like

1 comments

Hello,

 

Could you please describe your business goal in more details, with screenshots if possible?

Show all comments

Hi all, 

I'm seeing several examples of how to handle the click event of a button in FreedomUI.

 

Was wondering which other events can be handled in the controls. I'm interested in the lostFocus or blur event of an input field. Is there any way to handle that event?

Where I can get documentation about all control events that can be handled?

 

I also saw some examples about handling any change of any viewmodel property. I-d like to handle view events for specific controls.



Thanks!

Like 0

Like

2 comments

Hello Andres!

 

Unfortunately, there are no specific event handlers for the fields.

 

But you can create your own handler for the blur event using the "handlers" schema section of the Freedom UI page or a remote module.

This request should be bound to the “blurred” property of the input field in the “viewConfigDiff”:

 

 

Also, the list of the generic query handlers is available here: https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/front-end-development/freedom-ui/client-schema-freedomui/references/handlers

 

Example of the invoking the query handler - https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/platform-customization/freedom-ui/page-customization-basics/examples/change-where-the-query-handler-is-invoked

 

 

Best regards,

Natalia

 

Thanks! Actually the "blurred" property is what I was looking for.

Is there any documentation in which I can see all the properties that can be bound for a field, in the same way we can bind blurred?



Thanks!

 

Show all comments

Is it possible to set up useful number truncation in Creatio for Measure/KPI elements in Freedom UI? OOTB, if a number being shown in the Measure component is too long, it just gets cut off and ellipses put at the end to indicate it's not all showing, but this means the user cannot tell how big the number is at all! It could have 3, 6, 9 or more extra zeroes hidden in the ellipsis. e.g. the following could be showing 191 million, 191 billion, 191 trillion etc:

 

Ideally it would be possible to set it up so that you can choose to have automatic truncation using abbreviations like 10M or 20K if the number is too long, but it would also be nice if we could specify in the number formatting that the number should always be shown in thousands, millions etc - possibly something like specifying "{0k}" in the number format for always showing the number in thousands. Don't know how possible any of this is today or would require changes by Creatio, but any advice appreciated. Currently using Creatio 8.1.0

Like 1

Like

1 comments

Yes this is getting pretty frustrating among metrics and graphs alike for a couple years now, not to be able to set to K or M etc...

Show all comments

I'm overriding the HandleViewModelAttributeChangeRequest request handler in client code, and want to set a hidden parameter used for showing/hiding fields and making them required/not required in this code when the page first loads, but I don't want this change to be detected by Creatio as a save-able change so that it thinks there is a change to be saved when closing the page. Is it possible to do this? I've tried setting the "silent" property of the request to true in the HandleViewModelAttributeChangeRequest handler and also tried setting the "IsChanged" property of the request.$context to false after changing the attribute value, but neither of these seems to prevent the "You have unsaved changes that will be lost. Continue?" dialog from showing when closing the page.

 

I'm currently using Creatio 8.1.0

Like 1

Like

6 comments

Can you please provide some direct example of what you are trying to achieve since unfortunately it's not obvious to us what is performed on the page at the moment, what is the expected result and what is the actual result? Maybe some steps to reproduce it in the local application (like the following:

 

1) Add column A

2) Add attribute B

3) Connect B to A in the following manner

4) Go to the page where the column and the attribute were added

5) Do "this"

6) Expected result is C

7) Actual result is D

 

) .

 

Thank you!

Oleg Drobina,

Basically all I want is to be able to set the value of an attribute in code without triggering the "You have unsaved changes that will be lost. Continue?" message when you leave the page. Is this possible?

Harvey Adcock,

 

I tried to reproduce the issue, but changing the value of the virtual attributes (like attributes created to control the visibility of the field) by itself does not cause this dialog to appear. 

Please ensure that no other changes need to be saved on the page. Or provide us with additional information describing the exact steps to reproduce the issue.

 

Best regards,

Natalia

Natalia Kalynovska,

 

Sorry, I was probably not detailed enough in my abbreviated version - the changes are actually to an attribute that is based over a real column on the entity, so not a virtual attribute. Is there any way to modify such a field in code without triggering the dialog?

Hello Harvey,

To change the field without triggering the dialog, you should save it at once.

It could be implemented by adding the following code to the HandleViewModelAttributeChangeRequest:

if (request.attributeName === “[Name of the attribute]”) {

const saveResult = await this.handlerChain.handlerChain$.process({

           type: "crt.SaveRecordRequest",

           preventCardClose: true,

           $context: request.$context

    });

}

Please pay attention that too many saving requests may decrease performance.

 

Another way is to save the necessary changed values to a virtual attribute first, and then extract all of them (set attributes values) and initiate SaveRecordRequest while closing the page (in crt. ClosePageRequest). This approach has some disadvantages:

  1. you need to manually adjust the visibility  of “SaveButton” and “CloseButton“ by adding the corresponding merge operations to “viewConfigDiff” of ListPage and FormPage modules (see example - https://community.creatio.com/questions/how-remove-closesave-button-custom-section);
  2. data would be saved only on a close/back button click.

And again – you should provide some conditions in order not to store too many changes.

 

Additionally, starting from the 8.1.1 Creatio version, the dialog may be prevented by adding to handlers the overridden “crt.CanDiscardUnsavedDataRequest” handler:

{request: "crt.CanDiscardUnsavedDataRequest", handler: async (request, next) => {return true;}},

(see https://community.creatio.com/questions/possible-suppress-message-upon-canceling-freedom-ui-mini-page).

However, it still requires manually adjusting the button's visibility and providing proper data saving.

 

Best regards, 

Natalia

Thanks Natalia, it would be really useful to have the functionality for making silent changes from code that existed in Classic UI added back into Freedom UI - see this post for what was possible in Classic: https://community.creatio.com/questions/change-value-field-without-firing-changed-events

 

The utility can be in setting fields from code when a create record page loads based on more complicated conditions than you can define in business rules/by other means, but not causing the user additional clicks to cancel or think that they might lose work.

Show all comments

Hello Everyone, 



We have a scenario where I have created two new sections in Freedom UI (Opportunity and Order). Everything is working fine but when we click on the Opportunity in Order page it opens the Classic UI Opportunity Page instead of the newly created Freedom UI Page. Can anyone help me out with this?

Like 0

Like

1 comments

Hello,



In this situation, please check if you have the "UseNewShell" system setting enabled. Also in the "Object-specific form page interface in the Freedom and Classic UI shell" lookup, check that Opportunity is specified in the Freedom UI pages. The necessary instructions, I send below:

1. Turn on Freedom UI

2. Manage form pages in Freedom UI

Show all comments

Hi Community!

 

I need to display existing documents from other sections together with the directly attached documents in FreedomUI 8.1.

 

The attachments are stored in the table "SysFile", which has a column called "TypeId". That lookup has the values "File" (default), "Link" and "Link to object".

 

I have tried to tinker around with the database of my on-premise dev environment. While I could manage to display inserted documents of type "Link", they won't open because the SysFile-table has no columns for referencing other documents.

 

There is also a table called "FileLink", which looks promising because it has the columns "FileSchemaName", "FileRecordId", "RecordSchemaName", "RecordId". That would be enough to link existing documents to various records, but the don't show up in the FreedomUi AttachmentList component.

 

Did anyone already manage to do this without duplicating documents?

 

Any help is much appreciated, thanks!

Robert

Like 2

Like

1 comments

Hi Robert!

 

Unfortunately, displaying the various sections' attachments together in one attachment component is impossible. However, you can use a separate attachment component for each section.

 

To implement this, we recommend the following steps:

1.  Open the Page Designer.

2.  For each section that you would like to display the attachments from:

- add the dropdown field, specifying this section as “Lookup” in the field’s general settings (or make sure that such a dropdown field already exists);

- add the attachment component.

3. In each added attachment component, set “Record to attach files” (general settings) to a value from the previously added dropdown field and “File storage location” (advanced settings) to the corresponding table.

 

After you choose the exact records in the dropdown fields, they will be linked to the current record, and you will see their attachments in the corresponding components. It will help you to avoid duplicating documents.

 

Best regards,

Natalia

Show all comments

I'm trying to improve a UX flow in one of our clients, and to do so I'm hoping it would be possible to create a modal dialog box which can have a date selected from a date picker, but I can't see any obvious ways - is there anything that can be done for this? I saw this excellent guide on getting a Yes/No type dialog in Freedom UI, but I can't see any extra capabilities for potentially adding more freeform user interaction: https://customerfx.com/article/showing-a-message-dialog-or-confirmation…

 

Any help would be greatly appreciated. Currently on Creatio CRM 8.1.0

Like 0

Like

10 comments
Best reply

Hi Harvey,

I've done this in several areas in our system using modal forms (actually called a Mini Page in the page types dialog you select from when creating a new page). Here's an example of a dialog allowing the case status to be set from a list (we don't use editable lists yet since there's no way to add validators yet to lists):

This is just a modal/mini form created using the form designer. The nice part about this is that it can be bound directly to the object (I have many that aren't bound as well, depending on the scenario).

You can open this specific page for a particular record using this method (also possible with an action in no code designer as well) https://customerfx.com/article/opening-a-record-for-edit-in-a-specific-…

Ryan

Hi Harvey,

I've done this in several areas in our system using modal forms (actually called a Mini Page in the page types dialog you select from when creating a new page). Here's an example of a dialog allowing the case status to be set from a list (we don't use editable lists yet since there's no way to add validators yet to lists):

This is just a modal/mini form created using the form designer. The nice part about this is that it can be bound directly to the object (I have many that aren't bound as well, depending on the scenario).

You can open this specific page for a particular record using this method (also possible with an action in no code designer as well) https://customerfx.com/article/opening-a-record-for-edit-in-a-specific-…

Ryan

Ryan Farley,

Thanks for the reply Ryan, that seems like exactly what we're after! I had wondered about using a Mini Page for it but wasn't sure how that would be hooked in to work. How are you triggering the mini page to be displayed, I take it it's from code? Is it using something like the following when clicking a button or whatever the trigger is:

const handlerChain = sdk.HandlerChainService.instance;
 
await handlerChain.process({
	type: "crt.CreateRecordRequest",
	entityName: "CustomEntity",
	entityPageName: "CustomEntityMiniPage",
	$context: request.$context,
	defaultValues: [{
		attributeName: "Col1",
		value: "Val1"
	}]
});

 

Or are you able to get a Mini Page to appear without some entity it's based over? For our requirements, the data field to be modified would actually be on the entity of the Form Page the user was currently on, so it didn't seem like the crt.CreateRecordRequest would make sense, but the crt.OpenPageRequest always seems to open the Mini Page as though it were a full-sized page, and the crt.UpdateRecordRequest I hadn't tried yet as I didn't already have a Mini Page for the entity and thought it likely wouldn't work as the mini pages are generally used for adding data, not editing?

 

Thanks again.

There's so many uses of modal (mini) pages beyond just what mini pages were used for typically in classic ui. 

IMO It's one of the best additions to Freedom UI, the ability to create dialogs for specific purposes, bound to a record or not, that really enhances the user experience. This is a prompt for selecting parameters for a report.

Ryan

Harvey Adcock,

You would use an "crt.OpenPageRequest". I edited my original post to include a link to an article showing how to open it to edit a record. 

Ryan

Harvey Adcock,

In older versions the "crt.OpenPageRequest" did open the page in full screen, even if a modal page. But I think that was fixed in 8.0.10 and has been working for me (it does open as a modal)

Ryan

Perfect, thanks Ryan, really helpful!

Ryan Farley,

 

One more question, is there a way to pass information from the current page to the page being opened via the OpenPageRequest? Trying defaultValues, similar to what you would use when creating a new record from a page launched by code, doesn't seem to have any effect, and I can't see any other candidates for it.

Harvey Adcock,

I’m not 100% sure but I think you can only pass values for a new record (crt.CreateRecordRequest) only. 

Alternatively, you could write some values to a global or use the StorageUtilities module and then read from the form once opened. See StorageUtilities here: https://customerfx.com/article/persisting-data-between-pages-in-creatio…

Ryan

Harvey Adcock,

You can try something like this to pass defaultValues

request.$context.executeRequest({
	type: "crt.OpenPageRequest",
	$context: request.$context,
	schemaName: "UsrYourCustom_FormPage",
	modelInitConfigs: [
		{
			action: sdk.ModelInPageAction.Edit,
			recordId: yourRecordId
		},
		{
			defaultValues: [
				{
					attributeName: "someName",
					value: "someValue"
				}
			]
		}
	]
});

 

Alex Zaslavsky,

 

Does this passing of values work for passing a value into a Page Parameter? Or is there some way to do so? The value I want to pass to a new page (either through OpenPageRequest or CreateRecordRequest) is not on the entity, it's just a parameter on a page, but we need to set this value when opening the page.

Show all comments

Hello Everyone,

I have implemented saving functionality in Freedom Ui.

const saveRecordRequest = {

    type: "crt.SaveRecordRequest",

    preventCardClose: true,

    $context: request.$context

};

                     

// now execute the save request and check if it was successful

if ((await request.$context.executeRequest(saveRecordRequest))) {

    // save was successful, continue with something else here

}

else {

    // save was not successful (maybe due to required fields not being filled in)

}

I have followed this link

https://customerfx.com/article/saving-a-page-before-some-action-on-a-cr…;

it is saving  the record but after saving record it is  not automatically coming to list page as save button functionality is working.

Can anyone Please guide me here, How I can get that

Like 0

Like

2 comments

What is the behavior you're expecting? Can you outline the scenario you're trying to accomplish? 

In the code you're including preventCardClose: true which specifically tells the page to not close after saving. If you want the page to close after the save, you need to remove that part (or change to false). However, there could be other factors of what a page does after saving (you could force the navigation back to the list using some code if wanted)

Ryan

preventCardClose:false , this works for me .Thank you  @Ryan for guiding me

Show all comments