Hello 

I have created a business process that reads in the creation and modification of a project id and project manager, 

I then wanted to change the permissions so that only the project manager could delete it, but during the execution of the process the values still remain on true 

What could be the reason for this?  I run the process as an administrator and the delete test is run on a user who does not have these permissions. The way it should work is that no one but the administrator should be able to delete projects. 

 

even though the process is executed, the value remains true 

    "Parametr": "List of rights to delete",
            "Wartość": {
                "Before execution": "[{Id:\"54e9e783-704b-4d77-b621-d8054d39f52a\",ParameterName:\"Role1\",Name:\"All employees.a29a3ba5-4b0d-de11-9a51-005056c00008\",CanRead:true,CanEdit:true,CanDelete:true,Source:\"3\",Grantee:\"Role\",Value:\"[#Lookup.84f44b9a-4bc3-4cbf-a1a8-cec02c1c029c.a29a3ba5-4b0d-de11-9a51-005056c00008#]\"}]",
                "After execution": "[{Id:\"54e9e783-704b-4d77-b621-d8054d39f52a\",ParameterName:\"Role1\",Name:\"All employees.a29a3ba5-4b0d-de11-9a51-005056c00008\",CanRead:true,CanEdit:true,CanDelete:true,Source:\"3\",Grantee:\"Role\",Value:\"[#Lookup.84f44b9a-4bc3-4cbf-a1a8-cec02c1c029c.a29a3ba5-4b0d-de11-9a51-005056c00008#]\"}]"
            }

            

           

Like 0

Like

3 comments

Are you sure the remaining access rights for All employees role is not "Deny"? I believe that process element won't technically remove the access rights, you'll still see it there but will be "deny" instead of allow.

Hello!  
 

I created a similar business process and successfully ran it. 

The process worked correctly, and I’m attaching screenshots as proof.  








You can also set the field "Which access rights to add?" to "All employees—Restrict", and the process should work as you expect.

In my example, I did exactly that, and I’m attaching the screenshots:





The reason why permissions are not changing as expected might be due to incorrect configuration of the "Change Access Rights" element in the business process. Please review the configuration of this element and ensure that the correct conditions and access rights are specified.  
 

If everything seems correct, please create a support request by contacting support@creatio.com

We will review the issue and assist with a solution.  

Regards,
Orkhan

I was able to successfully set the rights for the employees according to the instructions; interestingly enough, the rights edit page does not show that anything has changed. 

Show all comments

Hi all, 

I'm trying to calculate 60 days before a date captured by the user to create a reminder. I'm using the Formula in the Business Process but I cannot make it work, I see the following error: Formula value error: Cannot convert type "Int32" to "Entity"

 

Any suggestion?

Thank you

Like 0

Like

2 comments

It looks like it's an issue with trying to set the parameter you've selected to the value of the formula - what is the type of the parameter? It should be an integer based on the formula shown, which will be returning the day of the month 60 days before the Fecha de Lanzamiento date.

Hello,
 

We tried to check the behavior. It looks like the problem lies in expression because you are using .Day at the end.
We were able to successfully subtract -60 days simply by using the .AddDays(-60) method. [#read contact.First item of resulting collection.Birth date#].AddDays(-60)

AddDays(-60)

AddDays(-60)

 

Show all comments

Please advise what could be the problem. 
There is a business process where the start signal (trigger) is set to launch when the text field "CHErrorNotification" in Opportunity is changed. If I change the field manually, the process starts, BUT if I change it via code, nothing happens—the process doesn't start. As you can see in the examples, I'm changing it not through a query; the process should start.

I tried filling the field both during the save and after; in both cases, the field was populated, but the process trigger did not work.
OnSaving

OnSaved

Like 1

Like

2 comments
  1. If an Entity.Save() call occurs in the embedded process or listener. In this case the signal to start the BP is not thrown.

 

You won't be able to trigger the business process using the Entity.Save in your listener. What can be done:

 

  1. 1) Use another approach to trigger the process upon modification of the column
  2. 2) Create an additional method that will perform the very same operations that the business process should perform

Oleg Drobina,
 

Previously, and even now in other systems that I configured earlier, the process starts when such code changes occur. Regarding point 1, can you provide an example?

Show all comments

Hi Community!

 

We are trying to find an elegant way of preventing the execution of business processes from create, update and delete elements within other business processes.

Think of it as Outlook's 'Stop processing more rules' flag.

 

We could set a certain flag and add it to the other processes' signal conditions, but this leads to a high coupling of business processes, more complexity, and over the lifetime of a Creatio instance inevitably to errors as everyone needs to know this 'magic' behavior.

 

Ideally, signals in Creatio would have the option to distinguish between different triggering options, like 'user', 'business process', 'import', 'odata', 'event handler', etc. but unfortunately, this is a missing feature.

 

Any thoughts would be more than welcome!

 

Thanks,

Robert

Like 1

Like

3 comments

Hi Community,
any ideas on this?

 

Thanks,

Robert

Hello,
 

At the moment, such functionality is not available in Creatio's OOTB solution for triggering the addition/modification of records. 
Indeed, a workaround in this situation can be to create additional columns at the level of the object model that will be filled in depending on which method the record was created/modified (for example, a special column for OData).
We will register this development idea with our R&D team so that they can consider implementing such functionality in future versions of the Creatio product.
 

Thank you.

Hello Cris,

The approach you previously employed makes sense, but as you’ve noticed, it might not be reliable. One possible reason could be that the 'Modified by' field is being set differently depending on execution context. Additionally, if the Supervisor user manually edits records or if a business process runs under the Supervisor account, it could trigger other processes.

As my colleague mentioned, Creatio doesn’t currently offer a built-in flag to differentiate the source of record modifications. However, a practical workaround is to introduce a custom flag at the object level. For example:

  • A boolean field (IsModifiedByBP) that gets set when a business process modifies the record.
    A lookup field (ModificationSource) to track whether the change came from a user, a business process, OData, or other integrations.

You can then update your signal conditions to check this flag instead of relying on the 'Modified by' field. This approach ensures flexibility while reducing coupling between processes.

Show all comments

I am trying to implement the currency exchange rate business process as outlined in this article. I have done everything according to the instructions, but for some reason when I run the business process it is not updating the exchange rates correctly.

 

After a lot of trial and error, it appears that somewhere not in my business process it is doing the calculation

1 / exchangeRate

and entering that into the exchange rate instead of just the exchange rate.

 

For example, with the base currency set to euro, the call to the API responded with "AUD":1.646885, but after the business process finishes, the exchange rate says it is 0.60720694 for AUD:

Picture of the relevant business process element:

Is there an explanation as to why this could be happening?

Like 0

Like

2 comments

Hello!

 

The Exchange rate column in the Currency object is virtual, so it is not shown in the Lookup and cannot be edited directly from the Lookup.

The Rate itself is saved in the CurrencyRate table with a link to CurrencyId each time it is changed.



The base stores the inverse of the exchange rate. For example:

Base currency:  EUR

AUD exchange rate: 0.60720694



Which is inconvenient to understand, so a Lookup with a more user-friendly currency display, but converting to a reverse exchange rate, has been developed to support backward compatibility.

This way you can enter the usual exchange rate of EUR = 1.646885 (AUD to EUR) on the interface. And the base will already save 0.60720694 (EUR per 1 AUD).

 

These different types of rate (1.646885 and 0.60720694 ) will determine the formula by which you will then calculate the amounts.:

1) convert it to a familiar rate - 1/0.60720694  = 1.646885.

2) either work already with 0.60720694 , but then the calculation of the amount will be different.



So, the Rate column is virtual, but you can use CurrencyRate (exchange rate) to calculate the exchange rate.

Kyrylo Atamanenko,

 

What is the reasoning behind storing the exchange rates in such a manner? Why isn't this mentioned in any articles?

 

Also, you mention a more user friendly lookup has been developed; is this new lookup implemented in 8.1.5, or is this an upcoming feature?

Show all comments

It would be good to add some extra options and tools to Business Processes to better control their behaviour in certain circumstances, for example when they have ended up hanging. These would make using Business Processes a lot more robust to issues without every implementation having to build their own framework around them.

 

The controls I would like to see added are the following, but I'm sure other developers could provide more that would be useful:

  1. Maximum runtime - process instances would get set to "Error" state after this period automatically
  2. Retry method - allow BPs to be configured to be retryable after hanging and getting set to "Error" state automatically or failing with an error. It should also be possible to specify maximum retries, and of course by default BPs should not be set to be retryable to avoid any issues with non-idempotent BPs/BPs which it only makes sense to run synchronously when a user initiates the action, for example
  3. The ability for an admin to restart a specific BP instance - for example if they have identified one which has hung. This should be added alongside the "Cancel execution" ability we have currently in the Process log
  4. Failure alerting mechanism - some built in failure alerting mechanism, even just simply emailing a system setting-defined email list, so that resolving these issues can be more proactive rather than reactive to user feedback. Being configurable which BPs send alerts and which shouldn't would be useful, as well as alerting thresholds to prevent too much spam would be nice to have

 

I would welcome any additions people have to this list, and getting any of these would improve the resilience of using business processes greatly for customers.

1 comments

Hello Harvey,

Thank you for your valuable suggestions regarding enhancements to Business Processes. We appreciate your insights on the additional options and tools that could improve control and resilience.

 

We have shared your ideas with our development team for further consideration. 

We welcome any further contributions from the community, and we will keep you updated on any developments regarding these enhancements.

 

Thank you once again for your input!

Show all comments

Hello!
I have encountered such problems, maybe someone knows how to solve them?

There is a configured queue and a process that processes a queue item.

 

 

The first problem is that when opening the Cases_FromPage page the Case state is not loaded into the progress bar

 

 

The second problem I encountered is that it is necessary to close the page automatically and terminate the process element so that the queue element is considered processed, but this problem is solved with the help of this request:

{
	request: "crt.HandleViewModelInitRequest",
	handler: async function(request, next) {
		this.applyMethods(request.$context);
		await next.handle(request);					
	},
	applyMethods: function(context) {
		let methods = {
			closeProcessElement: async function() {
				const state = window.history.state;
				if (state && state.isProcessCardInChain && state.executionData && state.executionData.isOpened) {
					const executionData = state.executionData;
					const result = await context.executeRequest({
						type: "crt.CompleteProcessElementRequest",
						processElementUId: executionData.currentProcElUId,
						$context: context
					});
				}
			}
		};
		Ext.apply(context, methods);
	}
},

 

But another problem arose when changing the Case stage, in this case manually, the page doesn't always close.

I noticed that this behaviour on those stages where DCM has elements of activity creation.

In my case here:

When changing the stage from Waiting for Evaluation to Evaluation, the page should have closed.

The crt.CompleteProcessElementRequest request was executed.

Who knows what could be the problem?
Thanks!

Like 0

Like

1 comments

Hello,

 

Please contact our support team directly at support@creatio.com and make sure to describe each problem in a separate request so we could properly analyze and process these issues.

Show all comments

Hello.

 

I'm trying to save a pdf file that i get from a service web, the file comes in a base64 string so i use a script to convert it to a pdf and save it in Creatio, I have this code that works fine for the Accounts section but when i want to save the file in  a Custom section, the process send me an error sometimes because it doesnt find the Id other because it says that the duplicate key value violates unique constraint.

 

This is the code that works in the Accounts Section.

 

var base64FileString = Get<string>("Base64File");
var accountId = Get<Guid>("AccountId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName = Get<string>("NameFile"); // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("AccountFile");
var fileEntity = entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("AccountId", accountId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

 

And this is the code that I want to use in the custom section

 

var base64FileString = Get<string>("Base64File");
var resguardoId = Get<Guid>("ResguardoId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName = Get<string>("NameFile"); // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("SysFile");
var fileEntity = entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("ResguardoId", resguardoId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

 

 

Like 0

Like

4 comments

The SysFile entity doesn't, and won't, have a "ResguardoId" column. It has generic columns so it can work with any entity. Instead of setting ResguardoId, set the following: 

  • RecordId - the Id of the record (the value for ResguardoId)
  • RecordSchemaName - the name of the entity for the RecordId (whatever the entity name is for ResguardoId)

Ryan

Ryan Farley,

 

Thank you 

 

I'm made the change, the process starts without any error but the file is not save it in the record.

 

var base64FileString = Get&lt;string&gt;("Base64File");
var recordId = Get&lt;Guid&gt;("RecordId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName ="New.pdf"; // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("SysFile");
var fileEntity =  entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("RecordId", recordId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

Laura Jurado,

You also need to populate the RecordSchemaName property - refer back to my previous comment.

Ryan

Show all comments

Hello 
For some time now, I have noticed that the process of importing users from ldap does not start correctly even though it is set to synchronize every 2h. 


interestingly enough the process starts without problems if I run it manually 

Like 0

Like

3 comments

Hello!

 

Please provide us with a detailed information on what is not working correctly (business process not starting on time, is being delayed or not finished)?

Hello 
Business process not starting on time, it only works if I start it manually

Hello,
 

Please re-save the LDAP settings under the active user and make sure that the Creatio scheduler works.

Show all comments

Hi,

 

I'm trying to implement a simple Business Process to send an automatic Welcome\Onboarding email, when a new contact is created.


At this moment, the email has not been sent, and I have an error in the Process Log.

 

Has anyone faced this problem?

 

 

Follows the error:

 

System.IndexOutOfRangeException: Index was outside the bounds of the array.
  at Terrasoft.Mail.Sender.EmailMessage.GetMessageId()
  at IntegrationV2.EmailClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
  at Terrasoft.Mail.Sender.EmailSender.SendMessage(IEmailClient emailClient, EmailMessage emailMessage, Boolean ignoreRights)
  at Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.SendEmailWithDefaultSender(EmailMessage emailMessage, Boolean ignoreErrors)
  at Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessFlowElement.CallInternalExecute(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessActivity.RunInCultureScope[T](Func`1 action)
  at Terrasoft.Core.Process.ProcessActivity.ExecuteElement(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessActivity.ExecuteItem(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Like 0

Like

4 comments
Best reply

In this case, I recommend checking the system settings and mail operation, which is filled in the system settings. For example, if you transferred a system setting from another environment, its value may contain mail with an incorrect id or be empty.

Hello, 

This error in the business process can occur for the following reasons:
 

1. The mail indicated in the "To" field is not correctly configured on the environment and does not work
 

2. If the mail is not specified directly from the window and is filled in when reading the data in other elements, it is possible that this field remains empty and you receive the corresponding error
 

3. The user whose mail is read does not have registered mailboxes, or the user who starts the process does not have access rights to this mailbox (accordingly, the element returns an empty Id)
 

In general, this problem consists of incorrect filling of the "To" field, so we recommend reviewing the logic of your process and making sure that the field is filled correctly.

 

Thank's for your reply.
 

At the moment, the Business Process is very simple. It just have two elements, the initial Signal and the Send email.

 

Follows the pictures with the actual configs, that i think it should be all correct.

Business ProcessSignal configsSend email configs

 

 

In this case, I recommend checking the system settings and mail operation, which is filled in the system settings. For example, if you transferred a system setting from another environment, its value may contain mail with an incorrect id or be empty.

Hi Halyna,

 

I checked the System Setting and it was missing the email address on the default field.

Many thanks for your help.

Show all comments