Hey Team , i have a user task in the lead section and inorder to move from one stage to another ( custom stages) , i have put up a user based task. However when the user clicks on complete , the system throws the below error 

I have not written this view.On multiple compilations , i still seem to face this issue.
Please note that this issue is occuring in my local , and when the same code is pulled by others to their local , this seems to work.

Like 0

Like

1 comments

Hello!

Could you please provide some details about the transfer of stages, especially the part related to user tasks?

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

Hello,

 

I am currently generating multiple report templates, some of these templates need to show list components attached to a record. For example, A loan application that has multiple collaterals attached to it or a payment schedule stored in a list component. How do I achieve this?

Like 0

Like

2 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

Hi community,

Is there any way how to modify only one record with help of "Modify" campaign's element?

For example, I've executed a campaign for event participants and want to change Response column if a participant clicked on a link in received email. But I want to change only a participant of the current event, not all. How can I arrange that?

Like 0

Like

4 comments

Hello!

To modify a single record using the "Modify" campaign element, you can follow these steps:

  1. Set Up a Condition: Before the "Modify" element, use a condition to filter the participants based on specific criteria. In your case, you can set up a condition to check if the participant clicked on the link in the received email.
  2. Use the "Modify" Element: Once the condition is met, you can use the "Modify" element to update the Response column for that specific participant. Ensure that the condition is specific enough to target only the participant of the current event.

FYI Modify data element updates all objects connected to this contact. In your situation, when you update a lead, all the leads associated with the corresponding contact are updated.
More information about the element Modify data can be found in this article. 

By setting up a precise condition, you can ensure that only the desired participant's record is modified. If you need further assistance with setting up the campaign or conditions, feel free to ask!

Regards, 
Anton

Hello, 

To modify a single record using the "Modify" campaign element, you can follow these steps: Set Up a Condition: Before the "Modify" element, use a condition to filter the participants based on specific criteria. In your case, you can set up a condition to check if the participant clicked on the link in the received email. Use the "Modify" Element: Once the condition is met, you can use the "Modify" element to update the Response column for that specific participant. Ensure that the condition is specific enough to target only the participant of the current event. By setting up a precise condition, you can ensure that only the desired participant's record is modified.

Hi colleagues,

thanks a lot for the responses. So, as far as I understood, there is no option to define, what exactly lead should be updated, right? I can define some strict conditions for a campaign participant, whose linked records should be updated, but in any case the system will update _all_ leads linked to this participant (=contact). And there is no option to tell the system to update, for example, only leads from social media (or were created from a particular campaign) and not to update others, right?

 

Hello,

There is indeed a way to filter the leads within the campaign flow. As shown in below picture, you can define specific conditions using the “Source” condition (or other filtering criteria) throughout the flow before “Modify Data” element.

example of campaign flow

For instance, you can set up conditions where the system only updates leads coming from certain sources, like “Facebook” or “LinkedIn,” by selecting the appropriate sources in the filtering options. This will prevent the update of all leads and ensure that only those meeting the specified conditions are modified. The use of filtering conditions allows you to restrict this to only the leads from selected sources or campaigns. You would need to set the conditions as required in the flow setup to make sure only the targeted leads get updated. 


 

Show all comments

Hi community,

I have a lead form with an option of uploading of a file. How can I transfer the uploaded file to a Lead record (or record of another object) in Creatio with help of Creatio API? 

Like 0

Like

1 comments

Hello mates !

I'm trying to create a script into a business process to check the SIRET (French Enterprise Number). But I'm having a basic problem: an identifier is expected when I try to compile on line 59

using System.Text.RegularExpressions;
 
string siretNumber = Get<String>("siret");
bool siretValide = Get<bool>("siretValide");
 
int ttlAddition = 0, cpt = 1;
 
string formatInput = Regex.Replace(siretNumber, "[^a-zA-Z0-9_]+", "", RegexOptions.Compiled);
string reverseCard = new string(formatInput.ToCharArray().Reverse().ToArray());
 
int[] arrDigits = Array.ConvertAll<string, int>(
    System.Text.RegularExpressions.Regex.Split(reverseCard.ToString(), @"(?!^)(?!$)"),
    str => int.Parse(str)
);
int[] arrMult = new int[arrDigits.Length];
 
// First Luhn step:
// Start with the last digit (on the right)
// and move to the left, doubling the value of all even-numbered digits
for (int i = 0; i < arrDigits.Length; i++)
{
    if (cpt == 1)
        arrMult[i] = arrDigits[i]; // the key is processed first, the number is not doubled 
    else
    {
        if (cpt % 2 == 0)
            arrMult[i] = 2 * arrDigits[i];
        else
            arrMult[i] = arrDigits[i];
    }
    cpt++;
}
 
// Add together all the digits of each number thus obtained.
// If digit > 10, then the digit to be added gives, for example: 18 = 1 + 8
for (int i = 0; i < arrMult.Length; i++)
{
    if ((int)arrMult[i] >= 10) // if number > 9 you have to break down the number, e.g. 18 gives: 1+8
    {
        int[] intList = Array.ConvertAll<string, int>(
            System.Text.RegularExpressions.Regex.Split(arrMult[i].ToString(), @"(?!^)(?!$)"),
            str => int.Parse(str)
        );
        for (int j = 0; j < intList.Count(); j++)
        {
            ttlAddition += (int)intList[j];
        }
    }
    else
        ttlAddition += (int)arrMult[i];
}
 
// if modulo by 10 of the addition is zero then our figure is valid 
if (ttlAddition % 10 == 0)
    Set<bool>("siretValide", true); // set the variable siretValide to true in Creatio 
else
    Set<bool>("siretValide", false);

Compilation error

In VS Code, by replacing the last lines: Set<bool>("siret Valide", true); with Console.WriteLine("Verification OK"); and Set<bool>("siret Valide", false); with Console.WriteLine("Verification KO"); the program works fine.

 

Like 0

Like

4 comments
Best reply

Hello,

 

You can add using statement in Usings section in Methods block Of BP like this:

Also here is the fixed example of your code without compilation errors:

 

string siretNumber = Get&lt;String&gt;("siret");
bool siretValide = Get&lt;bool&gt;("siretValide");
 
int ttlAddition = 0, cpt = 1;
 
string formatInput = Regex.Replace(siretNumber, "[^a-zA-Z0-9_]+", "", RegexOptions.Compiled);
var formatInputCharArray = formatInput.ToCharArray();
Array.Reverse(formatInputCharArray);
string reverseCard = new string(formatInputCharArray);
 
int[] arrDigits = Array.ConvertAll&lt;string, int&gt;(
   System.Text.RegularExpressions.Regex.Split(reverseCard.ToString(), @"(?!^)(?!$)"),
   str =&gt; int.Parse(str)
);
int[] arrMult = new int[arrDigits.Length];
 
// First Luhn step:
// Start with the last digit (on the right)
// and move to the left, doubling the value of all even-numbered digits
for (int i = 0; i &lt; arrDigits.Length; i++)
{
	if (cpt == 1)
		arrMult[i] = arrDigits[i]; // the key is processed first, the number is not doubled 
	else
	{
		if (cpt % 2 == 0)
			arrMult[i] = 2 * arrDigits[i];
		else
			arrMult[i] = arrDigits[i];
	}
	cpt++;
}
 
// Add together all the digits of each number thus obtained.
// If digit &gt; 10, then the digit to be added gives, for example: 18 = 1 + 8
for (int i = 0; i &lt; arrMult.Length; i++)
{
	if ((int)arrMult[i] &gt;= 10) // if number &gt; 9 you have to break down the number, e.g. 18 gives: 1+8
	{
		int[] intList = Array.ConvertAll&lt;string, int&gt;(
           System.Text.RegularExpressions.Regex.Split(arrMult[i].ToString(), @"(?!^)(?!$)"),
           str =&gt; int.Parse(str)
       );
		for (int j = 0; j &lt; intList.Length; j++)
		{
			ttlAddition += (int)intList[j];
		}
	}
	else
		ttlAddition += (int)arrMult[i];
}
 
// if modulo by 10 of the addition is zero then our figure is valid 
if (ttlAddition % 10 == 0)
	Set&lt;bool&gt;("siretValide", true); // set the variable siretValide to true in Creatio 
else
	Set&lt;bool&gt;("siretValide", false);
return true;

Also please make sure that "siret" and "siretValide" parameters have the values assigned before this Script Task is executed. 

 

Hello

In a task script, you're not allowed to add the using statements.
Also, the script must end with:
return true;

You can add the using statements at the Methods block in the BP.

Hope this helps!

Mohamed Ouederni,

Hello Mohamed,
Thank you for your help ! i m a newbie in C#.

So i followed your recommandations:

i removed the using System.Text.RegularExpressions; at the script beginning, because when i open the process source code there is allready a using System.Text

i added a return true at the end of the script.

and i added too System.Text.RegularExpressions on the formatInput string :

string formatInput = System.Text.RegularExpressions.Regex.Replace(siretNumber, "[^a-zA-Z0-9_]+", "", System.Text.RegularExpressions.RegexOptions.Compiled);

But now i have the following errors:
compilation error

Line 65 is :
string reverseCard = new string(formatInput.ToCharArray().Reverse().ToArray());
 

Hello,

 

You can add using statement in Usings section in Methods block Of BP like this:

Also here is the fixed example of your code without compilation errors:

 

string siretNumber = Get&lt;String&gt;("siret");
bool siretValide = Get&lt;bool&gt;("siretValide");
 
int ttlAddition = 0, cpt = 1;
 
string formatInput = Regex.Replace(siretNumber, "[^a-zA-Z0-9_]+", "", RegexOptions.Compiled);
var formatInputCharArray = formatInput.ToCharArray();
Array.Reverse(formatInputCharArray);
string reverseCard = new string(formatInputCharArray);
 
int[] arrDigits = Array.ConvertAll&lt;string, int&gt;(
   System.Text.RegularExpressions.Regex.Split(reverseCard.ToString(), @"(?!^)(?!$)"),
   str =&gt; int.Parse(str)
);
int[] arrMult = new int[arrDigits.Length];
 
// First Luhn step:
// Start with the last digit (on the right)
// and move to the left, doubling the value of all even-numbered digits
for (int i = 0; i &lt; arrDigits.Length; i++)
{
	if (cpt == 1)
		arrMult[i] = arrDigits[i]; // the key is processed first, the number is not doubled 
	else
	{
		if (cpt % 2 == 0)
			arrMult[i] = 2 * arrDigits[i];
		else
			arrMult[i] = arrDigits[i];
	}
	cpt++;
}
 
// Add together all the digits of each number thus obtained.
// If digit &gt; 10, then the digit to be added gives, for example: 18 = 1 + 8
for (int i = 0; i &lt; arrMult.Length; i++)
{
	if ((int)arrMult[i] &gt;= 10) // if number &gt; 9 you have to break down the number, e.g. 18 gives: 1+8
	{
		int[] intList = Array.ConvertAll&lt;string, int&gt;(
           System.Text.RegularExpressions.Regex.Split(arrMult[i].ToString(), @"(?!^)(?!$)"),
           str =&gt; int.Parse(str)
       );
		for (int j = 0; j &lt; intList.Length; j++)
		{
			ttlAddition += (int)intList[j];
		}
	}
	else
		ttlAddition += (int)arrMult[i];
}
 
// if modulo by 10 of the addition is zero then our figure is valid 
if (ttlAddition % 10 == 0)
	Set&lt;bool&gt;("siretValide", true); // set the variable siretValide to true in Creatio 
else
	Set&lt;bool&gt;("siretValide", false);
return true;

Also please make sure that "siret" and "siretValide" parameters have the values assigned before this Script Task is executed. 

 

Hello Iryna !
This fixed the two first errors.

compilation error

it looks like system can not find Count, so i added System.link to the method block of the BP and the process has been successfully compiled.

Thank you all for you help !

Show all comments

i am trying to add a dropdown data by calling a webservice

does anyone have some advice?

 

Like 1

Like

2 comments

Hello,

Could you please describe your business idea in more detail? By dropdown data, do you mean a collection of parameters?

Mira Dmitruk,

it's a filter system that let's me select a set of options based on another set of options, basically a filter system for lookups based on lookups, what i tried to do is input a parameter by selecting from a field and obtaining the filtered options based on the selected option it's like

if Provinsi = DKI Jakarta 

then Kota = (Dropdown => Jakarta pusat, Jakarta Barat, Jakarta Utara, etc)

if Provinsi = Aceh

then Kota = (Dropdown => Aceh Selatan, Aceh Utara etc)

 

now im trying to find a way to filter the dropdown without going through them 1 by 1 by using an API and not Business Rules since i want to do it for 5 fields

Provinsi, Kota, Kecamatan, Kelurahan, Kode Pos

and each one needs to have the right option values

can anyone suggest a better way to handle this since i have no idea on how to do this

Show all comments

Hi all,

I want to install mapsly on creatio, but I want to know first, what version of creatio is compatible if you want to install mapsly?

i'm using creatio 8.2.2

Thanks

Like 0

Like

4 comments

Hello, 

Mapsly is compatible with 8.0.0 Creatio version and up. 

 

All the information regarding it's installation is included in Installation tab on CreatioMarketplace . Please follow this link: 

https://marketplace.creatio.com/app/mapsly

Hello, 

 

Could you please provide more details about following "my object doesn't appear in the Mapsly configuration on the website"?

 

Oleksandra,

on mapsly guide, i've done with following step Provide account info, Select the Mapsly features, Grant Mapsly access to my CRM data. for the step Choose objects (modules) to be imported to Mapsly, i cant select the object because still loading and have notification " data refresh failed ".

 

https://help.mapsly.com/en/articles/4339762-mapsly-account-sign-up-wiza…

Hello, 

We recomend you to contact Mapsly support in order to resolve this issue. Creatio indeed supports Mapsly, however we are unable to assist you or provide instruction on resolution for such a specific problem. 

 

Here are the contact detailsn which are provided on https://marketplace.creatio.com/app/mapsly:&nbsp;


Email

help@mapsly.com

 

Thank you for reaching out!

Show all comments