knowledge base
SDK
Q&A
support

Question

Activities of the "Call" type are not displayed in the history

Answer

Starting from version 7.7.0, the [Activities] detail on the [History] tab has been upgraded with adding filtering of the displayed records by types. As a result, the activities with the "E-mail" and "Call" types that were added in previous versions are not displayed any longer. This is connected with providing separate sections and details for these entities.

To display the earlier created activities with the "Call" type on the [History] tab of the [Activities] detail, create a replacing client modue for the ActivityDetailV2 schema and override the getFilters() method therein as follows (having deleted filtering by calls):

getFilters: function() {
    var filters = this.callParent(arguments);
    filters.removeByKey("NotCallFilter");
    return filters;
}

 

Like 0

Like

Share

0 comments
Show all comments
SDK
mobile
support
Q&A

Symptoms

The synchronization does not work on iOS, while the Android version syncs normally.

Cause

The problem is connected with the peculiarity of mobile applications (more precisely with authentication). If the Basic Authentication method is enabled, the synchronization will end with an error.

Solution

1. Make sure the method is disabled in IIS. In the IIS structure, select a site, go to the Authentication menu. Only Anonymous and Forms Authentications are enabled.

2. Make sure that the .Net Framework version matches the values in the table. You can determine the version by referring to the following article - https://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx

3. Restart the website.

Requirements

Access to IIS, access to the list.

Like 0

Like

Share

0 comments
Show all comments
Q&A
mobile
support
SDK

Case

When you enter the Dashboards section, the sales funnel opens by default, you can switch to activity, but the window does not close.

Purpose

Correct work of the "Close" button.

Necessary conditions

Understanding how to work with the mobile application.

Solution

This behavior is observed if the user clicks on the arrow to the right of the field with a drop-down list. If you open the “Section” window by clicking on the center of the field, the “Close” button works correctly.

Like 0

Like

Share

0 comments
Show all comments
knowledge base
SDK
Q&A
support

Question

Test email cannot be sent. Even if there are marketing active contacts/ marketing campaigns licenses provided to the Supervisor user.

Whe I try to send an email, the following error occurs: "Method not allowed. Please see the service help page for constructing valid requests to the service".

Cause

The "UnsubscribeApplicationUrl" system setting is missing.

Solution

Execute the following script:

INSERT INTO SysSettingsValue (Id, SysSettingsId, SysAdminUnitId, IsDef)
SELECT N'6A96A15A-34BD-4932-A924-56CC013E3312', Id, N'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1
    FROM SysSettings WHERE Code = 'UnsubscribeApplicationUrl'

 

Like 0

Like

Share

0 comments
Show all comments

Question

How to create a linked column in the mobile app? For example, the "Account" column in the "Contacts" section?

Answer

By default, custom columns (columns created through the mobile application wizard) that have the “Lookup” type in the mobile application are not linked (i.e., it is not possible to access the edit page by clicking on them). For example, the "Cases" section in the mobile app is not included in the base version. To implement this, you need to add a linked field to the mobile application module for the section.

An example implementation can be found in MobileContactModuleConfig ("Contacts" section):

Terrasoft.sdk.RecordPage.configureColumn("Contact", "primaryColumnSet", "Account", {
    viewType: Terrasoft.ViewTypes.Preview
});

 

Like 0

Like

Share

0 comments
Show all comments
knowledge base
SDK
Q&A
support

Question

How can I add a button in the Communication Panel?

Answer

1. Replace the "CommunicationPanel" module, where the new button will be described.

define("CommunicationPanel", ["terrasoft", "CommunicationPanelHelper"],
	function(Terrasoft, CommunicationPanelHelper) {
		return {
			messages: {
				"SelectCommunicationPanelItem": {
					"mode": Terrasoft.MessageMode.PTP,
					"direction": Terrasoft.MessageDirectionType.SUBSCRIBE
				}
			},
			attributes: {
				"UsrMyMenuActive": {
					"dataValueType": Terrasoft.DataValueType.BOOLEAN,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": false
				},
				"UsrMyMenuCounter": {
					"dataValueType": Terrasoft.DataValueType.TEXT,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": ""
				},
				"UsrMyMenuVisible": {
					"dataValueType": Terrasoft.DataValueType.BOOLEAN,
					"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"value": true
				}
			},
			methods: {
				getPanelItemConfig: function(moduleName) {
					var config = this.callParent(arguments);
					if (moduleName !== "UsrMyMenuModule") {
						return config;
					}
					return Ext.apply(config, {
						keepAlive: false
					});
				},
				selectItem: function(config) {
					this.set("SelectedMenuItem", config.selectedItem);
				},
				getUsrMyMenuImageConfig: function(itemTag) {
					return this.get("Resources.Images.VisaMenuIcon");
				},
				getUsrMyMenuCaption: function(itemTag) {
					return "test";
				}
			},
			diff: [
				{
					"operation": "insert",
					"index": 0,
					"parentName": "communicationPanelContent",
					"propertyName": "items",
					"name": "usrMyMenu",
					"values": {
						"tag": "UsrMyMenu",
						"visible": {"bindTo": "UsrMyMenuVisible"},
						"imageConfig": {"bindTo": "getUsrMyMenuImageConfig"},
						"caption": {"bindTo": "getUsrMyMenuCaption"},
						"generator": "CommunicationPanelHelper.generateMenuItem"
					}
				}
			]
		};
	});

2. Create the panel module. The module should contain required messages, as in ESNFeedModule:

RerenderModule – subscription, address.

InitModuleViewModel – subscription, address.

	Ext.define("Terrasoft.configuration.UsrMyMenuModule", {
 
		extend: "Terrasoft.BaseSchemaModule",
		alternateClassName: "Terrasoft.UsrMyMenuModule",
 
		generateViewContainerId: false,
 
		initSchemaName: function() {
			this.schemaName = "UsrMyMenu";
		},
 
		initHistoryState: Terrasoft.emptyFn,
 
		init: function() {
			this.callParent(arguments);
			this.initMessages();
		},
 
		initMessages: function() {
			this.sandbox.subscribe("RerenderModule", function(config) {
				if (this.viewModel) {
					this.render(this.Ext.get(config.renderTo));
					return true;
				}
			}, this, [this.sandbox.id]);
		},
 
		createViewModel: function() {
			var viewModel = this.callParent(arguments);
			return viewModel;
		}
 
	});
	return Terrasoft.UsrMyMenuModule;
});

3. Create the page view schema

define("UsrMyMenu", [], function() {
		return {
			mixins: {
			},
			messages: {
			},
			attributes: {
			},
			methods: {
				init: function(callback, scope) {
					this.callParent([function() {
						callback.call(scope);
					}, this]);
				},
				onTestClick: function() {
					alert(1);
				}
			},
			diff: [
				//MyMenu
				{
					"operation": "insert",
					"name": "MyMenu",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
				//ShowNewMessagesButton
				{
					"operation": "insert",
					"name": "ShowNewMessagesButton",
					"parentName": "MyMenu",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "Test!",
						"click": {bindTo: "onTestClick"}
					}
				}
			]
		};
	});

 

Like 1

Like

Share

2 comments

I have tried adding this code but did not got any such button in the communication panel. Can you guide through the way to it?

Siddharth Miglani,

Hello,

We recommend using freedom UI components and the button element: https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ui-and-business-logic-customization/element-setup-examples/components/set-up-button-components
You can add a custom button to the page via the OOTB tools without dev tools.

Show all comments

Question

How to quickly generate a page code for a mobile application.

Can be used for:

  • Edit
  • Grid
  • Preview

Answer

Run the following code in the emulator browser console:

(new Terrasoft.CodeGeneration.PageCodeGenerator({
    modelName: "Contact", 
    pageType: Terrasoft.PageTypes.Edit
})).generate()

In modelName, specify the desired object.

In pageType, specify the page type:

pageType: Terrasoft.PageTypes.Grid
pageType: Terrasoft.PageTypes.Edit
pageType: Terrasoft.PageTypes.Preview

The result is:

Terrasoft.LastLoadedPageData = {
    controllerName: "Terrasoft.configuration.ContactEditPageController",
    viewXClass: "Terrasoft.configuration.ContactEditPageView"
};
 
Ext.define("Terrasoft.configuration.view.ContactEditPage", {
    extend: "Terrasoft.view.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.ContactEditPageView",
    config: {
        id: "ContactEditPage"
    }
});
 
Ext.define("Terrasoft.configuration.controller.ContactEditPage", {
    extend: "Terrasoft.controller.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.ContactEditPageController",
    statics: {
        Model: Contact
    },
    config: {
        refs: {
            view: "#ContactEditPage"
        }
    }
});

 

Like 0

Like

Share

0 comments
Show all comments
knowledge base
SDK
Q&A
support

Symptoms

"Online help" does not work. The following error is displayed:

The error occurs when, e.g., trying to access Customer Engagement Centre in 7.7., which is now Customer Centre, the document is thus not found.

Cause

The "Product" or "Configuration version" system settings are incorrect.

Solution

Change the "Product" system setting value (write the correct name of the used bpm'online product).

Make sure, that the "Configuration version" system setting has the "7.7.0" version value.

Like 0

Like

Share

0 comments
Show all comments

Question

I have the "Automatic Synchronization - Only through Wifi" enabled in the mobile app. How often does automatic data synchronization occur?

Answer

Each time the application is minimized, it synchronizes after 30 seconds. And if the user activates the application again, the synchronization stops.

Note. Due to the specifics of the iOS operating system, it can stop all processes in the background in about 3 minutes, i.e., if the synchronization did not occur in the background, then it actually did not occur at all. 

Like 0

Like

Share

0 comments
Show all comments
knowledge base
SDK
Q&A
support

Question

How can I add a button to the detail list for an active string?

Answer

You can implement this as follows:

In the script of a detail, to the diff block, add additional properties to DataGrid (the button name and caption are provided as an example):

{
        "operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
                                "markerValue": "myButtonAction",
                                "tag": "myAction",
                                "caption": "MyButton"
                        }
                ]
        }
}

After this, when you highlight the active string in the detail, a blue button with the "MyButton" caption should appear.

You can add several buttons to the activeRowActions array, they all will be displayed in the highllighted string as you can see it work in the section list.

Afterwards, implement the onActiveRowAction method in the methods of the same detail. This method takes the button tag and the key column value of the highlighted string as arguments. If you need to receive any other values of the highlighted string, you can call the this.getActiveRow() method, which returns the whole model of the highlighted string:

methods: {
        onActiveRowAction: function(buttonTag, primaryColumnValue) {
                if (buttonTag === "myAction") {
                        // the whole code below can be removed, it demonstrates that the
                        // primaryColumnValue and activeRowId values are equal
                        var activeRow = this.getActiveRow();
                        var activeRowId = activeRow.get("Id");
                        console.log(primaryColumnValue);
                        console.log(activeRowId);
                        // your implementation follows here
                        ...
                }
        },
        ...
}

 

Like 1

Like

Share

0 comments
Show all comments