Hi,

 

I want to make a validator that endDate cannot be erlier than leave startDate, in endDate field in viewModelConfigDiff,

Expectation:

 

My Code:

 

"PDS_UsrLeaveEndDate_quo1xia": {
	"modelConfig": {
		"path": "PDS.UsrLeaveEndDate"
	},
	"validators": {
		"MySuperValidator2": {
			"type": "usr.FutureDateValidator2",
			"params": {
				"message": "#ResourceString(EndDateWarning)#",
				"startDate": "PDS_UsrLeaveStartDate_apq3vdm"
			}
		}
	}
}

 

   "usr.FutureDateValidator2": {
                validator: function (config) {
                    return function (control) {
                        let value = control.value;
                       let startDate =  config.startDate;
                        let valueIsCorrect = value > startDate;
                        var result;
                        if (valueIsCorrect) {
                            result = null;
                        } else {
                         console.log(startDate);
                         console.log(value);
                            result = {
                                "usr.FutureDateValidator2": { 
                                    message: config.message
                                }
                            };
                        }
                        return result;
                    };
                },
                params: [
                    {
                        name: "message"
                    },
                 {
                        name: "startDate"
                    }
                ],
                async: false
            },

 

But, value of startDate from the params is a String, how to get the actual value?

 

Thank you

Like 0

Like

1 comments

Currently, you cannot pass the value of another field to a validator, this function is still under development. However, you can write something similar using global variables as described in this discussion.

Show all comments

Hi all,

 

I would like to know if and how it is possible to add a font for configuring email account signature.

 

Best regards

 

stefano

 

Like 0

Like

1 comments

Hello,

To upload new fonts and use them in emails, you need to change the values of the system settings "CKEditor fonts list" ("CKEditor fonts list") and "CKEditor default font" ("CKEditor default font"). 

The "CKEditor fonts list" system setting is responsible for which font you will be able to see in the font drop-down list. It should be added to the beginning of the system setting list, with ";". 

Accordingly, in order to use this font, they just need to be installed on the server as a regular font. 

It is also necessary to know that if the recipient does not have this font, he will not see this font.

More information can be found in this instruction.

Best regards,
Antonii.

Show all comments

Hi, everybody!

 

I work on Classic UI. I have a task: to realize opening mini-page instead of full page in Account Lookup by clicking Add Button. 

 

I managed to do it in runtime mode.

 

To do this, it was necessary to make a change to the basic client module  LookupPageViewModelGenerator.js, the needOpenMiniPage method.

But I couldn't override this basic module in the configuration and connect it to my page.

 

Code of my new LookupPageViewModelGenerator:

define("LVLookupPageViewModelGeneratorV2", ["LookupPageViewModelGenerator"], function(LookupPageViewModelGenerator) {
 
Ext.define("Terrasoft.configuration.LVLookupPageViewModelGeneratorV2", {
extend: "Terrasoft.LookupPageViewModelGenerator",
		needOpenMiniPage: function(entitySchemaName) {
		this.lookupInfo.isQuickAdd=true; // додано
		const notUseSilentCreation = !Terrasoft.Features.getIsEnabled("UseSilentCreation");
		const entityStructure = moduleUtils.getEntityStructureByName(entitySchemaName);
		const editPages = entityStructure.pages;
		const hasAddMiniPage = editPages[0].hasAddMiniPage;
		return notUseSilentCreation && this.lookupInfo.isQuickAdd && !Ext.isEmpty(hasAddMiniPage);
				},
    		});
    return Terrasoft.configuration.LVLookupPageViewModelGeneratorV2;
});

 

Code of my page where lookup is contained:

define("ELFinApplicationAccountPage", ["LVLookupPageViewModelGeneratorV2"],  function() {
return  {
entitySchemaName: "FinApplication",
attributes: {},
messages: {},
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
businessRules: /**SCHEMA_BUSINESS_RULES*/ {}/**SCHEMA_BUSINESS_RULES*/,
methods: {},
diff: /**SCHEMA_DIFF*/[
			{
          operation: "insert",
          name: "LVPartnerWhoRecommended",
          parentName: "AdditionalProfileInfoContainer",
          propertyName: "items",
          values: {
            layout: {
              column: 0,
              row: 6,
              colSpan: 24
            }
          }
        },
         ]/**SCHEMA_DIFF*/
         };
});

 

I wrote this code while I was reading this article: https://community.creatio.com/questions/add-mini-card-contact-lookup-new-optionbutton. But maybe I made a mistake or didn`t take smth into account.

What do I have to do to make this work?

 

Thank you!

Like 3

Like

1 comments

Hello,
Try creating a full copy of this schema (not override) with the modified method needOpenMiniPage and connect this copy in the define of the needed schema.
Also, in newer versions, you can unlock a package for a hotfix, with it, you can modify a base schema directly.

Show all comments

Hello Everyone, 

 

I created a Dynamic DCM that includes some sub-processes to validate lists on my form page. If validated correctly the stage should continue forward. the first stage works just fine it proceeds. When I validate the following one though the stage does not change. I have re-checked my BP multiple times to ensure it has taken the appropriate path and also the result conditions set in order for the case to move forward dynamically and they both check out. Any idea what the issue could be?

Like 0

Like

1 comments

Hello,

 

Here are a few additional steps you can take to troubleshoot the issue:

  • Ensure that the validation logic in your sub-processes is correctly implemented and that it returns the expected results.
  • Double-check the transition conditions between stages to ensure they are correctly configured and that they match the output of your validation logic.
  • Look at the case logs to see if there are any errors or warnings that might give you more insight into why the stage is not progressing.
  • Try testing the process with different sets of data to see if the issue is data-specific.
  • Ensure that the user executing the process has the necessary permissions to move the case forward.
Show all comments

Hi everyone,

I'm facing an issue while configuring mail in my local instance. I have setup the system settings ExchangeListenerServiceUri and Creatio Exchange Events Endpoint URL, same as the academy documentation. The container in the Docker is running there is no issue from the docker side. I have attached the screenshots of the steps I have done  below.

 





Could someone help me to resolve this issue?

 

Thanks in advance!

 

Regards,
Hindujashiri

Like 0

Like

1 comments

Hello,
 

We recommend setting an IP address instead of "localhost" in the system setting BpmonlineExchangeEventsEndpointURL.
 

This is because "localhost" refers to the current machine’s address. The issue arises within Docker, which has its own network inside and a different interpretation of "localhost". 

As a result, when Docker tries to connect to the site’s endpoint, it fails to reach it.
 

To resolve this, we recommend changing the site binding to an IP address or a domain name instead of localhost.
 

Hope this helps!

Show all comments

Hi everyone,

I'm working with Creatio CRM and need to trigger an approval process via API. I have a custom object called EpbSolicitudes, and each request has a unique ID (e.g., 1e80cd00-2cf4-4ecc-a61c-511d7afa3568).
 

My goal is to invoke the approval action programmatically using an API call. Specifically, I want to:

  1. Approve a request via API (either updating the status or calling a process).
  2. Ensure that the approval follows the same workflow as if it were done manually.
  3. Optionally, trigger a BPMN process if needed.
     

I've explored the OData 4 API and DataService API, but I'm unsure of the best approach to handle approvals.

  • Should I update the "NextStep" field in EpbSolicitudes using OData?
  • Is there a built-in API method to invoke the approval process?
  • Can I start an approval process via ProcessEngineService API?

If anyone has experience with automating approvals in Creatio via API, I would appreciate any guidance or examples.
 

Thanks in advance! 🚀

Like 0

Like

1 comments

Hello,

 

If your approval is created using a business process, you can trigger the business process using the ProcessEngineService.svc service https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Show all comments

Hi all,

 

We have noticed that in formatting options of a Rich Text field there is the possibility to 'Align left', 'Center' and 'Align right'.

 

Is there a way to enable also 'Justify' formatting option?

 

Best Regards

 

Stefano
 

Like 0

Like

1 comments

Dear Stefano,

Unfortunately, currently, there is no option to justify the format in Rich text. 

I have created an idea for the R&D team.


Thank you for making Creatio better!

Show all comments

Hi Community,

 

We have this requirement, where we need to receive a complex json object and then store it in our database as a string, without using DataContracts.

 

To achieve this we though about using the "object" type and then serialize it into a string using JsonConvert.SerializeObject method. 

 

	  [OperationContract]
	  [WebInvoke(Method = "POST", UriTemplate = "/store", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
      public Response AddStore(object store) {
 
         Response response = new Response();
         response.MessageId = "1";
         response.Description = "Store Inserted!";
 
        string storeString = JsonConvert.SerializeObject(store, Formatting.Indented);
 
        var ins = new Insert(UserConnection)
        .Into("ImdStagingInArticle")
        .Set("ImdMessage", Column.Parameter(storeString))
        .Set("ImdStateId", Column.Parameter(new Guid("2d1dee23-058b-45fe-95a0-2e1612fc4261")));
 
        ins.Execute();
 
        return response;   
      }

 

However, the string is always empty. 

 

Since the json is to complex, the serializer cannot process the entire json data. 

 

We also tried to use WebOperationContext, but that doesn't work.

 

Can someone help us solve this issue? Did anyone have something similar?

 

Thank you.

Like 0

Like

7 comments

Hi,

 

First of all you need to make sure that you can convert the object into a string in general. Like create a Visual Studio project, add the logic to convert the object into a string using JsonSerializer like

 

string jsonString = JsonSerializer.Serialize(myObject); Console.WriteLine(jsonString);

 

And see the result. After the number of tests find the way when the data you pass is converted into the string and then start developing an additional logic of storing this data in the Creatio database using the insert query you used.

 

Alternatively find the way to make the object to have a constant set of keys so to be sure it will be converted to the string as needed.

Oleg Drobina,

 

After some changes I got it to work, by reading the raw body before the automatic parsing. However, this is working only on our Linux environment. As for for windows environment (Creatio Cloud), we are receiving some parse errors. 

 

      [OperationContract]
      [WebInvoke(Method = "POST", UriTemplate = "/article", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
      public Response AddArticle(string articleJson) {
 
        string result = "";
        Stream inputStream = HttpContext.Current.Request.Body;
 
        inputStream.Position = 0;
        using (StreamReader reader = new StreamReader(inputStream, Encoding.UTF8))
        {
            result = reader.ReadToEnd();
        }
 
        var parsedJson = JsonConvert.DeserializeObject(result);
        string jsonString = JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
 
 
 
 
 
        Response response = new Response();
        response.MessageId = "1";
        response.Description = "Article Inserted!";
 
 
 
        var ins = new Insert(UserConnection)
        .Into("ImdStagingInArticle")
        .Set("ImdMessage", Column.Parameter(jsonString))
        .Set("ImdStateId", Column.Parameter(new Guid("2d1dee23-058b-45fe-95a0-2e1612fc4261")));
        ins.Execute();
 
        inputStream.Close();
 
        return response;  
      }

 

What could be the cause for such weird behaviour?

 

Thank you.
      

 

Pedro Pinheiro,

 

Well, it shouldn't happen. Maybe there is still some difference in the content we pass in the local machine and in the Windows machine?

Oleg Drobina,

 

The requests are the same for both local and cloud environments, except the address and credentials.

 

However, when I execute the request on the cloud environment I get this error:

 

 <p class="heading1">Request Error</p>
       <p>The server encountered an error processing the request. The exception message is 'This method or property is
           not supported after HttpRequest.GetBufferlessInputStream has been invoked.'. See server logs for more
           details. The exception stack trace is: </p>
       <p> at System.Web.HttpRequest.get_InputStream()
           at Terrasoft.Configuration.ImdArticleAPI.ArticleAPI.AddArticle(Object article)
           at SyncInvokeAddArticle(Object , Object[] , Object[] )
           at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;
           outputs)
           at Terrasoft.Web.Common.ServiceModel.ThreadContextInitializer.Invoke(Object instance, Object[] inputs,
           Object[]&amp; outputs)
           at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
           at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
           at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
           at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p>

 

Have you encountered something similiar? What could be the cause for such error?

 

Thank you.

 

Pedro Pinheiro,

 

Creatio doesn’t know how to serialize/deserialize object. If you change object to string in Response AddStore(object store) you will be able to parse it with JsonParser of your choice.

Kirill Krylov CPA,

 

The problem is, if I change it to string I can only send strings to this endpoint (The Json must be converted to a string). Because, if I try to send a Json Object I get "400 Bad Request".

 

 

 

Hello everyone,

 

I managed to get it working by receiving the body as a Stream instead of a String.

 

With this solution, I don't get the "400 Bad request" and I can process any Json object.

 

I don't know if this is the best solution, but it's working for now.
 

	  [OperationContract]
      [WebInvoke(Method = "POST", UriTemplate = "/article", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
      public Response AddArticle(Stream requestBody) {
 
        string result = "";
 
        using (StreamReader reader = new StreamReader(requestBody, Encoding.UTF8))
        {
            result = reader.ReadToEnd();
        }
 
        var parsedJson = JsonConvert.DeserializeObject(result);
        string jsonString = JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
 
        Response response = new Response();
        response.MessageId = "1";
        response.Description = "Article Inserted!";
 
        var ins = new Insert(UserConnection)
        .Into("ImdStagingInArticle")
        .Set("ImdMessage", Column.Parameter(jsonString))
        .Set("ImdStateId", Column.Parameter(new Guid("2d1dee23-058b-45fe-95a0-2e1612fc4261")));
        ins.Execute();
 
        return response;  
      }

 

Feel free to give any feedback on this solution.

 

Thank you.

 

Show all comments

In the classic UI, the timeline showed portal messages.

 

However in the Freedom UI, portal messages are not available to select:

 

They are not available as an option in the timeline settings.

 

How do we enable these?

Like 1

Like

4 comments

I believe in Freedom UI cases, portal messages are just Feed messages (with the External property set). For the filter, you'd just set the option for Feed to see portal messages.

Ryan

Hi Ryan, thanks for the reply. I thought the same but they are not showing on our system.  Will have to log it with Creatio Support.

Hi Kieron!

To display portal feed messages in the timeline, you need to first allow external users to publish Feed messages:

 

After, these portal feed messages will be automatically displayed in the timeline.

I hope this helps. Have a great day!

Alina Yakovlieva,

Hi, that setting will display the messages in the Feed panel, but they still do not appear in the timeline.

Show all comments

How can I enable Creatio Copilot in on-premise creatio site?

Like 5

Like

3 comments
Best reply

Hello,

 

Please be informed that currently, there is no ability to use Creatio AI in the environments deployed locally (on-site), therefore it is not possible to set this functionality up on your site. However, we have planned a task for our R&D team to support this feature in future releases.

Hello,

 

Please be informed that currently, there is no ability to use Creatio AI in the environments deployed locally (on-site), therefore it is not possible to set this functionality up on your site. However, we have planned a task for our R&D team to support this feature in future releases.

Last roadmap I saw, it was planned for a first iteration of Creatio Copilot (now AI) in version 8.2.2 (next release) for on-premise versions , let's see if it will be the case or not 😊. Curious to see what additional infrastructure we need to put into place to handle the additional microservices.

Hi, 

With 8.2.2 release notes published (https://academy.creatio.com/docs/8.x/resources/release-notes/8-2-2-ener…)  and Creatio AI presentation done yesterday, is there any change ? 

Show all comments