Error message

Terrasoft.Common.ReflectionUtilities FindTypeByShortName - Could not load file or assembly 'SharpSvn.dll' or one of its dependencies. The specified module could not be found.

System.IO.FileNotFoundException: Could not load file or assembly 'SharpSvn.dll' or one of its dependencies. The specified module could not be found.

File name: 'SharpSvn.dll'

at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)

at System.Reflection.Assembly.LoadFrom(String assemblyFile)

at Terrasoft.Web.Common.AssemblyResolver.FindAssemblyByProcessRunMode(String requestingAssemblyName, String searchSubDirectory)

at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)

 

Solution

Install Microsoft Visual C++ 2010 Redistributable

Like 1

Like

Share

0 comments
Show all comments

Case description:

We want to show different printables for different opportunity stages.

Algorithm of realization:

  1.  Create replacing client modules for OpportunityPageV2 and OpportunitySectionV2.
  2. Add message that will refresh print button when we work in CombinedMode and add event handler which run when opportunity stage was changed.
    1. OpportunityPageV2

      define("OpportunityPageV2", ["SysModuleReport"], function (SysModuleReport) {
          return {
              entitySchemaName: "Opportunity",
              details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
              attributes: {
                  "Stage": {
                      "onChange": "onStageChanged"
                  }
              },
              messages: {
                  "PrintButtonFilterMessage": {
                      mode: Terrasoft.MessageMode.PTP,
                      direction: Terrasoft.MessageDirectionType.PUBLISH
                  }
              },
              methods: {
                  printButtonFilterPublishMessage: function () {
                      return this.sandbox.publish("PrintButtonFilterMessage", this.get("Stage").value, ["key"]);
                  },
                  onStageChanged: function () {
                      this.printButtonFilterPublishMessage();
                  }
              },
              diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
              rules: {},
              businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
          };
      });

       

    2. OpportunitySectionV2

      define("OpportunitySectionV2", [], function () {
          return {
              messages: {
                  "PrintButtonFilterMessage": {
                      mode: Terrasoft.MessageMode.PTP,
                      direction: Terrasoft.MessageDirectionType.SUBSCRIBE
                  }
              },
              methods: {
                  init: function () {
                      this.callParent(arguments);
                      this.sandbox.subscribe("PrintButtonFilterMessage", this.onPrintButtonFilterMessage, this, ["key"]);
                  },
                  onPrintButtonFilterMessage: function (args) {
                      this.set("StageId", args);
                  }
              },
              diff: []
          };
      });

       

  3. Override preparePrintFormsMenuCollection method in both pages and add calling of initCardPrintForms() and initSectionPrintForms() on stage changing and PrintButtonFilterMessage handling.
    1. OpportunityPageV2 

      define("OpportunityPageV2", ["SysModuleReport"], function (SysModuleReport) {
          return {
              entitySchemaName: "Opportunity",
              details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
              attributes: {
                  "Stage": {
                      "onChange": "onStageChanged"
                  }
              },
              messages: {
                  "PrintButtonFilterMessage": {
                      mode: Terrasoft.MessageMode.PTP,
                      direction: Terrasoft.MessageDirectionType.PUBLISH
                  }
              },
              methods: {
                  preparePrintFormsMenuCollection: function (printForms) {
                      var stage = this.get("Stage");
                      printForms.eachKey(function (key, item) {
                          if (!item.get("Caption")) {
                              item.set("Caption", item.get("NonLocalizedCaption"));
                          }
                          item.set("Tag", key);
                          if (item.get("TypeColumnValue")) {
                              item.set("Visible", { bindTo: "getPrintMenuItemVisible" });
                          }
                          //Here is your logic for filtering of printables
                          /*************************************************************************/
                          if (stage !== undefined) {
                              if (stage.value === "423774cb-5ae6-df11-971b-001d60e938c6") {
                                  if (key === "0d8c28ce-9794-42be-8427-3d5d60e60c1f") {
                                      item.set("Visible", false);
                                  }
                                  else {
                                      item.set("Visible", true);
                                  }
                              } else if (stage.value === "fb563df2-5ae6-df11-971b-001d60e938c6") {
                                  if (key === "c80094c5-2513-4857-b5da-4b355aed8c10") {
                                      item.set("Visible", false);
                                  }
                                  else {
                                      item.set("Visible", true);
                                  }
                              } else {
                                  item.set("Visible", true);
                              }
                          }
                          /*************************************************************************/
                      }, this);
                  },
                  printButtonFilterPublishMessage: function () {
                      return this.sandbox.publish("PrintButtonFilterMessage", this.get("Stage").value, ["key"]);
                  },
                  onStageChanged: function () {
                      this.initCardPrintForms();
                      this.printButtonFilterPublishMessage();
                  }
              },
              diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
              rules: {},
              businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
          };
      });

       

    2. OpportunitySectionV2

      define("OpportunitySectionV2", [], function() {
          return {
              messages: {
                  "PrintButtonFilterMessage": {
                      mode: Terrasoft.MessageMode.PTP,
                      direction: Terrasoft.MessageDirectionType.SUBSCRIBE
                  }
              },
              methods: {
                  preparePrintFormsMenuCollection: function(printForms) {
                      printForms.eachKey(function(key, item) {
                          if (!item.get("Caption")) {
                              item.set("Caption", item.get("NonLocalizedCaption"));
                          }
                          item.set("Tag", key);
                          if (item.get("TypeColumnValue")) {
                              item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
                          }
                          //Here is your logic for filtering of printables
                          /*************************************************************************/
                          if (this.get("StageId") !== undefined) {
                              if (this.get("StageId") === "423774cb-5ae6-df11-971b-001d60e938c6") {
                                  if (key === "0d8c28ce-9794-42be-8427-3d5d60e60c1f") {
                                      item.set("Visible", false);
                                  }
                                  else {
                                      item.set("Visible", true);
                                  }
                              } else if (this.get("StageId") === "fb563df2-5ae6-df11-971b-001d60e938c6") {
                                  if (key === "c80094c5-2513-4857-b5da-4b355aed8c10") {
                                      item.set("Visible", false);
                                  }
                                  else {
                                      item.set("Visible", true);
                                  }
                              } else {
                                  item.set("Visible", true);
                              }
                          }
                          /*************************************************************************/
                      }, this);
                  },
                  init: function() {
                      this.callParent(arguments);
                      this.sandbox.subscribe("PrintButtonFilterMessage", this.onPrintButtonFilterMessage, this, ["key"]);
                  },
                  onPrintButtonFilterMessage: function(args) {
                      this.set("StageId", args);
                      this.initSectionPrintForms();
                      this.initCardPrintForms();
                  }
              },
              diff: []
          };
      });

      !!!IMPORTANT!!! - in preparePrintFormsMenuCollection() you can change code only between comments

      Identificators of printables you can get from SysModuleReport table in you DB

Like 0

Like

Share

1 comments

Hi Tatiana Rogova,

       This solution doesn't work in section, because the function preparePrintFormsMenuCollection can't get stage value to check. Please double check and update your solution.

Thanks

Toàn Mai

Show all comments

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

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

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

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 3

Like

Share

0 comments
Show all comments

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

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