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

Dear Creatio team,

i'm trying to improve the ML models results for product recommendations.
For now, in many cases the predictions give no results or not so useful ones.

In the Account object, we have a custom field that contains a code to classify the company by business type. This field could be useful for the collaborative filtering.

how to use it in the ML recommendation model ?


Best regards
Patrice

Like 0

Like

1 comments

Hello,

Regarding your request, we recommend reading the following article:  Recommendation prediction | Creatio Academy

It contains all the necessary information on how to use business processes to set up predict recommendations for the selected Creatio objects.

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

How I can set new version of DCM for all existing records (Lead) automatically

 

New version is v2

 

We have 13000 records, so changing manually will take time

 

Thanks

Leo

Like 2

Like

2 comments

Hello,

At the moment, there is no option to automatically change the case version for all leads using standard system functionality.

We consulted with the R&D team, and there is currently no ready-made solution for this scenario. However, similar cases have already been registered, and your request has also been added to help raise the priority for implementation in future versions.

You can also try to implement the functionality with a business process. Unfortunately, we do not have examples of such implementation.

For a tool that is supposed to easily adapt to changing company process, this is definitely one point that needs massive improvement ...

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