Hi, 

Trying to add pre-defined filter which will list only transaction which were modified in last 10 mins in a Freedom Page. In the setting only Previous hour can be presented -- is there any way to handle this 

 

Thanks 

Like 0

Like

0 comments
Show all comments

Hello,

In my Project's form page, I have two charts that summarize data from a Time Cards object in the form of a bar chart and a column chart. After placing the chart component onto my form page, I had trouble resizing the charts to make them larger. I attached below an image for reference. Any help on how to resize charts would be greatly appreciated. Please let me know if you have any questions or need me to further clarify. 

 

Best,

Shubh

Like 0

Like

2 comments
Best reply

If you drag them taller it will give more room for the chart bars/columns and the text will be more readable.

If you drag them taller it will give more room for the chart bars/columns and the text will be more readable.

Ryan Farley,

Thank you! This worked. I did not see the little square to drag the chart taller before.

Show all comments

Hi, Community.

Can you tell me if I can flip the register on list page by 90 deg?

Like 0

Like

2 comments

Hello!

Could you please add more details regarding your business aim?

If you mean changing the list page view in the section, in Creatio, list pages typically display data in a tabular format.

The main goal is to implement a schedule for approximately 100 employees.
There was an idea to implement it using a registry element.
However, the usual calendar view does not quite fit (i.e., dates and working hours are represented horizontally, and employees are listed vertically).
Since the number of employees will be relatively static, but weeks/months will continuously be added, the standard registry view is not entirely suitable for implementation.
The need arose to add new records horizontally (with the ability to scroll left/right) — these will be the weeks/months, while employees will remain static vertically.

The idea is to add new records to the registry horizontally, not vertically.
If it's not entirely clear, I can explain in more detail.

Is such implementation possible?
Perhaps you already have a ready solution for the schedule or better alternatives for implementing it?

Show all comments

Hi,

 

We have a environment where Creatio is System of engagement and core processing is done by backend system. When we query in the Creatio (say using Search field) Creatio invokes SelectQuery -- so how can trap the row count it returns and call a business process if it is zero -- the business process will invoke a API which gets the data from backend application and updates creatio 

 

Just business process with ability to inovke API and load Creatio objects is ready and working fine just how to invoke from Search (from Freedom UI)

Thanks and Regards

Like 0

Like

2 comments
Best reply

The list component has a couple of attributes you can use for this. You'll add a handler for the "crt.HandleViewModelAttributeChangeRequest" request and listen for changes to these attributes. There are a few attributes you could use, one that is ListName_NoItems (boolean) (or "DataTable_NoFilteredItems" for when the list is filtered) or ListName_Items (array of items). If your list component is named "DataGrid_ysopiif", your attribute names would be "DataGrid_ysopiif_NoItems", etc.

Add something like the following to the handlers of the page with the list:

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) => {
        if (request.attributeName === "DataTable_NoItems" || request.attributeName === "DataTable_NoFilteredItems") {
            if (request.value) {
                // no records returned for list
            	Terrasoft.showInformation("No results returned!");
            }
        }
    	return next?.handle(request);
    }
}

Ryan

The list component has a couple of attributes you can use for this. You'll add a handler for the "crt.HandleViewModelAttributeChangeRequest" request and listen for changes to these attributes. There are a few attributes you could use, one that is ListName_NoItems (boolean) (or "DataTable_NoFilteredItems" for when the list is filtered) or ListName_Items (array of items). If your list component is named "DataGrid_ysopiif", your attribute names would be "DataGrid_ysopiif_NoItems", etc.

Add something like the following to the handlers of the page with the list:

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) => {
        if (request.attributeName === "DataTable_NoItems" || request.attributeName === "DataTable_NoFilteredItems") {
            if (request.value) {
                // no records returned for list
            	Terrasoft.showInformation("No results returned!");
            }
        }
    	return next?.handle(request);
    }
}

Ryan

Ryan thanks -- moved to Data_grid and used the following code and it works. 

Now to see how to fix a filter which can show only records which are modified in last 5 mins (out of box gives in hours only)


        handlers: /**SCHEMA_HANDLERS*/[
            {
                request: "crt.RefreshedDataGrid",
                handler: async (request, next) => {
                      const context = await request.$context;
                      const list = await context.DataGrid_cdjhzhp;
                      const listCount = list?.length ?? 0;
                      if ( listCount == 0 &&  await request.$context.SearchFilter_fvbn39g_SearchValue.__zone_symbol__value
!= null ){
                              const uxClaimID= await request.$context.SearchFilter_fvbn39g_SearchValue.__zone_symbol__value
;
                              console.log("Claim Id = " + uxClaimID);
                               const result = await request.$context.executeRequest({
                                          type: "crt.RunBusinessProcessRequest",
                                          processName: "HC_ClaimACID",
                                          processParameters: { ClaimID: uxClaimID },
                                          //resultParameterNames: ["HC_ClaimGUID"],
                                          $context: request.$context
                               });
                               //if (await result.success) { 
                                // }
                       }
                      return next?.handle(request);  
             } 
         }        

Show all comments

Hi Team, is it possible to have recursive sub-processes.  Reason: avoid defining a loop within a process.
In standard BP Designer a process does not show itself as an option for a sub-process.  Wondering if there is a flag or other setting to turn this on.

Like 0

Like

2 comments

Hello! Recursive sub-processes-where a process calls itself directly as a sub-process-are not supported natively in the Business Process Designer, and for good reasons:

Why it's not allowed by default:
Recursion can easily result in infinite process executions if not managed carefully (e.g., no base case or exit condition).

Recursive calls could overload the scheduler queue and background processes.

The BP Designer intentionally filters out the current process from the list of available subprocesses to avoid this scenario.

Alternative Solutions:
1. Create a secondary wrapper process (e.g., MyProcessWrapper) that calls the main process (MyRecursiveProcess).

Inside MyRecursiveProcess, under certain conditions, call the wrapper again.

This technically breaks the direct recursion and gives more control.

2. Instead of recursion, Creatio recommends modeling loops with Gateways (Exclusive or Inclusive) and Intermediate Timer or Signal Events to create a controlled looping behavior.

3. If your recursion is simple (e.g., batch iteration or hierarchical processing), consider using Script Tasks with logic in C# to handle recursion internally. This avoids BPM overhead.

Nick Ovchynnik,

Thank you Nick for the detailed response.

Show all comments

Hi Creatio Community!
I’m currently working on a custom Angular component (Freedom UI) and ran into an issue I hope someone has already dealt with. I created a custom table component that loads data from a web service — the structure is quite complex with nested records, so I chose to use a service instead of standard object bindings.

I'm receiving the current record ID like this:

@Input()
@CrtInput()
public recordId!: { value: string; displayValue: string };

This is how I set recordId into component

{
	"operation": "insert",
	"name": "CustomTable",
	"values": {
		"recordId": "$UsrContractConditionsGroupDS_UsrContract_c00dfo4",
		"type": "usr.Table"
	},
	"parentName": "ListOfTarrifGroupByPeriod_ExpansionPanel",
	"propertyName": "items",
	"index": 0
},

When I open the page for the first time, everything works fine — the recordId arrives as expected. 

But when I back to section and open this record again, the component throws an error because recordId is undefined, and my table is empty.

I’m calling the service directly in ngOnInit().

Could you please advise on the correct way to store the record ID in the component so that it doesn’t get lost when opening the page a second time?

 

Like 1

Like

2 comments
Best reply

Hello Artem,

 

You can store record ID in the custom attribute and populate its value when the page is opening in the request crt.HandleViewModelInitRequest.

 

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
	{
		"operation": "merge",
		"path": [
			"attributes"
		],
		"values": {
			"RecordId": {}
			...
		}
	}
	...
]
handlers: [
	{
		request: "crt.HandleViewModelInitRequest",
		handler: async (request, next) => {
			await next?.handle(request);
			request.$context.RecordId = request.$context.Id;
		}
	}
]

Then you can use this custom attribute in your component

 

{
	"operation": "insert",
	"name": "CustomTable",
	"values": {
		"recordId": "$RecordId",
		"type": "usr.Table"
	},
	"parentName": "ListOfTarrifGroupByPeriod_ExpansionPanel",
	"propertyName": "items",
	"index": 0
},

Hello Artem,

 

You can store record ID in the custom attribute and populate its value when the page is opening in the request crt.HandleViewModelInitRequest.

 

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
	{
		"operation": "merge",
		"path": [
			"attributes"
		],
		"values": {
			"RecordId": {}
			...
		}
	}
	...
]
handlers: [
	{
		request: "crt.HandleViewModelInitRequest",
		handler: async (request, next) => {
			await next?.handle(request);
			request.$context.RecordId = request.$context.Id;
		}
	}
]

Then you can use this custom attribute in your component

 

{
	"operation": "insert",
	"name": "CustomTable",
	"values": {
		"recordId": "$RecordId",
		"type": "usr.Table"
	},
	"parentName": "ListOfTarrifGroupByPeriod_ExpansionPanel",
	"propertyName": "items",
	"index": 0
},

Iryna Oriyenko,

Thank you very much!

Show all comments

Hi, 

    I try to install the excel export logger, and the system setting is all correct, but can't see the excel export loger in audit logger, does anyone have related experience to share?

My cloud instance is version 8.2.1.5446. 

 

 

https://marketplace.creatio.com/app/excel-export-logger-creatio

Like 0

Like

0 comments
Show all comments

Hello,

I have some business processes that reads the files attached to a section using a "Process file" element to add them to a "send email" element.
If the "container" of the attachments is "an old one" (like CaseFile, AccountFile, etc.) it works fine.
If the "container" is the "Freedom UI SysFile" (Uploaded File) the "Process file" element always returns an empty collection of files (even removing all the filters).

How can I send an email from a Business Process and attach the files stored in "SysFile" entity?

Thanks

Like 0

Like

3 comments

Hi,

We've investigated this behavior, and unfortunately, the "Process File" element cannot be configured to work with SysFile in cases where a registered [Object]File schema exists for the object in the system.
Currently, this behavior cannot be modified using low-code or development approaches.

At the same time, this is not the expected behavior, and we are already working on fixing this issue as part of the product. For now, the only viable solution is to use [Object]File for your task.

If your goal is to build a universal process that sends emails with attachments from different entities, we recommend creating separate flows for each object. For example, if the entity is Case, use a flow where the "Process File" element is configured for CaseFile; if it's another object without a custom file storage, use SysFile, etc.

We've also raised the priority of the existing task, taking your user experience into account. This will help prioritize and speed up the resolution.

Thank you for your understanding!

Pavlo Sokil,

Thanks for your reply

In my tests the Process File element doesn't work with SysFile for new Freedom UI objects that don't have a registered [Object]File schema. The returned file collection is always empty.

Any suggestions?

Thanks

 

Massimiliano Mazzacurati,

Hi,

Understood, thank you for letting us know. We've analyzed the situation — currently, the process element doesn't work quite correctly with attachments stored in SysFile.

To resolve this, you’ll need to make a small change to the process metadata. Here's a brief guide on how to do it, using a test section (Test Section) as an example:

  1. In the Process File element, select "Uploaded file" (SysFile) as the object.

  2. Then, in the Advanced settings, you’ll see a parameter called "Source data object" (SourceDataEntitySchemaUId) — this is the object to which the attachments in SysFile are linked.
    You’ll need to manually change this in the metadata to the UId of the actual object you are working with.
  3. Open the process metadata and switch to Modifications package mode.

     

  4. Locate the parameter by its code: "SourceDataEntitySchemaUId", and replace its value with the UId of your desired object.

  5. You can find the UId in the system configuration by clicking the three-dot menu and choosing "Properties" — for example:

  6.  

  7. After that, in the process metadata, update the "GS2" value for this parameter and save the changes.

  8. Important: Reload the process page before making further changes in the designer to avoid overwriting the metadata update.
  9. Now you will notice the changes in parameter's settings in advanced mode:
     

That’s it — now the attachments will be linked correctly.

Please note that for now, this is a workaround. Our team is actively working to ensure the process element handles this case properly without needing to modify the metadata manually.

Hope this helps solve your business task.

Thanks for reaching out!

Show all comments

Hello

In the "Process File" element of a business process, when set to "Generate Report" the template can only be selected from the existing reports dropdown list.

I think it would be very useful to improve the "Process File" element for "Generate Report" allowing to set the template with a business process parameter just like the other process file parameters.

Thanks

3 comments

I agree this would be very useful.

For now, as an FYI, it is possible to set the template to use with a script task. I've written up the steps here: https://customerfx.com/article/dynamically-setting-the-printable-template-for-the-process-file-element-in-a-creatio-process/

Ryan

Hello,

We've registered this idea in our R&D team backlog for consideration and implementation in future application releases. Thank you!

Agree, this would be useful for us too. Thanks Ryan for the guide on how to do something like this today! Ours are based on a handful of different objects, so we would have to have different paths for each object in the BP, but still nicer than having 10+ paths, one for each of the reports at the time of implementation (and could grow in future, so it's nice not to have to modify the BP for every new Printable report created).

Show all comments

Hello Community,

I need to store a snippet of HTML code (e.g., a button or formatted content) into a field of an object (e.g., a text or string field). Later, I want to render this HTML dynamically on a page at runtime.

What’s the best way to store the HTML safely and then render it so that it's interpreted as actual HTML (not plain text) in the UI?
Are there any security or encoding considerations I should keep in mind?

Thanks in advance!

Like 2

Like

6 comments
Best reply

An easy no code way would be to bind the value to a read-only Rich Text control on the page. It will display the HTML as HTML.

Otherwise, you'd have to create your own custom control for it.

An easy no code way would be to bind the value to a read-only Rich Text control on the page. It will display the HTML as HTML.

Otherwise, you'd have to create your own custom control for it.

Ryan Farley,

Thanks for the suggestion! I am looking for custom control.

Is there any reference or example available to create custom control.

Hello Ajay,

Here is the article that contains the explanation and example of how to create custom control

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/8.1/front-end-development/classic-ui/controls/examples/add-a-control-to-a-record-page

Also inside your custom control implementation you can add HTML value validation and remove any script elements to provide the level of security. 

Hi Iryna,

 

Is above link, you provided, applied for Freedom UI module?

The information and example for Freedom UI you can find here:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

This simple example of an IFRAME control could easily be adapted to simple output a div containing the custom HTML instead, plus you'd just bind the column containing the HTML to the control. https://customerfx.com/article/embedding-an-iframe-on-a-creatio-freedom-ui-page/

A full component would likely be a better route, but this simpler option coudl still get the job done.

Ryan

Show all comments