Hello all,

I am repeatedly running into an issue where the Creatio Freedom UI page designer is showing a field under Data model attributes that is from a higher package in the hierarchy. The page I am working on does not depend on the page where the field is added but the page designer still thinks the field exists which is causing cyclical dependency errors every time I try to save the page even if I don't do anything to add the erroneous field to my page.

My page is properly placed in the lower package and connected with the version of the object within the same lower package. Why is Creatio disregarding my package structure and showing the field from a higher package? It's impossible to proceed when Creatio keeps making problems I'm trying to avoid.

Like 0

Like

1 comments

Hello,

 

The issue you are facing is related to how Creatio manages package dependencies automatically.

When you use elements from another package, Creatio adds dependencies which can sometimes lead to cyclic dependencies.

To resolve this:

-Review package dependencies - make sure your package does not depend (directly or indirectly) on a package that also depends on yours, creating a cycle.

-Adjust dependencies if needed - remove or rearrange package dependencies

-Verify current package setting - ensure you are working in the correct package and saving changes there.

-Refactor functionality if necessary — if the problematic field/functionality is not required in your package, consider moving it to a package where it won’t cause cycles.

Proper management of package dependencies and settings should help you avoid these cyclic dependency errors in Creatio.

Show all comments

I have a simple business process that calculates the Quote total by summing the Item Total field in the Quote Item records - as shown below:

 

This business process is triggered by three signal events: Quote item created, Quote Item modified, and Quote item deleted. The process works successfully when the quote item is added or deleted. The issue is when the Quote item is modified - specifically when I change the related Quote. 

While testing the business process, I changed the quote item's related Quote field from Quote 1 to Quote 2 and it updated Quote 2's total field; however, it did not update Quote 1's total field. I realize this is the case because the business process has no way of accessing the previous field value before it was modified. 

 



Is there a way to go around this or a way for a business process to see the previous values of a record before it was modified?

Like 0

Like

0 comments
Show all comments

Hi, I would like to know if there is a max amount of concurrent requests that Creatio is able to handle for custom web services defined in Creatio.

Is there any way to configure the max number of allowed concurrent requests to the same service on the technical user, the web service or the package containing the web service?

Like 0

Like

1 comments
Best reply

Hello,

There is no configurable maximum number of concurrent requests setting in Creatio for custom web services. The idea of a fixed limit isn't practical, because the performance impact of a request depends heavily on what the request actually does.

For example:

  • 1k lightweight requests that perform simple data retrieval or write operations may have minimal impact on the system.
  • Conversely, 1k complex or resource-intensive requests (e.g. involving multiple joins, integrations, or heavy business logic) could significantly degrade performance or cause failures under load.

Instead of a static limit, Creatio relies on the underlying infrastructure and available resources to dynamically manage the load. When system resources become constrained, the platform will naturally slow down or reject excess incoming requests to protect stability.

We recommend using a batching approach when integrating or calling custom services:

  • Start with batches of 2,000 to 20,000 requests, depending on the expected load per request.
  • Perform load testing to evaluate how the system responds. If the particular request is lightweight, you can safely increase the batch size.

This approach gives you flexibility and scalability without setting limits that may not reflect actual usage.

Hello,

There is no configurable maximum number of concurrent requests setting in Creatio for custom web services. The idea of a fixed limit isn't practical, because the performance impact of a request depends heavily on what the request actually does.

For example:

  • 1k lightweight requests that perform simple data retrieval or write operations may have minimal impact on the system.
  • Conversely, 1k complex or resource-intensive requests (e.g. involving multiple joins, integrations, or heavy business logic) could significantly degrade performance or cause failures under load.

Instead of a static limit, Creatio relies on the underlying infrastructure and available resources to dynamically manage the load. When system resources become constrained, the platform will naturally slow down or reject excess incoming requests to protect stability.

We recommend using a batching approach when integrating or calling custom services:

  • Start with batches of 2,000 to 20,000 requests, depending on the expected load per request.
  • Perform load testing to evaluate how the system responds. If the particular request is lightweight, you can safely increase the batch size.

This approach gives you flexibility and scalability without setting limits that may not reflect actual usage.

Show all comments

Hi Guys,
May I know in which Module the  "Workforce engagement management in Creatio" belong to? because i saw Creatio had a clip like this:

https://www.youtube.com/watch?v=G6cCMuJmSlg

Like 1

Like

1 comments

Hello,

The “Workforce Engagement Management” functionality you saw in the video is part of Service Creatio - the module responsible for case management, agent productivity, omnichannel communications, and workforce engagement features. 

 

“Workforce Engagement Management”  enables agents and supervisors to access and update workforce management data via telephone.

 

Have a nice day!

Show all comments

Hello,

I am currently working on Integrating my Custom Object Data on Time Line tab in Contact form page, I have followed this link to accomplish this .


Now I want to show the file attachment preview or a downloadable link in the timeline tab.


This is what I have tried:

  1. In my first try, I tried to save the files in separate object and add that object as lookup field in my custom object.
    1. Result: It shows the name of file only in timeline object
  2. In my second try, I directly introduced  a file datatype field in my custom object,
    1. Result : It shows the raw file content in preview.

Also, How can we change the visibility of this field as I only want to show it if it has any value. I am using an online instance.

Can any one guide me on how to do this?

Thanks in advance for your support!!

Like 0

Like

2 comments
Best reply

Hello,

Thank you for your message.

At the moment, displaying file previews or downloadable file links directly within the Timeline tab is not supported out of the box in Creatio. This functionality might require additional custom development.

Hope this will answer all your questions!

 

Hello,

Thank you for your message.

At the moment, displaying file previews or downloadable file links directly within the Timeline tab is not supported out of the box in Creatio. This functionality might require additional custom development.

Hope this will answer all your questions!

 

Got it Thank you @Valeriia Ripnevska !!

Show all comments

Hi all,

I have a use case to create a salary benchmark report in our Creatio recruitment application, which shows what salary expectations our candidates had in a set period, structured with 

I store the salary expectation min. and max. on the Candidate's record, and I have an object called "Candidate's related fields", which consists of the main field (e.g. Software development), sub-field (e.g. .Net developer), and level of expertise (e.g. senior). One Candidate can have multiple related fields, and his/her salary expectation should be taken into account in all of them.

I was thinking about using the Forecast section to create a report that looks like the example in the following picture. I successfully created the frame (the "Candidate's related fields" being the Forecast object, the "Main field", "Sub-field", and "Level of expertise" being the 1-3 hierarchy levels.

I have issues with setting up the columns; it seems to me that the Forecast functions are not sufficient to fulfill what I want to achieve.

The main issue is, that the values are aggregated as I go upwards on the hierarchy levels, so the "Junior .Net software developer" row will have a sum of every individual row.

My question is, does anyone have any insight on whether this requirement can be met with Forecast? We have a few ideas about using auxiliary tables and business processes instead, but it would be great if it could be done very simply with Forecast.

Thanks in advance!

Like 0

Like

0 comments
Show all comments

Hi everyone,

I have encountered a small usability issue and I am hoping someone might have a suggestion.

When opening a record directly from an email (via a URL link), the page loads fine, but the “Close” button in the top right corner and the back arrow don’t work as expected. It appears that since the record is opened directly via a URL and not through standard navigation, there is no previous page for the app to return to.

While we understand the technical reason behind this, it’s not ideal from a user experience perspective. Users expect to be able to go back to the list or close the record.

Has anyone found a good way to improve or work around this?

Thanks!

Csilla

Like 0

Like

1 comments

I believe this is fixed somewhat in 8.3 as a beta feature that can be enabled (out of the box disabled)

Changed behavior of the Button component whose Action parameter in the Freedom UI Designer setup area is set to "Close page" when the action is executed immediately after the user logs into Creatio. Previously, the redirect behavior was inconsistent and could lead to navigating outside the instance or to an unintended blank state. Now, the user is redirected to the Creatio desktop page if the previous browser page is not a Creatio page. The functionality is managed by the EnableNavigationToDesktopBeforeQuit additional feature. Out of the box, disabled.

Ryan

Show all comments

How to capture client side validation errors on Creatio formpages and move them to a table or if there is an existing table to read. For example, a user forgets to select the 'House type' and an error comes up. We want these errors logged somewhere.

Like 0

Like

1 comments

Hello,

In Creatio you can set up logging:

The Change Log records changes to business data.

Audit Log records system settings, events, and data. It logs events related to changes in the user role structure, the distribution of access permissions, changes in the system setting values, user authorization in Creatio, etc.

Please refer to these articles:
How to set up Change Log
How to set up Audit Log

Application logs can be setup via Nlog.

Have a great day!

Show all comments

Just like the title says is it possible to extract data from xlsx or csv file to Creatio through a service class? I know you can do it through freedom UI, but I am wondering if it's possible to do it through code. Do terrasoft libraries provide that support?

Like 1

Like

1 comments

Hi Michal,

we use NPOI library

Kind regards,
Vladimir

Show all comments

Is there an out of the box web service in Creatio that could be used to find all the roles that a user belongs to? Or to check if the user belongs to a particular role?  Where can I find the documentation on all the inbuilt webservices provided by Creatio?

Like 0

Like

14 comments
Best reply

Just verified, this is working for me. This is a sample for the account page to disable the account Type if it is "Customer". 

Add an attribute to the viewModelConfigDiff:

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
    {
        "operation": "merge",
        "path": [
            "attributes"
        ],
        "values": {
            "IsTypeEnabled": {
            	value: true
            }
        }
    }
]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,

Then, I added a change request handler to listen for values in the Type attribute (which also triggers when the page is initially populated, which is when request.silent==true):

handlers: /**SCHEMA_HANDLERS*/[
	{
		request: "crt.HandleViewModelAttributeChangeRequest",
		handler: async (request, next) => {
 
			if (request.attributeName === "Type") {
				request.$context.IsTypeEnabled = (!request.value || request.value.displayValue !== "Customer");
				if (!request.silent) {
					console.log("Type changed", request.oldValue, request.value);
				}
			}
 
			return next?.handle(request);
		}
	}
]/**SCHEMA_HANDLERS*/,

Now, I wire up my attribute to the Type in the viewConfigDiff: 

{
	"operation": "merge",
	"name": "Type",
	"values": {
		"readonly": "$IsTypeEnabled | crt.InvertBooleanValue"
	}
}

Note, i am using a converter to invert the value since my attribute indicates it's enabled, but the property expects the inverse.

With this in place, if I open an Account with Type=Customer, or change the Type to Customer it is disabled/readonly.

One thing to note, many controls have both a readonly and a disabled property, not sure what the difference is, both seem to work for me, but the readonly seems to be the one that gives the control the visual lock icon. The disabled property also disables the control, but you don't get the lock icon for the control.

Ryan

Basically, you'll query SysUserInRole where the current user = the SysUser value. The SysRole lookup column will provide you the roles linked to this user. 

See here: https://customerfx.com/article/determining-if-a-user-has-a-specific-role-in-bpmonline/

For a Freedom UI approach, see https://customerfx.com/article/showing-or-hiding-a-field-if-the-current-user-is-a-member-of-a-role-in-a-creatio-freedom-ui-page/

Ryan

Thanks Ryan.  Is there a way to use a webservice for this requirement? Are there any out-of-the-box Webservices that can be called to check if the current user belongs a particular Role using Freedom UI approach ?

If this will be consumed from within Creatio on a Freedom UI page, it's just as easy to do a model query from the Freedom UI page (as shown in the article) as it is to call a web service. Maybe I am missing what you're trying to do? Calling a web service wouldn't really be any different than doing what is suggested in the article using a model query. You could wrap that up as a server-side C# code and expose as a web service, but ultimately, the Freedom UI page is going to request something, whether the web service or the model query, so you could just skip the web service IMO and use the model query.

Thanks Ryan.  Yes I agree. Its just that I wanted to explore using webservices in Creatio and also resuse this webservice across projects and am in the process of creating a C# webservice to achieve this.

Ryan Farley,

On a related note, this approach works fine for hiding or showing the fields based on a condition. But is there a way to make it readonly (disabled) based on a condition?  I noticed that the "visible" property can be set using a boolean variable like $flag, but this doesnt seem to have any effect with the "readonly" properties of the Text box and Combo box.  Is this a known issue and is there a workaround?

Ajay Varghese,

I believe I've been able to bind the readonly property to an attribute and set it programmatically with success (but don't have a system at the moment to verify)

Ajay Varghese,

I'm not sure of an OOTB service for that (roles and user roles). There might be, but it would be a simple service to create. The service would perform the ESQ similar to what is in the articles.

Ajay Varghese,

Additionally, I often wrap that sort of reusable stuff in a client schema class or module so it's easily reusable. Then, whether the class performs a model query or calls a service is irrelevant since it's still abstracted from what is calling it on pages. 

Ryan

Ryan Farley,

Yes, thanks for that direction. I have managed to create the webservices using that approach and it works fine. I am a bit surprised that setting that webservice output flag to the readonly property of a textbox and combobox doesnt have any impact while if I use it on the "visible" property then it works fine.  

Will wait for your response once you get access to your machine.

Just verified, this is working for me. This is a sample for the account page to disable the account Type if it is "Customer". 

Add an attribute to the viewModelConfigDiff:

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
    {
        "operation": "merge",
        "path": [
            "attributes"
        ],
        "values": {
            "IsTypeEnabled": {
            	value: true
            }
        }
    }
]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,

Then, I added a change request handler to listen for values in the Type attribute (which also triggers when the page is initially populated, which is when request.silent==true):

handlers: /**SCHEMA_HANDLERS*/[
	{
		request: "crt.HandleViewModelAttributeChangeRequest",
		handler: async (request, next) => {
 
			if (request.attributeName === "Type") {
				request.$context.IsTypeEnabled = (!request.value || request.value.displayValue !== "Customer");
				if (!request.silent) {
					console.log("Type changed", request.oldValue, request.value);
				}
			}
 
			return next?.handle(request);
		}
	}
]/**SCHEMA_HANDLERS*/,

Now, I wire up my attribute to the Type in the viewConfigDiff: 

{
	"operation": "merge",
	"name": "Type",
	"values": {
		"readonly": "$IsTypeEnabled | crt.InvertBooleanValue"
	}
}

Note, i am using a converter to invert the value since my attribute indicates it's enabled, but the property expects the inverse.

With this in place, if I open an Account with Type=Customer, or change the Type to Customer it is disabled/readonly.

One thing to note, many controls have both a readonly and a disabled property, not sure what the difference is, both seem to work for me, but the readonly seems to be the one that gives the control the visual lock icon. The disabled property also disables the control, but you don't get the lock icon for the control.

Ryan

Ryan Farley,

Thanks Ryan, this worked fine for me. I guess I defined the flag outside of the ViewModelConfigDiff section and hence for some reason whike it worked with the visible property but it consistently failed with the readonly property.  

Ryan Farley,

Just a clarification, does HandleViewModelAttributeChangeRequest trigger on both inital page load as well, in addition to any changes to the page?

Ajay Varghese,

Yes it does. When the page initially loads the data for the record, the change event is triggered at that time for each attribute loaded. Meaning, when the data is loaded and bound it will trigger this change (since it is changing the attributes from empty/nothing to a value). It also triggers this request when the user changes values on the page. The request has a silent property. When true (meaning it was a silent change), that means the change was triggered by the system loading the value and NOT by some action performed by the user. If silent=false, that means the user caused the change. If you only want to trigger on a change made by the user, include !request.silent, for example: 

if (request.attributeName === "Type" && !request.silent) {
    // Type was changed by the user
}

Ryan

Got it.  Thank you.

Show all comments