Время создания
Filters
lookups
Sales_Creatio_enterprise_edition
8.0

Hi.

I wish to deactivate certain records in our Department table, since it is loaded with invalid records that were imported from SalesForce.  See first image below -- I enabled "Allow record deletion", and ran the package.

The Department list looks the same (see second image) with no option to disable a record.  Do I need to add a column or something?   

Thanks
Rob

 

Like 0

Like

0 comments
Show all comments
File_API_(GetFileFactory
EntityFileLocator)_Not_Working_in_Process_ScriptTask_-_Compilation_Errors

Hello  Team,

We are facing an issue while trying to use the File API inside a Process ScriptTask and would like your clarification.

According to the Creatio Academy documentation (File API overview), it is possible to work with files using the following approach:

 

IFileFactory fileFactory = UserConnection.GetFileFactory(); var fileLocator = new EntityFileLocator("SysFile", recordId); IFile file = fileFactory.Get(fileLocator);

 

However, when implementing this logic inside a ScriptTask of a business process, the code does not compile, and we receive the following errors:

  • 'UserConnection' does not contain a definition for 'GetFileFactory'
  • The type or namespace name 'EntityFileLocator' does not exist in the namespace 'Terrasoft.File.Abstractions'

This suggests that:

  • GetFileFactory() is not available in Process ScriptTasks
  • EntityFileLocator is not accessible in the process execution context

Our goal is to:

  • Read the content of an existing file (e.g. from SysFile or a custom *File entity)

Could you please confirm:

  1. Whether the File API (IFileFactory, EntityFileLocator, IFile) is officially supported inside Process ScriptTasks
  2. If not supported, what is the recommended and supported way to read an existing file and reuse its content inside a process

Thank you in advance for your support and clarification.

Like 0

Like

0 comments
Show all comments
Issue_Adding_WhatsApp_Channel_in_Creatio
WhatsApp_Integration
Sales_Creatio
8.0

Hi Creatio Support,

We are facing an issue while setting up the WhatsApp channel in Creatio.

For your information, I created a trial Creatio CRM instance to test the WhatsApp integration. I followed the steps mentioned in the link below:

Set up WhatsApp integration | Creatio Academy

The first step is marked as optional, so I skipped it. I created a Twilio account, but when I try to add the WhatsApp channel in Creatio, I receive an error. The steps mentioned in the document are:
 

  1. Set up a Twilio free trial account to get acquainted with the integration (optional). Read more >>>
  2. Set up a Twilio business account. Read more >>>
  3. Set up a WhatsApp chat channel in Creatio. Read more >>>

As mentioned in the same document, we verified the following system settings, and they are available in the system:

  • "Identity server Url" ("IdentityServerUrl" code)
  • "Identity server client id" ("IdentityServerClientId" code)
  • "Identity server client secret" ("IdentityServerClientSecret" code)

However, Creatio still shows an error when we try to add the WhatsApp channel in the Chat settings.

Please let us know what we might be missing. We would appreciate it if we could set up a quick call to review this issue.

Like 0

Like

1 comments

Hello,

If, as you mentioned, the system settings already contain the default values, please make sure that this account is connected to only one instance.

Additionally, we recommend generating a new webhook URL (navigate to
https://sitename.creatio.com/0/Shell/#Page/LandingiDesigner_Page → Other landing pages → Click to get your webhook URL) and then trying to reconnect the WhatsApp account.

If the issue persists after performing these steps, please contact us at support@creatio.com, and we will be able to carry out a more detailed analysis.

Show all comments

Passing Data Between Freedom UI Pages in Creatio (Real Project Case)

Introduction

This article is based on a real Freedom UI use case, not a hypothetical demo.

The requirement comes from an actual configuration scenario:

  • A Freedom UI form page (UsrSmartFilter_FormPage)
  • A custom Freedom UI component/page (UsrColumnViewerComponent)
  • The need to pass runtime values (object name + record Id)
  • And then persist user selections back into the database

No sandbox. No assumptions. Only what works in Freedom UI today.

Real Problem Statement

In a Freedom UI implementation, the user:

  1. Opens UsrSmartFilter_FormPage
  2. Selects an object (for example: Account, Contact, etc.)
  3. Clicks a button to configure columns
  4. A second Freedom UI page/component opens
  5. That page must:
    • Know which object was selected
    • Know which UsrSmartFilter record is being edited
    • Show all columns of the selected object
    • Save selected column names back to UsrSmartFilter.UsrColumnNames_Values

Classic UI sandbox messaging cannot be used.

Why Sandbox and Page Parameters Cannot Be Used

In Freedom UI:

  • Pages are isolated
  • There is no exposed sandbox API
  • Parameters passed via crt.OpenPageRequest are not injected into the target page context

This is a documented and observed platform behavior, not a theory.

The Working Mechanism: BroadcastChannel

The solution that works reliably is using the browser-native <strong>BroadcastChannel</strong> API.

This is not a Creatio abstraction. It is a standard Web API that works because:

  • Freedom UI pages run in the same browser context
  • Messaging happens at the browser level
  • No Creatio internals are bypassed

Real Sender: UsrSmartFilter_FormPage Handler

This handler exists on UsrSmartFilter_FormPage and is triggered by a button click.

What It Sends

  • Selected object schema name
  • Current page record Id (UsrSmartFilter.Id)

Real Handler Code

{
	request: "QNT.GetColumns",
	handler: async (request, next) => {
		const objectValue = request.$context.PDS_UsrSelectedObject_n4di2v4;
		const pageId = request.$context.Id;
 
		if (!objectValue || !pageId) {
			return next?.handle(request);
		}
 
		const channel = new BroadcastChannel("UsrSmartFilter_Channel");
 
		channel.postMessage({
			selectedObjectName: objectValue.displayValue,
			pageId: pageId
		});
 
		channel.close();
 
		return next?.handle(request);
	}
}

This code is taken directly from a working Freedom UI page.

Real Receiver: UsrColumnViewerComponent

UsrColumnViewerComponent is a custom Freedom UI component responsible for:

  • Receiving the object name and page Id
  • Loading the selected object schema dynamically
  • Allowing the user to select columns
  • Persisting the selection

Receiving the Data

this._channelIn = new BroadcastChannel("UsrSmartFilter_Channel");
 
this._channelIn.onmessage = async (event) => {
	const { selectedObjectName, pageId } = event.data || {};
 
	this._selectedObjectName = selectedObjectName;
	this._parentPageId = pageId;
 
	await this._loadObjectSchema();
	this._render();
};

This logic runs when the component is initialized.

Loading the Object Schema Dynamically

Instead of hardcoding Account, the schema is loaded dynamically using the received object name:

const model = await sdk.Model.create(this._selectedObjectName);
const schema = await model.getSchema();
 
this._columns = Object.values(schema.attributes).map(attr => ({
	name: attr.name,
	caption: attr.caption || attr.name
}));

This is standard Freedom UI Model API usage.

Persisting the Selected Columns (Real Persistence)

When the user selects or unselects columns, the component:

  1. Builds a comma-separated string
  2. Updates the existing UsrSmartFilter record
const model = await sdk.Model.create("UsrSmartFilter");
 
await model.update({
	Id: this._parentPageId,
	UsrColumnNames_Values: columnsCsv
});

This is not messaging — this is actual data persistence.

Why This Is a Real, Production-Safe Pattern

  • Uses only documented Web APIs
  • Uses Creatio Freedom UI Model API
  • No reliance on undocumented sandbox features
  • Works across page reloads once persisted

This pattern has been validated in real projects.

Key Constraints (Real, Not Theoretical)

  • BroadcastChannel does not queue messages
  • Receiver must be initialized first
  • Transient data should always be persisted

Ignoring these leads to real bugs.

Conclusion

This article does not describe a hypothetical demo.

It documents a real Freedom UI implementation pattern for:

  • Passing data between pages
  • Dynamically loading object metadata
  • Persisting user configuration

Until Creatio provides an official sandbox replacement for Freedom UI, this is the correct approach.

Final Takeaway

Freedom UI pages do not share state.
Browser-level messaging + Model API persistence is the only reliable solution today.

This is based on actual working code, not assumptions.

Like 0

Like

Share

0 comments
Show all comments
Saving_Dashboard_Screenshot_via_Scheduled_Process
Service_Creatio
8.0

Hello Team,

Is it possible to capture and save a Dashboard screenshot using a business process in Creatio?

Our requirement is to configure a scheduled process that runs daily and saves the dashboard snapshot (preferably as an image or PDF). The saved file should ideally be stored in Creatio or sent via email automatically.

Thank you in advance for your guidance.

Best regards,
Nikita


 

Like 0

Like

1 comments

Hello,
As of now, there are no options to make a direct dashboard screenshot using the business process or other logic.
If we are going into detail it is because the dashboards are rendered on the client side, on the other hand, business processes works with the backend only.
If you need to save dashboards, you must build a workaround to do so. The idea is the following, in the process you need to send a request similar to the one that dashboards send to DB in order to receive a needed data. This raw data already can be used as a source of needed dashboard information, but it also can be remodeled in the dashboard or any other for using third-party services.

Show all comments