knowledge base
SDK
Q&A
support

Question

The customer experiences problems with searching Contact duplicates. Bpm'online finds duplicates, the duplicate page is opened, but when the [Save] button is clicked, nothing happens.

Answer

The problem is that the customer replaced the "Contact" object and set its "Email" field as "required". If you deselect this setting option, the duplicates will be merged without errors. If a user needs to make the "Email" field population required without impacting the base functionality, this must be done via business rules:

https://academy.bpmonline.com/documents/technic-sdk/7-13/business-rules…

Like 0

Like

Share

0 comments
Show all comments

Symptoms

"The error code is 0x803F7000" error when installing bpm'online mobile 7 for Windows 10.

Cause

The error is related to the local settings of Windows 10. Possible reasons for the error:

  • Windows Store Cache.
  • Wrong date and time.
  • Windows is not activated.
  • Microsoft server is overloaded.

Solution

Links that describe the cause and solution of this problem:

-    http://answers.microsoft.com/en-us/windows/forum/windows_10-win_upgrade/error-code-0x803f7000-in-windows-store-10/18f61f6f-009a-435f-8d33-6956e301a849?auth=1

-    http://www.fixerrs.com/2015/09/fix-error-0x803f7000-windows-10-store.html

-    http://errortools.com/windows/how-to-fix-windows-10-error-code-0x803f7000/

-    http://microsoftfixnow.com/error-code-0x803f7000-windows-10-while-accessing-windows-store/

Like 0

Like

Share

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

Question

How can I add a label to a section page? We can add columns when configuring section page settings. What about adding a string with a fixed label in it and not a column, can we add it? 

Answer

In the configurator, in your section page schema, add a localized string and the following code in the diff property:

{
    "operation": "insert",
    "name": "UsrTestLabel",
    "values": {
        "layout": {
            "column": 12,
            "row": 0,
            "colSpan": 12,
            "rowSpan": 1
        },
        "itemType": Terrasoft.ViewItemType.LABEL,
        "caption": {
            "bindTo": "Resources.Strings.UsrTestLabelString"
        }
    },
    "parentName": "Header",
    "propertyName": "items"
},

The "layout" block describes the element location and size.

Like 0

Like

Share

2 comments

hi,

do you have the code to make the custom label has different css / style from  default css .t-label ?

thank you

Dear Antonius,

Please find more information in the article by the link below:



https://community.bpmonline.com/questions/how-add-custom-style-control-…



Best regards,

Norton

Show all comments

Question

We have check-ins and check-outs in our mobile application. After transferring them into the main application, where can I see them?

Answer

Unfortunately, this data is not displayed in the base version of our product. You can find this data in the DB table (CheckInOutResult). Your question requires development skills, which are taught by our company. We store information about the visit locally on the device and then transfer it during synchronization. Data acquisition at check-in (FieldForceMobileUtilitiesV2 schema):

checkInOut: function(activityId, isCheckIn) {
    Terrasoft.Geolocation.getCurrentCoordinates({
        success: function(latitude, longitude) {
            var checkinResultModelName = "CheckInOutResult";
            var saveQueryConfig = Ext.create("Terrasoft.QueryConfig", {
                modelName: checkinResultModelName,
                columns: ["GpsX", "GpsY", "Activity", "IsCheckIn", "ActionTime"]
            });
            var checkInOutRecord = Ext.create("CheckInOutResult", {
                Activity: activityId,
                GpsX: String(latitude),
                GpsY: String(longitude),
                IsCheckIn: isCheckIn,
                ActionTime: new Date()
            });
            checkInOutRecord.save({
                queryConfig: saveQueryConfig,
                success: function() {
                    this.changeActivityStatusByCheckInOut(isCheckIn);
                },
                failure: this.failureHandler
            }, this);
        },
        failure: this.failureHandler,
        scope: this
    });
},

The process of getting current coordinates is described in the “FieldForceMapsModule” schema. Also, the coordinates that bpm'online receives can be controlled. An example of the current implementation of the Terrasoft.Geolocation.getCurrentCoordinates method:

getCurrentCoordinates: function(config) {
   var enableHighAccuracy = !Terrasoft.Connection.isOnline() ||
      Terrasoft.Connection.getType() !== Terrasoft.ConnectionTypes.WiFi;
   var geo = Ext.create("Ext.util.Geolocation", {
      autoUpdate: false,
      allowHighAccuracy: enableHighAccuracy,
      timeout: 60000,
      listeners: {
         scope: this,
         locationupdate: function(geo) {
            Ext.callback(config.success, config.scope, [geo.getLatitude(), geo.getLongitude()]);
         },
         locationerror: function(geo, timeout, permissionDenied, locationUnavailable, message) {
            …
         }
      }
   });
   geo.updateLocation();
}

If there is no Internet connection or this connection is not WiFi (EDGE, 3G), then “exact” positioning will be used (GPS), otherwise data will be obtained using WiFi, caching, etc., in ways that give inaccurate representations of the location of the device, but are quite sufficient for carrying out business tasks. If you need to receive data using GPS, you can create your own implementation of the action, by analogy with how it is implemented in bpm'online:

getCurrentCoordinates: function(config) {
   var geo = Ext.create("Ext.util.Geolocation", {
      autoUpdate: false,
      allowHighAccuracy: true,
      timeout: 60000,
      listeners: {
         scope: this,
         locationupdate: function(geo) {
            Ext.callback(config.success, config.scope, [geo.getLatitude(), geo.getLongitude()]);
         },
         locationerror: function(geo, timeout, permissionDenied, locationUnavailable, message) {
            …
         }
      }
   });
   geo.updateLocation();
}

When implementing you need to consider that this method has a number of problems:



- despite the fact that the GPS method is more accurate, the time for obtaining such data can be quite long (up to 10-15 minutes);

- the waiting time for receiving the response should be increased, i.e. the timeout parameter above in the code will need to be set to more than 1 minute (60,000 ms);

- any overlap, interference in the form of any objects may not allow obtaining coordinates;

- the battery is drained faster, which is very critical for Android devices.

Like 0

Like

Share

4 comments

If we don't buy field management product in Creatio, can we access the FieldForceMapsModule schema? Or any other method to get the coordinate of the mobile phone(android & Mac.), 



   Right now , I am learning Creation deveopment training by DMITRIY, is still learning a  lot of things in Creatio.

Jeffrey,

 

This schema is available only in the FieldForce package. 

Bogdan,

Thanks for your reply. 

If I use c# code to write my own pacakge to detect the mobile gps, it shall be done in Creatio, right?

Jeffrey,

Yes, it should be done in Creatio configuration. 

Show all comments

Symptoms

A photo or a file is added to the "Attachments" detail in one of the sections.

The following error occurs after synchronization:

Bpm'online mobile bug report

Type: Terrasoft.ODataException 

Message: An error occurred while processing this request. 

The message contains: It is impossible to get the value of the Data column because it was not loaded

Cause

The following code is found in the ScriptFileSaving script of the File scehma:

var data = Entity.GetColumnValue("Data") as byte[];

If you update the data in this schema (via OData) and do not specify the Data column, the system displays an error message saying it was not loaded.

This situation can occur if there is a cyclic connection in the file table (ActivityFile, OpportunityFile, etc.).

For example, an Activity column exists in the ActivityFile table, and refers to the Activity table, in which, there is the UsrActivityFile reference column, which refers to the ActivityFile table.

The mobile app tracks that and splits a single query

INSERT INTO ActivityFile (Id, Name, Data, Activity) VALUES (1, 2, 3, 4)

Into two queries:

INSERT INTO ActivityFile (Id, Name, Data) VALUES (1, 2, 3)
UPDATE ActivityFile SET Activity = 4 WHERE Id = 1

The second request does not work.

Solution

There is a workaround. Add the IgnoreSplitLogActions flag to the manifest of the nexessary table:

{
   "SyncOptions": {
      "ModelDataExportConfig": [
         {
            "Name": "ActivityFile",
            "IgnoreSplitLogActions": true
         }
      ],

As a result, the file insertion will not be split into two requests.

Necessary conditions and possible restrictions

For UIV1, it is necessary to additionally "calibrate" the schema:

if (!Terrasoft.SysSettingsValue.getBooleanValue("UseMobileUIV2")) {
    /* * Moved from UIV2 */
    Ext.define("Terrasoft.Sync.LogManager.override", {
        override: "Terrasoft.Sync.LogManager",
        /** * @private */
        ignoreSplitLogActions: function(logAction) {
            var modelName = logAction.get("ModelName");
            var manifest = Terrasoft.ApplicationConfig.manifest;
            var ignore = false;
            if (manifest.SyncOptions) {
                var modelDataExportConfig = manifest.SyncOptions.ModelDataExportConfig || [];
                for (var i = 0, ln = modelDataExportConfig.length; i < ln; i++) {
                    var modelConfig = modelDataExportConfig[i];
                    if (Ext.isObject(modelConfig) && modelConfig.Name === modelName) {
                        ignore = modelConfig.IgnoreSplitLogActions;
                        break;
                    }
                }
            }
            return ignore === true;
        },
        /** * @private */
        splitLogActions: function() {
            var firstTierActions = this.firstTierActions = [];
            var secondTierActions = this.secondTierActions = [];
            for (var i = 0, ln = this.mergedLogActions.length; i < ln; i++) {
                var logAction = this.mergedLogActions[i];
                if (this.isCreateAction(logAction) && !this.ignoreSplitLogActions(logAction)) {
                    firstTierActions.push(logAction);
                    this.splitLogActionWithLoopColumns(logAction);
                    this.splitLogActionWithBinaryColumns(logAction);
                } else {
                    secondTierActions.push(logAction);
                    if (this.isUpdateAction(logAction)) {
                        this.splitLogActionWithBinaryColumns(logAction);
                    }
                }
            }
        }
    });
}

 

Like 1

Like

Share

0 comments
Show all comments
SDK
support
cases

Case description:

We need to configure editable grid in section for quick record editing (editable grid like in details).

Algorithm of realization:

  1. Create replacing client schema of your section. For example ContactSectionV2.
  2. Add following dependencies into array of dependecies:

    define("ActivitySectionV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
        function() {

     

  3. Add ConfigurationGridUtilites into "mixins" section:

    mixins: {
        ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
    },

     

  4. Add boolean virtual column into "attributes":

    attributes: {
        IsEditable: {
            dataValueType: Terrasoft.DataValueType.BOOLEAN,
            type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
            value: true
        }
    },

     

  5. Add overriding for following methods:

    edit: function() {
        var procElId = this.getActiveRow().get("ProcessElementId");
        var recordId = this.get("ActiveRow");
        if (procElId && !this.Terrasoft.isEmptyGUID(procElId)) {
            this.sandbox.publish("ProcessExecDataChanged", {
                procElUId: procElId,
                recordId: recordId,
                scope: this,
                parentMethodArguments: null,
                parentMethod: function() {
                    return false;
                }
            });
            return true;
        }
        this.editRecord(recordId);
    },
    editRecord: function(primaryColumnValue) {
        this.Terrasoft.chain(
            function(next) {
                var activeRow = this.findActiveRow();
                this.saveRowChanges(activeRow, next);
            },
            function() {
                var activeRow = this.getActiveRow();
                var typeColumnValue = this.getTypeColumnValue(activeRow);
                var schemaName = this.getEditPageSchemaName(typeColumnValue);
                             
                var config = {
                    schemaName: schemaName,
                    id: primaryColumnValue,
                    operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
                    moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
                };
                             
                this.sandbox.publish("PushHistoryState", {
                    hash: Ext.String.format("{0}/{1}/{2}/{3}",
                        "CardModuleV2", schemaName, Terrasoft.ConfigurationEnums.CardOperation.EDIT, primaryColumnValue),
                    silent: true
                });
                this.openCardInChain(config);
            }, this);
    },
    addRecord: function(typeColumnValue) {
        if (!typeColumnValue) {
            if (this.get("EditPages").getCount() > 1) {
                return false;
            }
            var tag = this.get("AddRecordButtonTag");
            typeColumnValue = tag || this.Terrasoft.GUID_EMPTY;
        }
        this.addRow(typeColumnValue);
    },
    copyRecord: function(primaryColumnValue) {
        this.copyRow(primaryColumnValue);
    },
    getGridRowViewModelConfig: function() {
        var gridRowViewModelConfig =
            this.mixins.GridUtilities.getGridRowViewModelConfig.apply(this, arguments);
        Ext.apply(gridRowViewModelConfig, {entitySchema: this.entitySchema});
        var editPages = this.get("EditPages");
        this.Ext.apply(gridRowViewModelConfig.values, {HasEditPages: editPages && !editPages.isEmpty()});
        return gridRowViewModelConfig;
    },
    getGridRowViewModelClassName: function() {
        return this.mixins.GridUtilities.getGridRowViewModelClassName.apply(this, arguments);
    },
    onRender: function() {
        this.callParent(arguments);
        if (!this.get("Restored")) {
            this.reloadGridColumnsConfig(true);
        }
    },
    getDefaultGridColumns: function() {
        var systemColumns = this.systemColumns;
        var allowedDataValueTypes = this.get("AllowedDataValueTypes");
        var entitySchema = this.entitySchema;
        var entitySchemaColumns = [];
        Terrasoft.each(entitySchema.columns, function(column, columnName) {
            if (Ext.Array.contains(systemColumns, columnName) ||
                !Ext.Array.contains(allowedDataValueTypes, column.dataValueType)) {
                return;
            }
            entitySchemaColumns.push(column);
        }, this);
        var primaryDisplayColumnName = entitySchema.primaryDisplayColumnName;
        entitySchemaColumns.sort(function(a, b) {
            if (a.name === primaryDisplayColumnName) {
                return -1;
            }
            if (b.name === primaryDisplayColumnName) {
                return 1;
            }
            return 0;
        }, this);
        return (entitySchemaColumns.length > 4) ? entitySchemaColumns.slice(0, 4) : entitySchemaColumns;
    },
    onActiveRowAction: function() {
        this.mixins.ConfigurationGridUtilities.onActiveRowAction.apply(this, arguments);
        this.callParent(arguments);
    },
    onActiveRowAction: function(buttonTag, primaryColumnValue) {
        switch (buttonTag) {
            case "card":
                this.edit();
                break;
            case "copy":
                this.copyRecord(primaryColumnValue);
                break;
            case "remove":
                this.deleteRecords();
                break;
            case "cancel":
                this.discardChanges(primaryColumnValue);
                break;
            case "save":
                this.onActiveRowSave(primaryColumnValue);
                break;
        }
    }

     

  6. Add following elements into "diff" array:

    {
        "operation": "merge",
        "name": "DataGrid",
        "values": {
            "className": "Terrasoft.ConfigurationGrid",
            "generator": "ConfigurationGridGenerator.generatePartial",
            "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
            "changeRow": {"bindTo": "changeRow"},
            "unSelectRow": {"bindTo": "unSelectRow"},
            "onGridClick": {"bindTo": "onGridClick"},
            "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
            "activeRowAction": {"bindTo": "onActiveRowAction"},
            "multiSelect": {"bindTo": "MultiSelect"}
        }
    },
    {
        "operation": "insert",
        "name": "activeRowActionSave",
        "parentName": "DataGrid",
        "propertyName": "activeRowActions",
        "values": {
            "className": "Terrasoft.Button",
            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
            "tag": "save",
            "markerValue": "save",
            "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
        }
    },
    {
        "operation": "insert",
        "name": "activeRowActionCopy",
        "parentName": "DataGrid",
        "propertyName": "activeRowActions",
        "values": {
            "className": "Terrasoft.Button",
            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
            "tag": "copy",
            "markerValue": "copy",
            "imageConfig": {"bindTo": "Resources.Images.CopyIcon"}
        }
    },
    {
        "operation": "insert",
        "name": "activeRowActionCard",
        "parentName": "DataGrid",
        "propertyName": "activeRowActions",
        "values": {
            "className": "Terrasoft.Button",
            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
            "tag": "card",
            "markerValue": "card",
            "visible": {"bindTo": "HasEditPages"},
            "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
        }
    },
    {
        "operation": "insert",
        "name": "activeRowActionCancel",
        "parentName": "DataGrid",
        "propertyName": "activeRowActions",
        "values": {
            "className": "Terrasoft.Button",
            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
            "tag": "cancel",
            "markerValue": "cancel",
            "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
        }
    },
    {
        "operation": "insert",
        "name": "activeRowActionRemove",
        "parentName": "DataGrid",
        "propertyName": "activeRowActions",
        "values": {
            "className": "Terrasoft.Button",
            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
            "tag": "remove",
            "markerValue": "remove",
            "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
        }
    },
    {
        "operation": "remove",
        "name": "DataGridActiveRowOpenAction"
    },
    {
        "operation": "remove",
        "name": "DataGridActiveRowCopyAction"
    },
    {
        "operation": "remove",
        "name": "DataGridActiveRowDeleteAction"
    },
    {
        "operation": "remove",
        "name": "ProcessEntryPointGridRowButton"
    }

     

  7. Full code of example:

     

    define("ContactSectionV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
        function() {
            return {
                entitySchemaName: "Contact",
                messages: {},
                mixins: {
                    ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
                },
                attributes: {
                    IsEditable: {
                        dataValueType: Terrasoft.DataValueType.BOOLEAN,
                        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                        value: true
                    }
                },
                methods: {
                    edit: function() {
                        var procElId = this.getActiveRow().get("ProcessElementId");
                        var recordId = this.get("ActiveRow");
                        if (procElId && !this.Terrasoft.isEmptyGUID(procElId)) {
                            this.sandbox.publish("ProcessExecDataChanged", {
                                procElUId: procElId,
                                recordId: recordId,
                                scope: this,
                                parentMethodArguments: null,
                                parentMethod: function() {
                                    return false;
                                }
                            });
                            return true;
                        }
                        this.editRecord(recordId);
                    },
                    editRecord: function(primaryColumnValue) {
                        this.Terrasoft.chain(
                            function(next) {
                                var activeRow = this.findActiveRow();
                                this.saveRowChanges(activeRow, next);
                            },
                            function() {
                                var activeRow = this.getActiveRow();
                                var typeColumnValue = this.getTypeColumnValue(activeRow);
                                var schemaName = this.getEditPageSchemaName(typeColumnValue);
                             
                                var config = {
                                    schemaName: schemaName,
                                    id: primaryColumnValue,
                                    operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
                                    moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
                                };
                             
                                this.sandbox.publish("PushHistoryState", {
                                    hash: Ext.String.format("{0}/{1}/{2}/{3}",
                                        "CardModuleV2", schemaName, Terrasoft.ConfigurationEnums.CardOperation.EDIT, primaryColumnValue),
                                    silent: true
                                });
                            this.openCardInChain(config);
                        }, this);
                    },
                    addRecord: function(typeColumnValue) {
                        if (!typeColumnValue) {
                            if (this.get("EditPages").getCount() > 1) {
                                return false;
                            }
                            var tag = this.get("AddRecordButtonTag");
                            typeColumnValue = tag || this.Terrasoft.GUID_EMPTY;
                        }
                        this.addRow(typeColumnValue);
                    },
                    copyRecord: function(primaryColumnValue) {
                        this.copyRow(primaryColumnValue);
                    },
                    getGridRowViewModelConfig: function() {
                        var gridRowViewModelConfig =
                            this.mixins.GridUtilities.getGridRowViewModelConfig.apply(this, arguments);
                        Ext.apply(gridRowViewModelConfig, {entitySchema: this.entitySchema});
                        var editPages = this.get("EditPages");
                        this.Ext.apply(gridRowViewModelConfig.values, {HasEditPages: editPages && !editPages.isEmpty()});
                        return gridRowViewModelConfig;
                    },
                    getGridRowViewModelClassName: function() {
                        return this.mixins.GridUtilities.getGridRowViewModelClassName.apply(this, arguments);
                    },
                    onRender: function() {
                        this.callParent(arguments);
                        if (!this.get("Restored")) {
                            this.reloadGridColumnsConfig(true);
                        }
                    },
                    getDefaultGridColumns: function() {
                        var systemColumns = this.systemColumns;
                        var allowedDataValueTypes = this.get("AllowedDataValueTypes");
                        var entitySchema = this.entitySchema;
                        var entitySchemaColumns = [];
                        Terrasoft.each(entitySchema.columns, function(column, columnName) {
                            if (Ext.Array.contains(systemColumns, columnName) ||
                                !Ext.Array.contains(allowedDataValueTypes, column.dataValueType)) {
                                return;
                            }
                            entitySchemaColumns.push(column);
                        }, this);
                        var primaryDisplayColumnName = entitySchema.primaryDisplayColumnName;
                        entitySchemaColumns.sort(function(a, b) {
                            if (a.name === primaryDisplayColumnName) {
                                return -1;
                            }
                            if (b.name === primaryDisplayColumnName) {
                                return 1;
                            }
                            return 0;
                        }, this);
                        return (entitySchemaColumns.length > 4) ? entitySchemaColumns.slice(0, 4) : entitySchemaColumns;
                    },
                    onActiveRowAction: function() {
                        this.mixins.ConfigurationGridUtilities.onActiveRowAction.apply(this, arguments);
                        this.callParent(arguments);
                    },
                    onActiveRowAction: function(buttonTag, primaryColumnValue) {
                        switch (buttonTag) {
                            case "card":
                                this.edit();
                                break;
                            case "copy":
                                this.copyRecord(primaryColumnValue);
                                break;
                            case "remove":
                                this.deleteRecords();
                                break;
                            case "cancel":
                                this.discardChanges(primaryColumnValue);
                                break;
                            case "save":
                                this.onActiveRowSave(primaryColumnValue);
                                break;
                        }
                    }
                },
                diff: /**SCHEMA_DIFF*/[
                    {
                        "operation": "merge",
                        "name": "DataGrid",
                        "values": {
                            "className": "Terrasoft.ConfigurationGrid",
                            "generator": "ConfigurationGridGenerator.generatePartial",
                            "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
                            "changeRow": {"bindTo": "changeRow"},
                            "unSelectRow": {"bindTo": "unSelectRow"},
                            "onGridClick": {"bindTo": "onGridClick"},
                            "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
                            "activeRowAction": {"bindTo": "onActiveRowAction"},
                            "multiSelect": {"bindTo": "MultiSelect"}
                        }
                    },
                    {
                        "operation": "insert",
                        "name": "activeRowActionSave",
                        "parentName": "DataGrid",
                        "propertyName": "activeRowActions",
                        "values": {
                            "className": "Terrasoft.Button",
                            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "save",
                            "markerValue": "save",
                            "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                        }
                    },
                    {
                        "operation": "insert",
                        "name": "activeRowActionCopy",
                        "parentName": "DataGrid",
                        "propertyName": "activeRowActions",
                        "values": {
                            "className": "Terrasoft.Button",
                            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "copy",
                            "markerValue": "copy",
                            "imageConfig": {"bindTo": "Resources.Images.CopyIcon"}
                        }
                    },
                    {
                        "operation": "insert",
                        "name": "activeRowActionCard",
                        "parentName": "DataGrid",
                        "propertyName": "activeRowActions",
                        "values": {
                            "className": "Terrasoft.Button",
                            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "card",
                            "markerValue": "card",
                            "visible": {"bindTo": "HasEditPages"},
                            "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
                        }
                    },
                    {
                        "operation": "insert",
                        "name": "activeRowActionCancel",
                        "parentName": "DataGrid",
                        "propertyName": "activeRowActions",
                        "values": {
                            "className": "Terrasoft.Button",
                            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "cancel",
                            "markerValue": "cancel",
                            "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                        }
                    },
                    {
                        "operation": "insert",
                        "name": "activeRowActionRemove",
                        "parentName": "DataGrid",
                        "propertyName": "activeRowActions",
                        "values": {
                            "className": "Terrasoft.Button",
                            "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "remove",
                            "markerValue": "remove",
                            "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                        }
                    },
                    {
                        "operation": "remove",
                        "name": "DataGridActiveRowOpenAction"
                    },
                    {
                        "operation": "remove",
                        "name": "DataGridActiveRowCopyAction"
                    },
                    {
                        "operation": "remove",
                        "name": "DataGridActiveRowDeleteAction"
                    },
                    {
                        "operation": "remove",
                        "name": "ProcessEntryPointGridRowButton"
                    }
                ]/**SCHEMA_DIFF*/
            };
        }
    );

     

  8. IMPORTANT!!! 

    1. If you want use this for activity section you should comment "activeRowActionCopy" inside "diff" array, because functionality of copying doesn`t work at activity section. 

    2. If you want use this for Lead section you should add following code into values property of "DataGrid" element inside "diff" array:

      "applyControlConfig": Terrasoft.EmptyFn

       

 

Like 1

Like

Share

1 comments

Marko Maricic,

 

Hello,

 

This approach works only with the list view. Please remove the code, select the list view in the columns setup and add the code back. Once done refresh the page and the editable grid will be displayed.

 

Best regards,

Oscar

Show all comments
SDK
support
database

SysEntitySchemaOperationRight - Access to object operation rights

SysEntitySchemaRecordDefRight - Access to object record default rights setup

EntitySchemaRecRightOperation - Record right operation access level (Read, Edit, Delete)

SysEntitySchemaColumnRight - Access to object column rights

 

SysSettings - System settings

SysSettingsValue - Value of system setting

 

SysAdminOperation – Operation itself

SysAdminOperationGrantee – List of users who have access to execute operation

 

SysWorkplace – List of workplaces

SysAdminUnitInWorkplace - Users (groups) who have access to workplace

SysModuleInWorkplace - Sections in Workplace

 

SysProfileData - Columns setup (bind data by key, ContactId and Culture)

 

SysAdminUnit – Users and user roles (functional and organizational)

SysUserInRole – List of user’s roles

 

SysPackage - list of packages installed in configuration

 

Lookup – list of lookups

Like 7

Like

Share

0 comments
Show all comments
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