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 1

Like

0 comments
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

1 comments

Greetings!

 

Have noticed that field BlindCopyRecipient in Activity is not being populated when receving an email, that was send using bcc field and specifying an email address that is configured for synchronization.  However email is synchronized and showing correctly in communication panel. Is it a bug or feature?

 

Like 1

Like

0 comments
Show all comments

Hi everyone,

Trying to merging 2 different pairs of duplicate contact records and i receive the following errors: 

1. P0001: User with specified contact already exists
2. Npgsql.PostgresException: 42601

Has anyone ever encountered these errors? 

Like 0

Like

1 comments

Hi Shemroy!

This error can occur when the contacts you are trying to merge are linked to a system user.

When trying to merge them, the system attempts to link one contact to another user, but a contact cannot be linked to more than one user. This results in an error, since the system does not allow this situation.

Such user-linked contacts should not be merged. If necessary, you can deactivate one of the users and rename the contact to avoid confusion.

Since deleting a user is not supported by the system by design, deleting a contact linked to such a user is also not possible.
 

If you have any further questions, please let us know, we would be happy to help.
Thank you for choosing Creatio!

Show all comments

Hello, 

 

I've set 'Record deactivation' for my object. But I don't see any field for that in Data model attributes on my Freedom UI page.

 

How can I add this field 'Inactive' to Freedom UI page?

 

Thank you!

Like 1

Like

2 comments

Hello Vladimir,

I've the same question and I followed these steps for Contact section:

1. Create a replacement for the Freedom client schema. Please create a new client module, and for the URL in the browser, change schemaType=9 
for example like that: .../0/ClientApp/#/ClientUnitSchemaDesigner/new?packageId=db5d44a0-881e-ba1b-3396-a2dfae3fecee&packageName=test_contacts&schemaType=9
2. Set Parent object -  Contacts form page (Contacts_FormPage)

3. Change del module script 

viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
			{
				"operation": "insert",
				"name": "Checkbox_Custom",
				"values": {
					"layoutConfig": {
						"column": 1,
						"row": 2,
						"colSpan": 1,
						"rowSpan": 1
					},
					"type": "crt.Checkbox",
					"label": "$Resources.Strings.PDS_RecordInactive_Custom",
					"labelPosition": "auto",
					"control": "$PDS_RecordInactive_Custom"
				},
				"parentName": "SideAreaProfileContainer",
				"propertyName": "items",
				"index": 1
			}
		]/**SCHEMA_VIEW_CONFIG_DIFF*/,
		viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
			{
				"operation": "merge",
				"path": [
					"attributes"
				],
				"values": {
					"PDS_RecordInactive_Custom": {
						"modelConfig": {
							"path": "PDS.RecordInactive"
						}
					}
				}
			}
		]

Hello,
 

The solution provided by Stefano is a good one. 

An alternative solution was discussed in this post: https://community.creatio.com/questions/recordinactive-checkbox-missing-freedom, and you can use the approach from there.
 

However, we still recommend adding the required column directly via page metadata, as described above.
 

We already have a backlog task to address this issue in future versions of the application.
 

Thank you for reaching out!

Show all comments

I need to create one printing report for all records in section. I set up word report for this section. I set up button, but it makes separated report for every record.

As result i want to get literaly all records from section in my report. What should I do to get this result: ONE common report with all section records

Like 0

Like

1 comments

Hi,
 

Unfortunately, there is no direct way to perform such printing.

However, you can configure this logic using a workaround.
 

For example, if you want to export all records from the "Invoice" section into a single report, you can follow these steps:


1.Create an "Invoice report" object (optionally, you can create a section for it).

2. In the "Invoice" object, add a lookup column that references "Invoice report" (e.g., UsrInvoiceReport).

3. Create a single record in the "Invoice report" section.

4. Update all Invoice records, setting the UsrInvoiceReport column (from step 2) to the record created in step 3.

5. Create a report based on the "Invoice report" object and add a table section for the "Invoice" object, linking them as follows:
 

Invoice report.Id = Invoice.UsrInvoiceReportId
 

This way, you will generate a report that includes all records from the Invoice table, as they all reference the same record.
 

You can also use this same section for other objects like Document, Order, etc. by repeating steps 2-5.
 

Hope this helps! Take care! 😊

Show all comments

I need to convert a decimal field into words for a report template. Can this be done with a formula or does it have to be a script?

Like 0

Like

1 comments

You need an script task

Show all comments

Does anybody have fairly solid methods of working around Creatio's limitation of not being able to distinguish between zeroes and missing values for number fields? This often comes up in requirements, and I haven't found a workaround that works so well that I always use it.

 

Some methods we've tried/considered:

  • Using Text fields instead of number fields
    • Obvious disadvantage of not having numeric protections/validations, both in the page layer & the backend & database side
    • Values can't be aggregated into KPI widgets/graphs, unless you have some process to copy the number text into a hidden number field...
  • Having a Boolean field for every number field to indicate if it should be null or zero
    • Cumbersome to implement on objects with lots of number fields
    • Field still displays as a zero value unless you add in custom code everywhere it appears
    • BPs or Event Listener code needed to ensure these 2 fields agree, plus logic in the page/integrations needed to set the flags and make the field show nothing when the flag is set

 

Any other workarounds people are using that are effective? Hopefully Creatio will add this capability at some point as it is crucial for having valid data, but it feels like it would require a fairly big change to the platform, so I don't expect we'll get it very soon!

Like 0

Like

3 comments

Hello Harvey,

 

The task is still in progress and the only workaround that currently exists is using the text column instead of a number. In case this number should be processed it can be done using type casting in formulas (or script tasks) of business processes.

 

I've also added your voice to prioritize the problem for our R&D team. Hope this will be implemented soon.

We are also experiencing this issue when searching by dates. For example, 4/5/1967 will generate a hit, but not 04/05/1967.  Interested in being added to any prioritization tickets on this.

 

Anna Pannier,

 

Please create a separate question in the community with a description of how exactly the search is performed and which datatype your current column that stores the date has.

Show all comments

I have created a script to turn integers into words and it keeps compiling with errors.

 

heres the script:

 

using System;
using System.Text;
using Terrasoft.Core;
using Terrasoft.Core.Entities;
using Terrasoft.Core.Process;

public class ConvertCurrencyToTextTask : ProcessUserTask
{
   // ✅ Constructor
   public ConvertCurrencyToTextTask(ProcessExecutingContext context) : base(context) { }

   // ✅ Main execution method (Runs when the Script Task is triggered)
   public override bool CompleteExecuting(UserConnection userConnection)
   {
       try
       {
           // ✅ Retrieve the requested amount from the process parameter
           decimal requestedAmount = Get("DfcReqAmt");

           // ✅ Retrieve the dynamically fetched record ID
           Guid recordId = Get("Id");

           // ✅ Convert the numeric amount to words
           string convertedText = ConvertToWords(requestedAmount);

           // ✅ Store the result in the output parameter
           Set("DfcRequestedAmountText", convertedText);

           // ✅ Update the record in the FinApplication object
           UpdateRecord(userConnection, recordId, convertedText);
       }
       catch (Exception ex)
       {
           throw new Exception("Error in ConvertCurrencyToTextTask: " + ex.Message);
       }

       
   }

   // ✅ Converts numbers to words (DYNAMIC)
   private string ConvertToWords(long number)
   {
       if (number == 0)
           return "Zero";

       if (number < 0)
           return "Negative " + ConvertToWords(Math.Abs(number));

       string words = "";
       int thousandIndex = 0;

       while (number > 0)
       {
           if (number % 1000 != 0)
           {
               words = ConvertHundreds(number % 1000) + Thousands[thousandIndex] + " " + words;
           }
           number /= 1000;
           thousandIndex++;
       }

       return words.Trim();
   }

   // ✅ Converts hundreds, tens, and ones
   private string ConvertHundreds(long number)
   {
       string words = "";

       if (number >= 100)
       {
           words += Ones[number / 100] + " Hundred ";
           number %= 100;
       }

       if (number >= 10 && number <= 19)
       {
           words += Teens[number - 10] + " ";  // ✅ Corrected indexing for Teens
       }
       else
       {
           words += Tens[number / 10] + " ";
           words += Ones[number % 10] + " ";
       }

       return words.Trim();
   }

   // ✅ Updates the record with the converted text
   private void UpdateRecord(UserConnection userConnection, Guid recordId, string convertedText)
   {
       if (recordId == Guid.Empty) // ✅ Ensures ID is valid before updating
           throw new Exception("Record ID is empty, cannot update record.");

       var entitySchema = userConnection.EntitySchemaManager.GetInstanceByName("FinApplication");
       var entity = entitySchema.CreateEntity(userConnection);

       if (entity.FetchFromDB(recordId))
       {
           entity.SetColumnValue("DfcRequestedAmountText", convertedText);
           entity.Save();
       }
   }

   // ✅ Number arrays (DYNAMIC)
   private readonly string[] Ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
   private readonly string[] Teens = { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
   private readonly string[] Tens = { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
   private readonly string[] Thousands = { "", "Thousand", "Million", "Billion", "Trillion" };
} // ✅ Class correctly closed

 

 

return true; // ✅ Ensures method completes properly
 

 

 

 

these are the errors I am getting:

 

DfcProcess_25a93f1.DfcLoans.cs    Identifier expected    CS1001    34
DfcProcess_25a93f1.DfcLoans.cs    Identifier expected    CS1001    33
DfcProcess_25a93f1.DfcLoans.cs    Identifier expected    CS1001    35
DfcProcess_25a93f1.DfcLoans.cs    Type or namespace definition, or end-of-file expected    CS1022    151
DfcProcess_25a93f1.DfcLoans.cs    } expected    CS1513    36
DfcProcess_25a93f1.DfcLoans.cs    Identifier expected    CS1001    32
DfcProcess_25a93f1.DfcLoans.cs    Identifier expected    CS1001    36

 

Not sure what is missing as far as syntax goes, all bracket appear to be in place.

 

Appreciate the help in advance.

 

 

 

 

Like 1

Like

4 comments

Hi,

 

The error is related to the business proceess DfcProcess_25a93f1. Can you share a source code for the business process, not the user task you shared? You can get the source code of the business process here:

There was no source code?

Hello,
 

In this case, do you perform development on a local environment?

If so, could you search for the schema in the {rootAppFolder}\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\DfcLoans\Autogenerated\Src\DfcProcess_25a93f1.DfcLoans.cs directory?

You can also find the location of the file that causes compilation errors if you look at the application logs (Build.log) for the day of compilation and errors.

Show all comments