Hey Community 
I'm trying to implement a use case where the visibility of a particular stage in the DCM flow bar can be manipulated. I did observe that the Qualify status object ( which has a link to lead) has a column called IsDisplayed . How does this work ? (Is it only for setting the values in the flow bar or can the visibility be dynamically controlled as well ?).
I'm looking to implement this in a custom section.

Like 0

Like

3 comments
Best reply

sprity,

You should be able to achieve your business idea by simply creating several Cases (https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/dy…) depending on a value of some field.

Unfortunately, it is not possible to dynamically show/hide some stages within one Case. 

Hello,

Please describe in more detail how exactly you expect this logic to work.

Mira Dmitruk,
 

Hey ,
Let’s say you have a stage lookup, a custom section (e.g. Product), a related configuration section (e.g. Product Config), and a detail (Stage Config) inside the Product section that maps which stages apply to each product.

For example:

  • Product A is configured with Stages 1, 2, and 3
  • Product B has Stages 1, 2, 3, and 4

So when a user is working with Product A, the DCM (progress flow bar) should not display Stage 4

sprity,

You should be able to achieve your business idea by simply creating several Cases (https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/dy…) depending on a value of some field.

Unfortunately, it is not possible to dynamically show/hide some stages within one Case. 

Show all comments

We have an email with over 180,000 recipients. We would like to throttle this in parameters to send 20,000 emails a day. However, the "delay between emails" is confusing. What would be the best way to set up the parameters to achieve sending 20,000 emails per day beginning at 7:00 AM? Thanks in advance.

Like 0

Like

0 comments
Show all comments

I have integrated a email inbox in communication panel Emails. Now, I want to do below things.

  1. Every time I receive an email to that inbox, I want to check if the attachments are there.
  2. If the attachments are there, then I want to read the content(blob) of the file and send it to a REST API through web service.
  3. The API will return something, I want to save that to an object.

This is what I did so far:

I have created a BP which will trigger when an activity is created. I am able to read the activity but not able to read the attachment. 

When I am trying to set find query under filter records for read data component its getting reset after I refresh.

I have attached the screenshots for reference.


This is what I want to set:

The condition I want to set

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Once I refresh the page or if I switch between system actions its being reset to below condition:

Like 0

Like

4 comments

Hello,

You should use the Process file element for this:

https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/pr…

Hi Mira,

Thanks for the response.

Yes, I used Process file.. Now, I want to send the file to a REST API using web service. I see there is no direct support to send the file. If I want to send the Base64(rich text) version of the file, how can I do that?

Sagar Rodda,

Here are the instructions on working specifically with the files via API:

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

Thanks for sharing the link.. I have added the code to meet my requirement. Its giving an error. 

/* The file content. */
var content = new byte[]();
 
/* Create a unique ID for the new file. */
Guid RecordId = Get<Guid>("RecordId");
 
/* Create the "EntityFileLocator" instance identified by "recordId" and stored in the "ActivityFile" database table. */
var fileLocator = new EntityFileLocator("ActivityFile", RecordId);
 
/* Pass the created locator to the method of the "UserConnection" class. */
IFile file = UserConnection.GetFile(fileLocator);
 
using (Stream stream = file.Read()) {
 
   /* Retrieve the file content and save it to the array. */
   content = stream.ReadToEnd();
}
 
var base64 = Convert.ToBase64String(content);
 
Set<string>("FileBase64", base64);
 
return true;

 

Show all comments

Hi,

is there any documentation on how to use the File param type in a business process? I wasn't able to find any.

I have a use case where i have to save a file as an attachment to an entity, starting from a base64 rappresentation of the file. I would like to accomplish this task with the least amount of coding. What i envisioned is a business process with a script task that converts the base64 to a File param. Then a process file shape that saves the File param. Sadly i'm dead in the water on how to implement this scenario because i have no idea on how to use File param type. I can't even understand what .Net/Terrasoft type it is. Do you have any suggestion?

Like 0

Like

1 comments

Hello,

Please specify if you have checked the available basic functionality meant for processing files within business processes - the "Process File" element? If so, could you describe why exactly does this option not work for you?

https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/pr…

Show all comments

Hello all,

Is it possible in Freedom UI to add folders to sections other than Contacts? We need to enable static folders in the Knowledge Base.

Like 0

Like

1 comments

Hello!

To add a static folder in the Knowledge Base section, the client should add the following values to the "Schemas for enabling static folder in folder tree" lookup (which should be created first).
 

  • KnowledgeBaseArticlesList
  • KnowledgeBase_ListPage
  • KnowledgeBase


image.png

After adding these values, the static folder option will be available:

image.png

Let us know if you have any further questions. 

Have a great day!

 


 

Show all comments

Hi all,

i'm trying to setup a backend system able to send push notification to mobile app (not developed in creatio) through FCM rest API.

The first hurdle is obtaining a valid token to authenticate to notification api exposed by firebase. In order to obtain this token i do have to call another rest api passing a jwt token generated by me and signed by a private key downloaded from fcm.

I've got a code (pasted below) that manages to generate this encrypted token and it's working in visual studio. But if i try to use it in a script task i got the exception 

'RSA' does not contain a definition for 'ImportPkcs8PrivateKey' and no accessible extension method 'ImportPkcs8PrivateKey' accepting a first argument of type 'RSA' could be found (are you missing a using directive or an assembly reference?)

As far as i know this exception is thrown if .net core being used is version 5 or below. But i'm on a demo instance with creation 8.2.0.4183 which should be already using net core 6 right?

Do you have any suggestion? (the flow is already configured to import System.Security.Cryptography)

 

 

--code--

   var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
var header = new Dictionary
       {
           { "alg", "RS256" },
           { "typ", "JWT" }
       };
string headerJson = JsonConvert.SerializeObject(header);
string encodedHeader = Convert.ToBase64String(Encoding.UTF8.GetBytes(headerJson)).TrimEnd('=').Replace('+', '-').Replace('/', '_');

var payload = new Dictionary
       {
           { "iss", CLIENT_EMAIL },
           { "scope", SCOPE },
           { "aud", TOKEN_URI },
           { "iat", now },
           { "exp", now + 3600 }
       };
string payloadJson = JsonConvert.SerializeObject(payload);
string encodedPayload = Convert.ToBase64String(Encoding.UTF8.GetBytes(payloadJson)).TrimEnd('=').Replace('+', '-').Replace('/', '_');
string unsignedJwt = $"{encodedHeader}.{encodedPayload}";
byte[] dataBytes = Encoding.UTF8.GetBytes(unsignedJwt);

// Decode PEM -> PKCS#8 bytes
string cleanKey = PRIVATE_KEY
   .Replace("-----BEGIN PRIVATE KEY-----", "")
   .Replace("-----END PRIVATE KEY-----", "")
   .Replace("\\n", "\n")  // ← decodifica reale da stringa JSON
   .Trim();


byte[] privateKeyBytes = Convert.FromBase64String(cleanKey);

// Firma con RSA-SHA256
byte[] signature;
using (var rsa = RSA.Create())
{
   rsa.ImportPkcs8PrivateKey(privateKeyBytes, out _);
   signature = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
string encodedSignature = Convert.ToBase64String(signature)
   .TrimEnd('=').Replace('+', '-').Replace('/', '_');

string jwt = $"{unsignedJwt}.{encodedSignature}";


return true;

Like 1

Like

1 comments
Best reply

Hi Roberto,

In the cloud-based demo version of Creatio (including your current instance), the Script Task in business processes runs under .NET Framework 4.7.2. This limitation is specific to the cloud version. If you run Creatio on-premises, it's possible to configure and run business logic under .NET Core instead.

As a result, the method ImportPkcs8PrivateKey() is not available in the cloud version. Other types like RSASignaturePadding, HashAlgorithmName, and RSA.Create() are also unavailable in this context.

Recommended Solution:
Move JWT generation to an external service
- Create a small Web API (in .NET 6 or above).
- Let it generate and return the signed JWT token.
- Call it from Creatio using HTTP request.

Hi Roberto,

In the cloud-based demo version of Creatio (including your current instance), the Script Task in business processes runs under .NET Framework 4.7.2. This limitation is specific to the cloud version. If you run Creatio on-premises, it's possible to configure and run business logic under .NET Core instead.

As a result, the method ImportPkcs8PrivateKey() is not available in the cloud version. Other types like RSASignaturePadding, HashAlgorithmName, and RSA.Create() are also unavailable in this context.

Recommended Solution:
Move JWT generation to an external service
- Create a small Web API (in .NET 6 or above).
- Let it generate and return the signed JWT token.
- Call it from Creatio using HTTP request.

Show all comments

Hello,

I created a validation for telephone numbers as explained in this article: Implement the validation of a field value on a page | Creatio Academy
For testing purposes, I added it to the notes field on the contacts form, and it works fine.


However, I want to add the validation to the communications options on the left side of the form.
How do I bind the validation in the viewModelConfigDiff?
Also, only communication options of type "phone number" should be validated.

 

Thanks,

Robert

Like 1

Like

3 comments

Hello,

Currently there is no way to add the validator using the regular approach with the validators property on the schema. However you can try adding it using the formControl for the ContactCommunicationOptionsItems (but note that this will be applied for phones, email, skype and web (in other words for all communication options)).

 

How to add the validator using formControl:

 

  1. Implement the same validator on some separate field on the page
  2. Find this validator in the context of the crt.HandleViewModelAttributeChangeRequest request execution (like request.$context._validators["AccountAccountCategory_List.value"][0]), but replace AccountAccountCategory_List.value with your attribute name on the page to which the validator is added. Also make sure array with only one element is returned (since you can have several validators for the same field and the array of validators can contain more than 1 element thus ...["AccountAccountCategory_List.value"][0] can return another validator.
  3. In the context of the crt.HandleViewModelAttributeChangeRequest request (connected to the change of the ContactCommunicationOptionsItems attribute) add the following code:

request.$context.getControl("ContactCommunicationOptionsItems").formControl.addValidators(request.$context._validators["AccountAccountCategory_List.value"][0])
 

But replace equest.$context._validators["AccountAccountCategory_List.value"][0] with the needed validator.

 

This is the only way to add the validator for this CommunicationOptions component (but once again note that this will be added to all the other communication options). 

Oleg Drobina,

thank you for pointing me in the right direction!

However, I can't get it to run...I used the following code, but the validation won't be triggered:

			{
			    request: "crt.HandleViewModelAttributeChangeRequest",
			    handler: async (request, next) => {
					if (request.attributeName === 'ContactCommunicationOptionsItems') {
						const validators = request.$context._validators;
						const telValidator = validators["StringAttribute_cuzyv0b"]?.[0];
						if (telValidator) {
							request.$context.getControl("ContactCommunicationOptionsItems").formControl.addValidators(telValidator);	
						}
					}					
			        return true;
			    }
			}

What's also strange is that when the handler is executed again (after I changed the field value), all properties of the formControl related to validation (asyncValidator, validator, _rawValidators, _rawAsyncValidators) are empty again!

Any idea what could go wrong here?

Thanks,

Robert

 

Robert Pordes,

Unfortunately no, this was the way I used locally and that worked and maybe the difference may arrise in the application version that was used for tests (8.2.2 in my case) or in other handlers maybe. This should be debugged only, there is no other way to identify what's wrong.

Show all comments

Is there a way to implement authentication in an IFrame of my web app inside Creatio using the info of the already signed on user in Creatio?

Like 0

Like

1 comments


Hello, Creatio supports SAML and OpenId authentication protocols. If your third-party application also supports such a protocol, then the task can be realized in theory, the main point is to add an authorization string to the link in Sso: For OpenId: https://sitename.creatio.com/0/Shell/?autoOpenIdLogin=true#IntroPage/SystemDesigner For SAML: https://sitename.creatio.com/Login/NuiLogin.aspx?use_sso=true&ReturnUrl=%2f0%2fShell%2f#IntroPage/SystemDesigner We also recommend that you consider enabling SSO redirect for the environment, so that when you log in to the login page or follow a link, you will be redirected to the Identity Provider's login page: Step 5. in the article: https://academy.creatio.com/docs/user/setup_and_administration/user_and_access_management/authentication/set_up_sso_via_adfs/single_sign-on_via_adfs Unfortunately, we don't have any ready-made instructions, as we haven't tested such solutions, but Creatio supports SSO login, so the rest depends on the implementation. Thank you for contacting us, I hope this helps.

Show all comments

Hello,

In Creatio Studio, is it possible to give a user permissions to add users to any role, except to the sys administrator or supervisor roles? If so, how?

Thanks,

Jose

Like 0

Like

1 comments

Hello,

Unfortunately, it's not possible to implement such a logic due to the specifics of the system.

Show all comments

Hi everyone,

I’m currently facing a technical issue with a webhook handler I’ve implemented in Creatio.

Background:

  • I have a webhook endpoint that gets called by an external system at a rate of approximately 150 hits per second.
  • The Creatio database has a maximum connection limit of 400 connections.

The Problem:

During high load, I observed that the number of open database connections increases rapidly, and some queries are left idle (idle in transaction) even after the handler completes its process.

This leads to:

  • Exhaustion of available database connections
  • Timeout errors on other operations
  • Overall system unresponsiveness

What I’ve Tried So Far:

  1. I modified the data access code by changing queries from ESQ (EntitySchemaQuery) to direct Entity usage.
  2. I manually handled database connections by using:
    • using (DBConnection dbConnection = new DBConnection(...)) { ... }
    • Explicit calls to .Close() and .Dispose() on connections to ensure cleanup.

Despite these adjustments, I'm still seeing idle queries accumulating under high load.

My Questions:

  1. What could be the possible reasons why queries remain idle even after the handler has completed?
  2. Are there any known best practices in Creatio for managing database connections under high request volumes like this?
  3. Is there a proper way to ensure UserConnection or underlying connections are completely released, especially in high-frequency webhook scenarios?

I would really appreciate any insights, suggestions, or shared experiences that could help resolve this issue.

Thank you in advance!

Like 1

Like

1 comments

Hello.

1. There are many potential reasons for this behavior:
- Blocking at the DB level (when a large number of requests block each other), such requests may be displayed as "idle in transaction".
- Incorrect operation in the code that executes requests, but "a lot" of code is executed between the start of the transaction and the commit.
- There is not enough capacity of the DB server to process requests (including releasing the connection after the request is completed).

There is also a probability that the issue lies in the handler itself, and it doesn't close the database connection once the query is executed, but the issue may also be in the server configuration. 

2. The options that you use are suitable for such purposes (but of course it all depends on what code and what requests are being generated).

3. At the code level, they must be completely released. At the DB level, the DBMS itself is engaged in the release, with sufficient capacity it usually copes well.
Without knowing what code is executed, what requests, what capacities with such activity it is difficult to accurately name the cause and how it can be fixed.

Best regards,
Antonii.

Show all comments