I’m trying to filter a lookup in Freedom using the SDK, but this error occurs.

Here’s my code snippet:

await filter.addSchemaColumnFilterWithParameter(
   sdk.ComparisonType.In,
   "RecordId",
   dokumenIds
);

From the log, the dokumenIds look like this:
['283bfe2a-cbe9-4b4c-8baf-2959cd30b84d', '2693a56e-c6a4-40a9-a16e-429db38a9e09', '58f1338c-e20d-4662-93c1-a9da27633a00', '69658b3a-77f6-4d42-ae1f-c0e2dcdd7049', 'fbb5a32b-1a25-4c17-8945-d8c7c264b5f7', '1df81ea2-025f-4a19-9963-da5461c80507']

 

Like 1

Like

2 comments
Best reply

sdk.ComparisonType.In does not exist. For a "column value is in list" type filter, you need to use filter.addSchemaColumnInFilterWithParameters instead of filter.addSchemaColumnFilterWithParameter (note the "In", and "parameters" instead of "parameter") and use the Comparison Type Equal. e.g. adapting your example:

await filter.addSchemaColumnInFilterWithParameters(
   sdk.ComparisonType.Equal,
   "RecordId",
   dokumenIds
);

sdk.ComparisonType.In does not exist. For a "column value is in list" type filter, you need to use filter.addSchemaColumnInFilterWithParameters instead of filter.addSchemaColumnFilterWithParameter (note the "In", and "parameters" instead of "parameter") and use the Comparison Type Equal. e.g. adapting your example:

await filter.addSchemaColumnInFilterWithParameters(
   sdk.ComparisonType.Equal,
   "RecordId",
   dokumenIds
);

Harvey Adcock,

Thank you for answer. Yes, there is no ComparisonType with In filter.

Show all comments
custom page schema
custompage
custombutton
setparameter
inputparameter
Studio_Creatio
8.0

Hello,

I'm trying to implement a custom page that is opened by clicking a custom button on the opportunity edit page. In the custom page, I'm trying to retrieve the opportunity record id but it is null everytime. Here below you can find my current implementation.

In Opportunity edit page, i've implemented the following.

define("UsrOpportunities_FormPage_em4fpxb", /**SCHEMA_DEPS*/["@creatio-devkit/common"]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
	return {
		viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
			...
			{
				"operation": "insert",
				"name": "BtnOpenPodManager",
				"values": {
					"type": "crt.Button",
					"caption": "#ResourceString(BtnOpenPodManager_caption)#",
					"color": "primary",
					"clickMode": "default",
					"clicked": { "request": "usr.OpenPodManager" },
					"size": "large",
					"iconPosition": "only-text",
					"visible": true
				},
				"parentName": "ActionButtonsContainer",
				"propertyName": "items",
				"index": 0
			},
			...
		]/**SCHEMA_VIEW_CONFIG_DIFF*/,
		...
		handlers: /**SCHEMA_HANDLERS*/[
			{
				request: "usr.OpenPodManager",
				handler: async (request, next) => {
					const handlerChain = sdk.HandlerChainService.instance;
					const oppId = request.$context?.Id;
 
					console.log("Opportunity Id:", oppId); // record id available
 
					await handlerChain.process({
						type: 'crt.OpenPageRequest',
						schemaName: 'UsrOpportunityPodManagerPage',
						$context: request.$context,
						modelInitConfigs: [{defaultValues: [{OpportunityId: oppId}]}], // setting the record Id to pass it to the custom page
						scopes: [...request.scopes]
					});
 
					return next?.handle(request);
				}
			}
		]/**SCHEMA_HANDLERS*/,
	};
});

In Custom page, I've implemented the following:

define("UsrOpportunityPodManagerPage", [], function () {
	return {
		...
		handlers: [
			{
                request: "crt.HandleViewModelInitRequest",
                handler: async (request, next) => {
                    const ctx = request.$context || {};
                    let opptyId = ctx.OpportunityId; // trying to read the opportunity record Id
 
                    // Propagate
                    ctx.OpportunityId = opptyId;
                    const res = await next?.handle(request);
 
					console.log("[PodManager] OpportunityId:", opptyId); // the value is null everytime
 
                    return res;
                }
            },
			...
		],
		...
	};
});

The issue is that in the crt.HandleViewModelInitRequest the value of ctx.OpportunityId is null.

What I'm doing wrong? How I can solve this issue?

Thanks,

Matteo

Like 0

Like

1 comments

Hi Matteo,

crt.OpenPageRequest in Freedom UI does not support page parameters. As a workaround you can implement this using the browser’s native BroadcastChannel API to pass values.

Here is an example:

Sender page handler

handlers: /**SCHEMA_HANDLERS*/[
	{
		request: "usr.OpenPodManager",
		handler: async function (request, next) {
			const handlerChain = sdk.HandlerChainService.instance;
			const oppId = await request.$context.Id;
 
			// Wait for the receiver page to signal it's ready
			const bc = new BroadcastChannel("Ready");
			bc.onmessage = (event) => {
				if (event.data?.type === "Ready") {
					// Send the value to the receiver page
					const sender = new BroadcastChannel("OpportunityId");
					sender.postMessage({
						type: "OpenReceiverPage",
						payload: { OpportunityId: oppId }
					});
					sender.close();
					bc.close();
				}
			};
 
			// Open the receiver page
			await handlerChain.process({
				type: 'crt.OpenPageRequest',
				schemaName: 'UsrOpportunityPodManagerPage',
				$context: request.$context,
				scopes: [...request.scopes]
			});
 
			return next?.handle(request);
		}
	}
]/**SCHEMA_HANDLERS*/

Receiver page handler

handlers: /**SCHEMA_HANDLERS*/[
	{
		request: "usr.HandleViewModelInitRequest",
		handler: async function (request, next) {
			await next?.handle(request);
 
			// Notify the sender page that the receiver page is ready to receive data
			const readyChannel = new BroadcastChannel("Ready");
			readyChannel.postMessage({ type: "Ready" });
			readyChannel.close();
 
			 // Listen for the data from the receiver page
			const bc = new BroadcastChannel("OpportunityId");
			bc.onmessage = (event) => {
				if (event.data?.type === "OpenReceiverPage") {
					const oppId = event.data.payload?.OpportunityId;
				}
			};
		}
	}
]/**SCHEMA_HANDLERS*/
Show all comments
#source_code
.NETCORE
Studio_Creatio
8.0

Hello,

I’ve developed a solution using the .NET Framework, and I’m now looking to migrate it to .NET Core. Could anyone guide me on the best approach or recommended steps for converting an existing .NET Framework project to .NET Core, especially when integrating it with Creatio?

Additionally, do I need to set up a local Creatio environment on Linux for development, or can I continue working on Windows?

For context, this source code will be part of an application that I plan to publish on the Creatio Marketplace.

Any insights, recommendations, or best practices would be greatly appreciated.

Like 0

Like

1 comments

Hello,

Migration process mainly involves adapting your existing project so that it can operate on the newer .NET runtime used by modern Creatio versions. Since Creatio now runs on .NET 6 (Core), the goal is to make your code compatible with this platform while keeping your existing business logic intact.

The first step is to review all your project dependencies and external libraries. They should support .NET Standard 2.0 or higher, which ensures they can work in both .NET Framework and .NET Core environments. Some parts of the older framework, such as System.Web, GDI+, or WCF components, are no longer supported, so they may need to be replaced with modern equivalents. Microsoft provides tools like “try-convert” and “.NET Upgrade Assistant” that can automatically update your project structure, convert .csproj files, and help identify incompatible APIs.

From the Creatio integration side, you don’t necessarily need to switch to Linux for your development process. You can continue developing and testing your solution on Windows using Visual Studio or JetBrains Rider. What’s important is that the final build should target .NET 6 (or .NET Standard 2.0) so that it can run inside Creatio’s .NET Core runtime. When your package is ready, you can deploy it into a Creatio environment running on Linux for validation. This step ensures full compatibility before submitting it to the Marketplace.

Before publishing, it’s also recommended to verify that your solution works correctly with PostgreSQL, as Creatio .NET Core supports only this database. Check that your DLLs compile successfully, and remove any dependencies tied to Windows-only components. Once everything runs smoothly in a Creatio .NET environment, your application will be ready for Marketplace submission.

Show all comments
Facebook
integration
Facebook Integration
Studio_Creatio
8.0

I have to configure a callback URL for facebook to be called by a webhook each time a user comments on my Facebook page.

I created the Creatio web service as per documentation provided by Facebook, but when I try to set the callback URL in my Facebook developer console i get an error.

I assume it is because Creatio services requires authentication. Is there any way to solve this issue?

I am working in a cloud instance, so I cannot change web.config files and similar other configurations. How can I create an anonymous web service?

Like 0

Like

1 comments

Hello Sivia,

I have done implementation of anonymous webservice in Creatio for a client of mine.

If you have Creatio cloud instance (as you state in your question) final configuration must be done from Creatio support on cloud server directly. 

You would need to create anonymous endpoint on Creatio side and all other necessary files (.svc file/s, changes in services.config files and changes in Web.config files) and submit a Ticket by Creatio support with instructions what they need to configure on server. You should prepare and test everything on you local development environment first and after this just provide instructions and files to Creatio support.

If you need any further assistance, just let me know.

Best regards,

Jelenko.

Show all comments
FreedomUI
list
detail
Studio_Creatio
8.0

Hello, community!

Could you please advise how to change the height of an Expanded list (detail) in Freedom UI? Is it possible to make the vertical size flexible depending on the number of rows?

Like 2

Like

1 comments

If you increase the height of the list within the expansion panel in the Page Designer, then the expansion panel's maximum height will match the list's size in the Page Designer. If there aren't enough records to fill that list, the expansion panel's height will be smaller to match the number of records. I don't think there's a way besides this to control the height without code/custom CSS.

Show all comments
Studio_Creatio
8.0

Good Day , 

I would just like to find out if there is a way to create Dynamic Radio Buttons in Creatio. That is based on Data we get from an external database. This is because we want an alternative to the dropdowns and selection combo boxes.

It is the cloud version of Creatio

The Version of Creatio is :

Like 0

Like

1 comments

Hello,

Unfortunately, this functionality is not available in the system. This idea has already been registered, and I will add your request there to raise its priority. As for now, we recommend using the checkbox field as a workaround.

Show all comments

Hi everyone,

I'm using the on-site version of Creatio and have created a custom entity. However, I've noticed that the folder icon on the list page is disabled for this entity.

Has anyone encountered this issue before? What could be the possible reasons for this behaviour, and are there specific settings or configurations I should check to enable it?

Any guidance would be appreciated!

Thanks in advance.

Like 0

Like

1 comments

Hello,

Please provide a screenshot where the folder icon shows as disabled.

Show all comments
Studio_Creatio
Sales_Creatio
Marketing_Creatio
8.0

Hello Community,


I have a scenario where a Business Process (BP) triggers a subprocess, and in some cases, the subprocess might trigger the parent process again, causing potential recursion.

I want to stop or forcefully terminate a running BP when certain conditions are met. Specifically:

1. How can I safely stop or cancel a BP that’s in Running status.
2. Are there any best practices in Creatio to handle recursive or circular process triggers?
 

Any code examples, best practices, or guidance would be greatly appreciated.

Thank you!

Like 1

Like

2 comments

Hello,

You can safely terminate running business processes directly from the Process log section.
To do this, apply a filter for processes with the “Running” status, select the needed items (or use Select All), and choose Cancel execution. This will manually stop the active instances.
A detailed step-by-step guide is available in the Academy article:
Cancel a process | Creatio Academy

To prevent issues related to recursive or circular process triggers in Creatio, it is recommended to avoid configurations where a process initiates a subprocess that, in turn, triggers the parent process again.
Make sure that your execution flow is clearly structured, with well-defined start conditions and logical restrictions that prevent processes from being invoked repeatedly.

This approach helps maintain stability, reduces the risk of process loops, and ensures predictable execution behavior across the system.

Andrii Kendzor,

Thanks for the reply!

I’m aware of the manual process. This situation occurring because the main parent process (50K Instance) is in a Cancelling state in the queue and two sub processes are triggering each other.

Can we restart the system and resume normal operations for the org? Or is there any other option available?

Show all comments
Studio_Creatio
8.0

Here I am using creatio 8.3, 
I have a 1:M relation between sprints and tasks 
I added a list of tasks on sprint list page 
I want when load sprint page, tasks list be empty and when choose one of sprints it shows its related tasks (Already when choose one of sprints it shows its related tasks is applied)
not show all available tasks when load

Like 0

Like

1 comments

Hello,
In order to clear the list during the first load the most easy way woulb be to set it to null in the crt.LoadDataRequest handler, for example:
request.$context.DataGrid_9xso9hx = null;

Show all comments
identityservice
identity_service
OAuth2.0
Unauthorized
authentication
Studio_Creatio
8.0

I set up IdentityService following the manual. I generate the token, when I pass it with bearer to a request it gives error 401 Unauthorized.

After comparing the token (in jwt.io) with another token from an environment where it actually works, I noticed that my token does not have the following attributes in the body payload:

    "aud": "ApplicationAccess_c60a5f9ab2...",
  "prop:SysAdminUnitId": "ee85afe3-eaf3-4cc3-965...",
  "prop:Type": "ApplicationAccess",
  "prop:OwnerClientId": "IdServiceUser",
  "prop:ResourceId": "ApplicationAccess_c60a5f9ab..."


Could anyone help with this?

Like 5

Like

1 comments

Hello,

Please ensure that Creatio is properly connected to the Identity Service and that the diagnostics page displays all four green checkmarks.
Next, create an OAuth application in Creatio and use the Client ID and Client Secret generated for that application when obtaining the access token.

Make sure the user account under which the application operates has sufficient permissions to perform the required operations.

For detailed configuration steps, please refer to the official guide:
Connect the Identity Service to Creatio | Creatio Academy

Show all comments