We have business task in the mobile application to show in the section on opening 10 latest objects without waiting for specifying filter by the user.

Is it possible? And in which module to do such initial load?

Like 0

Like

1 comments

Hello Oleksandr!

 

If you are using an offline application mode, this should work by default. Otherwise, to achieve this goal for all sections, you would need to disable the "UseMobileSearchOnlyInSections" and "UseMobileRecents" features.

 

If you only need to load records without filtration in some particular sections, you have to set "SearchOnlyData": false, in the mobile mainfest in the "Models" section for the model of the sections you want.

 

Best regards,

Max.

Show all comments

Hi Community,

 

I want to change the font size of the title of the metric chart in freedom Ui. I created a custom css file. Iam using "indicator-widget-title" class to change the fontsize. But its not changing.

 

 

I tried to change the color of the title, it's changing. Font-size alone is not changing.



Css code i used.



Can anyone tell me how to change the font size.

Thank you in advance.

 

Regards,

Manideep Korni

 

 

Like 0

Like

2 comments
Best reply

I believe the style for those are in style blocks that get added to the page after the CSS is loaded. It will work if you add !important to the styles. 

.indicator-widget-title {
    font-size: 25px !important;
}

Ryan

I believe the style for those are in style blocks that get added to the page after the CSS is loaded. It will work if you add !important to the styles. 

.indicator-widget-title {
    font-size: 25px !important;
}

Ryan

Thanks Ryan Farley



It's worked.

 

Regards,

Manideep Korni.

Show all comments

Dear Community,

 

I retrieve the following from an API:

 

                        "AdresseerbaarObjectGeometrie Punt Coordinates": [

                            "0,00",

                            "0,00",

                            "0,00"

                        ],

 

This is a fixed array of 3 objects with X, Y, Z coordinates. I wish to use this array in my business process and simply use formula to set a variable to

 

x = coordinates[0]

y = coordinates[1]

 

However I am unable to use this notation or any other, I do not want to create a sub process to loop through these 3 objects.

 

 

Can you help me?

 

Like 0

Like

4 comments
Best reply

Hi Pascal,

Here's how I would do it. First, assuming the JSON looks something like this: 

{
    "_embedded": 
    {
        "adressen": [
            {
                "adresseerbaarObjectGeometrie": {
                    "punt": {
                        "coordinates": [
                            "0.00",
                            "0.01",
                            "0.02"
                        ]
                    }
                }
            }
        ]
    }
}

Second, when added to the web service, I've added 3 different body parameters inside of adressen. Be sure to make sure that the "is array" is not checked so you're treating each of these as text: 

  • adresseerbaarObjectGeometrie.punt.coordinates[0]
  • adresseerbaarObjectGeometrie.punt.coordinates[1]
  • adresseerbaarObjectGeometrie.punt.coordinates[2]

So at this point, it's as if there are three separate properties, instead of it being an array. You can now map each of these values as separate properties to the subprocess. 

Ryan

Hello Pascal,

Yes, you should be able to use the index of the elements in the array to access each. If you provide the full JSON response here I could help you with the expressions. Also, a useful tool to test the path expressions is https://jsonpath.com - you can paste in the JSON response and test getting the values you're after. 

Ryan

 

This is the full json path to X: $._embedded.adressen[:].adresseerbaarObjectGeometrie.punt.coordinates[0]

 

In Creatio I already seperated the object into adressen, so that will have to be a 'for loop' with a subprocess. So the eventual path would be: adresseerbaarObjectGeometrie.punt.coordinates[0] I believe.

Hi Pascal,

Here's how I would do it. First, assuming the JSON looks something like this: 

{
    "_embedded": 
    {
        "adressen": [
            {
                "adresseerbaarObjectGeometrie": {
                    "punt": {
                        "coordinates": [
                            "0.00",
                            "0.01",
                            "0.02"
                        ]
                    }
                }
            }
        ]
    }
}

Second, when added to the web service, I've added 3 different body parameters inside of adressen. Be sure to make sure that the "is array" is not checked so you're treating each of these as text: 

  • adresseerbaarObjectGeometrie.punt.coordinates[0]
  • adresseerbaarObjectGeometrie.punt.coordinates[1]
  • adresseerbaarObjectGeometrie.punt.coordinates[2]

So at this point, it's as if there are three separate properties, instead of it being an array. You can now map each of these values as separate properties to the subprocess. 

Ryan

You are amazing! Thanks! I did not think of using the response parameters to fill it in.

Show all comments

I am restoring a package that I have saved from and into a Creatio trial, the following error seems to be stopping the restore:

2023-02-20 21:59:01,063 Error occurred while installing data "SysModuleInWorkplace_SectionInWorkplaceManager_bb810449aaee4db7bc12146d8b56d702" in package "Certification". UId 3a8e404f-99ee-453b-97e9-1485c6cb3bbe: 23503: insert or update on table "SysModuleInWorkplace" violates foreign key constraint "FKiEw0PrrAuIapzcrL01PohOXeFM"
UPDATE "public"."SysModuleInWorkplace"

At this point all I have done is create two sections and a workplace.  I have disabled the Freedom UI interface.

 

I have been saving the project incrementally and it is the same error twelve saved packages further on.

Like 0

Like

1 comments

Dear Gareth,

 

Thanks for your question.



To find the root cause of the issue, could you please contact us at support@creatio.com

 

Thanks in advance!

 

Best regards,

Anastasiia

Show all comments

Hi community

on my local dev environment I've configured the exchange listeners, but when I run the diagnostic tools I receive the two following errors 

  1. SERVICE AVAILABILTY VERIFICATION: Creatio make a rest call to the uri "http://dexchlist:10000/api/listeners/exists" that returns the text exists, but creatio expect a json response
  2. CREATIO AVAILABILITY VERIFICATION: Creatio try to call the uri http://dexchlist:10000/api/availability/app" with data https://democreatio.xxx.com/aic806/0/ServiceModel/ExchangeListenerServi… and the end point return null

Can you help me ?

Like 1

Like

7 comments

hi Stefano Bassoli,



Have you configured the system setting path for the exchange listener URI?



BR,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

Yes, I did

Stefano Bassoli,

an update, I updated the EmailListener to version 1.0.10 (bpmonline/emaillistener Tags | Docker Hub.)  and the second error is solved.

 

The first issue is related to a bug on the  method ExchangeListenerStatusResponse it uses the value ExchangeListenerActions.Exists, but the correct  value is ExchangeListenerActions.Status for the EmailListener 1.0.10

private ExchangeListenerStatusResponse GetExchangeListenerStatusRequestResult() {

            string serviceUri = ExchangeListenerActions.GetActionUrl(UserConnection, ExchangeListenerActions.Exists);

            WebRequest request = _requestFactory.Create(serviceUri);

            request.ContentType = "application/json; charset=utf-8";

            request.Timeout = 5 * 60 * 1000;

            WebResponse webResponse = request.GetResponse();

            using (Stream dataStream = webResponse.GetResponseStream()) {

                StreamReader reader = new StreamReader(dataStream);

                return Json.Deserialize<ExchangeListenerStatusResponse>(reader.ReadToEnd());

            }

        }

 

 

Stefano,

 

it seems like the service is not available for your site.

As for now, it is quite difficult to find the root cause as there might be a lot of different reasons for this.

We recommend checking the availability of the service from the server where you are using Creatio and backwards as well. You are frre to use some simple commend such as ping or curl.

 

Here are some examples:

 

http://microservice_address/api/listeners/status - just put it in the browser as link;

 

ping [listener_address]

telnet [listener_address] [port] (Windows)

 

Then, you should enter the container where Listener is set and run the following commands:



curl smtps://smtp.site.com:465 -v --user "login:pass" --login-options AUTH=PLAIN

 

Also, you can try running these commands:



curl --insecure --trace-ascii --ntlm -u [mailbox login] [mailserver_address]/ews/exchange.asmx -v



"curl [mailserver_name]"- here you can put either the mail server or the application server.



Additionally, you need to check the application server availability from the listener side:



curl http://creatio_site/0/ServiceModel/ExchangeListenerService.svc/ProcessFullEmail

curl creatio_site/ServiceModel/ExchangeListenerService.svc/

 

Regards,

Gleb.

Gleb,

the listener works perfectly.

The ExchangeListenerStatusResponse.GetExchangeListenerStatusRequestResult() function calls the end-point http://microservice_address/api/listeners/exists, not http://microservice_address/api/listeners/status.

 

Stefano Bassoli,



Thanks for sharing the details!

Hi team, with the newest version of the exhange listener 1.0.11 the calendar is not synching, email synchronization works perfectly, calendar does not synch correctly and produces the following error log:

 

2023-02-27 12:08:42,439 [144] ERROR NT AUTHORITY\SYSTEM LogError - [mmp9T6J1TEi6FTi60xYm5Q.import] [ExchangeCalendarClient] Invoke service action is failed for [Calendar settings =&gt; "a2b11d40-2201-4304-a3d8-9be0994d6678" "owa.errevi.com" "Login"].
Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. Connessione sottostante chiusa: Una connessione che doveva restare attiva è stata chiusa dal server in modo imprevisto.. ---&gt; System.Net.WebException: Connessione sottostante chiusa: Una connessione che doveva restare attiva è stata chiusa dal server in modo imprevisto..
   in System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   in System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   in Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.&lt;Microsoft-Exchange-WebServices-Data-IEwsHttpWebRequest-GetResponse&gt;d__4.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   in Microsoft.Exchange.WebServices.Data.ServiceRequestBase.&lt;GetEwsHttpWebResponse&gt;d__45.MoveNext()
   --- Fine della traccia dello stack dell'eccezione interna ---
   in Microsoft.Exchange.WebServices.Data.ServiceRequestBase.&lt;GetEwsHttpWebResponse&gt;d__45.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   in Microsoft.Exchange.WebServices.Data.ServiceRequestBase.&lt;ValidateAndEmitRequest&gt;d__43.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   in Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.&lt;InternalExecuteAsync&gt;d__1.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   in Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.&lt;ExecuteAsync&gt;d__6.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   in Microsoft.Exchange.WebServices.Data.ExchangeService.&lt;BindToFolder&gt;d__27.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
   in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   in System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   in Microsoft.Exchange.WebServices.Data.ExchangeService.&lt;BindToFolder&gt;d__28`1.MoveNext()

 

Show all comments

Hi Team,

We want to show the owner of the record along with an additional field in the approval notification in the CTI panel

Question :How to add additional field in the approval notification panel other than the name of the record

 

 

Thanks in advance!

Regards,

Mayan

Like 0

Like

3 comments

Hello Amritha,

 

There are no basic tools to achieve your business task. It could be achieved only by development.



We've registered it in our R&D team backlog for consideration and implementation in future application releases.



Thank you for helping us to improve our product. 

Bogdan,

If it can be achieved by development then can you please share the snippet which can be used to achieve it

Hello Amritha,

 

Unfortunately we don't have a ready to use code for this task. The logic of the notification in the CTI panel is stored in the VisaNotificationsSchema module. If you need to add additional columns in this notification schema you need to insert them into the diff array of the schema. You can also study how data is received to fields like NotificationSubjectCaption or NotificationDate columns.

Show all comments

Hi Community,

 

In Studio Enterprise, is there any ready made template for "Activities" module, just like for "Account and Contacts" there is "Customer 360"?

 

 

 

Like 0

Like

4 comments

Hello,

 

Please refer to this Academy article to know more about all the current possibilities of switching between Freedom UI and old designer.

Hi,



Thank you for your response, but I am not asking about freedom UI. In Studio Enterprise, there is "CUSTOMER 360" template which will give you ready made modules for "Account" and "Contact". How about for "Activities" module, is there any ready made template?

I believe rest of core will be updated in 8.1. Customer 360 is a 1st app to demonstrate future capabilities of the rest of the core update to freedom ui. Not sure if this will translate in templates.

Hello,

 

Please note that the Activities and other similar modules will become available in future releases, but there is no such template yet.

Show all comments

Hello community,



our customer needs to send out trigger emails from a campaign to contacts who have the "Do not use email" flag set at that moment.

The emails are confirmations for the contact persons that they have registered for an event, so that is completely fine from a legal and GDPR perspective (=legitimate interest).



However, it is currently not possible, because trigger emails miss the functionality that is available in bulk emails with the "system email" flag, which causes Creatio to skip the evaluation of the "do not use email" flag before sending the email.

 

Does anyone know of a way to work around this? Programming would also be fine.

 

Thanks in advance and br,

Robert

Like 0

Like

2 comments

Hi Robert,

 

As for now, sending trigger emails to the users with the "Do not use email" checkbox is currently not possible via basic tools. 



We've registered it in our R&D team backlog for consideration and implementation in future application releases.

 

Thank you for helping us to improve our product. 

Hello Bogdan,

 

thanks, I already know that, because that's the same answer I got from the support...and that'S also the reason I'm trying my luck with the community!

 

BR,

Robert

Show all comments

Hi all,

 

There is a requirement in which I have to make printable visible on the basis of selected lookup. 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 edit page and only showing printable which is matching with the condition, but the same is not reflecting on the section and showing the complete list of printable.

Method which I have added on section and edit page is : 

methods: {

initQueryColumns: function(esq) {

    this.callParent(arguments);

 

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

        esq.addColumn("UsrDocumentRepositorySubtype");

    }

},

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 type = this.get("GridData").get(this.get("ActiveRow")).get("UsrDocumentRepositorySubtype") || { displayName: "" },

        printMenuItems = this.get(this.moduleCardPrintFormsCollectionName),

        item = printMenuItems.find(reportId);

 

    if (Ext.isEmpty(item)) return;

 

    switch (item.get("Caption")) {

         case "Mining and Quarrying Questionnaire":

            return type.displayValue === "Mining and Quarrying Questionnaire";

case "Alcohol Questionnaire":

            return type.displayValue === "Alcohol Questionnaire";

        default:

            return true;

    }

}

}

 

Output (Edit Page)

 

Output (Section)

 

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

 

Like 0

Like

5 comments

Hello,

 

In the section you need to use the approach like below:

			rowSelected: function(primaryColumnValue) {
				this.callParent(arguments);
				var row = this.getGridData().get(primaryColumnValue);
				var reportCollection = this.get(this.moduleSectionPrintFormsCollectionName);
				var usrDocumentRepositorySubType = row.get("UsrDocumentRepositorySubtype");
				var isUsrDocumentRepositorySubTypeEmpty = Ext.isEmpty(usrDocumentRepositorySubType);
				Terrasoft.each(reportCollection, function(report) {
					if (!isUsrDocumentRepositorySubTypeEmpty &amp;&amp; usrDocumentRepositorySubType.displayValue == "Mining and Quarrying Questionnaire" &amp;&amp; report.get("Caption") == "Mining and Quarrying Questionnaire") {
						report.set("Visible", true);
					}
					else {
						report.set("Visible", false);
					}
				}, this);
			}

This is an example for only "Mining and Quarrying Questionnaire", additional check should be also applied for the "Alcohol Questionnaire". Using this approach after refreshing the page correct reports started to show on the section list.

Hi Oleg,

 

Thank you for the response. Now it is working fine for the section and while creating record.

But, when I open any saved record, it is showing complete list of printable.

 

Method which I have added on Edit Page Schema is :

 

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) {

    var type = this.get("UsrDocumentRepositorySubtype") || { displayValue: "" },

        printMenuItems = this.get(this.moduleCardPrintFormsCollectionName),

        item = printMenuItems.find(reportId);

               

    if (Ext.isEmpty(item)) return;

                 

    switch (item.get("Caption")) {

        case "Mining and Quarrying Questionnaire":

            return type.displayValue === "Mining and Quarrying Questionnaire";

       case "Gliding Questionnaire":

            return type.displayValue === "Gliding Questionnaire";

        

        default:

            return true;

    }

 

Please help.

Prashant Jha,

Hi Prashant

 

Did you ever resolve this issue as I have the same problem

 

regards

Rob Watson,

Hi Rob, 

Did you find any solution to resolve this. Even I face the same issue

Thanks in advance

Hello all,

 

The example from my previous post should be modified to make it work when opening the page from the section. This time I performed the test using ContractSectionV2 with 2 reports: Contract approval and Contract draft:

The logic will be: if status of a contract is "Approval" - show only "Contract approval" report, if status is "Draft" - show only "Contract draft" report, otherwise show nothing (but for the record that is being created - show everything).

 

This can be achieved using this method added to the ContractSectionV2 schema:

rowSelected: function(primaryColumnValue) {
				this.callParent(arguments);
				var row = this.getGridData().get(primaryColumnValue);
				var getSelectedRowState = row.get("State");
				var selectedRowState = getSelectedRowState.displayValue;
				var selectedRowStateForCheck = selectedRowState?.toLowerCase();
				var reportCollection = this.get(this.moduleSectionPrintFormsCollectionName);
				var cardReportCollection = this.get(this.moduleCardPrintFormsCollectionName);
				var isStateEmpty = Ext.isEmpty(getSelectedRowState);
				Terrasoft.each(reportCollection, function(report) {
					if (!isStateEmpty &amp;&amp; selectedRowStateForCheck &amp;&amp; report.get("Caption").includes(selectedRowStateForCheck)) {
						report.set("Visible", true);
					}
					else {
						report.set("Visible", false);
					}
				}, this);
				Terrasoft.each(cardReportCollection, function(report) {
					if (!isStateEmpty &amp;&amp; selectedRowStateForCheck &amp;&amp; report.get("Caption").includes(selectedRowStateForCheck)) {
						report.set("Visible", true);
					}
					else {
						report.set("Visible", false);
					}
				}, this);
			}

The "State" column should be displayed in the section list and this is the code for the "Status" column of the contract. As a result:

 

1) Filtration in the section:

2) Filtration on the page opened from the section (for filtration on the page when refreshing the opened Contract page you need to do everything that is specified by Ryan here (part about ContactPageV2) (it happens because of the combined mode)):

3) For records in other statuses nothing will be shown in the list of the "Print" button (both in the section and on the page).

 

All you need to do is study this code and change the column to the one you will use on your page and don't forget to display this column in the section list.

Show all comments

Hi community, 



In version 8.06 the no code tools make it easy to add attributes to the SysUserProfile object. For example, we are adding new preference fields. 



I want to run business processes based on this object. However, it does not appear in the dropdown for "read data from" when using "Read Data" function.



Does anyone know if it is possible to register the object in this dropdown? 



Thanks

Harry

Like 0

Like

1 comments

Hello,



The SysUserProfile table is a system table that cannot be used in business processes.

Show all comments