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

Hello all,
What I'm trying to achieve is to find a way to create new record in one of my Custom tables utilizing OData.
Have found this post usefull, but still not really there... https://community.creatio.com/questions/cannot-convert-primitive-value-…

The story: 
As above, need to create new record in, lets say CustomTableA. My table is with couple of mandatory columns and in between the others, two of which are of a lookup type, and to make it a bit more funny both are references to other custom tables, lets say B and C.

The issue I'm facing is as ihe subject - Cannot convert the literal '0000....00' to the expected type 'Edm.Guid'

Below are already tested options, trying to use Postman at the moment. Would appriciate any advice/guidience?
Obviosly trying to POST this to ... /0/odata/CustomTableA.

Please help, and thank you in advance.

"CustomTableBId": "000000",
"CustomTableCId": "000000",

"CustomTableBId": "guid000000",
"CustomTableCId": "guid000000",

"CustomTableBId": "guid'000000'",
"CustomTableCId": "guid'000000'",

"CustomTableB": {"Id": "000000"},
"CustomTableC": {"Id": "000000"},


"CustomTableB": {"Id": "guid000000"},
"CustomTableC": {"Id": "guid000000"},

"CustomTableB": {"Id": "guid'000000'"},
"CustomTableC": {"Id": "guid'000000'"},

Like 0

Like

2 comments

For creating a record via POST you only need to provide the guid in the payload as: 

"UsrMyLookupColumnId": "ddb65043-b662-4762-9a0a-6f325f65ad03"

However, is the value you're passing a guid? It's not "000000" but a real guid ID value, correct? Can you post what your payload looks like?

 I've just go this working. Unbelievable, but had a typo in the GUID, one digit more in front. 
Thanks for your help. 
As you were saying, it is just:
"UsrMyLookupColumnId": "ddb65043-b662-4762-9a0a-6f325f65ad03"

Show all comments
Conditional_Logic_on_Forms_built_in_creatio
Studio_Creatio
8.0

We would like to build the forms directly in Creatio, including replicating the conditional logic currently handled in our Squiz website builder, and then embedding these forms into our website (likely via iframe).

I’ve been exploring the Landing Pages module where forms can be created. While I can see options for field configuration, UI settings, and mapping data to objects, I’m unable to find any support for conditional logic at the form level (e.g., show/hide fields based on input, make fields read-only based on selections), similar to business rules in Creatio pages.

Could you please confirm whether conditional logic is supported natively in Creatio web/landing forms?

From my understanding, the business rules we configure in Creatio form pages would only take effect after the form submission (once the data is in Creatio). However, for conditional logic that needs to work dynamically while the user is filling out the form (e.g., show/hide fields, make fields read-only based on selections), this would need to be handled at the landing page level.

At the moment, I’m unable to find such options within the Landing Page Designer. I also noticed the “Landing pages and forms” section, which appears more aligned with external form integration—could you please confirm if that plays any role in enabling conditional logic for Creatio-built forms?

Thanks

Like 1

Like

0 comments
Show all comments
MultiSelectLookup
FreedomUI
Development
sorting
Studio_Creatio
8.0

Hello Community,

I'm struggling with the MultiSelect Lookup component in Freedom UI. I need to sort the available options in the dropdown by a specific Integer column (NcsOrden) instead of the default Name column.

I've already successfully implemented the Predefined Filter in the viewModelConfigDiff to filter the records, but I can't find a way to change the sort order.

What I've tried so far:

  • crt.LoadDataRequest Handler: Adding a type: "sorting" object to request.parameters. This triggers a TypeError regarding a 'type' property being undefined in the core JS.
  • viewModelConfigDiff: Adding sortingConfig to the attribute. This causes the page to crash with a TypeError in _loadStaticModel.

Has anyone successfully managed to sort a MultiSelect list by a column other than the Primary Display Column? If this is not currently supported via No-Code or standard Handlers, what would be the recommended approach?

Thanks in advance!

 

Julio Falcon

Like 1

Like

0 comments
Show all comments

I'm developing a screen to ask users to upload files then i can save these files on the local desk. how can i setup this and what is the component i should use 

i tried attachment component but failed to complete the operation 

Like 0

Like

1 comments

Hello!
In Creatio, the standard approach for allowing users to upload files is to use the Attachments (Files & Links) component on a record page. This component enables users to upload files and store them as attachments linked to a specific record in the system.

Please note the following important points:

  1. The Attachments component works only in the context of a record (entity). Files cannot be uploaded without being associated with a record.

       2. If you need to collect files before the main business object is created, you will need to implement a custom approach. A common solution is:create a temporary (technical) object/record,

use the Attachments component to upload files there,

then use a business process or server-side logic to transfer the files to the final object once it is created.

      3.If your requirement is to store files outside of Creatio (e.g., external storage), this would require a custom implementation using a business process and integration (web service call).

In your case, the implementation would most likely require a custom file provider that uploads files to a different file storage. This would be a development task rather than something that can be achieved using standard tools only.

At the same time, the business requirement is still a bit unclear. Since the system is used by many users, and the files themselves are expected to be stored on the server, the recommended approach would be to design a centralized server-side storage solution rather than rely on local desktop storage.

If by “local desktop” you mean this as part of the interface or user experience, then this could potentially be implemented as a separate custom object responsible for displaying or managing files intended for desktop access.

However, we would recommend considering a different approach: for example, adding a button on the desktop/home page that redirects users to a dedicated knowledge base article or file repository where all required files are stored. This would allow users to access the necessary files directly from the main screen after login.

This approach may be more convenient and scalable, especially if many users need access to the same initial set of files.

 

Show all comments

Hi everybody,

As many of you know, Freedom UX includes a nice “Next Steps” component, which is implemented on a page like this:

{
	"operation": "insert",
	"name": "NextSteps_5ogvjc1",
	"values": {
		"type": "crt.NextSteps",
		"masterSchemaId": "$Id",
		"cardState": "$CardState",
		"layoutConfig": {
			"colSpan": 2,
			"column": 1,
			"row": 1,
			"rowSpan": 1
		},
		"masterSchemaName": "Contact",
		"bindingColumns": []
	},
	"parentName": "GridContainer_vlwf54t",
	"propertyName": "items",
	"index": 0
}

Everything works fine until your Activity schema contains multiple columns referencing the same entity (for example, several lookups to Contact). In such cases, you may notice that activities displayed in the Next Steps component are linked incorrectly.

Example: You have the OOTB Contact column and a custom column SomeOtherContact. On the Contact form, you expect Next Steps to show only activities linked via the Contact column. However, after implementing the component, it turns out that activities are linked via SomeOtherContact instead.

As nothing in the component is customizable, here is an explanation of the problem and a possible workaround.

Why does this happen?

The Next Steps component is processed by the GetNextSteps method inside the ActivityNextStepQueryExecutor class. This method internally calls GetRelatedColumn, which is responsible for determining which Activity column should be used to filter activities for the given entity.

The issue is that GetRelatedColumn returns the first matching column from the EntityConnection table, based solely on the relation type — not on the column name, not on configuration, and not on the Position field.

The ESQ used inside GetRelatedColumn has no ORDER BY clause, even though the EntityConnection table contains a Position column that could be used for sorting. Because of this, the database returns rows in the default order, which is determined by the primary key — Id.

As a result:

  • the “first” matching connection is whichever row happens to have the lowest Id
  • if your custom column has a lower Id, it will be selected instead of the OOTB column
  • Next Steps will then filter activities using the wrong column

Workaround:   If activities in Next Steps are linked through the wrong column, you can adjust the Id of the desired connection in the EntityConnection table so that it becomes the first one returned by the query. After that, Next Steps will use the correct column.

PS. property "bindingColumns": [] is not operational yet.

PPS. [For creatio developers] Can the value of the property bindingColumns be added into this method somehow like this?     

public List GetNextSteps(string entityName, Guid entityId, ListbindingColumns) {...}

then it will be possible to use those columns directly or when bindingColumns is empty, current approach still can be used as a default:

if (bindingColumns != null && bindingColumns.Count > 0) {
	var filterGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.Or);
	foreach (var columnName in bindingColumns) {
		var inGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.And) {
		esq.CreateFilterWithParameters(FilterComparisonType.IsNotNull, columnName),
		esq.CreateFilterWithParameters(FilterComparisonType.Equal, columnName, entityId)
		};
		filterGroup.Add(inGroup);
	}
	esq.Filters.Add(filterGroup);
} else {
	var relatedColumn = GetRelatedColumn(entityName);
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.IsNotNull, relatedColumn.Name));
	esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, relatedColumn.Name, entityId));
}

It will help much, believe me. 

Like 1

Like

Share

0 comments
Show all comments