Время создания
Filters
case
Lifcycle
Service_Creatio
8.0

Hello, we are experiencing unusual behavior of OOTB Case Lifecycle object. In the example below you can see a discrepancy in the dates between record 10 and 9. Record no. 10 ends at 24/09/2025 12:02 while record no. 9 starts at 25/09/2025 09:23. This creates almost a day long gap in continuity of lifecycle.

The depicted discrepancy is caused by excessive records being created at database level. These records are for the most part empty missing: CaseId lookup values that is used for list filtering, StatusId, OwnerId, PriorityId, ServiceItemId, GroupId, SolutionDate, SolutionProvidedOn.

Example of missing record from example above (minor differences due to database time zone):

This occurs very sporadically and we believe to be caused by excessive triggering of CaseSaving event in Case entity process. Specifically SaveLifecycle() method. This is consistent with change logs records. In the screen shot below is an example of expected behavior first after creation CaseSaving event and then CaseSaved event populating the fields we are missing.

 

Correct behavior

 

Example of an excessive record in change log:
Case was not modified in any of the fields fields monitored by CaseLifcycle but CaseSaving was triggered. Alongside it CaseSaved does not trigger causing missing data in the records.



Our conclusion is that CaseSaving event triggers unexpectedly under conditions that are not known to us.

This behavior has been observed in more than one independent environment meaning it is unlikely to be caused by any custom development.

If anyone has encountered such behavior I would appreciate any findings you might have on this matter.

Records created in such manner can be easily queried with command such as this:

SELECT * FROM "CaseLifecycle"
WHERE "CaseRecordId" IS NOT NULL
AND "CaseId" IS NULL
AND "CaseRecordId" IN (SELECT "Id" FROM "Case") 

Like 1

Like

0 comments
Show all comments
FreedomUI
Requests
crt.CreateRecordRequest
Studio_Creatio
8.0

Hi, community! 

Recently noticed that while executing crt.CreateRecordRequest programmatically I cannot pass default values for page attibutes that are not schema fields. I am aware about defaultValues parameters for CreateRecordRequest and it works correctly for page fields so they are filled in, but no such behaviour for attributes. Maybe it possible to access defaultValues array in the opened page in HandleViewModelInitRequest and set a attribute value manually, but I didn't find the way to do it. Any advices on this are much appreciated.

 

const handlerChain = sdk.HandlerChainService.instance;					
await handlerChain.process({
	type: "crt.CreateRecordRequest",
	entityName: "MySuperEntity",
	$context: request.$context,
	defaultValues: [{
		attributeName: "SomeField", //this is MySuperEntity field and it's filled in the form page correctly
		value: "SomeValue"
	},
	{
		attributeName: "SomeAttribute", //this is MySuperEntity_FormPage attribute and and it's empty in request.$context.SomeAttribute in HandleViewModelInitRequest 
		value: "SomeAnotherValue"
	},
});	
Like 0

Like

2 comments

Hi, Sergejs. You should do it as following:

{
	request: "crt.HandleViewModelResumeRequest",
	handler: async (request, next) => {
		await next?.handle(request);
		setTimeout(() => {
			request.$context.Param1 = someValue1;
			request.$context.Param2 = someValue2;
		}, 300);	
	}
}

Dmitry S,

Can you please clarify what is someValue1 and someValue2 in your example? As far as I can understand, you are setting attribute value inside same page in the HandleViewModelResumeRequest.

My scenario is slightly different, I am trying to pass the attribute value from another page. So for instance - I have a button on a page1, this button has a custom click handler, where I call CreateRecordRequest with some parameters. In result page2 opens and I want to set it attribute with the value from the parameter i passed in CreateRecordRequest. I hoped it works automatically, but it's not. I tryed your HandleViewModelResumeRequest code with little modification, but attribute value still is null for me.

			{
				request: "crt.HandleViewModelResumeRequest",
				handler: async (request, next) => {
					await next?.handle(request);
					setTimeout(() => {
						const a = request.$context.SomeAttribute; //a is null here
					}, 300);
				}
			},
Show all comments
Is_it_possible_to_use_Selection_Page_lookup_with_dynamically_populated_lookup_values_in_Freedom_UI?

Hello,

I am working on a Freedom UI mini page where the lookup values are populated dynamically at runtime (not from a static entity data source).

Currently, I am using a crt.ComboBox and passing dynamically generated values into the list. However, I would like to use the standard lookup behavior (magnifier icon → selection page) to enable built-in search functionality.

The challenge is that the values are not coming from a fixed entity schema — they are generated dynamically based on contextual logic.

My question:

Is it possible to use the standard lookup selection page behavior with dynamically populated lookup values (without binding to a static EntityDataSource)?

If yes, what would be the recommended approach in Freedom UI?

Any guidance or best practices would be greatly appreciated.

Thank you!

Like 0

Like

1 comments

Hi, 

I haven't done this yet by myself on lookup field, but on quick filter field with lookup type, the whole idea is the following. This is normal lookup fields parameters:

"PDS_Owner_7mvaqih": {
	"modelConfig": {
		"path": "PDS.Owner"
 	}
},
"PDS_Owner_7mvaqih_List": {
	"isCollection": true,
		"modelConfig": {
			"sortingConfig": {
				"default": [
				{
					"columnName": "Name",
					"direction": "asc"
				}
			]
		}
  	}
}

as we can see here PDS_Owner_7mvaqih is a field, and PDS_Owner_7mvaqih_List is some dataset, where some owner lookup values are stored. So you can manipulate with this lookup via JS as you wish (naturally, the structure of you values has to match exactly as it is by default), as you can see here in example: 

{
	request: "crt.HandleViewModelResumeRequest",
	handler: async (request, next) => {
		await next?.handle(request);
		const department = await UsrCommonModule.getCurrentUserTeam(true);
		if (!Ext.isEmpty(department)) {
			request.$context.PageParameters_LookupParameter1_7pw8znf = department;
			department.checkedState = true;
			delete department.primaryColorValue;
			delete department.primaryImageValue;
			request.$context.QuickFilter_orifxps_Value = [department];
		}
	},
},

here we delete quick filter value by default and feel it with one record (actual user's department):

department.checkedState = true;
delete department.primaryColorValue;
delete department.primaryImageValue;
request.$context.QuickFilter_orifxps_Value = [department];

So, referring to the first part I can do with PDS_Owner_7mvaqih_List everything I want by something like request.$context.PDS_Owner_7mvaqih_List = [{...}, {...}]

Exact structure for the request.$context.PDS_Owner_7mvaqih_List you can find out via debugger in the request.$context object.

I'll be glad to answer your possible questions :)

 

Show all comments
FreedomUI
replacing client module
Service_Creatio
8.0

Hi All,

I want to use Case Management Form Page to configure it for different use cases (multiple different type of cases with different UI), I wanted to utilize the UI of Case Management Form Page. This will insure base UI remains same and all the different cases development will be done on different form page. Just like when you create a Freedom UI the skeleton structure is same as its parent is  PageWithTabsAndProgressBarTemplate (CrtUIPlatform), I want to do the same with case management form page as right now parent icon appears locked to me.


Let me know if this is possible or require more clarification, thanks for the help and support!
Rishav

Like 0

Like

1 comments

Hi Rishav, you mean this?

 

 

if so, you should add (and/or enable) AllowCreateAngularSchema feature. This action will after log on show the mentioned option. Other way is to create replacing page normally by

 

and then edit it's source code in configuration section:

 

Show all comments
Studio_Creatio
Sales_Creatio
Service_Creatio
Marketing_Creatio
Studio_Creatio
8.0

Hello Everyone,

I want to integrate Creatio with a hardware device (such as a signature pad or scanner). The hardware vendor provides a browser-based SDK for integration.

I would like guidance on the following:

  1. What is the recommended approach to integrate a browser-based hardware SDK with Creatio?
  2. Can the SDK be directly integrated using client-side JavaScript in Creatio (Freedom UI)?
  3. Are there any limitations or security considerations when working with browser-based hardware SDKs in Creatio ?
  4. Has anyone implemented a similar hardware integration in Creatio? If yes, what approach worked best?

Any best practices, documentation references, or real-world examples would be greatly appreciated.

Thank you.

Like 0

Like

0 comments
Show all comments