Hello, I have a [Object A] form page where I have an Expanded List (detail) inside it [Object B] created. In [Object B] I need to have multiple records, so now I need to make a relationship between [Object A] and [Object B], but the app doesn't show me a relationship between IDs or anything like that.

I've already tried manually creating a Lookup inside [Object B] pointing to [Object A], but I was wondering if there's a better way to do it?

Like 1

Like

1 comments
Best reply

Hello,

You need to create one-to-many relations between these objects. To do this, you need to create a lookup column in each object that will refer to another object. After that, you will be able to use filters and relationships to display and customize the necessary lists.
You can't do it using no-code elements because this connection is set up at the object level.

Hello,

You need to create one-to-many relations between these objects. To do this, you need to create a lookup column in each object that will refer to another object. After that, you will be able to use filters and relationships to display and customize the necessary lists.
You can't do it using no-code elements because this connection is set up at the object level.

Show all comments

Hello, We've followed the steps here https://academy.creatio.com/docs/8.x/no-code-customization/customizatio… to create a Freedom UI page for an existing object (Leads) and can view the Freedom UI in the web interface, however we do not see the option to enable the Freedom UI for this section in the Mobile Application Wizard. There should be a checkbox next to the Leads section to enable the freedom UI but we do not see it. How do we do this?

 

Thank you,


Eric

Like 0

Like

3 comments

Good afternoon!
 

To do this, you need to enable the "UseMobileFlutterFirst" feature here:

https://mywebsite.creatio.com/0/flags


image.png

Regards,
Anton

Hi Anton, thank you for the reply. I enabled "UseMobileFlutterFirst" as you described but I still do not see the checkbox to enable freedomUI in the mobile app wizard for our leads section. Is there anything else I need to do?

 

Also, it looks like you posted an image but it didn't load for me in case that included an additional step.

 

Eric

Eric Curran,

Please contact technical support at support@creatio.com

Show all comments

I am applying a complex filter to a page using the "Apply filter by page data" option.  I set up two parameter filters, but they are logically connected by an AND condition.  Is there a way to construct these filters allowing for complex structures?

Like 2

Like

3 comments

Hello!
Please provide examples of how you implement filters.

In the List Settings below, I need the results from more than one filter condition, more than just Account.ID=Opportunity.Account. 

Adding a second filter is possible, but the two filters are intrinsically connected by an AND operator, and there is no obvious way to specify a complex filter here.

John DeFayette,


Hello,

At the moment, it is not possible to set up such filtering. 

We have informed the development team about this need and registered an idea for such an improvement, so this feature may be available in the future.

Thank you for helping to make our product better.

Best regards,
Pavlo

Show all comments

Hello Creatio Community,

 

I am currently working on a page in Freedom UI which contains a detail. The detail's object resides in Classic UI. I need to apply field validation on this detail while performing inline editing within the Freedom UI.

 

Here's a brief overview of what I'm trying to achieve:

  1. The main page is in Freedom UI.
  2. The detail object is in Classic UI.
  3. I need to implement field validation on the detail during inline editing.

     

I've attempted a few approaches, but none seem to provide the desired results. Has anyone faced a similar challenge or can provide guidance on how to achieve this functionality?

Any help or pointers would be greatly appreciated.

 

Thank you!

Like 0

Like

1 comments

Hello Kumar,
Looks like this task is impossible for now because Freedom UI doesn't allow getting the value of one control (attribute) in the code of custom validator for another control.

We have this task registered on our R&D team and will get this possibility in future releases, please follow the updates.

Best regards, Anhelina!
 

Show all comments

Hello.

I have a freedom UI FormPage, which may be opened from Business process (Open edit page element). I want to override Cancel button handler in such way that to cancel current business process. I need to know process id (SysProcessLog table) or process element id (SysProcessElementLog table). How could I obtain them in Freedom UI? For example in Classic UI edit page there was dedicated attribute called ProcessData. I looked through request.$context and didn't find anything similar.

 

Creatio version is 8.1.2

Like 0

Like

2 comments

Hello!

 

To find information, you can read the data from SysProcessData, more information which contains the interrelationship between the process instance and the subprocess, the relationship to the process scheme, the relationship to the process scheme element if the instance is a subprocess, and the current status of the process instance. Also, the internal state of the process is a snapshot of the values of the parameters at times when the process elements are executed.

 

Also, this article could be useful:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/development-tools/external-ides/examples/develop-c-sharp-code-in-a-custom-project

 

Kyrylo Atamanenko,

Thanks for an answer. But to read all those information I need to know Id of an element being executed. For example in Classic UI it is obtained like 

this. 

const processElementUId = this.get("ProcessData").procElUId;

And the question is there analogue in Freeom UI page?

Show all comments

Hey community,

          The issue is that I have a quick filter field, and when the zoom-in % of the screen is at 75% or greater, the field dropdown visibility is not proper. I'm trying to modify the CSS so that it works irrespective of the screen zoom. Is there a way to do this?





 

Like 0

Like

2 comments

Hello,

 

Please provide a screenshot of how the issue looks on your end.

Hi Mira Dmitruk,

    

In the image provided above, the screen zoom level is below 75%, resulting in the Quick Filters dropdown appearing correctly.

In the image above, with the screen zoomed in beyond 75%, the Quick Filters dropdown remains inaccessible, unless the filter is double-tapped, thereby revealing the dropdown.

Show all comments

Cheers to all.

I'm developing my custom UI component in Angular and I need to get some data from Creatio database inside of my component. I discovered there is EntitySchemaQuery class in Creatio's sdk, so I decided to use it, but I'm stuck when I need to retreive data with that ESQ as I didn't find method for that. In classic ESQ there was getEntityCollection method for that. Could you please suggest how do I retrieve data from the database? Either using ESQ or other class, but user's authorization matters.

Here is the code of component.

import { Component, OnInit, Input, Output, 
        ViewEncapsulation, EventEmitter, SimpleChanges  } from '@angular/core';
import { CrtViewElement, CrtInput, CrtOutput, EntitySchemaQuery,
          ComparisonType,  AggregationType, AggregationEvalType, isGuid} from '@creatio-devkit/common';
 
@Component({
  selector: 'usr-input',
  templateUrl: './input.component.html',
  styleUrls: ['./input.component.scss'],
  encapsulation: ViewEncapsulation.ShadowDom
})
/* Add the CrtViewElement decorator to the InputComponent component. */
@CrtViewElement({
  selector: 'usr-input',
  type: 'usr.Input'
})
export class InputComponent implements OnInit {
  constructor() {}
 
  @Input("recordId")
  @CrtInput()
  /* The input recordId. */
  public recordId!: string;
 
  /* Add decorators to the EventEmitter<string>() event. */
  @Output()
  @CrtOutput()
  /* Track input value changes. */
  public valueChange = new EventEmitter<string>();
 
  ngOnInit(): void {
  }
 
 
  ngOnChanges(changes: SimpleChanges) {
    console.log(changes);
 
    if (isGuid(changes["recordId"]?.currentValue)) {
      let esq = new EntitySchemaQuery("ClvObject");
      esq.addAggregationFunctionColumn("Id", AggregationType.Count, "AppCount", AggregationEvalType.All);
      esq.filters.addSchemaColumnFilterWithParameter(ComparisonType.Equal, "ClvProject", this.recordId, "currentFilter");
 
      let record = esq.getMetadata();
      console.log(record);
    }
  }
}

 

Like 2

Like

3 comments

The EntitySchemaQuery classes in the devkit don't do anything, at least not how it is exposed. The ESQ classes require an executor class that actually *runs* the query and provides the connection. We don't have access to this, the executor that runs the ESQ is not part of the devkit sdk. This is intentional/by design since they want us to use the new Model classes instead. This better anyways, the Model class is far easier and more intuitive IMO.

The intended way to get data now is the Model class, which is in the devkit sdk. Here's some articles on the topic: 

Model Query Using Filters: https://customerfx.com/article/querying-data-using-filter-conditions-vi…

Model Query for a Single Record Given it's Id: https://customerfx.com/article/retrieving-a-record-via-the-model-class-…

Also, the model class does inserts/updates/deletes:

Inserting a Record: https://customerfx.com/article/inserting-a-record-from-client-side-code…

Updating a Record: https://customerfx.com/article/updating-a-record-from-client-side-code-…

Deleting a Record: https://customerfx.com/article/deleting-a-record-from-client-side-code-…

Copying a Record: https://customerfx.com/article/copying-a-record-from-client-side-code-u…

You can also use the Model class to get an object's schema:

Get Object Schema: https://customerfx.com/article/getting-an-object-schema-using-the-model…

Ryan

Hi, Ryan. Thanks for quick reply.

Maybe you could suggest how do I need to prepare aggregate columns for the query using Model class? I tried it as described below

  async ngOnChanges(changes: SimpleChanges) {
    console.log(changes);
 
    if (isGuid(changes["recordId"]?.currentValue)) {
      const dataModel = await Model.create("ClvObject");
      const filters = new FilterGroup();
      filters.addSchemaColumnFilterWithParameter(ComparisonType.Equal, "ClvProject", this.recordId, "currentFilter");
      const records = await dataModel.load({
//        attributes: ["Id", "ClvName", "ClvType", "ClvProject.ClvCommissioning"],
        attributes: [{ 
          aggregationConfig: {
            aggregationFunction: AggregationFunction.Count,
          },
          type: "aggregation",
          path: "Id",
          name: "AppCount",
          caption: "AppCountCaption",
          dataValueType: DataValueType.Integer
        }],
        parameters: [{
            type: ModelParameterType.Filter,
            value: filters
        }]
      });
      console.log(records);
 
    }
  }

But instead of getting one record with one column "AppCount" containig 2, I get two records each containg "Id" and "AppCount" 

Ok< I found out the way. Looks like aggregationConfig isn't yet working well and functionConfig should be used instead. Here is working exampe.

  async ngOnChanges(changes: SimpleChanges) {
    console.log(changes);
 
    if (isGuid(changes["recordId"]?.currentValue)) {
 
      const dataModel = await Model.create("ClvObject");
      const filters = new FilterGroup();
      filters.addSchemaColumnFilterWithParameter(ComparisonType.Equal, "ClvProject", this.recordId, "currentFilter");
      const records = await dataModel.load({
//        attributes: ["Id", "ClvName", "ClvType", "ClvProject.ClvCommissioning"],
        attributes: [
          { 
            type: "function",
            path: "Id",
            name: "AppCount",
            caption: "AppCountCaption",
            dataValueType: DataValueType.Integer,
            functionConfig: {
              aggregation: AggregationFunction.Count,
              type: "aggregation",
              aggregationEval: "all",
            }
          }],
          parameters: [{
              type: ModelParameterType.Filter,
              value: filters
          }
        ]
      });
      console.log(records);
 
    }
  }

And result

Show all comments

Dear colleagues,

 

In Classic UI I can solve this by code, but in Freedom is also possible?, somebody know in which schema I need to do this and the related code?

 

Thanks & Regards

Like 1

Like

15 comments
Best reply

Note, when adding these back in, you'll need to make sure that the "items" and "primaryColumnName" values match the values from your list. For Section Lists. The "Items" and "PDS_Id" values need to be updated to match your List's property values - those can likely stay as-is for section lists, but for new lists added, you'll need to update those values. See for more: https://customerfx.com/article/adding-row-action-menu-items-to-a-creati…

and the same in a Detail (Freedom page)?

Hello Julio,

See this article here: https://customerfx.com/article/adding-row-action-menu-items-to-a-creati…

You can override the menu (usually to add other menu items to it). When you do so you override the "Open", "Copy", "Delete" options and need to add them back in. You could override the menu and then just only add back in the "Open" option. It would look like this (the article will provide more details)

viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
    {
        "operation": "merge",
        "name": "DataTable",
        "values": {
            //...,
            "rowToolbarItems": [{
                type: 'crt.MenuItem',
                caption: 'DataGrid.RowToolbar.Open',
                icon: 'edit-row-action',
                disabled: "$Items.PrimaryModelMode | crt.IsEqual : 'create'",
                clicked: {
                    request: 'crt.UpdateRecordRequest',
                    params: {
                        "itemsAttributeName": "Items",
                        "recordId": "$Items.PDS_Id"
                    }
                }
            }]
        }
        //...
    },
    //...
]/**SCHEMA_VIEW_CONFIG_DIFF*/

Essentially you're replacing the existing menu with one that only has the Open menu option. This works for any list (section or a list on a page)

Ryan

Ryan Farley,

Thanks Ryan, I promise I looked first, before to publish, in your articles, but didn't found this one. Thanks a lot

 

Regards

Julio

Ryan Farley,

Dear Ryan, I didn't found the crt.DataGrid element in the viewConfigDiff in the code of the listpage, I found it on a FormPage, but I need it also in a the ListPage

solved no need to search crt.DataGrid, jus add it on viewConfigDiff

Julio.Falcon_Nodos,

Yes correct. For the list page, the List (crt.DataGrid) exists in the parent page, you just need to merge in the changes.

Ryan

No worries - there's so much new info now with Freedom UI stuff, it's hard to know what to even search for!

Julio.Falcon_Nodos writes:

Ryan Farley,

Thanks Ryan, I promise I looked first, before to publish, in your articles, but didn't found this one. Thanks a lot

Regards

Julio

This could really do with being configurable using no-code tools, as it's quite cumbersome to apply to every list users will see but is often important - being able to copy records which should have to be created in specific ways is often an issue for business data.

Ryan Farley,

 

Hello again Ryan

 

How can I remove the delete option on a Freedom UI page , I see that when I add a detail only a FormPage is created, but there is no ListPage (like in Classic UI). So is it possible to solve this in a Freedom UI detail?

 

Julio.Falcon_Nodos,

Hi Julio, basically, any time you override the rowToolbarItems it replaces what is there with that you provide. Meaning, all the existing out of the box ones are gone. If you want no items there, you can just add and empty array:

rowToolbarItems: []

However, this has the annoying side effect of leaving an empty menu that pops up when the row actions button is clicked. I'm not sure if there's a property to remove the row actions button completely, so I usually just hide it with CSS.

Ryan

Ryan Farley,

Thanks Ryan, I'm already solved, but I want to maintain "Open", "Copy" and just remove "Delete", how can I did it?

solved... adding in "rowToolbarItems", this piece of code

"rowToolbarItems": [
  // Edit
  {
	type: 'crt.MenuItem',
	caption: 'DataGrid.RowToolbar.Open',
	icon: 'edit-row-action',
	disabled: "$Items.PrimaryModelMode | crt.IsEqual : 'create'",
	clicked: {
		request: 'crt.UpdateRecordRequest',
		params: {
			"itemsAttributeName": "Items",
			"recordId": "$Items.PDS_Id"
		}
	},
  },
  // Copy
  {
	  type: 'crt.MenuItem',
	  caption: 'DataGrid.RowToolbar.Copy',
	  icon: 'copy-row-action',
	  disabled: "$Items.PrimaryModelMode | crt.IsEqual : 'create'",
	  clicked: {
		  request: 'crt.CopyRecordRequest',
		  params: {
			  "itemsAttributeName": "Items",
			  "recordId": "$Items.PDS_Id",
		  },
	  },
  }                      
],

Note, when adding these back in, you'll need to make sure that the "items" and "primaryColumnName" values match the values from your list. For Section Lists. The "Items" and "PDS_Id" values need to be updated to match your List's property values - those can likely stay as-is for section lists, but for new lists added, you'll need to update those values. See for more: https://customerfx.com/article/adding-row-action-menu-items-to-a-creati…

Ryan Farley,

Is there any other way to hide the 3 dots for row action menu to even spawn

Pranshu Basak,

Sadly, removing all menu items does not remove the 3 dots button (in current versions, at least - hopefully that changes). For now I typically just hide it with some CSS.

Ryan

Show all comments

Hello,



Can anyone tell me How to merge duplicate contact records in freedom UI.

I tried using the classic UI but  can't find any duplicate rule or show duplicates in the action button



Thanks in advance.

Like 1

Like

3 comments

Hello,



To find duplicates in Freedom UI, you need to go to System Designer, then select Setup duplicates rules.



There you will be able to perform all the actions you need.

Malika,

Hi ,

Setup duplicates rules is not sowing under System setup. Is it due to the latest version??



Abhishek,

Is this a cloud or local system?

If it's local, you probably need to set up the deduplication components first to have it available.

Show all comments

Hi Everyone,



Is there any way to restrict number of file to be attached in the attachment detail tab in Freedom UI??



Thanks in Advance

Like 0

Like

1 comments

Hello Abhishek,

 

There is no such option for now.



However, we've registered it in our R&D team backlog for consideration and implementation in future application releases.

 

Thank you for helping us to improve our product. 

Show all comments