Is it possible to specify the default values that will be populated in fields on new records created via the "Quick add menu" in Creatio, similar to how you can do when adding a record from a button on a page:

 

I have seen that if you have multiple pages set up for an entity that the Quick add menu will create a sub-menu for each of the types which will mean that if you click on the specific sub-menu then that field will be defaulted to the value it should be, but we require that other fields are also defaulted to specific values depending on the type selected. Therefore blanket values being set as the default value on the entity won't satisfy the requirement, and the business rules are very limited around setting default values.

 

I can't see anything of much use in the "Quick add records menu" lookup used to configure the quick add menu.

Like 2

Like

2 comments

Hello!

It is impossible to configure default values for page types in the Quick Add menu. 

Default values are configured only for object fields. If a specific field type is used, the same default value will always be used for any typed page.

Thanks for reaching out!

Hi there.

I have very similar but slightly different task. I need to throw forward param values from current page to new record which is being created through lookup field on current page. I configured view diff like this 

			{
				"operation": "insert",
				"name": "ListAction_n8p4gak",
				"values": {
					"code": "addRecord",
					"type": "crt.ComboboxSearchTextAction",
					"icon": "combobox-add-new",
					"caption": "ComboBox.AddNewRecord",
					"clicked": {
						"request": "crt.CreateRecordFromLookupRequest",
						"params": {
							"defaultValues": [
								{
									"attributeName": "Account",
									"value": "$PDS_ClvAccount_p18pos2"
								},
								{
									"attributeName": "Contact",
									"value": "$PDS_ClvContact_ecd3h26"
								}
							]
						}
					}
				},
				"parentName": "Task_ComboBox",
				"propertyName": "listActions",
				"index": 0
			},

and I also tried to rename DefaultValues to additionalDefaultValues as debug led me to this could be possible property's name, but that didn't help. And now I see this thread. So it seems that handler "crt.CreateRecordFromLookupRequest" doesn;t allow at this point to process default values at all?

BTW this handler isn't described in academy handlers schema section | Creatio Academy

Is there any plans to develope that handler to be possible to pass default values ?

 

NB It could be great to have params for each type of handler to be described in academy's article like in articles for validators and converters converters schema section | Creatio Academy 

Show all comments

Is it possible to pass attributes from a page into a validator as a parameter for use in its logic? I'm trying to pass the Id of the record into an async validator which should then query the database for the record to check whether it is in a valid state to be saved, but I don't seem to be able to pass the attribute in as a parameter and it isn't available by default in the validator. I've tried the below:

					"LookupAttribute_sttlz00": {
						"modelConfig": {
							"path": "PDS.QualifyStatus"
						},
						"validators": {
							"LeadSoldValidator": {
								"type": "Usr.LeadSoldValidator",
								"params": {
									"leadId": "$Id"
								}
							}
						},
					},

But it just passes in the literal string "$Id" instead of the value of Id. I don't see anything about passing dynamic values into validators in the documentation.

Like 1

Like

3 comments

Hello,
Currently, this task is in the development and now it is impossible to do so. The ability to add dynamic parameters will be available in the future versions.

Dmytro Vovchenko,

Any idea when it's going to be available? I have a couple of custom validations that test for a regEx expression and I'd like to be able to store those regEx expressions as a setting instead of hard coding them in the code.

Thanks,
Jose

Jose Hernandez 

Hello, 
Unfortunately, we cannot say in which version this functionality will be implemented, as our development team is working on tasks according to their priority, which in turn
is determined by the number of requests with this need.

Show all comments

Hello!

I am experiencing an issue regarding the synchronization between Creatio and Google Calendar. My Creatio Version: 8.1.1.3635

 

I have set up the synchronization between the two platforms, but I am encountering the following problem:

  • Changes made to activities in Creatio are not reflected in Google Calendar. Neither the other way around.

 

I have already tried the following troubleshooting steps:

Despite these efforts, the issue persists.

I would be grateful if you could provide any guidance or solutions to resolve this synchronization problem. Please let me know if you require any further information from me :)



Thanks!

Like 2

Like

2 comments

Hello,

 

We see that you also registered a case directly for our Support team regarding this problem and therefore we will work on it in that case.

Mira Dmitruk,

wonderful, thanks!

Show all comments

Is it possible to sort the quick filter list you get displayed with code in Freedom UI? I can see there is no way to do it through no code currently, but is there a handler that can be overridden to add sorting to the resulting list? Would be very useful in some circumstances. Maybe it will be done on the load data step using crt.LoadDataRequest in some way? Not sure what the config items that would need to be added to the request would be though.

Like 2

Like

3 comments

Hello Harvey,

 

Could you please elaborate on your business task? 

Simply, we need to sort the values displayed in the Quick Filter. In this case it's because the quick filter values correspond to periods in the client's period calendar, and we want to show them in descending order so that the current period is the first item in the list (the values selectable are the ones before the current period, so sorting by name descending would suffice, but it would definitely be useful to have a generalised way of sorting quick filter options).

Harvey,

 

Thank you for clarifying. There is no such OOTB option. However, I've registered the idea 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

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

How do you add a dashboard page as a section in Freedom UI? I have an existing dashboard page which I want users to be able to access as though it were its own section, but I can't add the existing page to the workplace as it doesn't exist in the lookup window. I had a look at creating a new section in the application hub, but this will either create a new entity or have to be based over an existing entity, but this dashboard isn't based over any one particular entity and presumably doing this would create a new Section page which I didn't want. Any info on how to turn an existing page into a Section in Freedom UI?

Like 1

Like

4 comments
Best reply

Hi,

 

In general, there isn't a built-in feature for this. However, for such usage, we have the option to set a Homepage for the workplace. You can set this page instead of the current one.

 

But if you need two of your dashboard pages to be on the same workplace and displayed as a section, you can create a new section in the Freedom UI and replace its SectionSchemaUId with the UId of your dashboard page schema.



update "SysModule" set "SectionSchemaUId" = 'UId of dashboard schema module' where "Id" =  'Id of the section you want to open with the dashboard'

 

For example, I successfully set the SalesEnterpriseHomePage to open from the test section.



Hope this helps!

Hi Harvey!

Please confirm, am I understanding correctly that you want to replace the section ListPage with your own page containing dashboards?

Is your dashboard page implemented in FreedomUI?

Which page does this page inherit from? Is it the Homepage?

Hi Pavlo, Essentially I want to create a standalone section page, so one that isn't tied to a specific entity or have to be created using the section template in the application hub.

Yes, using Freedom UI exclusively.

And the page I have created is inherited from the Homepage exactly. Is it possible to register this page as a section page?

Hi,

 

In general, there isn't a built-in feature for this. However, for such usage, we have the option to set a Homepage for the workplace. You can set this page instead of the current one.

 

But if you need two of your dashboard pages to be on the same workplace and displayed as a section, you can create a new section in the Freedom UI and replace its SectionSchemaUId with the UId of your dashboard page schema.



update "SysModule" set "SectionSchemaUId" = 'UId of dashboard schema module' where "Id" =  'Id of the section you want to open with the dashboard'

 

For example, I successfully set the SalesEnterpriseHomePage to open from the test section.



Hope this helps!

Thanks Pavlo, we already have a page being used as the Home page of the workplace the additional dashboard needs to reside in, so we had to do the database editing you suggested to get it to work, which it now does - thank you! This would be a very useful option to be able to do without custom SQL, no code being the aim of Creatio config going forward!

Show all comments

How can you set the default values created for an Activity when clicking on the Calendar in Freedom UI? I can't see anything in the OOTB code for calendar setup that would pass default values into the calendar activity creation process, but presume there must be some JSON parameters that could be set to specify things like the Activity Type/Category for example. Any help appreciated.

Like 3

Like

3 comments

Hello,

Unfortunately, this logic is hardcoded and cannot be changed at the moment. We have raised an improvement for the development team to make it possible to configure the default Category for this element in future releases.

Thank you for reaching out!

Thanks Pavlo, so no properties in the JSON can be set for this currently at all then? And no overriding of any of the schema handlers would enable setting them either? We currently have a fair amount of handler code, so wouldn't be too worried about adding some more in for now until this is possible in no code.

Unfortunately, it is not possible to change this logic for this scheme at the moment, even using such handlers.

Show all comments

How do you set a specific user's Time Zone without logging in as that user? You can modify your own Time Zone in the Profile section, but I don't think you can access this page for users other than your own, and the user's Time Zone isn't shown in the OOTB User card, so I can't see how an admin could set the Time Zone for a specific user. Anybody know how this could be done?

Like 0

Like

2 comments

Hello,

 

The user's timezone is stored in the SysAdminUnit table, in the TimeZoneId column. However, please note that values in this column are stored not as references to time zones from the directory, but as Time Zone Codes.

You can verify the code in the "Time zones" lookup.

So, you can change this value for any user without logging in with a script in the database:

 

update "SysAdminUnit" set "TimeZoneId" = 'GMT Standard Time' where "Id" = '***User's Id***'

Thank you for reaching out.

Thanks Pavlo, in the end we added the Timezone field to the System user page (UserPageV2) so that we can change the timezone of users without executing SQL. For others wanting to do the same, we used the following code for the user page replacing schema:

define("UserPageV2", ["UserPageV2Resources"],
	function() {
		return {
			entitySchemaName: "VwSysAdminUnit",
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "TimeZone",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.ENUM,
						"value": {"bindTo": "TimeZone"},
						"layout": {"column": 13, "row": 2, "colSpan": 8}
					}
				}
			]/**SCHEMA_DIFF*/,
			attributes: {
				/**
				 * Time zone.
				 */
				"TimeZone": {
					dataValueType: Terrasoft.DataValueType.LOOKUP
				}
			}
		};
	}
);

 

Show all comments

In a Business Process, we are calling a Web Service using the Web Service Call element, but sometimes we will get a failure that we need to log to a custom table for action later. We really could do with as much information about the failure as possible, including being able to log out the parameters that the Web Service was passed so the support users can assess what happened without having to have trace logging turned on for the BP and digging into the BP log as well. I can't see any output on the web service call for that, but maybe someone else has found a way to get this info?

Like 2

Like

2 comments

Hi Harvey, we have similar needs, but no result, unfortunately. 

So, we log all parameters manualy before calling web service :(

Hello Harvey,



If you want to see the body of the request generated by the web service and the response that comes from the server - You can try to use Telerik Fiddler tool to capture requests that are being sent from the Creatio instance

 

But this advice is relevant only for local environments.

If the environment is on a local machine, you can connect Fiddler and test it.

 

In general, if you do not want to use data tracing for a process, we believe that this goal can be achieved through development. For example, a web service call will be made using a script task, in which you will process various responses from the server and write the information you need into a table using C# code.



Thank you.

Show all comments

Hello, 

Are the instructions below still apply to add a edit page to a lookup or is there an easy way to do this on Freedom UI version 8.1.1?

 

Adding lookup with edit page | Community Creatio

 

Thanks,

Jose

Like 1

Like

1 comments
Best reply

It is still the same since the Lookups area is still classic UI.

Also, BTW I have the instructions with Postgresql instructions here, if interested/needed: https://customerfx.com/article/creating-an-edit-page-for-a-lookup-in-cr…

It is still the same since the Lookups area is still classic UI.

Also, BTW I have the instructions with Postgresql instructions here, if interested/needed: https://customerfx.com/article/creating-an-edit-page-for-a-lookup-in-cr…

Show all comments