Hi Community,

 

We have two different status in a section. One on the section UI (Reservation Status) and other one is DCM status. Our requirement here is, when the DCM status changes it will also change the Reservation Status.

 

To achieve this we have added one attribute and method on the page schema.

Attribute:

attributes: {
	"UsrMarketingPlansStatus": {
		dependencies: [{
			columns: ["UsrMarketingPlansStatus"], //field to trigger change event for
			methodName: "changeHeaderUserStatusBasedOnDCM" //method to execute
		}]
	},
},

Method:

methods: {
			changeHeaderUserStatusBasedOnDCM: function(){
				var DCMStatus = this.get("UsrMarketingPlansStatus").displayValue;
				console.log("DCMStatus: ", DCMStatus);
				if (DCMStatus === "Business Owner Review 1" || DCMStatus === "Business Owner Review 2" || DCMStatus === "Business Owner Review 3"){
					this.set("UsrReservationStatus", {value: "b438b32a-9f74-47fc-9266-69b148a50c21", displayValue: "Submitted"});
				}
				else if (DCMStatus === "Cancelled"){
					this.set("UsrReservationStatus", {value: "164d071e-180d-467b-bfc8-18e3818f4698", displayValue: "Cancelled"});
				}
 
				else if (DCMStatus === "Closed"){
					this.set("UsrReservationStatus", {value: "e6296483-82c1-4ecf-a2af-049fa376438e", displayValue: "Closed"});
					this.set("UsrUserStatus", {value: "6566728f-4157-4bf1-9f8d-61f043181379", displayValue: "Completed"});
				}
 
				else if (DCMStatus === "On Hold"){
					this.set("UsrReservationStatus", {value: "bcc1fc18-05c0-469a-a4bc-d65366c16cf1", displayValue: "More Info Required"});
				}
				else{
					this.set("UsrReservationStatus", {value: this.get("UsrReservationStatus").value, displayValue: this.get("UsrReservationStatus").displayValue});
				}
			},
}

The issue here is, when the user manually changes the DCM status, the Reservation status is getting changed automatically. But when the DCM status changes automatically (after activity completion/approval on DCM stage), the Reservation status is not changing automatically.

Need a suggestion how we can resolve the issue (Not via Business process).

 

Thanks,

Sourav Kumar Samal

Like 0

Like

1 comments
Best reply

Since the automatic changing of the DCM status happens outside of the context of the page, you won't receive any event in the page code for this. The only options are to either use a process or an entity-level subprocess/event. 

Ryan

Since the automatic changing of the DCM status happens outside of the context of the page, you won't receive any event in the page code for this. The only options are to either use a process or an entity-level subprocess/event. 

Ryan

Show all comments

We are trying to use https://marketplace.creatio.com/app/advanced-list-setup-creatio to setup different folders with different columns.  The use case is that users will want to see certain columns and also filter by multiple pre-defined columns/options as they plan which accounts to target for the day.  After applying a filter to the folder, the columns change.  Am I missing something in how to actually save the columns?

 

 

Like 0

Like

3 comments

Hi, Melanie!

I am not sure I understand the issue. Could you send us more details about it? Specifically, please tell us the expected result and provide us with steps to replicate the issue.



Also, you might want to review the short add-on instructions to ensure it is set up correctly and you are not experiencing the intended behavior.



The add-on lets you set up different columns for different folders.



To do this:



1. Select a folder (folder must contain at least one filter).

2. Click the "Set up filter for the folder" button.

 



3. Click the "Select fields to display" button and set up the custom columns.



4. Save the folder settings.

 

 

As a result, if you select the folder, you will see the custom column configuration. If you select a different folder, you will see the standard column configuration

Yevhen Vorobiov,

Hello,

We have followed the instructions for setup.  The use case is that users will want to see certain columns and also filter by multiple pre-defined columns/options as they plan which accounts to target for the day.

The expected behavior is that they could adjust the filters on the folder, select apply, and have the columns remain in the folder.

 

Expected behavior in your example: from the Test folder change Type = Our company to Type = Competitor (or any other type), select apply and have the columns remain that are set for the Test folder.

 

Instead what we are seeing is that the columns revert back to the default columns whenever the filter is modified.

 

Please advise how we can do this.

Melanie Forrest,

Hello Melanie!



Thank you for the information. I understand the issue now.



The add-on does not support dynamic changes to folders. As such, you have to click "Save" after applying changes to folder filters. As a result, you will see the custom list.

Show all comments

Hello

I would like to build a business process parameter of type "Collection of records".

- The user is asked to choose an object in a lookup ( attachment file)

- This file is added to the collection (that is where I struggle)

- The user is asked if he want to add more object to the list.

- ... 

- The user validate and the list is used in a subprocess to process the choosen files

 

Many thanks if you can give me a hint on how to do that.   

Like 0

Like

3 comments

Dear Antoine, 

It's impossible to implement using basic application logic.

During single business process execution, it is possible only to upload files to a single object at once.

Hello, thank you for your answer.

I am not trying to upload multiple files.

I just want to ba able to add object references to an object collection parameter.

Let's say it like this:

- When you read Data from Creatio, if using filter others than ID, you get a collection of object. Which is stored into a "collection" variable.

-Now I have a collection, let say I read another object of the same type with anoter filter, I want to add that object to the above existing collection. How can I do that?

 

 

Thank you 

 

The code should look something like this:

// create collection/list or get from param
var list = new CompositeObjectList<CompositeObject>();
 
// create item and add to collection/list
var item = new CompositeObject();
item["SomeProperty"] = "Some value";
item["SomeOtherProperty"] = "Some value, etc";
list.Add(item);
 
// now set list in param
Set<CompositeObjectList<CompositeObject>>("MyCollectionParamName", list);

See https://customerfx.com/article/working-with-collection-parameters-in-a-…

Ryan 

Show all comments

Hi Community,

 

We need to override destroy function in edit page and put our custom logic. However, we noticed if you are clicking add button on details on edit page, destroy function is not being called. The destroy function is only being executed when you are clicking close/cancel or if you are clicking directly to other menu. What is the counter part of destroy function when user is  clicking add button on details on edit page

Like 0

Like

1 comments

Hi Fulgen,

 

The destroy method from the BaseNestedModule is called when starting adding a record to a detail. So in your case you need to override this method in case you need to add something to the destroy logic.

 

Best regards,

Oscar

Show all comments

Hi Community,

 

I have created one Process parameter of type "FILE" as follows:

I am trying to assign the value in a script task. The script task contains the following code:

var recordId = Get<Guid>("FileID");
 
IFileFactory fileFactory = UserConnection.GetFileFactory();
var fileLocator = new EntityFileLocator("ContactFile", recordId);
IFile file = fileFactory.Get(fileLocator);
 
Set("FILE",file);
 
return true;

After running the process I am getting the following error,

Request a help here to understand what am I doing wrong.

 

Thanks,

Sourav Kumar Samal

Like 0

Like

4 comments
Best reply

Hi Sourav,

 

The problem here is that this parameter stores not the file itself, but the file locator. If you redesign the code as:

var recordId = Get&lt;Guid&gt;("FileID");
IFileFactory fileFactory = UserConnection.GetFileFactory();
var fileLocator = new EntityFileLocator("ContactFile", recordId);
Set("FILE", fileLocator );
return true;

the process will be executed properly.

 

Best regards,

Oscar

Hi Sourav,

 

The problem here is that this parameter stores not the file itself, but the file locator. If you redesign the code as:

var recordId = Get&lt;Guid&gt;("FileID");
IFileFactory fileFactory = UserConnection.GetFileFactory();
var fileLocator = new EntityFileLocator("ContactFile", recordId);
Set("FILE", fileLocator );
return true;

the process will be executed properly.

 

Best regards,

Oscar

Oscar Dylan,

Thanks for the Input, It is working now

Sourav Kumar Samal,

 



How did you add the Using for IFileFactory and GetFileFactory?



Regards,

Solem.

Solem Khan Abdusalam,

 

You can add the using under "Methods" tab of process settings as follows,

 

 

Thanks,

Sourav

Show all comments

Hi Community,

I need to skip the mini-page which comes when we click "complete" on any user task in a DCM.As soon as the complete button is clicked the user task should be marked complete. Is there any way or examples to do so.

Thanks 

Like 0

Like

8 comments

Hello,

 

The method that is being called when clicking the complete button in the user-task is "execute" from the "ActivityDashboardItemViewModel" module. It checks if the item that needs to be completed has the mini-page or if it's an email activity or a process activity and then executes its logic. If none of the conditions are met the "execute" method from the "EntityDashboardItemViewModel" is called (parentMethod for the "execute" method in the "ActivityDashboardItemViewModel"). So in case you need to autocomplete the task you need to override the logic of this "execute" method (and unfortunately we don't have a specific example on this matter).

 

Best regards,

Oscar

Oleg Drobina,

 

It seems we can not create the replacing schema for EntityDashboardItemViewModel or ActivityDashboardItemViewModel. Is there any suggestion where we can override the 'execute' method to add the custom logic?

 

Regards,

Sourav

Sourav Kumar Samal,

 

Actually there is a possibility to override this logic:

 

1) Create the module with UsrActivityDashboardItemViewModel name and the following code (copied the original code from the ActivityDashboardItemViewModel):

define("UsrActivityDashboardItemViewModel", ["UsrActivityDashboardItemViewModelResources", "ProcessModuleUtilities",
		"ConfigurationConstants", "EntityDashboardItemViewModel", "MiniPageUtilities"],
	function(resources, ProcessModuleUtilities, ConfigurationConstants) {
		Ext.define("Terrasoft.configuration.UsrActivityDashboardItemViewModel", {
			extend: "Terrasoft.EntityDashboardItemViewModel",
			alternateClassName: "Terrasoft.UsrActivityDashboardItemViewModel",
 
			Ext: null,
			sandbox: null,
			Terrasoft: null,
 
			columns: {
				/**
				 * Process element identifier.
				 */
				"ProcessElementId": {
					type: Terrasoft.ViewModelColumnType.ENTITY_COLUMN,
					dataValueType: Terrasoft.DataValueType.STRING
				},
				/**
				 * Indicates if button "Execute" was clicked.
				 */
				"ExecuteButtonClick": {
					type: Terrasoft.ViewModelColumnType.ENTITY_COLUMN,
					dataValueType: Terrasoft.DataValueType.BOOLEAN
				}
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseDashboardItemViewModel#initIconSrc
			 * @overridden
			 */
			initIconSrc: function() {
				var iconSrc = resources.localizableImages.IconImage;
				this.set("IconSrc", iconSrc);
			},
 
			/**
			 * @inheritdoc Terrasoft.EntityDashboardItemViewModel#addQueryColumns
			 * @overridden
			 */
			addQueryColumns: function(esq) {
				this.callParent(arguments);
				esq.addColumn("Title", "Caption");
				esq.addColumn("Type");
				esq.addColumn("StartDate", "Date");
				esq.addColumn("Owner.Name", "Owner");
				esq.addColumn("ProcessElementId");
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseDashboardItemViewModel#getProcessElementUId
			 * @overridden
			 */
			getProcessElementUId: function() {
				return this.get("ProcessElementId");
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseDashboardItemViewModel#execute
			 * @overridden
			 */
			execute: function(options) {
				console.log("test");
				var schemaName = this.get("EntitySchemaName");
				var hasMiniPage;
				const parentMethodArguments = arguments;
				const parentMethod = this.getParentMethod();
				Terrasoft.chain(
					function(next) {
						this.showBodyMask();
						if (Terrasoft.Features.getIsEnabled("OpenEditPageInDcm")) {
							this.hasMiniPageForMode(schemaName, Terrasoft.ConfigurationEnums.CardOperation.VIEW, next, this);
							return;
						}
						hasMiniPage = this.hasMiniPage(schemaName);
						next(hasMiniPage);
					},
					function(next, hasMiniPage) {
						this.hideBodyMask();
						if (!this._isEmailActivity() &amp;&amp; this.isActivity() &amp;&amp; hasMiniPage) {
							this.showMiniPage(options);
							return;
						}
						var elementUId = this.get("ProcessElementId");
						var recordId = this.get("Id");
						var config = {
							procElUId: elementUId,
							recordId: recordId,
							scope: this,
							parentMethodArguments: parentMethodArguments,
							parentMethod: parentMethod
						};
						if (ProcessModuleUtilities.tryShowProcessCard.call(this, config)) {
							return;
						}
						parentMethod.call(this, parentMethodArguments);
					},
					this
				);
 
 
			},
 
			/**
			 * Returns true if it is task activity entity.
			 * @private
			 * @return {Boolean} True if it is task activity entity.
			 */
			isActivity: function() {
				var executionData = this.get("ExecutionData");
				var schemaName = this.get("EntitySchemaName");
				return this.Ext.isEmpty(executionData) ||
					(executionData &amp;&amp; schemaName === executionData.entitySchemaName);
			},
 
			////TODO #CRM-33987
			/**
			 * Returns if current activity is email.
			 * @returns {Boolean} Returns if current activity is email.
			 */
			_isEmailActivity: function() {
				var activityTypes = ConfigurationConstants.Activity.Type;
				var typeLookup = this.get("Type");
				return typeLookup.value === activityTypes.Email;
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseDashboardItemViewModel#onExecuteButtonClick
			 * @overridden
			 */
			onExecuteButtonClick: function() {
				this.set("ExecuteButtonClick", true);
				this.callParent(arguments);
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseDashboardItemViewModel#onCaptionClick
			 * @overridden
			 */
			onCaptionClick: function() {
				this.set("ExecuteButtonClick", false);
				this.callParent(arguments);
			},
 
			/**
			 * @inheritdoc Terrasoft.MiniPageUtilities#openMiniPage
			 * @overridden
			 */
			openMiniPage: function(config) {
				if (this.get("ExecuteButtonClick")) {
					var status = {
						name: "ActivityMiniPageStatus",
						value: "Done"
					};
					if (config &amp;&amp; this.Ext.isArray(config.valuePairs)) {
						config.valuePairs.push(status);
					} else {
						config.valuePairs = [status];
					}
				}
				this.callParent(arguments);
			}
		});
	});

the only modification was console.log("test") to check the override.

 

2) Create a replacing view module for the SectionActionsDashboard with the following code:

 define("SectionActionsDashboard", ["UsrActivityDashboardItemViewModel"],
	function() {
		return {
			mixins: {},
			methods: {
				initDashboardConfig: function() {
					this.callParent(arguments);
					const dashboardConfig = this.$DashboardConfig;
					const activityItemsConfig = {
						"Activity": {
							viewModelClassName: "Terrasoft.UsrActivityDashboardItemViewModel"
						}
					};
					Ext.merge(dashboardConfig, activityItemsConfig);
					this.$DashboardConfig = dashboardConfig;
				},
			},
			diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
		};
	}
);
 

3) Refresh the page after saving these two modules.

 

As a result you can modify the "execute" method logic in the UsrActivityDashboardItemViewModel module.

Oleg Drobina,

 

I have tried the exact same steps, but getting the below error,

 

 

 

Is there anything I missed?

 

Regards,

Sourav Kumar Samal

Sourav Kumar Samal,

 

the same approach on my side doesn't return an error. You need to double-check all the code and that it has the same content as mine shared above.

Oleg Drobina,

 

I tried in a different instance, the error didn't come. But when I click on "Complete", it refers to the ActivityDashboardItemViewModel in stead of SKSActivityDashboardItemViewModel.

 

 

Also, I can see initDashboardConfig referencing to the correct schema, but still execute method is not,

 

 

Regards,

Sourav

Sourav Kumar Samal,

 

Hi, did you mange to solve this issue? 

Thanks in advance for your reply.

Kind regards,

Marijana

Oleg Drobina,

How can I do this in FreedomUI?

Show all comments

Dear Devlabs,

 

which version of IBM messaging queue is supported by the adapter from marketplace?

 

BR

Like 0

Like

5 comments

Hello Valery,

 

Could you please elaborate on your question?

Please describe the desired result after receiving the requested information.

 

Thank you,

Artem.

Hi Artem,

 

thank you for your feedback.

 

I want just outline what I expect. 

My expectation is the number of latest version of  IBM MQ with which the adapter works properly.

 

BR

 

 

 

Hi, Valery!

We are using version 8.0.0.7 of the external library from IBM MQ.

As such, the add-on is compatible with IBM MQ 8.0.

We haven't tested the compatibility with the latest versions of IBM MQ.

Yevhen Vorobiov,

Hi, Yevhen,

 

thank you for your reply. Please advise me about plugin compatibility with IBM MQ 9 (9.0, 9.1, 9.2) version.

Valery,

Hi Valery!

Since we have not tested the compatibility with the latest versions of IBM MQ, we cannot provide an advice. You might want to test this on your end.

Show all comments

Hello,

 

I have created several pages in the case section. Each page corresponds to a different value of the service column.

 

My question is how can I do the same on the mobile app side? like the user gets to choose which service he wishes to request and the corresponding case page is displayed.

 

Thank you,

Like 0

Like

1 comments

Hello Mariam,

 

Thank you for your question!

Unfortunately, such functionality is not available in the mobile app.

We have already registered a request for our development team so they will bring this feature in future releases.

 

Best regards,

Artem.

Show all comments

Hi community

 

I tried to customize the edit page actions following this article Add an action to the record page | Creatio Academy.

t the bindTo for caption, enable and tag property doesn't work

What Am I doing wrong ?

 

Like 0

Like

2 comments

Hi Stefano,

 

Most probably, the issue happens because you d didn’t add the code to this schema that checks if these actions are enabled. 

 

There are actually two places you need to add this. Once to the section page and once to the edit page for the section. An edit page can be seen in two different modes, (1) edit mode (where you're only displaying the edit page, this is what you're getting when you refresh the page while in edit mode) and (2) combined mode, this is actually the section page, where it displays the context of the section list you were on with the edit page on the side. 

With this in mind, you need to add the action menu in both the edit page and the section page for it to appear in both modes.



Best regards,

Bogdan

Thank you Bogdan,

I solved with your help.

Show all comments

Hi Community,

 

We have integrated our facebook page in Creatio as per this guide (https://academy.creatio.com/docs/user/setup_and_administration/base_int…). But we are not receiving the messages in CRM. Any idea whats missing?

 

 

Like 0

Like

2 comments

Sorry to ask the obvious. Have you added users to the All agents queue? Also, are the users "active" in the chat panel? (green circle, not red, around the chat icon)

Ryan Farley,

 

Hi Ryan,

 

Thank you for your reply, yes we have added our user to the all agents queue

Show all comments