Case

Added a custom "Project" field to the activity, which is required. Because of this, I can not now create an activity in the mobile application. Is it possible to fix this by leaving the “Project” field required?

Cause

Setting up fields in the [Mobile Application Wizard] for the Activities / Accounts sections does not work correctly. Fixed in the latest release versions.

Goal

Add a custom field to the Activity section for the mobile application.

Necessary conditions

Access to the system with administrator rights.

Solution

1. Update the system to the latest release version (released after 05/01/2015).

2. In the [Mobile Application Wizard] set up the appropriate columns.

During set up, it is important to:

1. Save the changes on the section page.

2. Save changes for the mobile application as a whole.

Like 0

Like

Share

0 comments
Show all comments

Symptoms

In the sales outlet card, when populating the "Delivery time from" and "Delivery time to" fields from a tablet, the time is converted to a different time zone during synchronization with a desktop application. For example, if you populate the fields with 17:00 and 18:00 respectively, the desktop app will display the time as 14:00 and 15:00. Moreover, once synchronized, the fields on the mobile app will display 14:00 and 15:00 as well.

Cause

Fixed in version 7.8

Solution

The fix (which avoids transferring any server changes from version 7.8) is provided below:

Step 1

Create the UsrSyncExtension ("Module" type) schema in a custom package.

Step 2

Add the following code to the schema:

var sysAdminUnitStore = Ext.create("Ext.data.Store", {model: "SysAdminUnit"});
sysAdminUnitStore.setProxy("odata");
sysAdminUnitStore.load({
    queryConfig: Ext.create("Terrasoft.QueryConfig", {
        modelName: "SysAdminUnit",
        autoSetProxy: false,
        columns: ["TimeZoneId"]
    }),
    filters: Ext.create("Terrasoft.Filter", {
        property: "Contact",
        value: Terrasoft.CurrentUserInfo.contactId
    }),
    callback: function(records, operation, success) {
        if (success === true && records.length > 0) {
            var firstRecord = records[0];
            var timeZoneCode = firstRecord.get("TimeZoneId");
            if (!Ext.isEmpty(timeZoneCode)) {
                var timeZoneStore = Ext.create("Ext.data.Store", {model: "TimeZone"});
                timeZoneStore.setProxy("odata");
                timeZoneStore.load({
                    queryConfig: Ext.create("Terrasoft.QueryConfig", {
                    modelName: "TimeZone",
                    autoSetProxy: false,
                    columns: ["Offset"]
                }),
                filters: Ext.create("Terrasoft.Filter", {
                    property: "Code",
                    value: timeZoneCode
                }),
                callback: function(timeZoneRecords, timeZoneOperation, timeZoneSuccess) {
                    if (timeZoneSuccess === true && timeZoneRecords.length > 0) {
                        var timeZoneRecord = timeZoneRecords[0];
                        var offset = timeZoneRecord.get("Offset");
                        var offsetValue = 0;
                        if (!Ext.isEmpty(offset)) {
                            offset = offset.replace("GMT", "");
                            if (!Ext.isEmpty(offset)) {
                                var sign = (offset.substring(0, 1) === "-") ? 1 : -1;
                                var hours = parseInt(offset.substr(1, 2));
                                var minutes = parseInt(offset.substr(4, 2));
                                offsetValue = sign * (hours * 60 + minutes);
                            }
                        }
                        Terrasoft.Configuration.CurrentUserTimeZoneOffset = offsetValue;
                    }
                },
                scope: this
            });
        }
    }
},
scope: this
});
 
if (!Terrasoft.Configuration.processColumn) {
                Terrasoft.Configuration.processColumn = Terrasoft.OData.ResponseParser.processColumn;
}
 
Terrasoft.OData.ResponseParser.processColumn = function(data, queryConfig, record, columnName) {
                var model = record.self;
                var columnConfig = model.ColumnConfigs.get(columnName);
                var columnValue = data[columnName];
                if ((columnConfig.columnType === Terrasoft.ColumnTypes.date ||
                               columnConfig.columnType === Terrasoft.ColumnTypes.datetime) &&
                               !Ext.isEmpty(Terrasoft.Configuration.CurrentUserTimeZoneOffset)) {
                               if (columnValue.indexOf("/") !== -1) {
                                               var timeZoneOffset = Terrasoft.Configuration.CurrentUserTimeZoneOffset;
                                               columnValue = new Date(parseInt(columnValue.substr(6)));
                                               columnValue = new Date(columnValue.getTime() + timeZoneOffset * 60 * 1000);
                               } else {
                                               columnValue = Terrasoft.util.convertISOStringToDate(columnValue);
                               }
                               record.set(columnName, columnValue);
                } else {
                               Ext.callback(Terrasoft.Configuration.processColumn, Terrasoft.OData.ResponseParser, arguments);
                }
};

Step 3

Add the manifest of the mobile application to the current package (the manifest of the corresponding workplace) and add the UsrSyncExtension schema to it (namely, add it to SyncExtensions and CustomSchemas):

"SyncExtensions": [
                               "UsrSyncExtension"
                ],
                "CustomSchemas": [
                               "UsrSyncExtension"
                ],

The code gets the current user's time zone from SysAdminUnit, and uses the received time zone during synchronization and input.

Like 0

Like

Share

0 comments
Show all comments

Question

It is necessary to open external access to bpm'online only for mobile application services.

Please specify which services the mobile application uses for its operation?

Answer

Integration is carried out through O'Data on the site port.

Services used by the mobile application in version 7.8.2:

http://server/ServiceModel/AuthService.svc

http://server/0/Services/ProfileService.asmx

http://server/0/Mobile/Services/MobileDataService.ashx

http://server/0/Mobile/Services/MobileCodeService.ashx

http://server/0/ServiceModel/EntityDataService.svc

The list of services in subsequent updates of the mobile application may be different.

Like 0

Like

Share

0 comments
Show all comments

Question

How to set up a filter in a mobile application so that the data is loaded only by a certain parameter (for example, only Opportunities at a certain stage)?

Answer

You must configure the following parameters:

LEADS: Only show leads with the LEAD STAGES: Registration and Qualification.

OPPORTUNITIES: Only show opportunities with the OPPS STAGES: Presentation, Proposal, Negotiation and Pending.

Use the following code (for Leads):

Terrasoft.sdk.Module.addFilter("Lead", Ext.create("Terrasoft.Filter", {
    type: Terrasoft.FilterTypes.Group,
    logicalOperation: Terrasoft.FilterLogicalOperations.Or,
    subfilters: [
        {
            property: "QualifyStatus",
            value: "d790a45d-03ff-4ddb-9dea-8087722c582c"
        },
        {
            property: "QualifyStatus",
            value: "14cfc644-e3ed-497e-8279-ed4319bb8093"
        }
    ]
}));

First, we need to create new modules with a filtering code separately for Leads, and separately for Opportunities:

Then, in the configuration, select a workplace (if you have several) to which we will apply the filter, in our case MobileApplicationManifestOn_the_Road

We need to add created modules with filters in those sections that include filters, in this case in Lead and Opportunity in PageExtentions:

Save.

Like 0

Like

Share

2 comments

Code helped me. But If I search with other status(other than statuses mentioned in subfilters) in Lead, records do not list. For by On load this subfilters should work. But if I search with other than status , those also should list upon searching.

Is it possible. Please help me

Sriraksha KS,

If I understood you correctly, you want the subfilters, which described above to be displayed when you click on quick filter option on the section.

Unfortunately, there is no way to transfer the on load filters to the quick filters. If using on load filters, the records will be initially filtered and quick filters would be added to them.

In case I have misunderstood your task, please describe it more detailed, a screenshot would be appreciated.

Regards,

Anastasia

Show all comments

Question

I can't sync my Customer Engagement Center demo site with mobile application. The error I am getting contains - },"requestId":20,"status":200,"statusText":"OK","responseText":"{\"Code\":1,\"Message\":\"Either invalid login or password specified, or your user account is inactive.Verify that you have entered correct data or contact support service.\"

Answer

For bpm'online 7.5 mobile application is available in Sales editions (Team, Commerce, Enterprise, Omnichannel) only.

Like 0

Like

Share

0 comments
Show all comments

Android

Requirements

  • A computer running Windows;
  • Chrome
  • Mobile device running Android

1. Download Vysor chrome extension for Chrome

2. Connect your mobile device to a PC or laptop

3. Launch Vysor

4. In the list of available devices, select your device and click "View"

5. The Vysor app will be installed on your device and a window will open in which the device screen will be displayed.

iOS

Requirements:

A computer running MacOS;

Mobile device running iOS.

1. Connect your mobile device to a computer running MacOS

2. Run QuickTime Player

3. Click "New Movie Recording" 

4. In the window that opens, open the dropdown near the recording icon and select the device that is connected to the computer

 

Like 1

Like

Share

0 comments
Show all comments

Symptoms

Type: Terrasoft.UnauthorizedServerException% 0D% 0A Message: Incorrect bpm'online username, password or server address % 0D% 0A Additional information:% 0D% 0A% 09 {"request": {"id": 2, "headers": { "X-Terrasoft-Mobile": "true", "Accept": "application / json", "Content-Type": "application / json", "Authorization": "Cookie", "X-Requested-With": "XMLHttpRequest"}, "options": {"url": "http: //xxxx.xxxxx.xxxx/ServiceModel/AuthService.svc/Login", "method": "POST", "jsonData": {"UserName" : "Xxxxxxx", "UserPassword": "xxxxxxx", "TimeZoneOffset": -180}, "scope": {"initialConfig": {"url": "http: //cxxxx.xxxxx.xxxx/ServiceModel/AuthService. svc / Login "," method ":" POST "," jsonData ": {" UserName ":" Xxxxxxx "," UserPassword ":" xxxxxxx "," TimeZoneOffset ": - 180}," scope ": {}," headers ": {" X-Terrasoft-Mobile ":" true "," Accept ":" application / json "," Content-Type ":" application / json "," Authorization ":" Cookie "}," disableCaching " : false}, "performanceCounter": {"startDate": "2015-0 5-27T07: 08: 29.520Z "}}," headers ": {" X-Terrasoft-Mobile ":" true "," Accept ":" application / json "," Content-Type ":" application / json " , "Authorization": "Cookie"}, "disableCaching": false}, "async": true}, "requestId": 2, "status": 401, "statusText": "Unauthorized", "responseText": "{ \ "Message \": \ "Authentication failed. \", \ "StackTrace \": null, \ "ExceptionType \": \ "System.InvalidOperationException \"} "," responseXML ": null," responseBytes ": null}% 0D% 0A% 0D% 0A

Cause

The username, password, or server address fields are incorrectly entered when logging in from a mobile application.

Solution

Enter correct data.

Like 0

Like

Share

0 comments
Show all comments

Symptoms

Type: Terrasoft.SyncException%0D%0AMessage: Unable to connect to server

Probable causes:
- Could not connect to internet
- Server unavailable
- Incorrect server address%0D%0A%0D%0AТип: Terrasoft.ServerException%0D%0AMessage: Server request returned an error%0D%0AAdditional information: %0D%0A%09{"request":{"id":1,"xhr":{"statusText":"","status":0,"response":"","responseType":"","responseXML":null,"responseText":"","upload":{"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror":null,"onabort":null},"withCredentials":false,"readyState":0,"timeout":0,"onreadystatechange":null,"ontimeout":null,"onprogress":null,"onloadstart":null,"onloadend":null,"onload":null,"onerror":null,"onabort":null},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie","X-Requested-With":"XMLHttpRequest"},"options":{"url":"https://xxxxxx.xxxxx.xxxxx/0/Services/ProfileService.asmx/Logout","method":"POST","jsonData":{"customData":"","doLogout":"true"},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"disableCaching":false,"scope":{"initialConfig":{"url":"https://xxxxxx.xxxxx.xxxxx/0/Services/ProfileService.asmx/Logout","method":"POST","jsonData":{"customData":"","doLogout":"true"},"headers":{"X-Terrasoft-Mobile":"true","Accept":"application/json","Content-Type":"application/json","Authorization":"Cookie"},"disableCaching":false},"performanceCounter":{"startDate":"2015-05-25T15:54:03.446Z"}}},"async":true,"timedout":true},"requestId":1,"status":0,"statusText":"communication failure","timedout":true}%0D%0A%0D%0A 

Cause

  1. No internet
  2. Invalid website address
  3. Site unavailable

Solution

Ensure all connection conditions are met and re-login.

Like 0

Like

Share

0 comments
Show all comments

Question

Is there a way to set the color of a string in the mobile application list?

Solution

Styles (css) can be changed in the configuration. To do this, use the Terrasoft.writeStyles method. Presumably, an example is available in MobileActivityGridPageV2.

Like 0

Like

Share

0 comments
Show all comments

Question

Previously, there was an opportunity to configure the number of records in one data package of the synchronization process (offline) of the mobile application (100 by default).

Answer

You need to change two parameters in the SyncOptions section (the second indicates the number of "bundles"):

"SyncOptions": {
    "UseSkipToken": true,
    "ImportPageSize": 1000,
},

 

Like 0

Like

Share

0 comments
Show all comments