hello everyone! im having issues adding business rules, im trying to add a "filter" option in the "then"action but it is missing, any idea of why?

 

i am using freddom ui pages 8.2 version

 

Like 0

Like

1 comments
Best reply

There are two types of business rules, page-level business rules and object-level business rules. Filters are object-level business rules. In your screenshot you're showing page-level business rules. The object-level rules would show below those on the left side, but the fact that those are missing in your screenshot likely means that the page doesn't have an object data source. 

There are two types of business rules, page-level business rules and object-level business rules. Filters are object-level business rules. In your screenshot you're showing page-level business rules. The object-level rules would show below those on the left side, but the fact that those are missing in your screenshot likely means that the page doesn't have an object data source. 

Show all comments

Good afternoon. I am a new user of the CRM. I registered and booked a meeting, but no one showed up.
I am a developer, and I need an account for test calls. Together with a telephony specialist from UniTalk, we completed all the setup, but we still couldn't make a call.
Is it possible to fix this issue so that I can fully use the CRM during the testing period?

Like 0

Like

1 comments

Ruslan, good afternoon!

Could you please provide more details on which settings you need help with in the configuration?
Please also provide more detailed information about where exactly you're encountering difficulties - at which step of the configuration the issue occurs.

Show all comments

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