Hi,

 

We use Creatio cases for our customer support service desk function. I am looking at having a report which will allow us to view the metrics around SLA breaches. This is a common requirement, where we can identify the cases in a given period that exceeded the SLA parameters for response time and resolution time.

 

This should contain the following detail:

  • Case
  • Account
  • Case Created Date/Time
  • Case Closed Date/Time
  • Case Response Time exceeded time
    • This should be in Hours/Mins
  • Case Resolution Time exceeded time
    • This should be in Days/Hours/Mins

The report will only show cases that have breached the SLA within the dynamically selected time period e.g. Last Month or This Week etc.

 

I am hoping that someone has already created such a report, but I have not been able to identify how to put this together within Creatio Dashboard. Note, I have just installed the PowerBI capability and have started to play with this, as an alternative reporting method.

Thanks in advance for any help

 

Mark

Like 1

Like

3 comments

+1 also needing this type of report

 

Hi!

 

You can create a list in a dashboard that would look like this:

You can add a filter for the records in the display options tab:

And to add the calculated columns for time exceeded you can go to the Pivot table settings tab and press "Add calculated field":

 

And set up a formula that would look something like this(fields used need to be present as columns in the dashboard list): 

 

Hope it helps!

 

Best regards,

Max.

Thanks so much for the reply, I had created the first bit, but was not away of the calculated field option, which allowed me to display the exceeded time. It would be nice to be able to format the time in to Days/Hours rather than just hours, but still useful.

 

thanks again

Show all comments

Hello ,

 

I am willing to configure queues and was wondering what is the best practice? Do I configure them on the dev environment and bind them to my working package or shall I create them in prd environment directly?

 

thanks,

Like 0

Like

3 comments

Hello Mariam,

 

Please find the all necessary information on how to work with the Queues section here



Best regards,

Bogdan

Hello Bogdan,

 

Thank you for your response ;

I am able to create and configure queues, my question is regarding transporting queues between instances.

 

Regards,

mariam moufaddal,

 

You can transfer configurations by package. 



We recommend transferring packages between environments deployed on the same version of Creatio in order to avoid unexpected issues after or during the process. 



Best regards,

Bogdan

Show all comments

Hi Community,

 

We are trying to integrate the Zadarma Widget with Creatio. Our main objective is to load this widget every time we press the "Phone" button (marked with red square in the following image).

In order to achieve this, we need to call the necessary dependencies, so it's possible to execute the "zadarmaWidgetFn" function, as you can see on the next image.

require.config({
	paths: {
		loader_phone_lib: '//my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-lib.js?sub_v=62',
		loader_phone_fn: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-fn.js?sub_v=62"
	},
});
 
define("CtiPanel", ["ServiceHelper", "loader_phone_lib", "loader_phone_fn"], function(ServiceHelper) {
	return {
		messages: {},
		mixins: {},
		attributes: {},
		methods: {
			callPhoneNumber: function (){
				var number = this.get("PhoneNumber");
				window.console.log(number);
 
				var sipValue = "SIP";
 
				var payload = {
					sip: sipValue
				};
 
				ServiceHelper.callService("ImdZadarmaWebHookService", "ZadarmaWebRTCKey", function(response) {
					var result = JSON.parse(response.ZadarmaWebRTCKeyResult);
					window.console.log(result.key);
					zadarmaWidgetFn(result.key, 'SIP', 'square', 'en', true, "{left:'10px',top:'5px'}");
				}, payload, this);
			}
		},
		diff: []
	};
});

However, we are getting the following error while loading these dependencies, because one of the files "loader_phone_lib" (https://my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-lib.js?s…) has other dependencies that are called through tags.

We would like to know, how can we load these dependencies, that are inside the "loader_phone_lib" file, without getting this error?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Like 3

Like

4 comments

Hi Pedro,

 

According to https://requirejs.org/docs/errors.html#mismatch there should be the anonymous define() method inside the script HTML tag in one of the dependencies that are loaded. So to fix the error you need to check all the steps described in the requirejs.org document.

 

Best regards,

Oscar

Hi Oscar,

 

Thank you for the response.

 

Yes, some of the scripts have the anonymous define() method inside, so by following the documentation you provided, I removed the dependencies from the "loader_phone_lib" script and added them using the code bellow:

....
require.config({
	paths: {
		zadarmaSocket: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/socket.io",
		zadarmaDetectWebRTC: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/detectWebRTC.min",
		zadarmaJssip: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/jssip.min",
		zadarmaMd5: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/md5.min",
		zadarmaWidgetAPI: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/widget-api.min.js?sub_v=62",
		zadarmaWidget: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/widget.min.js?sub_v=62",
		loader_phone_fn: "//my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-fn.js?sub_v=62"
	}
});
 
define("CtiPanel", ["ServiceHelper", "zadarmaSocket", "zadarmaDetectWebRTC", "zadarmaJssip", "zadarmaMd5", "zadarmaWidgetAPI", "zadarmaWidget", "loader_phone_fn"], function(ServiceHelper) {
	return {
		messages: {},
		mixins: {},
		attributes: {},
		methods: {
			callPhoneNumber: function (){
				var number = this.get("PhoneNumber");
				window.console.log(number);
 
				var sipValue = "SIP";
 
				var payload = {
					sip: sipValue
				};
 
				ServiceHelper.callService("ImdZadarmaWebHookService", "ZadarmaWebRTCKey", function(response) {
					var result = JSON.parse(response.ZadarmaWebRTCKeyResult);
					window.console.log(result.key);
					zadarmaWidgetFn(result.key, 'SIP', 'square', 'en', true, "{left:'10px',top:'5px'}");
				}, payload, this);
			}
		},
		diff: []
	};
});

This piece of code manage to "fix" the previous error. However, I'm getting a new error, which is related to the Socket.Io (zadarmaSocket), as you can see on the next image:

I think this error is caused by the fact that one of the dependencies cannot reach specific functions/vars from other dependencies. I've tried to use the "shim" attribute, in order to create a sequence for loading the dependencies and it didn't work.

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

 

Pedro Pinheiro,

 

Hello,

 

The new code returns another error message on my side, but it happens since there is no ImdZadarmaWebHookService service and ZadarmaWebRTCKey method in my app. Can you please also share the code of this part?

 

Thank you!

 

Best regards,

Oscar

Hello Oscar Dylan,

 

The ZadarmaWebRTCKey method is responsible for requesting the WebRTC key from a specific "Client Key", "Client Secret" and SIP Number. I use this key to start the communication between the widget and Zadarma.

 

ImdZadarmaWebHookService.cs

 /* The custom namespace. */
namespace Terrasoft.Configuration.ImdZadarmaWebHookServiceNamespace
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.ServiceModel.Activation;
    using Terrasoft.Core;
    using Terrasoft.Web.Common;
    using Terrasoft.Core.Entities; 
	using System.Web;
	using System.Collections.Generic;
	using Terrasoft.Configuration.ImdZadarmaAPI;
	using System.Net.Http;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class ImdZadarmaWebHookService: BaseService
    {
        [OperationContract]
       	[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
		public string ZadarmaWebRTCKey(string sip){
 
            //ZadarmaApi is a class that contains all the methods to work with Zadarma API
			var zadarma = new ZadarmaApi("KEY", "SECRET");
 
 
			SortedDictionary<string, string> parameters = new SortedDictionary<string, string>();			
			parameters.Add("sip", sip);
 
            var response = zadarma.Call("/v1/webrtc/get_key/", parameters, HttpMethod.Get);
            string str = (string) response.Content.ReadAsStringAsync().Result;
            return str;
		}
    }   
}

The code for ZadarmaApi class can be found here:

https://github.com/zadarma/user-api-cs-v1/blob/master/ZadarmaAPI/ZadarmaApi.cs

 

Best Regards,

Pedro Pinheiro

Show all comments

Hello,

 

For some technical issues, I had to reinstall database. so I exported the package "Custom" to be able to import it via application install. while trying to import it, it fails to restore configuration from backup.

How can I retrieve configuration done on this custom package? is there any best practice to export packages?

 

Thanks,

Like 0

Like

4 comments

Hello Mariam,

 

You can export the package from the Configuration section:

 

But we recommend installing the package in the Installed application section. So you will be able to download the application log to check the errors.

 

Best regards,

Bogdan

Hello Bogdan,

 

Thank you for the reply. in fact this is what I have done and then I tried to import the package from the installed application section. bellow is the screen of import failure. 

Bellow is a snippet of the errors in log file.

Error occured while performing operation on "Custom" item, UId = a00051f4-cde3-4f3f-b08e-c5ad1a5c735a.

2022-04-15 10:15:43,737 System.AggregateException: One or more errors occurred. (Error occured while saving resources for schema 'UsrServiceCatalogc9afd9b9Section' in 'Custom' package for 'pt-PT' culture) (Error occured while saving resources for schema 'UsrServiceCatalogc9afd9b9Section' in 'Custom' package for 'ro-RO' culture) (Error occured while saving resources for schema 'CaseInFolder' in 'Custom' package for 'pt-BR' culture) (Error occured while saving resources for schema 'UsrSchema6cea64dfPage' in 'Custom' package for 'it-IT' culture) (Error occured while saving resources for schema 'UsrSchema6cea64dfPage' in 'Custom' package for 'vi-VN' culture) (Error occured while saving resources for schema 'CaseInFolder' in 'Custom' package for 'he-IL' culture) (Error occured while saving resources for schema 'UsrSchema6cea64dfPage' in 'Custom' package for 'ar-SA' culture) (Error occured while saving resources for schema 'UsrSchema6cea64dfPage' in 'Custom' package for 'fr-FR' culture) (Error occured while saving resources for schema 'UsrCaseVisa' in 'Custom' package for 'en-US' culture) (Error occured while saving resources for schema 'UsrSchema6cea64dfPage' in 'Custom' package for 'cs-CZ' culture) (Error occured while saving resources for schema 'UsrRentalVehicle' in 'Custom' package for 'nl-NL' culture)

Thanks,

mariam moufaddal,

Did you ever find a solution?

The package "Custom" cannot be exported between environments. A solution would be to add a new package and add the same dependencies as in the package "Custom" and move files from Custom to the new created package. then you can export that package between environments.

Show all comments

Hello community,

 

I need to filter a detail grid in order to show only a specific type of object.

To be more precise: the detail CI Users displays Contacts and Accounts...

Has anybody done anything similar and could you provide me with a code sample?

 

Thank you in advance, have a nice day

Like 0

Like

3 comments
Best reply

If you'd like to filter out the record, rather than just hide them, you can filter the detail using a filter method. I have outlined how to do that here: https://customerfx.com/article/filtering-a-detail-list-in-creatio-forme…

Ryan

Solved like this: 

methods: {
			prepareResponseCollectionItem: function(item) {
				var account = item.$Account && item.$Account.value; 
				debugger;
				if(account){
					item.customStyle = {
						"display":"none"
					}
				}
			}
		},

 

If you'd like to filter out the record, rather than just hide them, you can filter the detail using a filter method. I have outlined how to do that here: https://customerfx.com/article/filtering-a-detail-list-in-creatio-forme…

Ryan

Thank you Ryan!

Show all comments

Hello,

 

I am willing to add the attachments detail (available in Case page) to the Case Portal Page. I have created a replacing object on the BaseCase object and tried to add the following code to my client module: 

details: /**SCHEMA_DETAILS*/{
			"Files": {
				"schemaName": "FileDetailV2",
				"entitySchemaName": "CaseFile",
				"filter": {
					"detailColumn": "Case",
					"masterColumn": "Id"
				}
			}
		}/**SCHEMA_DETAILS*/,

and then added the following code on the diff:

diff: /**SCHEMA_DIFF*/[
{
				"operation": "insert",
				"name": "NotesFilesTab",
				"values": {
					"items": [],
					"caption": {
						"bindTo": "Resources.Strings.NotesFilesTabCaption"
					},
					"order": 2
				},
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 3
			},
			{
				"operation": "insert",
				"name": "Files",
				"values": {
					"itemType": 2
				},
				"parentName": "NotesFilesTab",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "NotesControlGroup",
				"values": {
					"itemType": 15,
					"items": [],
					"caption": {
						"bindTo": "Resources.Strings.NotesGroupCaption"
					}
				},
				"parentName": "NotesFilesTab",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "Notes",
				"values": {
					"contentType": 4,
					"layout": {
						"column": 0,
						"row": 1,
						"colSpan": 24
					},
					"labelConfig": {
						"visible": false
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "insertImagesToNotes"
						},
						"images": {
							"bindTo": "NotesImagesCollection"
						}
					}
				},
				"parentName": "NotesControlGroup",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "remove",
				"name": "Header"
			}
		]/**SCHEMA_DIFF*/,

but nothing is visible on the portal Case page.

 

Can you please help ?

 

Thank you

Like 0

Like

1 comments
Best reply

Hello,

 

You should add the same code to the replaced PortalCasePage module (not to the BaseCase object) and also don't forget to add localizable strings to the module.

 

Best regards,

Oscar

Hello,

 

You should add the same code to the replaced PortalCasePage module (not to the BaseCase object) and also don't forget to add localizable strings to the module.

 

Best regards,

Oscar

Show all comments

Hi,

How can I break the connection between "Contacts" and "Accounts"?

I added the contact and account field in the "Case" section as shown below.

 

What I want is, if possible, to break the connection between these two objects. It is possible?

 

Thank you!

 

Kind regards,

Andreia

 

Thank you!

Like 0

Like

1 comments

Hello Andreia,

 

This might be connected through a business rule of your page. (in this example the case section wizard)

 

You can disable it there. 

 

 

Kind regards,

Yosef

Show all comments

Hi,

 

How can I break the connection between Contacts and Accounts? For example, I create a new contact "andreia" then choose an account that "andreia" does not belong to the contact, the contact disappears but I don't want that. I want to cut this connection, it is possible?

 

Thank you!

 

 

 

 

File attachments
Like 0

Like

6 comments

Hello Andreia,

 

Thank you for your question!

 

Could you please elaborate more on yout business task? If a contact does not belong to the account, it's normal behaviour that they are not compatible together.

 

Best regards,

Anastasiia

Hi Anatasiia,

 

What I need to do, if possible, is the following:

1. I have these two fields, ("Account" and "Contact") in the Case section

 

 

2. First fill in the "Account", then my question is, if it is possible to create a new contact, here on this page, that is not yet associated with this account, but when creating, associate the contact with this account.

 

My question is whether this is possible.

I hope you can understand!

 

Thank you.

 

Best regards,

Andreia

 

Hello Andreia,

 

Thank you for your clarification!

If I understood your question correctly - unfortunately, you are not yet able to create new contacts through the case section without summoning any other additional fields.

 

Although, you are able to create a new contact by filling out the mini page that appears after you click on "new contact" button:

After which the mini page will appear where you can add the needed account:

 

I will create a request for our R&D team so they will develop the desired functionality in future releases. 

Hope it helps! 

 

Thank you, 

Artem. 

Thank you for the help Artem,

 

Best regards,

Andreia

Hi Artem,

 

But in relation to my first question "How can I break the connection between Contacts and Accounts?" how can I do that? 

 

Thank you.

 

Kind regards,

Andreia

 

 

I would like to do this as well. We have Different Account types that we use for Vendors on Projects.   If I add an account lookup and filter by the type, the Contact gets removed when I hit Save. I need to be able to add accounts where the contact is not associated with it.  Is this possible?

Show all comments

Hi

I want to send a notification to a case owner and an escalation manager when a case has not been updated in 48 hours.

For this I found in the admin guide a reference to performing a pipeline condition (https://academy.creatio.com/docs/7-18/user/bpm_tools/business_process_setup/formulas/process_formulas) and used this to create the following condition:

 

(decimal)RoundOff(([#System variable.Current Time and Date#]-[#Read modified time.First item of resulting collection.Modified on#]).TotalHours) > 48

However, when trying to save I get the following error - Formula value error: Invalid Operator. I cannot see why this is the case, as it follows the guide exactly with just the variable values updated.

 

thanks in advance

 

Mark

 

Like 0

Like

0 comments
Show all comments

Hi Community,

 

We've this requirement where we need to change the "PlayBook" component visibility based on the "ServiceItem" lookup value.

 

 

This visibility rule must be defined following the same principle used for the "Estado (Status)", which is located on the "Playbook" detail inside "KnowledgeBasePageV2".

 

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

 

 

 

Like 0

Like

6 comments
Best reply

Hi Pedro,

 

You need to override the logic of the _updatePlaybookData method in the CaseSectionActionsDashboard and also set the value for the IsShowPlaybookButton attribute to false. To get data from the master case entity you can use the this.getMasterEntityParameterValue() method.

 

Best regards,

Oscar

Hi Pedro,

 

You need to override the logic of the _updatePlaybookData method in the CaseSectionActionsDashboard and also set the value for the IsShowPlaybookButton attribute to false. To get data from the master case entity you can use the this.getMasterEntityParameterValue() method.

 

Best regards,

Oscar

Hi Oscar,

 

Thank you for the response.

 

I've managed to solve my problem by overriding the method __getPlaybookEsq which is called by the _updatePlaybookData. I simply added the following code to the CaseSectionActionsDashboard:

 

/**
 * @private
 */
_getPlaybookEsq: function() {
	var serviceItem = this.getMasterEntityParameterValue("ServiceItem");
 
	const esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "VwSysDcmLib"
	});
	const caseUid = this.$DcmSchema.uId;
	const currentCultureId = Terrasoft.SysValue.CURRENT_USER_CULTURE.value;
	esq.addColumn("=[Playbook:Case:Id].KnowledgeBase", "KnowledgeBase");
	esq.filters.addItem(this.Terrasoft.createExistsFilter("=[Playbook:Case:Id].KnowledgeBase"));
	esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UId", caseUid));
	esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "=[Playbook:Case:Id].StageId", this.$ActiveActionId));
	esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "=[Playbook:Case:Id].[SysCulture:Language:Culture].Id", currentCultureId));
	esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "=[Playbook:Case:Id].UsrServiceItem", serviceItem.value));
 
	return esq;
}

 

One more thing. Is there a method that I can override or call, in order to reload the DCM automatically after changing my ServiceItem?

 

Thank you.

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

 

There is a reload method in the SectionActionsDashboard module, try calling it.

 

Best regards,

Oscar

Oscar Dylan,

 

I tried to call the reload method on my CasePage but its returning undefined. How/Where should I call this method?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

 

You need to reload the SectionActionsDashboard not the CasePage since you need to reload the DCM (according to your question, correct me if I am wrong). And the reload method is the method of the CaseSectionActionsDashboard.

 

Best regards,

Oscar

Oscar Dylan,

 

Correct, I need to refresh the DCM of the CasePage. However, the reload should happen after I change the value of the field ServiceItem, which is located on my CasePage.

 

Best Regards,

Pedro Pinheiro

Show all comments