Hello,

I have some business processes that reads the files attached to a section using a "Process file" element to add them to a "send email" element.
If the "container" of the attachments is "an old one" (like CaseFile, AccountFile, etc.) it works fine.
If the "container" is the "Freedom UI SysFile" (Uploaded File) the "Process file" element always returns an empty collection of files (even removing all the filters).

How can I send an email from a Business Process and attach the files stored in "SysFile" entity?

Thanks

Like 0

Like

3 comments

Hi,

We've investigated this behavior, and unfortunately, the "Process File" element cannot be configured to work with SysFile in cases where a registered [Object]File schema exists for the object in the system.
Currently, this behavior cannot be modified using low-code or development approaches.

At the same time, this is not the expected behavior, and we are already working on fixing this issue as part of the product. For now, the only viable solution is to use [Object]File for your task.

If your goal is to build a universal process that sends emails with attachments from different entities, we recommend creating separate flows for each object. For example, if the entity is Case, use a flow where the "Process File" element is configured for CaseFile; if it's another object without a custom file storage, use SysFile, etc.

We've also raised the priority of the existing task, taking your user experience into account. This will help prioritize and speed up the resolution.

Thank you for your understanding!

Pavlo Sokil,

Thanks for your reply

In my tests the Process File element doesn't work with SysFile for new Freedom UI objects that don't have a registered [Object]File schema. The returned file collection is always empty.

Any suggestions?

Thanks

 

Massimiliano Mazzacurati,

Hi,

Understood, thank you for letting us know. We've analyzed the situation — currently, the process element doesn't work quite correctly with attachments stored in SysFile.

To resolve this, you’ll need to make a small change to the process metadata. Here's a brief guide on how to do it, using a test section (Test Section) as an example:

  1. In the Process File element, select "Uploaded file" (SysFile) as the object.

  2. Then, in the Advanced settings, you’ll see a parameter called "Source data object" (SourceDataEntitySchemaUId) — this is the object to which the attachments in SysFile are linked.
    You’ll need to manually change this in the metadata to the UId of the actual object you are working with.
  3. Open the process metadata and switch to Modifications package mode.

     

  4. Locate the parameter by its code: "SourceDataEntitySchemaUId", and replace its value with the UId of your desired object.

  5. You can find the UId in the system configuration by clicking the three-dot menu and choosing "Properties" — for example:

  6.  

  7. After that, in the process metadata, update the "GS2" value for this parameter and save the changes.

  8. Important: Reload the process page before making further changes in the designer to avoid overwriting the metadata update.
  9. Now you will notice the changes in parameter's settings in advanced mode:
     

That’s it — now the attachments will be linked correctly.

Please note that for now, this is a workaround. Our team is actively working to ensure the process element handles this case properly without needing to modify the metadata manually.

Hope this helps solve your business task.

Thanks for reaching out!

Show all comments

How can I report on key words within a case (Either email or feed post) or which users have posted on a feed in a case?

Like 0

Like

1 comments

Good day, Ashleigh,

Could you please specify what functionality you are referring to by reporting on keywords in cases?

If possible, please provide us with an example or an intended use-case.

Thank you in advance!

Show all comments

Hello Community,

I need to store a snippet of HTML code (e.g., a button or formatted content) into a field of an object (e.g., a text or string field). Later, I want to render this HTML dynamically on a page at runtime.

What’s the best way to store the HTML safely and then render it so that it's interpreted as actual HTML (not plain text) in the UI?
Are there any security or encoding considerations I should keep in mind?

Thanks in advance!

Like 2

Like

7 comments
Best reply

An easy no code way would be to bind the value to a read-only Rich Text control on the page. It will display the HTML as HTML.

Otherwise, you'd have to create your own custom control for it.

An easy no code way would be to bind the value to a read-only Rich Text control on the page. It will display the HTML as HTML.

Otherwise, you'd have to create your own custom control for it.

Ryan Farley,

Thanks for the suggestion! I am looking for custom control.

Is there any reference or example available to create custom control.

Hello Ajay,

Here is the article that contains the explanation and example of how to create custom control

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/8.1/front-end-development/classic-ui/controls/examples/add-a-control-to-a-record-page

Also inside your custom control implementation you can add HTML value validation and remove any script elements to provide the level of security. 

Hi Iryna,

 

Is above link, you provided, applied for Freedom UI module?

The information and example for Freedom UI you can find here:

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

This simple example of an IFRAME control could easily be adapted to simple output a div containing the custom HTML instead, plus you'd just bind the column containing the HTML to the control. https://customerfx.com/article/embedding-an-iframe-on-a-creatio-freedom-ui-page/

A full component would likely be a better route, but this simpler option coudl still get the job done.

Ryan

Hi Ryan Farley,

When I bind a value to a read-only Rich Text control on the page, only the raw HTML is displayed and the CSS styles are stripped out.

Show all comments

How to configure use freedom mini page for creating object and classic page for editing in classic ui section?

Like 0

Like

1 comments


Hello, 

 

Currently, this is the expected system behavior. If the modal/mini page for adding records is configured in Freedom UI, but you have Classic UI enabled, the mini-page will not open. Current mini pages (modal) only work for the shell and Freedom UI pages. However, we already have a task registered in our R&D team to consider and add support for modal/mini page details in Classic UI. 

 

 

Show all comments

i am using 8.2.2

i am trying to set the value of a number field called Lama Bekerja based on the months inputted in Mulai Bekerja accounting the year aswell, i know that using business rules where you can use set value = formula like so...

now when i open it, it doesn't let me do the calculations

can someone explain a method on how to implement this in creatio 8.2.2?

Like 1

Like

3 comments
Best reply

Hello,

As far as we understand,  you are referring to the fact that the "Mulai Bekerja" field is not available for selection in the formula setup.

This is most likely because Creatio currently supports only numeric fields in business rule calculations. Date fields, such as "Mulai Bekerja," are not supported in this context.

Please let us know if you'd like assistance implementing this logic using a business process instead.

Hello,

As far as we understand,  you are referring to the fact that the "Mulai Bekerja" field is not available for selection in the formula setup.

This is most likely because Creatio currently supports only numeric fields in business rule calculations. Date fields, such as "Mulai Bekerja," are not supported in this context.

Please let us know if you'd like assistance implementing this logic using a business process instead.

Valeriia Hromova,

i have already tried using the business process however am unable to find the year function, so i would like some support here

Michael Fernando Handoyo,

Hello,

Thank you for your follow-up.

You're correct — business rules in Creatio do not currently support date fields in formulas. However, when working with business processes, you can calculate the difference between dates using the C# DateTime structure, as described in the documentation:


https://academy.creatio.com/docs/user/bpm_tools/business_process_setup/formulas/process_formulas#title-1621-4

 

Also, we have this built-in function that may help you as well:

Substract one number from another, divide it by 30 (if you need months) - here is your result in months (or you can use other math functions from the article)

Show all comments

Hi, 

I’m using the "Handle Template for Email with Macros" user task, but the output still contains the original template with macros untouched. The macros are not being replaced with actual values, and the Body parameter is returning the same template content.

Can you help me understand why the macro fields are not being filled in?

Like 0

Like

1 comments

I Created my own User task which handle all macro which have macro source filled in.

protected override bool InternalExecute(ProcessExecutingContext context) {
			// IMPORTANT: When implementing long-running operations, it is crucial to
			// enable timely and responsive cancellation. To achieve this, ensure that your code is designed to
			// respond appropriately to cancellation requests using the context.CancellationToken mechanism.
			// For more detailed information and examples, please, refer to our documentation.
			if (TemplateCode == Guid.Empty || RecordId == Guid.Empty) {
				isSuccess = false; 
				return true;
			}
 
			var templateEsq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "EmailTemplate");
			var bodyColumn = templateEsq.AddColumn("Body");
			var macroColumn = templateEsq.AddColumn("Object");
			var templateEntity = templateEsq.GetEntity(UserConnection, TemplateCode);
 
			if (templateEntity == null) {
				isSuccess = false;
				return true;
			}
 
			Guid macroSource = templateEntity.GetTypedColumnValue<Guid>("ObjectId");
			string body = templateEntity.GetColumnValue(bodyColumn.Name)?.ToString() ?? "";
 
 
			var macroSourceEsq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "SysSchema");
			var idFilter = macroSourceEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "UId", macroSource);
			macroSourceEsq.Filters.Add(idFilter);
			var schemaNameColumn = macroSourceEsq.AddColumn("Name");
			var macroSourceEntities = macroSourceEsq.GetEntityCollection(UserConnection);
 
			if (macroSourceEntities == null || macroSourceEntities.Count == 0) {
				isSuccess = false;
				return true;
			}
 
			string schemaName = macroSourceEntities[0].GetColumnValue(schemaNameColumn.Name)?.ToString() ?? "";
 
			var macroRegex = new Regex(@"\[#(.*?)#\]");
			var matches = macroRegex.Matches(body);
 
			if (matches.Count == 0) {
				ReturnBody = body;
				isSuccess = false; 
				return true;
			}
 
			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, schemaName);
			var columnMap = new Dictionary<string, string>(); 
 
			foreach (Match match in matches) {
				var macro = match.Groups[1].Value;
				if (!columnMap.ContainsKey(macro)) {
					var column = esq.AddColumn(macro);
					columnMap[macro] = column.Name;
				}
			}
 
			var entity = esq.GetEntity(UserConnection, RecordId);
			if (entity == null) {
				ReturnBody = body;
				isSuccess = false;
				return true;
			}
 
			var result = body;
			foreach (Match match in matches) {
				var macro = match.Groups[1].Value;
				if (columnMap.TryGetValue(macro, out string esqColumnName)) {
					try {
						var value = entity.GetColumnValue(esqColumnName)?.ToString() ?? "";
						result = result.Replace(match.Value, value);
					} catch (Terrasoft.Common.ItemNotFoundException) {
						try {
							var value = entity.GetColumnValue(esqColumnName + "Id")?.ToString() ?? "";
							result = result.Replace(match.Value, value);
						} catch {
							result = result.Replace(match.Value, "");
						}
					}
				}
			}
 
			ReturnBody = result;
			isSuccess = true;
			return true;
		}
Show all comments

Hi everyone,
I'm new to Creatio and currently working with business processes. I’ve built a process that should display a pre-configured page when the quote total exceeds the customer’s budget.

The process is triggered when the quote total is modified. It uses two Read Data elements to retrieve the quote total and the customer's budget, followed by a gateway that checks if the total > budget. If true, it proceeds to a "Show Page" element.

I’ve enabled the Show page automatically checkbox, but the page doesn’t appear when the condition is met. Is there anything else I need to configure for the page to show automatically?

Any help is appreciated—thanks!

Like 0

Like

2 comments

Check the start of the process (the green circle) and make sure the “run in background” is NOT checked. 
Ryan 

Ryan Farley,

So I checked my object signal (green circle) and the Run following elements in the background field is unchecked. This checkbox is also unchecked for the pre-configured page element. 

Show all comments

Hi Everyone, 

There is a sub process inside a main process, in which a web service (REST) is called but it is getting stuck due to operation timeout error (screenshot pasted). Our customer requested to bypass it if it is operation timeout so we checked that checkbox (Run current element in the background) in the subprocess. We thought that the main process now will not stop its execution even if the sub process stuck in the error state. But it is not and the main process is still stucking and not moving forward.

1. Following is the screenshot of the execution diagram of the main process where it got stuck at the subprocess - 

 

2. Following is the screenshot of the subprocess where the web service is called. 

3. Following is the screenshot of the error message - 

 

Can anyone please suggest how to handle this situation?

Thanks in advance.

Like 0

Like

3 comments

Sadly, there's no way to handle the timeout error in the process, it will only put the process in an error state - I do wish it was an option to handle that in the process rather than have the whole process error. 

Only option would be to increase the timeout for the web service call to possibly allow for the additional needed time. Otherwise, I've added script tasks that check for the service availability and can branch as needed to avoid the web service call, but that defeats the benefits of using the no-code web service components in the first place.

Ryan

Ryan Farley,

Thank you, if possible can you please share an example of how did you added script tasks that check for the service availability?

AS,

It was basically just C# that called one of the API methods and then set a param in the process so it knew to proceed or branch elsewhere. How that would look would depend on the API, but essentially you’re just writing code to call the API directly.

Show all comments

Hello, i am trying to customize a component called Contact Compact Profile, this is the default state

how do i customize adding a field in here? where do i go to customize the field here?

i tried using the page but this is the only settings, can anyone help me please?

Like 0

Like

2 comments
Best reply

Hello,

The contents and structure of the AccountCompactProfile / ContactCompactProfile elements are immutable in the system. Their behaviour is preconfigured and is, unfortunately, impossible to alter.

A request to improve this logic has already been submitted to our R&D team, and they are looking into the possibility of expanding it in the future versions of Creatio.

Hello,

The contents and structure of the AccountCompactProfile / ContactCompactProfile elements are immutable in the system. Their behaviour is preconfigured and is, unfortunately, impossible to alter.

A request to improve this logic has already been submitted to our R&D team, and they are looking into the possibility of expanding it in the future versions of Creatio.

i see thank you for the information :D

Show all comments

Hi Community,

I'm trying to add a new package(CrtCoreBase) in depend on package of certain package(my custom package), but I’m encountering the following error:

[SchemaData] [SysDetail_Activity]: Duplicate element name in the same package   [SchemaData] [SysImage_SectionIcon_Activity]: Duplicate element name in the same package [SchemaData] [SysModule_Activity]: Duplicate element name in the same package 

I have two list pages for the Activity object (one for incoming activities and another for outgoing activities). Could this setup be causing the issue?

Any suggestions on how to resolve this would be appreciated.

Thanks!

Like 0

Like

4 comments
Best reply

Hello,

Since both sections are tied to the Activity object, it's likely that the error comes from duplicated data bindings in the same package.

You can check the "Data Bound" tab to see which bindings are actually needed. If both are, consider slightly renaming the duplicates (e.g., SysModule_Activity_Incoming, ..._Outgoing) to avoid conflicts.

Alternatively, you could remove or move one of the bindings to another package, depending on your setup.

Best regards,
Ivan

Hello,

Based on the provided information, the error message suggests that there are duplicate element names within the same package. This issue typically occurs when multiple elements in the package share the same name.

To resolve this, we recommend checking the package that contains the Activity object to ensure there are no duplicate element names. Review the elements within the package and confirm that each one has a unique name.

If you identify any duplicates, you will need to rename one of the elements to make it unique within the package. Once the duplicate element names are resolved, you should be able to add the CrtCoreBase package as a dependency without encountering the error.

Best regards,
Ivan

Ivan Savenko,

Hi, 

I confirm that i have duplicate element like

 

But it  is safe to rename them because one is being used in incoming email message and other in outgoing email message (both section are connected to activity object).

 

Hello,

Since both sections are tied to the Activity object, it's likely that the error comes from duplicated data bindings in the same package.

You can check the "Data Bound" tab to see which bindings are actually needed. If both are, consider slightly renaming the duplicates (e.g., SysModule_Activity_Incoming, ..._Outgoing) to avoid conflicts.

Alternatively, you could remove or move one of the bindings to another package, depending on your setup.

Best regards,
Ivan

Ivan Savenko,

Hi,

I moved those duplicate elements to other package and now i am able to add new packages in depend on package.

Thanks

Show all comments