Hi Creatio community,

Where are the logs of batch query calls stored in Creatio? I need to implement a notification logic that triggers every time a batch query is processed in Creatio.

 

Kind regards

Like 0

Like

1 comments

Hello!

 

Such information you can find in your IIS logs, which by default are stored in %SystemDrive%\inetpub\logs\LogFiles

 

If you need, you can set up your own path:

https://learn.microsoft.com/en-us/iis/manage/provisioning-and-managing-…

Show all comments

Hello all,

I am currently trying to update the standard Invoice object record's field; "payment amount" with a calculated sum collected from a custom object called: "Payments" from it's "Amount" field.

-Payments Record Added has the filter conditions of, "Amount is filled in"
- Payments Record Deleted has no filters
- Payments Record Modified has the, "Changes expected in any selected fields = 'Amount'"
 

 

 


 


And this is the current Invoice Record:

 

The Payment Amount field AND the test payment amount field I created show no input despite refreshes and alterations. I would appreciate any suggestions on my wrongdoings, as this is a more fundamental business process I have used before.

Thank you in advance for any help you can provide.

Like 0

Like

4 comments

Additionally, I found that the "read data" element is not actually picking up the invoice. Below is the trace data of the process log:


{
    "Element parameters": [
        {
            "Parameter": "Data source of filters",
            "Value": {
                "Before execution": "{\"className\":\"Terrasoft.FilterGroup\",\"serializedFilterEditData\":\"{\\\"className\\\":\\\"Terrasoft.FilterGroup\\\",\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\",\\\"displayValue\\\":\\\"Payments Record Added.Unique identifier of record\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\",\\\"displayValue\\\":\\\"Payments Record Deleted.Unique identifier of record\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\",\\\"displayValue\\\":\\\"Payments Record Modified.Unique identifier of record\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\",\\\"key\\\":\\\"\\\"}\",\"dataSourceFilters\":\"{\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\"}\"}",
                "After execution": "{\"className\":\"Terrasoft.FilterGroup\",\"serializedFilterEditData\":\"{\\\"className\\\":\\\"Terrasoft.FilterGroup\\\",\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\",\\\"displayValue\\\":\\\"Payments Record Added.Unique identifier of record\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\",\\\"displayValue\\\":\\\"Payments Record Deleted.Unique identifier of record\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\",\\\"displayValue\\\":\\\"Payments Record Modified.Unique identifier of record\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\",\\\"key\\\":\\\"\\\"}\",\"dataSourceFilters\":\"{\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\"}\"}"
            }
        },
        {
            "Parameter": "Read first",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        },
        {
            "Parameter": "Columns order",
            "Value": {
                "Before execution": "",
                "After execution": ""
            }
        },
        {
            "Parameter": "First item of resulting collection",
            "Value": {
                "Before execution": {},
                "After execution": {}
            }
        },
        {
            "Parameter": "Read uncommitted data",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        },
        {
            "Parameter": "Consider time in the filter",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        }
    ],
    "Process parameters": [
        {
            "Parameter": "IWPayments Amount",
            "Value": {
                "Before execution": 0,
                "After execution": 0
            }
        }
    ]
}

In the first read where you use the Id values from the start signals, change the AND to OR (if you click the AND it will toggle it to OR).

Ryan

Ryan Farley,

Thank you Ryan. I must have overlooked that detail while reviewing other work! I am now having a new issue where the calculation element shows an incorrect sum.

For instance, when setting the Calculate Element to, "OR" I will have one record with an amount of $4500. When modified, it will then show a sum of $94,500.

But if I set it to, "AND", then the Calculate Element will show $0 for both the input and output.

Any idea on what could be causing this?

 

I am going to answer my own question here for my reply, as I discovered that my filters were not working correctly and the calculated sum was adding ALL records of the Payments object:

 

I found that for the "Calculate Element" filters, not only did I not need the 

 

"id ≠ Payments.Record Deleted.Unique identifier of record" 

 

But that the filter of:

 

"Invoice = Read Invoice from IWPayments.First item of resulting collection.Invoice"

 

Should be:

 

"Invoice.Id = Read Invoice from IWPayments.First item of resulting collection.Invoice"

 

I thought I had set it to that already, but I must have overlooked it while troubleshooting other solutions. 

Thank you to anyone who took a look at this!

Show all comments

Hi community,

In the oob version Product in order modal page when opening the business rules,

we see the Formula expression BusinessRuleFormulaExpression 

However when trying to create a rule of our own we cant apply formulas, its always the Constant Value

Is there any feature that needs to be active?

Sasor

Like 0

Like

1 comments

Hello Community,
Here is the scenario Im truing to solve.

We Have Opportunity (parent page) in freedomUI and Contact In Opportunity in Classic UI.

We want to capture the following event. When we click Close in 'Contact in opportunity', we want to capture this event, in the Opportunity Form Page. 

The scope behind this is to perform a list reload of the Contacts(have already tried Enable live update in the entities-doesnt work)

How can this be achieved?

Sasor

Like 0

Like

9 comments

++++

Hello,
 

You can implement the following code to reload the data source when you get to the Freedom UI page on the crt.HandleViewModelInitRequest.
 

Sample implementation for “Opportunities_FormPage”

define("Opportunities_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
...
        handlers: /**SCHEMA_HANDLERS*/[
              {
        // Load data grids
      request: 'crt.HandleViewModelInitRequest',
      handler: async (request, next) => {
          console.log("You returned to FreedomUI page");
            const result = await next?.handle(request);
            const handlerChain = sdk.HandlerChainService.instance;
            await handlerChain.process({
                type: 'crt.LoadDataRequest',
                $context: request.$context,
                config: {
                    loadType: "reload"
                },
                dataSourceName: "ContactRolesListDS"
            });
            return result;
      }
  }

Serhii Parfentiev,

Hello Serhii,

Have you actually tried it ? HandleViewModelInitRequest is not even triggered when you close the classic ui page (nothing in the console log)

Sasor

++++

++++

++++

++++

+++++++

Hi Community,

Is there any idea about this topic?

Sasor

Show all comments

Hi,

I am trying to build a business process that will automatically generate an excel report using the Generate Excel Report task, available through package IntExcelReport.

In the business process Convert File to Base64String I pass the file that is generated from Generate Excel Report task.

 Convert File to Base64String business process is as the following picture: 

In the script task I have the following code:

 

But the when I try to get the content of the File parameter (FileParam bp parameter) I get a null value.

What else should I try, or am I not configuring it right?

Thank you in advance

Like 1

Like

3 comments

Hi, trying also to figure out how to use this new excel process element to send the report by email. Documentation has not been updated in the marketplace. Anyone figured it out ?

It's strange since I receive

 

System.InvalidCastException: Unable to cast object of type 'Terrasoft.File.EntityFileLocator' to type 'Terrasoft.Configuration.File'.
   at Terrasoft.Core.Process.ProcessModel.GetParameterValue[T](FoundParameterData result)

 

And I do everything in the same manner:

 

  1. Main process

Sub process

Process log

So what am I doing wrong?

 

If it's working on your end: I don't see the usage of FileAPI in the script task that is required and your app may use S3 file content storage and this can be the first reason for the empty file data. The second possible reason is that you check the file data using the tracing or you don't see file data since it's not saved in the memory of the app because of the system feature related to storing process parameters in the memory. This data should be then used in some interactive element or used in the process Formula element so it could be available in the application memory.

Were you able to figure out how this works? I am in the same boat and need some guidance. For starter, I don't see this Excel Report element in my business process. What am I missing here?

Show all comments

Hello

 

I'm trying to make the approval comment field mandatory for a DCM. The idea is that  the approval cannot be approved or rejected if a comment hasn't been added to the section. That is, all approvals need to have a comment added to them.

 

I try to marked the comment as obligatory in the object "Basevisa" but it didnt work. 

 

Any idea how can I make the comment mandatory. 

 

Thank you 

 

 

 

Like 1

Like

1 comments

Hello Laura,

 

In classic UI there are two approaches: either one provided here (but don't forget to disable the AcceptApprovalWithoutComment system setting) or creating a replacing view module for the PreconfiguredApprovalPage and add this code:

define("PreconfiguredApprovalPage", [],
	function() {
		return {
			attributes: {},
			methods: {
				save: function() {
					const approvalComment = this.get("Comment");
					if (approvalComment.length > 0) {
						this.callParent(arguments);
					} else {
						Terrasoft.showErrorMessage("Comment is mandatory");
					}
				}
			},
			diff: /**SCHEMA_DIFF*/ [] /**SCHEMA_DIFF*/
		};
	});

As for the Freedom UI - as was mentioned here and here - this is not avialable in Freedom UI as for now. I will notify our R&D team about your question to prioritize the task to develop the logic for them.

Show all comments

i try to deploy creatio in linux vmware but i cannot login in the login page when make a succesfull login attempt got comeback to login page again in the console i get this some kind error message can you guys help me

 Failed to resolve type Terrasoft.Core.QueryExecutionRules.IQueryRuleApplier
 
Autofac.Core.DependencyResolutionException: An exception was thrown while activating Terrasoft.Core.QueryExecutionRules.QueryRuleApplier -> Terrasoft.Core.QueryExecutionRules.QueryRuleApplyLogger -> Terrasoft.Core.QueryExecutionRules.QueryRuleApplyLogRepository -> λ:Terrasoft.Core.UserConnection.

 

Like 0

Like

1 comments

Hello!
 

To resolve this issue, please submit a request via email to support@creatio.com.

What we need from you:

  1. Website logs.
  2. Binary files (if possible).
  3. An anonymized copy of the database (if it's a default database and doesn't contain sensitive data, please provide it).


Thank you for reaching out! We’ll be happy to assist you!

Show all comments

I would like to disable the mini page that appears before the main page in Freedom UI. Currently, when we click on "Next Step," it first opens a mini page before navigating to the main page. Instead, I want it to directly open the main page without this intermediate step.

Like 4

Like

5 comments

Hello,

 

When clicking on the "Complete" button from the next steps, the system will show you the Freedom UI mini page, as this is a Next Steps core logic.

The only way to avoid opening this mini page is to develop your only Next Steps tiles and assign different logic for the complete button.

Dymytriy Vykhodets,

can you please help me where this core logic is written. so that i can try to create new logic.

Dymytriy Vykhodets,

the idea is to open the main page in place of mini page when we click on complete button

Alok Kumar,

Yes, we want to opent the main page directly

 

Hello, is there an additional information on this particular need? Is there a documentation to be followed for "developing custom Next Steps tiles and assign different logic for the complete button"? In some cases, complete button is expected to be enough to complete the action at that time. Is there any additional resource on this topic?

Show all comments

Trying to create new Reminding with link to Call or Contact collection objectby oData4 request. Is it possible?
With Action collection everything fine. But with Call (or Contact) collection Id request only red point appears near bell symbol, but list of remindings is empty.

Like 0

Like

2 comments

Hello!

 

If you mean create remindings with link to specific record. You actually can manage something like this with the business process by adding notifications with an edit page element. And then trigger this process by odata.

Kyrylo Atamanenko,

Thank you, Kyrylo

I mean, which collection UId from the list of {{BaseURI}}/0/odata/SysSchema should be specified in the "SysEntitySchemaId" field in the POST request  {{BaseURI}}/0/odata/Reminding in order to create a notification not bound to an Action, but Contact or Call? Is it possible to create this kind of notification without changing the default configuration of Creatio?

Show all comments

Hello everyone,

I'm working on a custom duration validator in Creatio, but I'm running into an issue where the function returns invalidMessage before the validation logic completes.

Here’s a simplified version of my function:

durationValidator: function(){
                var invalidMessage="";
                var name=this.get("UsrNameLookup").value ?? null;
                var currentDuration=this.get("UsrDurationMinute");
                if(!name){
                    return;
                }
                var esqDuration = this.Ext.create("Terrasoft.EntitySchemaQuery", {
               rootSchemaName: "UsrPerformances"
           });
                esqDuration.addColumn("UsrDurationMinute");
                // var groupFilters = this.Ext.create("Terrasoft.FilterGroup");
                
                var totalDuration = 0;
                if(this.isAddMode()){
                    var nameFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UsrNameLookup", name);
                // groupFilters.addItem(filterId);
                esqDuration.filters.add("esqFirstFilter",nameFilter);
                    esqDuration.getEntityCollection(function(result) {
                   if (!result.success) {
                       this.showInformationDialog("Request error");
                       return;
                   } else {
                       result.collection.each(function(item) {
                               totalDuration += item.get("UsrDurationMinute");
                           }
                       );
 
                   }
                   totalDuration += currentDuration;
                        console.log(totalDuration);
                   this.Terrasoft.SysSettings.querySysSettingsItem("UsrMaximumDuration", function(maxDuration) {
                       // console.log("td"+totalDuration);
                       if (totalDuration > maxDuration) {
                            this.set("Numbervalue", false);
                           this.showInformationDialog("No more than " + maxDuration + " total performances duration is allowed.");
                            invalidMessage= "No more than " + maxDuration + " total performances duration is allowed.";
                            return{
                                invalidMessage: invalidMessage
                            };
                       } 
                        else {
                            this.set("Numbervalue", true);
                            invalidMessage="";
                            return{
                                invalidMessage: invalidMessage
                            };
                       }
                   }, this);
 
               }, this);
                }else{
                    console.log("else");
                    var nameFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UsrNameLookup", name);
                
                
                    var idFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.NOT_EQUAL, "Id", this.get("Id"));
                    esqDuration.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
                    esqDuration.filters.add("esqFirstFilter",nameFilter);
                    esqDuration.filters.add("esqSecondFilter", idFilter);
                    esqDuration.getEntityCollection(function(result) {
                   if (!result.success) {
                       this.showInformationDialog("Request error");
                       return;
                   } else {
                       result.collection.each(function(item) {
                               totalDuration += item.get("UsrDurationMinute");
                           }
                       );
                       // console.log("i am running");
                       // let prevduration=this.get("UsrprevDuration");
                       // console.log("previous duration"+ prevduration);
                       totalDuration += currentDuration;
 
                   }
                    console.log(totalDuration);
                   this.Terrasoft.SysSettings.querySysSettingsItem("UsrMaximumDuration", function(maxDuration) {
                       // console.log("td"+totalDuration);
                       if (totalDuration > maxDuration) {
                            this.set("Numbervalue", false);
                           this.showInformationDialog("No more than " + maxDuration + " total performances duration is allowed minutes.");
                            invalidMessage="No more than " + maxDuration + " total performances duration is allowed.";
                            return{
                                invalidMessage: invalidMessage
                            };
                       } else {
                           this.set("Numbervalue", true);
                            invalidMessage="";
                            return{
                                invalidMessage: invalidMessage
                            };
                       }
                   }, this);
 
               }, this);
            
                    
            }
                console.log(invalidMessage);
                return{
                                invalidMessage: invalidMessage
                            };
                },
 
 
The console.log(invalidMessage); statement always prints an empty string.
  • The function returns <strong>invalidMessage</strong> before the asynchronous operations (getEntityCollection and querySysSettingsItem) complete.
  • As a result, validation messages do not appear correctly.
Like 0

Like

4 comments

Jerome BERGES,

Thanks for answering, I tried different approach like this https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/getting-started/first-app/develop-application/step-3-add-page-validation and it works.

Is there any i can perform same validation on detail of some custom page.

Darshan Dev Prajapat,

The problem with the article you linked to and what you're trying to accomplish is that you're using asynchronous methods inside the validator, which won't work with a synchronous validation method since the validation method will return before you've retrieved the asynchronous results. You need to switch to the asyncValidate (see link provided by Jerome) in order to use asynchronous methods (such as EntitySchemaQuery, SysSettings retrieval, etc).

The main difference in the article you linked to and your code is that the article performs the ESQ outside of the validator, when the onEntityInitialized fires, not inside the validator (which is what you're doing). To do asynchronous operations like ESQ (and using SysSettings) you need to use the asyncValidate method.

Ryan

Ryan Farley,


Thanks for the detailed explanation. I am using onEntityInitialized for validation, and it is working for me. However, I would like to know if there is a way to perform the same validation where this performance detail is being used, such as on a custom page.

 

Show all comments