Hi,

I have requirement in which I need to receive input from the user in a pop up in between a business process

Please suggested the configurations for the same.

Like 0

Like

6 comments

Hello Janhavi,

 

Please check if the [Auto-generated page] process element can help you to achieve your business task.

 

Best regards,

Bogdan.

Bogdan Spasibov,

Hi,

The Auto-generated page can not be the solution as it is not in the form of pop up(input box) and it consumes the entire screen space.

Vladimir Sokolov,

Hi,

The mentioned marketplace only helps in displaying the data to the user but does not allow the user to input any data.

I need user to input data.

Janhavi Tanna,

 

Hi,

 

There is no inbuild element that allows the process to show a popup, but you can create a logic that can open a popup for the user and then the input data can be used elsewhere.

 

The set of actions is simple:

 

1) Using the logic described by me in this community thread you can create a process that will send a WebSocket message to the user that triggered the process and pass all the parameters needed to the message.

2) When the message is received to the edit page you can create a handler that will open the popup with fields that can store values. There are community posts about creating a popup on the UI as well as Academy articles, for example here and here.

3) When the information is input and the OK button is pressed you can pass this information either to the UI fields, or create requests with UpdateQuery\InsertQuery classes (examples of the client-side logic using InsertQuery class and UpdateQuery class) to input information elsewhere. Or trigger another business process as described here.

 

So you need to study all of these and then create the logic on your side.

 

Best regards,

Oscar

Oscar Dylan,

Will try, Thanks

Show all comments

Hi,

There is a placeholder for printing the total of all product amount in the order section as shown in image below,

I have the similar requirement to be built in my project please suggest the configurations for the same

Like 0

Like

6 comments

Hi,

 

You need to debug the logic of this placeholder and implement a similar logic for the detail that you need. The methods you are interested is updateSummary from the OrderProductDetailV2 schema and diff objects are all that contain summaryCount and summaryAmount in their names.

 

Best regards,

Oscar

Oscar Dylan,

Hi,

I tried with the same suggested but the detail is not loading and the console shows the following error.

Janhavi Tanna,

 

Hi,

 

Cannot read property count of null means that some element that should return the count or count something tried to count something out of null. You need to debug the code and check which object returns null.

 

Best regards,

Oscar

Oscar Dylan,

Hi,

I found that there is no Id being passed in the "updatesummary" function for my configuration.

Please suggest any configuration passing a Id to this function.

Janhavi Tanna,

 

And why do you need an Id here and which Id do you need?

Oscar Dylan,

Hi,

I was trying to find the id of the object which returns null value but was unable to find any.

Show all comments

Hi Community,

 

We are encountering this scenario in Creatio. If case is set to "Resolved" automatically it is moving to "Closed". Do you have any idea what are the system business process or system settings behind it. We wanted to disbale this functionality.

Like 0

Like

1 comments

Hello Fulgen,

 

Starting from 7.17.3 version of the main Application, you can disable this functionality with a help of "Automatically close resolved case" system setting:

 

Automatically close resolved cases (CloseResolvedCases) system setting— if enabled, Creatio will close resolved cases automatically after the evaluation waiting period specified in the “Number of waiting days to reevaluate resolved case” and “Number of waiting days after the second reminder of resolved case” system settings ends.

Type: boolean. Default value: “True.

 

Please find more detailed information about the mentioned system settings in the below article:

https://academy.creatio.com/docs/7-17/user/setup_and_administration/sys…

 

Best regards,

Anastasiia

Show all comments

Hi

I am trying to delete a custom section added on to the customer portal. I have deleted its object from the "List of objects available for portal users" lookup. But the "Portal custom section name" is still there when I add it using the workplace setup (see below image for reference).

Moreover, there is no edit page for that portal section in the section wizard (see below image for reference).

Can anyone help me solve this issue?

Thanks

 

Like 0

Like

1 comments

Hello Nisarg,



Please contact support@creatio.com for further investigation. 



Thanks in advance!



Best regards,

Bogdan

Show all comments

Hi,

I have an "Anúncios" lookup. I want to create a new record from the lookup, but in the "Anúncios" lookup, the record is created but the relationship is not.

Can anyone explain to me why this happens?

 

Thanks!

Like 0

Like

2 comments

Hello Andreia,



Unfortunately, it can't be configured automatically. 

So, after creating a new record from the lookup you have to configure the relationship manually, 



As a workaround, you can create a new business process to achieve your business task,



We have already registered the idea for our R&D team to implement this functionality in further releases. I will assign your case to this project in order to increase its priority.  



Best regards,

Bogdan

Thanks, Bogdan.

Show all comments

In the previous versions of Creatio, In the User Task element there was the Script where you could implement the task logic, as shown in the image below

In which part of the User Task Source code , in the 7.18 Version of Creatio, should I implement the same logic ? 

 

Like 0

Like

3 comments

Hello Petrika,

 

Thank you for your question!

 

You can read more on this here:

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

 

Kind regards,

Anastasiia

Anastasiia Lazurenko,

Thank you Anastasia for your quick reply. But this is a different approach. I am not asking about the Script Task, but about the User Task.Because i want to use my logic in different bussiness processes.

Dear Petrika,

 

This logic is still the same. Please refer to the screenshots below:

 

 

Kind regards,

Anastasiia

Show all comments

Hi community,

 

What's the best way to filter records in a user friendly way ?

 

I have an object with details and lookups (simplified on this diagram).

Is there a more user-friendly way to filter ObjectSection records based on the lookupDetail value?

I thought of a workaround with a new object, then a detail in that new object that is filtered by a field above, but I don't know if this is the best way to do it. Because these are objects, it's clearly not a good way to filter records. I need these filters to be persistent for the logged in user, but several users will use this search "page" at the same time.

 

The global search is not a good solution either, I need to filter the records of a specific object according to the search values that are in the details of my object.

 

Do you have any idea how I can make this "search page"?

 

Best regards,

 

Julien

Like 0

Like

2 comments

Hello Julien,

I have implemented something like what you're referring to. I have a section where a client manages "areas" and zip codes are assigned to each area (in a detail in this section). This client didn't want to have to create a filter to locate the area for a zip each time they needed - they always locate an area by a zip code in the area. I implemented the ability to search for an area based on a zip code in the detail for the area. It turned out like this: 

Basically, I did the following in the section schema: 

1) Add a text attribute for the value being searched, you'll also want to add an onChange for the attribute so it triggers a change event method. Mine looks like this (note, all the updateSection function does is refresh the section - this is a function in the base section):

attributes: {
	"ZipSearchValue": {
		dataValueType: Terrasoft.DataValueType.TEXT,
		value: "",
		onChange: "updateSection"
	}
}

2) Add an element to the diff bound to the attribute in #1. You could add this with parentName "FiltersContainer" or "GridUtilsContainer", depending on where you want it, but you'll likely need to style it with some CSS to get it to look right. Mine looks like this: 

{
	"operation": "insert",
	"name": "ZipSearchText",
	"parentName": "FiltersContainer",
	"propertyName": "items",
	"index": 0,
	"values": {
		"layout": {
			"colSpan": 12,
			"rowSpan": 1,
			"column": 0,
			"row": 0,
			"layoutName": "FiltersContainer"
		},
		"hasClearIcon": true,
		"bindTo": "ZipSearchValue",
		"caption": "Find zip",
		"classes": {
			"wrapClassName": ["fx-zipsearch"]
		}
	}
}

3) When the user types in the textbox, it will trigger the onChange which just refreshes the section. When the section refreshes, it will call the getFilters method in the section code where you can append to the filters for the list. I have an article about that here: https://customerfx.com/article/programmatically-overriding-or-adding-fi… My filter method looks like this:

getFilters: function() {
	var filters = this.callParent(arguments);
 
	if (!Ext.isEmpty(this.get("ZipSearchValue"))) {
		var filter = Terrasoft.createFilterGroup(),
			subFilters = Terrasoft.createFilterGroup();
 
		subFilters.add("ZipValueFilter",
			Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrZipCodeValue", this.get("ZipSearchValue").trim())
		);
 
		filter.addItem(Terrasoft.createExistsFilter("[UsrZipCode:UsrDistributorArea].Id", subFilters));
		filters.add("ZipSearchFilter", filter);
	}
 
	return filters;
}

Hope this helps get you started.

Ryan

Ryan Farley,

Thank you for your contribution. It will be very useful.



In the "OperatorCustomerEngagementCenter" package there is a client module named "SearchAccountAndContactPage.js". You can find a screenshot here: https://community.creatio.com/questions/adding-button-search-contacts-a…

I will try to load a custom view like this and use your answer to create filters. I'll post how I did it once done so other people can do it too.

 

Best regards,

 

Julien

Show all comments

Hi Community

 

Has anyone used the macro handler in a bulk email ?

I'm trying to do what is described in this article Work with emails basics | Creatio Academy in a bulk email,

but it does not work.

 

Like 0

Like

1 comments

Hi Stefano,

 

This macro is not supposed to be used in bulk emails, it's only for regular emails (IMAP\SMTP, Exchange).

 

Best regards,

Oscar

Show all comments

I have set an encrypted string as a system setting as shown on the picture

 

and for some reason I am not able to use it as a value for the parameter of my user task. It is not showing as an option to be selected. Any help would be appreciated.

 

Like 1

Like

1 comments

Hello Erald,

 

By default, Business Process elements cannot process encrypted values but you can refer to this workaround that might help you with your business task.

 

Best regards,

Bogdan S.

Show all comments

Hi community,

 

I try to display (or not) an element based on information found on the contact page of the connected user. I tried with a business rule but I only can choose the user connected and not its related objects and their attributes.

 

So I tried something like that in the methods :

		methods: {
			init: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
				// console.log(this.checkIfInHR());
				},
			/** 
			* Check if connected user is in HR department
			* @param  {string} departmentId  The contact's department Id
			* @param  {string} contactTypeId The contact's type Id
			* @return {bool} 			true if user is in HR department, otherwise false
			*/
			checkIfInHR: function(departmentId = "", contactTypeId = ""){
 
				// if called without args, query connected contact
				if (departmentId == "" && contactTypeId == ""){
					var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Contact"});
 
					// query the contact's department and contact's type
					esq.addColumn("Department");
					esq.addColumn("Type");
 
					// Execute the query 
					esq.getEntity(Terrasoft.SysValue.CURRENT_USER_CONTACT.value, function(res) {
						if (res.success){
							// call checkIfHR again but with args this time
							this.checkIfHR(res.entity.values.Department.value, res.entity.values.Type.value);
						}}, this);
				} else {
					// if args are passed
					// console.log() will be removed in prod
					console.log("departmentId : ", departmentId);
					console.log("contactTypeId : ", contactTypeId);
					console.log("response : ", departmentId == "ca611978-6277-4576-8a96-22ae54fe4d79" && contactTypeId == "60733efc-f36b-1410-a883-16d83cab0980");
					// 1st Id : HR department, 2nd Id: Our company
					return departmentId == "ca611978-6277-4576-8a96-22ae54fe4d79" && contactTypeId == "60733efc-f36b-1410-a883-16d83cab0980";
				}
			}
		}

Then I tried to call this method in the DIFF part :

			{
				"operation": "insert",
				"name": "Tab0f271a37TabLabel",
				"values": {
					"caption": {
						"bindTo": "Resources.Strings.Tab0f271a37TabLabelTabCaption"
					},
					"items": [],
					"order": 11
				},
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 10,
				"enabled": this.checkIfInHR()
			},

but it always gives me this error now:

Uncaught TypeError: this.checkIfInHR is not a function

 

Do you have a better way to hide a tab based on values in the user connected' contact page or a way to fix my error ?

 

Best regards,

 

Julien G.

Like 0

Like

3 comments
Best reply

Hi Julien,

 

I cannot see the checkIfInHR method call on the init method execution, but I suppose you wanted to call it inside the "enabled" property of the Tab0f271a37TabLabel object. Ok, but the problem is that you need to use:

"enabled": {"bindTo": "checkIfInHR"},

and also the "enabled" property should be initialized inside the "values" object. So the code should've been:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
				this.checkIfInHR();
				},
 
....
 
{
				"operation": "insert",
				"name": "Tab0f271a37TabLabel",
				"values": {
					"enabled": {"bindTo": "checkIfInHR"},
					"caption": {
						"bindTo": "Resources.Strings.Tab0f271a37TabLabelTabCaption"
					},
					"items": [],
					"order": 11
				},
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 10
			},

The next problem is that this approach won't work since there is no "enabled" property for tab labels. So the general approach should be modified.

 

I would suggest using this check in the onEntityInitialized method:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
				this.reformTabsCollection();
			},
			reformTabsCollection: function(){
				this.checkIfInHR();
				var tabsCollection = this.get("TabsCollection");
				if (this.get("BooleanAttribute")==false) {
                        tabsCollection.removeByKey("TheTabYouNeedToBeNotVisible");
                    }
			}

Also you need to create some bool attribute where the result of the checkIfInHR method will be written (using this.set("BooleanAttribute", true) or this.set("BooleanAttribute", false) at the end of the checkIfInHR method execution based on the checkIfInHR method results). There is no need to store the tab on the page in case it should be non clickable.

 

Best regards,

Oscar

Change it from this:

"enabled": this.checkIfInHR()

To this (and move inside of "values"):

"enabled": { "bindTo": "checkIfInHR" }

Ryan

Hi Julien,

 

I cannot see the checkIfInHR method call on the init method execution, but I suppose you wanted to call it inside the "enabled" property of the Tab0f271a37TabLabel object. Ok, but the problem is that you need to use:

"enabled": {"bindTo": "checkIfInHR"},

and also the "enabled" property should be initialized inside the "values" object. So the code should've been:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
				this.checkIfInHR();
				},
 
....
 
{
				"operation": "insert",
				"name": "Tab0f271a37TabLabel",
				"values": {
					"enabled": {"bindTo": "checkIfInHR"},
					"caption": {
						"bindTo": "Resources.Strings.Tab0f271a37TabLabelTabCaption"
					},
					"items": [],
					"order": 11
				},
				"parentName": "Tabs",
				"propertyName": "tabs",
				"index": 10
			},

The next problem is that this approach won't work since there is no "enabled" property for tab labels. So the general approach should be modified.

 

I would suggest using this check in the onEntityInitialized method:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
				this.reformTabsCollection();
			},
			reformTabsCollection: function(){
				this.checkIfInHR();
				var tabsCollection = this.get("TabsCollection");
				if (this.get("BooleanAttribute")==false) {
                        tabsCollection.removeByKey("TheTabYouNeedToBeNotVisible");
                    }
			}

Also you need to create some bool attribute where the result of the checkIfInHR method will be written (using this.set("BooleanAttribute", true) or this.set("BooleanAttribute", false) at the end of the checkIfInHR method execution based on the checkIfInHR method results). There is no need to store the tab on the page in case it should be non clickable.

 

Best regards,

Oscar

Oscar Dylan,

 Thank you very much !

 

Best regards,

 

Julien

Show all comments