Hi,

 

We have a object for Sets in our Main Application. We are thinking of having a Mini page when we are saving a new record in our set object. So when a user adds a new entry to our Sets record page then when he is going to save it, there should be a pop-up to decide which entries they want to add and then when he selects them, then all data should be added to the record. How should I do this? I can make a process for adding a mini page?

Like 0

Like

2 comments

Bump

Hello!

 

Please note that this can be realized through 2 options:

- via business processes

- via development 



Unfortunately, we cannot provide you with specific recommendations on your question at this time, as such a scenario has not been studied and we have no examples of such a realization.

Show all comments

Hi Everyone,

 

We have the following business process in which we check if there are any previous Orders at the same time or even within 11 hours. If yes, then it will assign the Shift as double, if not then it will assign it as a single shift. However, there are 2 issues we are having.

 

  1. When there is an order at 12:00-13:00 and another order at 13:00-14:00 then technically it should be assigned as a double shift. But our current process still assigns a single shift.
  2. We need to add more checks to the previous order. For example: If the same team is assigned to the same location, then it should still be a single set. How can I do that? 

Kindly see the images for the process. Thanks! 

Like 0

Like

2 comments

Bump

Hello,

I suggest you check if the filtering conditions are being met.

  1. Try building the same filter in the Orders object and check if such records exist, and if there are more than 2 records. (We noticed that you have Finish Date < Start Date; we are not familiar with the logic of your object, but we recommend verifying the correctness of this filter.) Reference: How to work with data

  2. Enable process tracing to check the values returned by the process elements: Reference: Trace process

Regarding the second issue, you need to add more filters so that the records found in the Read Data element meet the required condition.



If you encounter further difficulties in configuring the process, please contact our support team at support@creatio.com.



Best regards,

Pavlo!

Show all comments

Can anyone knows HOW TO ADD POP CONFIRMATION MESSAGE for selecting Yes or No in Freedom UI

Like 0

Like

2 comments

Is it possible to change the colours/colour progression used for subsequent sections of a donut chart widget? We currently want to define that one value of a boolean on a lookup should be displayed in green, and the other red, but a generalised way of doing this would be very helpful for future reference - e.g. to specify the set and order of colours used in some way. We're currently on 8.1.0.6820 Any help would be greatly appreciated!

Like 1

Like

1 comments

Hello,



Unfortunately, at the moment it is impossible to customize colors in charts. However, a task has already been registered in our R&D team to add the option to customize colors in charts, in future releases. In case you would like to check  what stage this task is at, I am sending you the task number: PR-6359.

Show all comments

Can anyone tell how I can Navigate to a Page by clicking on button in Freedom UI  by using (customcode)

Like 0

Like

3 comments

You can do that with no code using the actions: 

  • Open new record (to open a page in add mode)
  • Open existing record (to open a page in edit mode)
  • Open specific page (to choose a specific page. This could be a section list page, or a specific page for a record if a record has multiple pages defined for it)

If you want to do this in code, these articles will help: 

Ryan

Thank you @Ryan for answering my question ,Do you have exact example where we are Navigating to Page by clicking on button.

Hello,

 

Please note that this can be set up without custom code using basic functionality of Freedom UI components. You can find the instructions on it in this Academy article. And here are the instructions for the Classic UI.

Show all comments

Hi I would like to export my custom package with all elements in it to deploy to another instance of Creatio. How can I tell if the package I have has all the elements of my custom application.

Like 0

Like

2 comments

Hi Waseem

 

First, create a new package and all the dependencies from custom to this new package.

Then move all schema elements from Custom to the new package.

Compile and make sure everything works as expected.

At this point, you should have everything in the package except for Data values from lookups.

Identify the missing data binding and add them to the new package.

Install the new package in a new Creatio instance, and test it.

Add/Update databinding if you miss anything in the new instance.

 

Hope this helps!

 

Thank you

Mohamed

Show all comments

Hi,



Quick question, does the new feature to be released in 8.1.1 "Attachment search. You can now search for attachments in the Freedom UI component by name using global search. Creatio indexes attachment names automatically." also search in email attachements (when someone annexes an excel or word, etc..)



Thanks,



Damien

Like 1

Like

1 comments
Best reply



Hello,

 

It's important to note that activities are not indexed in the global search. Consequently, searching for such attachments won't be possible in the global search.

 

The issue stems from the fact that even if you enable the option in the section wizard, indexation will not work for the "Activities" section.

 

The complexity arises because activities encompass more than just tasks visible in the section; they also include emails and calls. The Global Search mechanism is currently unable to process these entities given the application's configuration.

 

I've already communicated your request to our Research and Development team. They have a task to address this issue in a future application release.

 

Thank you for reaching out.



Hello,

 

It's important to note that activities are not indexed in the global search. Consequently, searching for such attachments won't be possible in the global search.

 

The issue stems from the fact that even if you enable the option in the section wizard, indexation will not work for the "Activities" section.

 

The complexity arises because activities encompass more than just tasks visible in the section; they also include emails and calls. The Global Search mechanism is currently unable to process these entities given the application's configuration.

 

I've already communicated your request to our Research and Development team. They have a task to address this issue in a future application release.

 

Thank you for reaching out.

Show all comments

Is it possible to set the default Date & time format for all users in the system? Or at least change the format connected with the language? (it is not possible to set format for the user you can select the language with the default format) 

 

Like 2

Like

2 comments

Yes please !

Hello Paulina, 

 

Thank you for your question!



Unfortunately, there is no basic system setting to change the time zone for already existing system users.



You can use the SQL script for this purpose. 



Please note that the DateTimeFormatId column value refers to the SysLanguage table and the TimezoneId value refers to the Code column in Timezone table so the SQL script will be the following: 



UPDATE SysAdminUnit SET DateTimeFormatId = 'value from SysLanguage', TimeZoneId = 'Code column value from TimeZone table' WHERE ContactID IS NOT NULL



All you need to do is to add the proper IDs you'd like to change the values to.  



For example, here is the script with values which will set Date and Time format for all users to English and timezone to GMT:



UPDATE SysAdminUnit SET DateTimeFormatId = '910eb38b-c00f-4d84-8e4a-853a62476b68', TimeZoneId = 'GMT Standard Time' WHERE ContactID IS NOT NULL 



Regards,

 

Orkhan

Show all comments

Is it possible to cancel a DCM transition from JS code? I believe it used to be possible in the classic UI, but I can't find any info on achieving it in Freedom UI. Trying to intercept the call with a handler for `crt.EntityStageProgressBarStageChangedHandlerRequest` allows "cancelling" it in a sense, as we can prevent the continuation of the handler chain by not performing the `return await next?.handle(request);` call, similar to how you would omit the `this.callParent(arguments)` when using classic UI, which does prevent the change from happening/further processing, but this leaves the selected stage highlighted instead of visually returning it back to the actually active stage. I'm currently using version 8.1.0

Like 0

Like

1 comments
Best reply

Hello!



In order to cancel a DCM transition you will have to add a handler for the system request crt.SaveRecordRequest, which is executed when you click the Save button on the record editing page.



In this example, we also added crt.HandleViewModelAttributeChangeRequest, which is executed whenever the value of an attribute changes, and an "IsStageChanged" attribute to control the Stage state. This way we check if a Stage attribute (LookupAttribute_ioghn6a) has been changed and prevent it from being saved. You can adjust this code according to your business needs:

 

...
	viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
			{
				"operation": "merge",
				"path": [
					"attributes"
				],
				"values": {
					...
					"IsStageChanged":{
						value: false
					}
				}
			},
 
		]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,
 
		handlers: /**SCHEMA_HANDLERS*/[
			{
				request: "crt.SaveRecordRequest",
				handler: async (request, next) =&gt; {
 
					if(await request.$context.LookupAttribute_ioghn6a &amp;&amp; await request.$context.IsStageChanged){
						request.$context._notifyService.show({message: 'Cannot set status'});
						return false;
					}
 
					const saveResult = await next.handle(request);
					if(saveResult){
						request.$context.IsStageChanged = false;
					}
 
					return saveResult;
				}
			}, 
			{
				request: "crt.HandleViewModelAttributeChangeRequest",
				handler: async (request, next) =&gt; {
 
					if (request.attributeName === 'LookupAttribute_ioghn6a' &amp;&amp; request.value != request.oldValue &amp;&amp; request.oldValue) {
						request.$context.IsStageChanged = true;
					}
					return next?.handle(request);
				},
			}
		]/**SCHEMA_HANDLERS*/,
...

 

Hello!



In order to cancel a DCM transition you will have to add a handler for the system request crt.SaveRecordRequest, which is executed when you click the Save button on the record editing page.



In this example, we also added crt.HandleViewModelAttributeChangeRequest, which is executed whenever the value of an attribute changes, and an "IsStageChanged" attribute to control the Stage state. This way we check if a Stage attribute (LookupAttribute_ioghn6a) has been changed and prevent it from being saved. You can adjust this code according to your business needs:

 

...
	viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
			{
				"operation": "merge",
				"path": [
					"attributes"
				],
				"values": {
					...
					"IsStageChanged":{
						value: false
					}
				}
			},
 
		]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/,
 
		handlers: /**SCHEMA_HANDLERS*/[
			{
				request: "crt.SaveRecordRequest",
				handler: async (request, next) =&gt; {
 
					if(await request.$context.LookupAttribute_ioghn6a &amp;&amp; await request.$context.IsStageChanged){
						request.$context._notifyService.show({message: 'Cannot set status'});
						return false;
					}
 
					const saveResult = await next.handle(request);
					if(saveResult){
						request.$context.IsStageChanged = false;
					}
 
					return saveResult;
				}
			}, 
			{
				request: "crt.HandleViewModelAttributeChangeRequest",
				handler: async (request, next) =&gt; {
 
					if (request.attributeName === 'LookupAttribute_ioghn6a' &amp;&amp; request.value != request.oldValue &amp;&amp; request.oldValue) {
						request.$context.IsStageChanged = true;
					}
					return next?.handle(request);
				},
			}
		]/**SCHEMA_HANDLERS*/,
...

 

Show all comments

There is a requirement in which I have to make printable visible on the basis of data in the connected object. I followed this article https://customerfx.com/article/showing-or-hiding-printables-based-on-a-value-for-the-selected-record-in-creatio/.

 

It is working fine on the combined mode in edit page and only showing printable which is matching with the condition, but the same is not reflecting on the separate mode in edit page and showing the complete list of printable.

 

Is there something which I am missing or any other workaround ?

Methods which I have added on section is :

initQueryColumns: function(esq) {

                                                          this.callParent(arguments);

 

                                                          if (!esq.columns.contains("Id")) {

                                                                        esq.addColumn("Id");

                                                          }

                                           },

 

                                           GetDocumentCollection: function() {

                                                                        var recObj = [];

 

                                                                        var id =  this.get("GridData").get(this.get("ActiveRow")).get("Id");

                                                                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Document" });

                                                                        esq.addColumn("UsrDocumentName.Name");

                                                                        esq.filters.add("UsrTransactions", Terrasoft.createColumnFilterWithParameter(

                                                                                      Terrasoft.ComparisonType.EQUAL, "UsrTransaction", id));

                                                                        esq.getEntityCollection(function(result) {

                                                                                      var response = result.collection;

                                                                                      var hasRecord = (response.collection.length !== 0);

                                                                                      if(hasRecord) {

                                                                                      result.collection.each(function(item) {

                                                                                                    recObj.push(item.get("UsrDocumentName.Name"));

                                                                                      });

                                                                                      }

                                                                        this.set("DocumentCollection",recObj);

                                                                                     

                                                                        }, this);

                                                         

                                           },

                                           initCardPrintForms: function() {

                                                          this.callParent(arguments);

                                                          var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);

                                                          if (Ext.isEmpty(printMenuItems)) return;

                                                         

                                                          printMenuItems.each(function(item) {

                                                                        item.set("Visible", {bindTo: "getPrintMenuItemVisible"});

                                                          }, this);

                                           },

                                           getPrintMenuItemVisible: function(reportId) {

                                                          if (Ext.isEmpty(this.get("ActiveRow"))) return true;

                                                          var Id = this.get("GridData").get(this.get("ActiveRow")).get("Id"),

                                                                        printMenuItems = this.get(this.moduleCardPrintFormsCollectionName),

                                                                        item = printMenuItems.find(reportId);

                                                          this.GetDocumentCollection();

                                                          if (Ext.isEmpty(item)) return;

                                                          var ReportName = item.get("Caption");

                                                          var DocCollection = this.get("DocumentCollection");

                                                          if(DocCollection === undefined){

                                                                        return false;

                                                          }

                                                          else{

                                                                        if(DocCollection.includes(ReportName)){return true;}

                                                                        else{return false;}

                                                                                     

                                                          }

                            

                                           }

Methods which I have added on edit page is :

                                                         GetDocumentCollection: function() {

                                          

                                                                        var recObj = [];

                                                                        var id =  this.get("Id");

                                                                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Document" });

                                                                        esq.addColumn("UsrDocumentName.Name");

                                                                        esq.filters.add("UsrTransactions", Terrasoft.createColumnFilterWithParameter(

                                                                                      Terrasoft.ComparisonType.EQUAL, "UsrTransaction", id));

                                                                        esq.getEntityCollection(function(result) {

                                                                                      var response = result.collection;

                                                                                      var hasRecord = (response.collection.length !== 0);

                                                                                      if(hasRecord) {

                                                                                      result.collection.each(function(item) {

                                                                                                    recObj.push(item.get("UsrDocumentName.Name"));

                                                                                      });

                                                                                      }

 

                                                                        this.set("DocumentCollection",recObj);

 

                                                                        }, this);

                                                         

                                           },

                                           initCardPrintForms: function() {

                                                          this.callParent(arguments);

 

                                                          var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);

                                                          if (Ext.isEmpty(printMenuItems)) return;

 

                                                          printMenuItems.each(function(item) {

                                                                        item.set("Visible", {bindTo: "getPrintMenuItemVisible"});

                                                          }, this);

                                           },

                                                                                      getPrintMenuItemVisible: function(reportId) {

                                                          //this.GetDocumentCollection();

                                                          var Id = this.get("Id"),

                                                                        printMenuItems = this.get(this.moduleCardPrintFormsCollectionName),

                                                                        item = printMenuItems.find(reportId);

                                                          if (Ext.isEmpty(item)) return;

                                                          this.GetDocumentCollection();

                                                          var ReportName = item.get("Caption");

                                                          var DocCollection = this.get("DocumentCollection");

                                                          if(DocCollection === undefined){

                                                                        return false;

                                                          }

                                                          else{

                                                                        if(DocCollection.includes(ReportName)){return true;}

                                                                        else{return false;}

                                                                                     

                                                          }

                            

                                           }

Like 0

Like

1 comments

Hello,



In order to filter printables in edit mode, both in your page and section replacing schemas, you need to replace a method preparePrintFormsMenuCollection. Inside this method, you should leave base method as is (the code before and after comments below), and only change the code between the comments to create the logic that fits your business needs:

 

preparePrintFormsMenuCollection: function(printForms) {
    printForms.eachKey(function (key, item) {
        if (!item.get("Caption")) {
            item.set("Caption", item.get("NonLocalizedCaption"));
        }
        item.set("Tag", key);
        if (item.get("TypeColumnValue")) {
            item.set("Visible", { bindTo: "getPrintMenuItemVisible" });
        }
        //Here is your logic for filtering of printables
        /*************************************************************************/
        /* YOUR CODE, for example 
        var currentState = this.get("State");
        var currentStateDisplayValue = currentState.displayValue;
        var currentStateDisplayValueToLower = currentStateDisplayValue?.toLowerCase();
        var isStateEmpty = Ext.isEmpty(currentState);
        if (!isStateEmpty &amp;&amp; currentStateDisplayValue &amp;&amp; item.get("Caption").includes(currentStateDisplayValueToLower)) {
        item.set("Visible", true);
        }
        else {
        item.set("Visible", false);
        }
        */
        /*************************************************************************/
    }, this);
}

 

Show all comments