Studio_Creatio
8.0

Hello, 

As shown in the attached screenshot, I’m currently unable to save a new OAuth integration, even though the diagnostics in the top-right corner indicate success.

Additionally, existing OAuth integrations are no longer functioning as expected. When attempting to retrieve a token, I receive a 400 Bad Request response with the message "invalid scope", as also showed in the screenshot.

Please note that this issue is occurring in an on-premises environment.

Could you kindly assist in resolving this?

Thank you in advance for your prompt support.

 

 

Like 0

Like

1 comments
attachment
#customization
Studio_Creatio
8.0

Hi,

Is there a way to catch the events when an attachment is added or deleted in the form page through attachments section !! 

I want to catch those events in the front end.

Like 0

Like

1 comments

Hi Sagar Rodda,


I suggest you either create a business process with the signal start event to run the process automatically when a record added/deleted, or add the following handlers to the section form page:

  handlers: /**SCHEMA_HANDLERS*/[
   {
    request: "crt.UploadFileRequest",
    handler: async function(request, next) {
     /* Your customization will be here  */
     return next?.handle(request);
    }
   },
   {
    request: "crt.DeleteFileRequest",
    handler: async function(request, next) {
     /* Your customization will be here  */
     return next?.handle(request);
    }
   }
  ]/**SCHEMA_HANDLERS*/
Show all comments

I have a angular component that is built and loaded into my creatio workspace that has a freedom ui component specific to it. I want this component whenever it is attached to a certain form page or list page to emit the package name/record id. how can I do that?

Like 0

Like

1 comments

Hi,

At the moment, Freedom UI doesn’t provide a built-in “hook” that passes those page context values directly into your Angular component without any wiring. In order to achieve your goal you need to bind the required values to your component's @Input property from the Freeddom UI page. Then in your Angular component use for example ngOnChanges to detect when the value is received and emit it with your own @Output which you can then further process.

Show all comments
Filters
MultiSelectLookup
multi
Studio_Creatio
FreedomUI
creatio8.1.2
8.0

Hi Community,

I’m working on a requirement where I need to filter Region lookup data in a multi‑select dropdown field based on a column value (State/Region).

Basically, when a user opens the lookup field, it should only display the records that match the given State condition.


Here is my viewConfigDiff code:

viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
...
{
				"operation": "insert",
				"name": "MultiSelect_ugo4wdi",
				"values": {
					"layoutConfig": {
						"column": 1,
						"row": 3,
						"colSpan": 2,
						"rowSpan": 1
					},
					"type": "crt.MultiSelect",
					"label": "#ResourceString(MultiSelect_ugo4wdi_label)#",
					"recordId": "$Id",
					"recordRelationColumnName": "ImpAccount",
					"selectSchemaName": "ImpStateInterestMultiselect",
					"selectColumnName": "ImpStateInterestField",
					                          "selectFilter": {
      "items": {
        "filterByRegion": {
          "comparisonType": 3,
          "isEnabled": true,
          "filterType": 1,
          "leftExpression": {
            "expressionType": 0,
            "columnPath": "ImpStateRegion"
          },
          "rightExpression": {
            "expressionType": 2,
            "parameter": {
              "dataValueType": 1,
              "value": "State"
            }
          }
        }
      }
    },
					"visible": true,
					"labelPosition": "above",
					"placeholder": "",
					"tooltip": ""
				},
				"parentName": "GridContainer_qy480gv",
				"propertyName": "items",
				"index": 3
			},
			...
			]/**SCHEMA_VIEW_CONFIG_DIFF*/,

I’ve tried adding filtering logic in the source code, but I’m not getting the expected result. Here is my handler code:

handlers: /**SCHEMA_HANDLERS*/[
			{
  request: "crt.LoadDataRequest",
  handler: async (request, next) => {
    // Ensure this runs only for your MultiSelect list data source
	    console.log("Current DataSourceName:", request.dataSourceName);
	   console.log("EntitySchema:", request.entitySchemaName);
 
    // Ensure it's the right source + schema
 
    if (request.dataSourceName !== "MultiSelect_ugo4wdi_List_DS") {
		console.log("Hello I am in a log box 1234");
      return await next?.handle(request);
    }
 
    const filter = new sdk.FilterGroup();
 
    // Filter where ImpStateRegion == 'State'
    await filter.addSchemaColumnFilterWithParameter(
      sdk.ComparisonType.Equal,
      "ImpStateRegion", // <-- Column in ImpStateInterestMultiselect to filter on
      "State"           // <-- The fixed value to filter by
    );
 
    // Workaround for Creatio DevKit filter bug
    const newFilter = Object.assign({}, filter);
	  console.log("Hello I am in a log box");
    newFilter.items = filter.items;
 
    // Add filter to request parameters
    request.parameters.push({
      type: "filter",
      value: newFilter
    });
 
    // Proceed with next handler
    return await next?.handle(request);
  }
}
 
		]/**SCHEMA_HANDLERS*/,

I’ve also attached a screenshot of the current setup.

Multiselect filter

Multiselect element code

Can someone guide me on how to correctly apply filters for a multi‑select lookup field?
Do I need to configure this through the business rules, or is filtering only possible via overriding the source code handler?

Any help or examples would be greatly appreciated!

Thanks in advance.

Like 0

Like

2 comments

Hello,

To set up filtering for lookup fields in the dropdown, you’ll need to add a new business rule.

Please follow these steps:

  1. Open the Business Rules section on the current form page.
  2. Click "+ Add rule" under the Account business rules.
  3. In the "Then" block, select the action "Apply filter". Leave the "If" block empty.
  4. Configure the filter as follows:

Filter Region by State Where Region.State = Account.State

Save your changes.

@tushar, was you able to make it work?

I dont think the BR approach works because is a Multiselect so there shouldnt be a Region field in the Account in this case, but a separate object that contains the relashionship between Account and Region

Show all comments
manytomany
relationship
list
grid
Records
object
Studio_Creatio
8.0

Hi Creatio Community,

 


In my Freedom UI application, I have this setup:

  • Object: Document
  • Lookup: Functional Area
  • Many-to-many table: DocumentFunctionalArea

I’ve configured a multiselect lookup field that stores the selected Functional Areas using the intermediate table. It works on the page and values are saved correctly.

But the problem is:
In the record list (grid), I want to display the related Functional Areas for each document. Not as a field above the grid - I want them to be shown as a column, like "Functional Areas: Sales, Marketing, Finance", etc.

However, in Freedom UI, I can't add this as a column because the multiselect field is based on an intermediate object.

Is there a built-in way to show many-to-many values inside the record list view, or is it currently not supported?

I attached screenshots to illustrate what I'm trying to achieve.
It’s totally okay if values are comma-separated or listed vertically - the main goal is to show multiple related values in a single column of the Document list.

Thanks a lot!

Like 0

Like

1 comments

Hello ,

Thank you for your detailed explanation and the screenshots, they really help clarify what you're aiming to achieve.
Currently, Freedom UI does not support displaying values from a many-to-many relationship (like your "Functional Areas") directly as a column in the list view.
That said, I completely understand how useful this functionality would be, it’s a very reasonable and practical request. I’ll go ahead and register this as an idea on our internal roadmap for potential future improvements to the Freedom UI framework.

Show all comments
Studio_Creatio

While using an email template for the 'Create an Email' action in a button, the template is not displaying. Do you know how we can link it so that it appears in the application? Has anybody run into this problem?

Image preview

Like 0

Like

3 comments

Hello,

The issue you're experiencing occurs because templates with a macro source tied to a specific context are only accessible within that particular section. When switching to another section, the context does not transfer automatically, which is why the templates may not be visible. For example, if you are working within the Case section, you will not be able to select message templates that have Account set as the macro source. Only templates with a macro source of Case or those without a defined source will be available.

At this time, there is no built-in functionality to make these templates universally available across different sections without modifying the macro source. As a workaround, you can create separate templates tailored to each section.

Although, we’ve submitted a task to our R&D team to explore the feasibility of implementing this feature in future updates.

Best regards,
Tomasz

 

Hello Tomas,

 

In this case I am working with the HO Report Section and have selected the same source in the Macro, but I still don't see the template in the section. What can I do in this case?

 

 

Thanks!

Hello,

The thing is that the 'Create an Email' action in a button element creates a separate email that is not associated with the your HO Report object. That is, it is the same as if you were creating an email from the communication panel and therefore, you cannot use templates with HO Report macros in such an email. We currently have a task to improve this element. 

As an alternative, you can add the timeline component from ‘Message composer’ element in the page designer and when you send an email from it, you will have templates with HO Report macros available:

image.png

I hope these recommendations will help you! 

Show all comments
Button
Color
demo
environment
Customization
Studio_Creatio
8.0

Hello,

I'm currently evaluating the Creatio demo environment and I would like to understand more about its functional limitations.

1. What are the specific functional limitations of the demo environment (if any)?
2. Why is it not possible to set a custom button color via the UI designer in Freedom UI? Is this a limitation of the demo version or of the UI framework itself?

Thank you in advance for your clarification.

Like 0

Like

9 comments
Best reply
  1. No real restrictions for trial systems. Some limitations on the marketing functionalities, but other than that a complete system that lasts two weeks.
  2. Creatio buttons can be red, blue, green, outlined, or no background. The designer doesn't allow selecting other colors for buttons (not a limitation of trials, just how Creatio works in general)
  1. No real restrictions for trial systems. Some limitations on the marketing functionalities, but other than that a complete system that lasts two weeks.
  2. Creatio buttons can be red, blue, green, outlined, or no background. The designer doesn't allow selecting other colors for buttons (not a limitation of trials, just how Creatio works in general)

There used to be a 1,000 record per section limitation. I am not sure if it is still in place.

Ryan Farley,

thanks!

Brian Segers,

Sure, the limitation is for each application object/table, if an object had more than 1000 records any new record will be rejected,

Brian Segers,

I am not 100% sure that the 1000 records per object applies to demo/trial systems. That limitation applies to a system without licenses, like a local dev install. Trial systems do have licenses in place. It could be that it applies in trials, it's been a while since I tested that, but my understanding is that limitation comes from having no licenses installed (no licenses is still a working system, but has the 1000 record per object limitation). If anyone knows for sure, I'd love to hear.

Brian Segers,

I just verified this in a trial. I was able to import 2000 records to a single table/object. The 1000 record limitation isn't in place in trials (since they do have licenses)

Ryan

Julio.Falcon_Nodos,

That is for systems without licenses (trials do have licenses). I just verified by importing 2000 records to an object in a trial system.

Ryan

Thanks Ryan, I usually get trial or demo without licenses, unless need to try or demo Marketing, were you need them

Ryan, Thanks for clarifying and verifying that is very good to know.

Show all comments
Accidently
deleted
list
page
Studio_Creatio

Hello everyone.

I am a novice platform administrator working with Creatio. In the middle of taking my Developer Cert for Creatio, while working on my local environment I deleted the UsrRealty_ListPage, while trying to create it manually and trying to save it and compile my UsrRealty package I keep getting the following errors:
1. Trying to compile UsrRealtyObject
2. Configuration on the Pages section of the UsrRealty object:

 

I dont know if the previously deleted page UsrRealtyListPage is being referenced somewhere else and its not finding it. I would appreciate any help anyone could give me. 

Thanks!

Like 0

Like

1 comments
list
Filtering
datasource
custom_filter
Studio_Creatio
8.0

Hello community!

I'm creating a list in the Case object's form page to display processes logs that are connected to the current record, so that I get a detailed trace of executions for any case record. I have already created the list to display the information and it is something like this:

As you may see, for this example the list retrieves only 1 record because there was only 1 execution of the process "Modify case" that was connected to the current case. If I run another process connected to this case I will have something like this:

 

My problem is that the filter implemented for the list has the Schema UId and record id hardcoded, as I don't know how to retrieve than information dynamically inside the filter configuration. With those hardcoded values, the information is fetched and filtered correctly, but I can't seem to implement it in a generic way. I've tried to get the current record id with things like:

  • $Id
  • $PDS.Id
  • PDS.Id
  • ProcessLogListDS.Id

But none of them seem to work. This is the page code with the filter configuration:

define("Cases_FormPage", /**SCHEMA_DEPS*/[]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/()/**SCHEMA_ARGS*/ {
    return {
        viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
            ...
        ]/**SCHEMA_VIEW_CONFIG_DIFF*/,
        viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
            {
                "operation": "merge",
                "path": [
                    "attributes"
                ],
                "values": {
                    "ProcessLogList": {
                        "isCollection": true,
                        "modelConfig": {
                            "path": "ProcessLogListDS",
                            "filterAttributes": [
                                {
                                    "loadOnChange": true,
                                    "name": "ProcessLogList_PredefinedFilter"
                                }
                            ]
                        },
                        "viewModelConfig": {
                            "attributes": {
                                "ProcessLogListDS_Name": {
                                    "modelConfig": {
                                        "path": "ProcessLogListDS.Name"
                                    }
                                },
                                "ProcessLogListDS_Id": {
                                    "modelConfig": {
                                        "path": "ProcessLogListDS.Id"
                                    }
                                }
                            }
                        }
                    },
                    "ProcessLogList_PredefinedFilter": {
                        "value": {
                            "items": {
                                "masterRecordFilterWrapper": {
                                    "filterType": 6,
                                    "isEnabled": true,
                                    "logicalOperation": 0,
                                    "items": {
                                        "masterRecordFilter": {
                                            "filterType": 6,
                                            "isEnabled": true,
                                            "logicalOperation": 1,
                                            "items": {
                                                "entityFilter": {
                                                    "filterType": 5,
                                                    "comparisonType": 15,
                                                    "isEnabled": true,
                                                    "leftExpression": {
                                                        "expressionType": 0,
                                                        "columnPath": "[VwSysProcessEntity:SysProcess].Id"
                                                    },
                                                    "subFilters": {
                                                        "filterType": 6,
                                                        "isEnabled": true,
                                                        "logicalOperation": 0,
                                                        "items": {
                                                            "EntityIdFilter": {
                                                                "filterType": 1,
                                                                "comparisonType": 3,
                                                                "isEnabled": true,
                                                                "leftExpression": {
                                                                    "expressionType": 0,
                                                                    "columnPath": "EntityId"
                                                                },
                                                                "rightExpression": {
                                                                    "expressionType": 2,
                                                                    "parameter": {
                                                                        "dataValueType": 1,
                                                                        "value": "47b777ca-4d1e-46f2-b2dc-22324202db2e" // This is the current Case record id for the example
                                                                    }
                                                                }
                                                            },
                                                            "SchemaUidFilter": {
                                                                "filterType": 1,
                                                                "comparisonType": 3,
                                                                "isEnabled": true,
                                                                "leftExpression": {
                                                                    "expressionType": 0,
                                                                    "columnPath": "SysSchema.UId"
                                                                },
                                                                "rightExpression": {
                                                                    "expressionType": 2,
                                                                    "parameter": {
                                                                        "dataValueType": 1,
                                                                        "value": "117d32f9-8275-4534-8411-1c66115ce9cd" // This is the Case Schema UId
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "logicalOperation": 0,
                            "isEnabled": true,
                            "filterType": 6,
                            "rootSchemaName": "VwSysProcessLog"
                        }
                    }
                }
            }
        ]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,
        modelConfigDiff: /**SCHEMA_MODEL_CONFIG_DIFF*/[
            ...
        ]/**SCHEMA_MODEL_CONFIG_DIFF*/,
        handlers: /**SCHEMA_HANDLERS*/[]/**SCHEMA_HANDLERS*/,
        converters: /**SCHEMA_CONVERTERS*/{}/**SCHEMA_CONVERTERS*/,
        validators: /**SCHEMA_VALIDATORS*/{}/**SCHEMA_VALIDATORS*/
    };
});

 

What the filter basically does is equivalent to the following OData query:

https://my-site.creatio.com/0/odata/VwSysProcessEntity?$filter=EntityId…

Like 0

Like

2 comments

Hello,

Here are some community posts that cover similar scenarios related to dynamic filters and retrieving context values in Freedom UI:
https://community.creatio.com/questions/how-filter-list-page-according-current-user-contact-type-freedom-ui-0
https://community.creatio.com/questions/filtering-list-view-freedom-ui
https://community.creatio.com/questions/how-get-entity-id-module-freedom-ui-page

To retrieve the current record Id and use it in a filter dynamically, you can access the page context using:

const recordId = await request.$context.Id;

To get the Schema UId for the Case object, you can query the SysSchema table:

const schemaModel = await sdk.Model.create("SysSchema");
const schemaData = await schemaModel.load({
 attributes: ["UId"],
 filters: {
   items: {
     byName: {
       filterType: sdk.FilterType.Compare,
       comparisonType: sdk.ComparisonType.Equal,
       leftExpression: { expressionType: 0, columnPath: "Name" },
       rightExpression: {
         expressionType: 2,
         parameter: { dataValueType: 1, value: "Case" }
       }
     }
   }
 }
});
const caseSchemaUId = schemaData[0]?.UId;

 

Daiana Gavrylenko writes:

Hello,

Here are some community posts that cover similar scenarios related to dynamic filters and retrieving context values in Freedom UI:
https://community.creatio.com/questions/how-filter-list-page-according-current-user-contact-type-freedom-ui-0
https://community.creatio.com/questions/filtering-list-view-freedom-ui
https://community.creatio.com/questions/how-get-entity-id-module-freedom-ui-page

To retrieve the current record Id and use it in a filter dynamically, you can access the page context using:

const recordId = await request.$context.Id;

To get the Schema UId for the Case object, you can query the SysSchema table:

const schemaModel = await sdk.Model.create("SysSchema");
const schemaData = await schemaModel.load({
 attributes: ["UId"],
 filters: {
   items: {
     byName: {
       filterType: sdk.FilterType.Compare,
       comparisonType: sdk.ComparisonType.Equal,
       leftExpression: { expressionType: 0, columnPath: "Name" },
       rightExpression: {
         expressionType: 2,
         parameter: { dataValueType: 1, value: "Case" }
       }
     }
   }
 }
});
const caseSchemaUId = schemaData[0]?.UId;

 

Hello Daiana,

Thank you very much for your interest and your quick response! I followed your steps and the resources you provided and I managed to create the handler that defines the filter to be applied on the list:

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
    {
        "operation": "merge",
        "path": [
            "attributes"
        ],
        "values": {
            "ProcessLogList": {
                "isCollection": true,
                "modelConfig": {
                    "path": "ProcessLogListDS",
                    "filterAttributes": [
                        {
                            "loadOnChange": true,
                            "name": "ProcessLogList_PredefinedFilter"
                        }
                    ]
                },
                "viewModelConfig": {
                    "attributes": {
                        "ProcessLogListDS_Name": {
                            "modelConfig": {
                                "path": "ProcessLogListDS.Name"
                            }
                        },
                        "ProcessLogListDS_Id": {
                            "modelConfig": {
                                "path": "ProcessLogListDS.Id"
                            }
                        }
                    }
                }
            },
            "ProcessLogList_PredefinedFilter": {}
        }
    }
]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,
handlers: /**SCHEMA_HANDLERS*/[
    {
        request: "crt.HandleViewModelInitRequest",
        handler: async (request, next) =&gt; {
            // Get current record Id
            const MasterRecordId = await request.$context.Id;
            // Get current schema UId
            const SchemaUId = Terrasoft.configuration.ModuleStructure["Case"].entitySchemaUId;
 
            request.$context.ProcessLogList_PredefinedFilter = {
                "items": {
                    "masterRecordFilterWrapper": {
                        "filterType": 6,
                        "isEnabled": true,
                        "logicalOperation": 0,
                        "items": {
                            "masterRecordFilter": {
                                "filterType": 6,
                                "isEnabled": true,
                                "logicalOperation": 1,
                                "items": {
                                    "entityFilter": {
                                        "filterType": 5,
                                        "comparisonType": 15,
                                        "isEnabled": true,
                                        "leftExpression": {
                                            "expressionType": 0,
                                            "columnPath": "[VwSysProcessEntity:SysProcess].Id"
                                        },
                                        "subFilters": {
                                            "filterType": 6,
                                            "isEnabled": true,
                                            "logicalOperation": 0,
                                            "items": {
                                                "EntityIdFilter": {
                                                    "filterType": 1,
                                                    "comparisonType": 3,
                                                    "isEnabled": true,
                                                    "leftExpression": {
                                                        "expressionType": 0,
                                                        "columnPath": "EntityId"
                                                    },
                                                    "rightExpression": {
                                                        "expressionType": 2,
                                                        "parameter": {
                                                            "dataValueType": 1,
                                                            "value": MasterRecordId
                                                        }
                                                    }
                                                },
                                                "SchemaUidFilter": {
                                                    "filterType": 1,
                                                    "comparisonType": 3,
                                                    "isEnabled": true,
                                                    "leftExpression": {
                                                        "expressionType": 0,
                                                        "columnPath": "SysSchema.UId"
                                                    },
                                                    "rightExpression": {
                                                        "expressionType": 2,
                                                        "parameter": {
                                                            "dataValueType": 1,
                                                            "value": SchemaUId
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "logicalOperation": 0,
                "isEnabled": true,
                "filterType": 6,
                "rootSchemaName": "VwSysProcessLog"
            };
 
            return next?.handle(request);
        },
    },
] /**SCHEMA_HANDLERS*/

The page schema UId is resolved perfectly with a simplified approach. However, the current record Id is not fetched properly using what everybody suggests:

await request.$context.Id;

If I check the browser developer tools, I can see that the SelectQuery sent by the browser indeed uses the filter configuration, but the record Id is null:

 

Additionally, I am trying to make this list and filter be as generic as possible, to work on every page, so I did everything in a new Freedom UI page replacing the 'PageWithTabsFreedomTemplate' page. As you may see, the tab and the list appear in my Cases_FormPage without any issue, but the handler does not fetch the case record Id.

Why is it failing here?

Show all comments
Studio_Creatio
8.0

Does anyone know if Creatio does not allow the Port Number in the web service URI? It seems like even though I have that added, it gets excluded in POST tests.

Web service URI Example:



Complete Address Sample, which includes :443 from web service:


Failed test request, which is missing :443 from web service:

Like 0

Like

1 comments

Hello,

We do not have any port restrictions on our side. It is possible that the package you are modifying is blocked on your end.

Could you please check and confirm?

Show all comments