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



How can I display detail data as a hierarchic (tree-like) structure?

Answer



To implement displaying the detail data as a hierarchic (tree-like) list, perform the following steps:

  1. The detail object should have a field containing the parent record identifier (e.g., Parent) that would refer to this object. This field should be specified in the "Parent in the hierarchy" property of the detail object.
  2. In the diff property of the detail schema, add the following values for the DataGrid element: "hierarchical":true and "hierarchicalColumnName": "" (the second property should only be specified if the parent column name is different from Parent).
  3. Add a custom button (or edit the existing one) to be able to add new detail elements to the hierarchy root or as subordinate to the selectedrecord.
  4. Implement methods of adding records to the needed hierarchy branch and other records if needed (it depends on the detail implementation).

See the attached file for more info.

Like 2

Like

Share

2 comments

I tried to do it on a custom section with a very simple custom detail (made only of Name, Main record ID and Parent lookup field to the same custom section used as detail), only setting up the DataGrid element but the hierarchical structure is not built: I see the list "normal". What is wrong for me?

Hi Massimiliano, 

 

Please make sure that you have completed all the steps from the instruction(attached to the article above).

 

Also please double check if you saved and published the detail object.

 

Nevertheless please don't displaying the parent column in the list. The hierarchy will not be built. 

 

Best regards, 

 

Bogdan L.

 

 

 

 

 

 

 

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

How can I subscribe to an event of pressing a keyboard key to be able to perform certain actions upon pressing?

Answer

You can subscribe to any Ext component via Ext.util.KeyMap 

For example:

onEntityInitialized: function() {
   this.callParent(arguments);
 
   var map = new Ext.util.KeyMap({
      target: "AccountPageV2CodeTextEdit-el",
      key: Ext.EventObject.ENTER,
      fn: this.myHandler,
      scope: this
   });
},
myHandler: function() {
   alert("ENTER");
},

 

Like 0

Like

Share

0 comments
Show all comments

Question

When I try to set the page type for displaying the "Trade-12" printable and select the false checkbox for [Display on page] or delete this printable, the [Print] button disappears. The created copy for this printable nevertheless works OK, but I cannot open the old record. Even when I try to do it via the database, the [Print] button disappears from the page.

The [Warehouse} section: the printable should be displayed for records with the "Outflow" type only, but it is either displayed for all records or the [Print] button is not available at all, despite the fact that it contains other printables as well.

Answer

I will specify the question a little: the situation refers the button display in a combined mode (when you have a collapsed or hidden list on the left side of the screen and the edit page is opened on the right side).

The issue is that in the current implementation, the "IsCardPrintButtonVisible" attribute configuration in "BaseSectionV2" is performed only once when the list is initialized and it is not clear what the activity string is at this stage. At this moment, only printables with the selected page display checkbox that are available for all types are analized  for determining the display property. In your case, you have the only "Trade 12" printable available for display in all types. Thus, when you hide it, the button display gets hidden in the combined mode.

In the upcoming versions, this feature will be reviewed.

As a solution for you now, we suggest binding this button display to your custom attribute which should be populated each time an activity is changed in the combined mode.

define("BtcStoreSection", ["GridUtilitiesV2", "ProductSalesUtils", "MenuUtilities"],
function(GridUtilitiesV2, ProductSalesUtils, MenuUtilities) {
    return {
        entitySchemaName: "BtcStore",
        contextHelpId: "1001",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        attributes: {
            "CombinedModePrintButtonVisible": {dataValueType: Terrasoft.DataValueType.BOOLEAN}
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "name": "CombinedModePrintButton",
                "parentName": "CombinedModeActionButtonsCardRightContainer",
                "propertyName": "items",
                "index": 0,
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.PrintButtonCaption"},
                    "classes": {"wrapperClass": ["actions-button-margin-right"]},
                    "controlConfig": {"menu": {"items": {"bindTo": "CardPrintMenuItems"}}},
                    "visible": {"bindTo": "CombinedModePrintButtonVisible"}
                }
            },
            {
                "operation": "merge",
                "name": "CombinedModeViewOptionsButton",
                "parentName": "CombinedModeActionButtonsCardRightContainer",
                "propertyName": "items",
                "index": 1,
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.ViewOptionsButtonCaption"},
                    "menu": {"items": {"bindTo": "CombinedModeViewOptionsButtonMenuItems"}},
                    "visible": {"bindTo": "getCombinedModeViewOptionsButtonVisible"}
                }
            }
        ]/**SCHEMA_DIFF*/,
        messages: {
        },
        methods: {
            setCombinedModePrintButtonVisible: function(activeRow, cardPrintMenuItems) {
                this.set("CombinedModePrintButtonVisible", this.getCardPrintButtonVisible());
            },
            onCardRendered: function() {
                this.callParent(arguments);
                this.setCombinedModePrintButtonVisible();
            }
        }
    };
});

 

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

Case

I added a contact and an event in the iPad version and synchronized. Then I opened the iPhone version and synchronized, but the new data is not shown in the iPhone version.

Goal

Data between multiple mobile applications synchronizes properly

Solution

As a temporary solution, I would recommend you to clear cache on the target device mobile application. This will cause full synchronization, which means downloading of all records, alternatively to partial synchronization, which download only changed ones.

Necessary conditions

The user should have the rights to use the mobile application.

Like 0

Like

Share

0 comments
Show all comments

Question

How to call a stored procedure from web service?

Answer

Create a source code schema:

namespace Terrasoft.Configuration.UsrTestStored
{
    using System;
    using System.Web;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.ServiceModel.Activation;
    using System.Linq;
    using System.Text;
    using System.Collections.Generic;
    using System.Collections.Concurrent;
    using System.Data;
    using Terrasoft.Common;
    using Terrasoft.Core;
    using Terrasoft.Core.DB;
    using Terrasoft.Core.Entities;
    using Terrasoft.Core.Factories;
    using Terrasoft.Core.Store;
    using Terrasoft.Nui;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrTestStored
    {
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string GetTest(string inputParam)
        {
            var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
            StoredProcedure storedProcedure = new StoredProcedure(userConnection, "tsp_Test");
            storedProcedure.PackageName = userConnection.DBEngine.SystemPackageName;
            using (var dbExecutor = userConnection.EnsureDBConnection()) {
               try {
                   dbExecutor.CommandTimeout = 0;
                   dbExecutor.StartTransaction();
                   storedProcedure.Execute(dbExecutor);
                   dbExecutor.CommitTransaction();
                   return "OK";
               } catch {
                   dbExecutor.RollbackTransaction();
                   return "NOT OK";
               }
            }
        }
    }
}

 

Like 1

Like

Share

0 comments
Show all comments