I have two attachment pages, but when I attach a file on the first page, it also appears on the second page. How can I implement a filter so that the attachment only shows on the page where it was uploaded? i'm using FreedomUI.

 

Like 0

Like

0 comments
Show all comments

After adding records ,How can I reload a detail list in a Freedom UI page from a task script within a business process, without using the live update feature in the object?
Thank you

Like 0

Like

3 comments

Note that i'add this code in the task script in the process 


var userConnection = Get<UserConnection>("UserConnection");
string messageText = "Successful";

Terrasoft.Configuration.MsgChannelUtilities.PostMessageToAll("ReloadDetail", messageText);
return true;    

i got this error message 
"The type or namespace name 'MsgChannelUtilities' does not exist in the namespace 'Terrasoft.Configuration' (are you missing an assembly reference?"

 

 

"The type or namespace name 'MsgChannelUtilities' does not exist in the namespace 'Terrasoft.Configuration' (are you missing an assembly reference?" - this error message will occur in case the business process is created in the assembly package. The only workaround is to uncheck the "Assembly package" property in the package settings or move the process to the regular package.

 

As for the possibilities and if LiveUpdate is not an option - yes, socket nessage to the client-side and triggering the LoadDataRequest with reload enabled is the only option.

I also encountered this same error, but in my case, it was due to a dependency issue. I resolved it by adding the 'crtBase' package as a dependency in the package containing the business process.

Show all comments

Hi Community,

I want to run a function only if the SaveRecordRequest is true. I tried to run await next.handle(request), but it returns undefined even if the record is save is successfully. Here is my code and test result:

 

 

			{
				request: "crt.SaveRecordRequest",
				handler: async (request, next) => {
					const saveResult = await next.handle(request);
					if(saveResult) {
						const id = await request.$context.Id;
						const files = await request.$context.SPJFile;
						await carPooling.uploadSPJ(id, files);
						request.$context.SPJFile = null;
					}
 
					return saveResult;
				}
			},
Like 0

Like

1 comments
Show all comments

Hello Community, 

We have a button in Freedom UI that calls a Business Process.

We want this button to be disabled at least for several seconds, till the process is completed. Clicking the button again, while the BP is still running might bring several issues to our logic.

(Printscreen: Button calling BP)

How can this be achieved?

Regards,Sasor

Like 1

Like

4 comments

Interesting idea :)

We could do with this.  I think I may have implemented this in the past by disabling the button on calling the process, and using the Send Message element at the end of the business process to publish a message that the client module is subscribed to to re-enable the button.

Hello community,

Is there any other way besides the Backend-Frontend websocket (which I havent tried yet)?

Sasori

Sasori Oshigaki,

As long as the process is not set to run in background, and you're starting the process via code, you can use the method outlined in the article below to know that the process has completed and re-enable the button without the need for messages: https://customerfx.com/article/starting-a-process-from-client-side-code-on-a-creatio-freedom-ui-page-and-getting-back-outgoing-process-parameters/

Ryan

Show all comments

Dear,

We are currently moving from classicUI to freedomUI and I m not able to do a simple filter on a lookup.

I want to filter a contact lookup of the account page. I only want to display the account contacts.

So in the account page business rules i did :

But the lookup is not filter

What do i miss ?

Is it because there is no condition ?

Thank you in advance,

Nicolas

 

Like 0

Like

4 comments
Best reply

Yes, you have to populate the condition part. You can create an always true condition as a workaround (true == true).

Yes, you have to populate the condition part. You can create an always true condition as a workaround (true == true).

Fyi this is fixed in 8.2.2. Release notes mention: Streamlined business rule setup. "Dynamic filter" and "Set value" business rules no longer need conditions to work

i had to add a condition then the rules works. i added if id is filled in.

I managed to filter a contact lookup using a business rule based on the contact's account name. For another contact lookup, I need to filter the contact ID to match the page's account ID.
can this filter be implemented as a business rule ?
after several days of research, I still don't see how to perform this filter without code...
Can someone help me please ?

Show all comments

Hi, 

Does Creatio support multi-select downdrop lists?

Like 0

Like

1 comments

How can I capture the newly changed field value before saving a record in a crt.SaveRecordRequest in Creatio Freedom UI? Currently, I am getting the old value instead of the new one.

Like 0

Like

4 comments

You can just retrieve them as below, which will get their current value at the time of the save. 

const val = await request.$context.AttributeName;

Alternatively you could use a change request handler, which gives you both the new and old values as properties of the request. See https://customerfx.com/article/responding-to-an-event-when-a-field-is-changed-on-a-creatio-freedom-ui-page/

Ryan

Ryan Farley writes:

You can just retrieve them as below, which will get their current value at the time of the save. 

const val = await request.$context.AttributeName;

i ' m Querying Data Using Filter Conditions via the Model Class in the save handler request . that s whey i only get the old value..

 

How can i use the change field event request handler in the save request handler??

If you are looking into the direct way to get changed attributes values in the SaveRecordRequest - there is none documented on our side. But you can use HandleViewModelAttributeChangeRequest where request has the oldValue and value properties, save the original values of needed attributes into the separate parameters and use these parameters in your task.

Show all comments

Hello,

 

I have a master record and a detail where I allow inline editing. Making changes on the detail triggers an update on the master record. Because the table behind the master record has live updates, the changes are immediately reflected on the master record. 

All that logic works fine. The issue I have is that if the user makes changes to the master record and then changes to the detail (like adding a new detail, deleting or editing an existing one,) the changes on the master record are not saved,.

Is there any way to save the master record when the user saves the detail changes?

Thanks,
Jose

Like 0

Like

1 comments
Best reply

Hello,

Thank you for your request. Unfortunately, it is not possible to change this behavior using custom methods.
 

As a workaround, you can achieve this using development methods.

To achieve this you can to implement custom handlers for two requests:


1. When saving changes in the detail list (crt.SaveRecordsRequest)

First, execute the default logic for saving the detail records.

Then, trigger crt.SaveRecordRequest to ensure that the master record is also saved.
 

Be careful not to confuse the requests—crt.SaveRecordsRequest is for saving multiple records, while crt.SaveRecordRequest is for a single record.
 

2. When deleting records from the detail list (crt.HandleModelEventRequest)

Execute the default logic first.

Then, check if request.modelEvent.type === 'delete'.

If it is a delete operation, trigger crt.SaveRecordRequest to save the master record as well.

Hello,

Thank you for your request. Unfortunately, it is not possible to change this behavior using custom methods.
 

As a workaround, you can achieve this using development methods.

To achieve this you can to implement custom handlers for two requests:


1. When saving changes in the detail list (crt.SaveRecordsRequest)

First, execute the default logic for saving the detail records.

Then, trigger crt.SaveRecordRequest to ensure that the master record is also saved.
 

Be careful not to confuse the requests—crt.SaveRecordsRequest is for saving multiple records, while crt.SaveRecordRequest is for a single record.
 

2. When deleting records from the detail list (crt.HandleModelEventRequest)

Execute the default logic first.

Then, check if request.modelEvent.type === 'delete'.

If it is a delete operation, trigger crt.SaveRecordRequest to save the master record as well.

Show all comments

Is there a way to add custom functionality to message composer send button(in case of email) in case section(freedom UI).

 

Like 0

Like

1 comments

Hello,
 

At the moment, the Message Composer element is not customizable in the system. We recognize that this limitation may affect your workflow and the flexibility you need to tailor the system to your specific business requirements.
 

That being said, we want to assure you that we are actively working toward enhancing this functionality. Based on the feedback we've received from you and other users, we've increased the priority of this task.

Your experience and satisfaction with the product are very important to us. We constantly strive to make Creatio more adaptable and user-friendly, and your feedback plays a key role in guiding these improvements

Thank you for your patience and understanding.
 

Show all comments

In the classic version we can communicate between modules, for example from page to detail or vice versa using messages.

I have case in my form page there is a modal page, when the modal page is closed it will send data to the form page to do something.
How to implementation in freedom?

Thank you

Like 2

Like

1 comments

It would likely work to use requests with the correct scopes set for message exchange like how sandbox worked, but I've not really tried to implement that across different pages. It might also work to just use Javascript's built-in Broadcast Channel API for that as well. It exists for purposes like this, messaging between different contexts. See details here: https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API

Ryan

Show all comments