There seems to be a new interface available for Object Permissions.  However, some of our team sees the new interface when we click on the link in System Designer, while others are taken to the Advanced settings page.  Is there a setting that configures which interface individuals see or is this part of beta testing?

Like 0

Like

10 comments

Hi,

Link "Object permission" will take you to the new interface, while "Advanced settings" in admin area are still leading to old interface. May be those users used different links? 

Best regards,

Angela

Angela Reyes,

Using the Object permissions link takes me to the page in Advanced settings, not the new UI. This is true for all but one member of my team. The new functionality is not working reliably.

Janine White,

It is likely that internal feature that turns on this functionality is turned on only for that user. Tu turn that on for all users you can run the following SQL script: 

DECLARE @featureCode varchar(max) = 'NewRightsManagementUI',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

Best regards,

Dennis

Dennis Hudson,

How did that get turned on for only one user in our instance?  I thought this was a core feature of bpm'online studio. This is not something that we have set.  If it is being implemented universally for System Administrators, shouldn't there be a setting for it and/or be implemented for all or none based on the System Administrator role automatically?  Will we have to do this every time there is a new System Administrator? This seems like a bug, not a feature, to me.

Janine White,

Unfortunately it is hard to tell how it could get turned on only for only one user as the changes in AdminUnitFeatureState are not logged by default. It may have happened because of some glitch in updating process, also this may have been set with a query in SQL executor. Nevertheless, the script I've sent earlier turns this feature on for All employees organisational role.

Best regards,

Dennis

Dennis Hudson,

Again, this was not set by anyone on my team.  If there was a glitch in the upgrade, what else was missed?  Should we roll back our instance 7.13 and have the 7.14 upgrade reapplied?

Janine White,

Dear Janine,

We've resolved this issue in terms of support incident. As described the issue was in incorrect feature activation. We've reactivated it for your application and it resolved the issue and all users are now able to see new access rights designer. These are SQL-queries that were used while resolving the issue:

delete from AdminUnitFeatureState where id = '0A27067D-5177-401D-9D17-9586B27F9EA8'



insert into AdminUnitFeatureState(FeatureId, SysAdminUnitId, FeatureState) values ((select id from Feature

where Code = 'NewRightsManagementUI'), 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1)

Best regards,

Oscar

I appreciate the fix.  The interface is working for everyone now. However, as a Quality Engineer, I'm concerned about root cause. As I mentioned above, if the discrepancy was the result of a bad install, then there could be other issues that need to be resolved as well that we haven't realized. For example, the 7.14 upgrade also broke the main menu system.  It is no longer ordered as specified in Workplace setup, rather it only appears alphabetically, which has been reported to support.

Janine White, 

Without gathering logs and investigating the issue on the site it is hard to determine what exactly caused the issue, Please send email to support@bpmonline.com so the issue would be analyzed on your site based on your request as a support case. 

Best regards,

Dennis 

Dennis Hudson,

That's already been done and the fix applied in request #SR-0806825. The root cause provided was, "The reason of the issue was in deactivated feature called 'NewRightsManagementUI," but I'm not sure what that means other than it was a coding issue that was overlooked before publishing to production.

Show all comments

Is it possible to create an editable list on section page, just like on details or in the lookup section? For small entities dealing with a list directly might be more user friendly than using the edit page.

Like 0

Like

5 comments

Dear Carlos, 

Please see the example below, hope you find it helpful:

define("ActivitySectionV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
    function() {
        return {
            entitySchemaName: "Activity",
            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);
                            this.openCardInChain({
                                id: primaryColumnValue,
                                schemaName: schemaName,
                                operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
                                moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
                            });
                        }, 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*/
        };
    }
);

Regards,

Anastasia

Anastasia Botezat,

Thank you

Anastasia Botezat,



Can we display a list in modal?

 

Best Regards,

Solem A,

Solem Khan Abdusalam,

 

Hard to say. There should be "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities" modules added as dependencies to the module of your modal window and then the grid should be added to the modal box diff. But this approach should be tested.

 

Best regards,

Oscar 

Hi,

 

I've tested the code and it works ok, but I've noticed that if you open a page and after when you want to close it, you need to click twice on close button. Did someone faced similar behavior, or knows the reason why it happens?

 

Best regards,

Jelena

Show all comments

Does BPM'Online support SSL-MA authentication? I have a financial services application that I need to connect to BPM'Online. I am going to develop few custom configuration service endpoints on BPM'Online that are going to be consumed by the financial services app. However, there is a requirement from the customer for adding an extra layer of security to any kind of interactions between the systems through client/server signed certificates(could be X.509 certificates) and perform mutual authentication. So, can mutual authentication  be performed on BPM'Online? 

Like 0

Like

2 comments

Would really appreciate some help here...

amanthena,

I'm not sure what is the difference between "mutual authentication" and just a simple authentication to an SSL application. According to the article by the link below, it seems like there is no difference.

https://blog.cloudboost.io/implementing-mutual-ssl-authentication-fc20ab2392b3

Please find how to call a bpm'online authentication service in the article by the link below. Please read all the article from the very beginning to the very end before creating the integration. There are lot of tricks that you have to use are described there. 

https://academy.bpmonline.com/documents/technic-sdk/7-13/executing-odata-queries-using-fiddler 

Show all comments

Hi,

 

Is there a way to create an autocomplete dropdown in the user interface that keeps loading data from web service calls, based on the latest search string?

 

Thanks in advance...

Like 0

Like

8 comments

Dear Amanthena,

We do not have any ready examples, however you can achieve such task in following ways.

1. Add a dependency on the field change on client side (page schema). Retrieve the value from the field and pass it on to the web service, which in turn would send this value to the external service. Receive a response and set it to the field in order to render on UI. You can see this article on web service call from client side:

https://academy.bpmonline.com/documents/technic-sdk/7-13/how-call-configuration-services-servicehelper

2. Add a dependency on the field change on client side (page schema). Call business process from the client side. Pass a parameter to the business process, this parameter would be the entered value from the field. In the business process add a web service element, which would proceed service calls and than work with the response. You can also pass the response from the service from business process on to the page like described here:

https://academy.bpmonline.com/documents/technic-sdk/7-13/process-launch-client-module

https://community.bpmonline.com/questions/refresh-page-fields-after-process-runs-update-signal

Though, it is quite complicated task.

In any way, please keep in mind, that you need to watch overall system performance and leave some time between service calls. More information can be found here:

https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf

Regards,

Anastasia

Thank you for your reply, Anastasia! The reference material helped. The part where we make a service call from javascript and trap the response is clear. But could you help me figure out the javascript APIs that will help me clear, rebind and render it to a control in the UI. Would a dropdown be the best choice here? What do you suggest?

 

amanthena,

You can send a message from back end to front end.In case you are calling external service via business process, you can check the example here:

https://community.bpmonline.com/questions/refresh-page-fields-after-process-runs-update-signal

The idea is to use sandbox to send and hear message, after message received you set it to the field with this.set.

Also you can use web sockets to communicate between front end and back end. 

https://academy.bpmonline.com/documents/technic-sdk/7-13/clientmessagebridge-client-side-websocket-message-handler

The field type depends on the data you will be working with. 

Hope you find it helpful

Anastasia

The data is a list of key-value pairs, "value" is the user friendly description and "key" is the id that needs to be persisted in the database on selection. i figured a dropdown would be the best control for this purpose. Can we programatically reset the contents of the dropdown in javascript with the data that is returned from the server? Could you tell me how "this.set" needs to be used here?



Once again, thanks for all the help! Much appreciated!

amanthena,

To set value to a lookup (dropdown), you need to pass an object with at least to parameters displayValue and value :

this.set("Country", {value: "a570b005-e8bb-df11-b00f-001d60e938c6", displayValue: "Australia"});

Regards,

Anastasia

Thank you, Anastasia! That helps. I might also need to rebind the list of items available for selection in the dropdown from the data that is returned from the API, and not just the selected item. How do I do that?

amanthena,

Lets say you have a dropdown, which is a Country lookup, when user enters a country name you launch a web service call that returns some internal code for the country. You work with currently chosen country, but want to change others too. You can run an ESQ to the Country object when setting data for current one. When collection is returned from ESQ, you can modify it with values received from web service call.

Regards,

Anasatsia

Thank you, Anastasia! I will explore this further.

Show all comments

Hi,  

I have the following multiple filters working in a lookup:

 

"filters": [

                        function() {

                            var filterGroup = Ext.create("Terrasoft.FilterGroup");

                           

                            filterGroup.add("Segment",

                                Terrasoft.createColumnFilterWithParameter(

                                    Terrasoft.ComparisonType.EQUAL,

                                    "GlgSegment",this.get("GlgSegment").value));

                            

                            filterGroup.add("SegmentLeaderRole",

                                Terrasoft.createColumnFilterWithParameter(

                                    Terrasoft.ComparisonType.EQUAL,

                                    "Role","A25AD3ED-1095-4774-91E1-54BED571EA3B"));        

                                    

                                    

                            return filterGroup;

                        }

                    ]

 

I need to add another filter but ordering the filters in the following logical operation:

Segment AND (Role OR Role)

Looking forward to your comments. 

Regards, 

Javier

 

 

 

Like 0

Like

2 comments

Just found the solution to this problem in the following thread:

https://community.bpmonline.com/questions/lookup-field-filter

Javier Collazo,

You can also take a look at this chunk of code, it also represents the combination of two filter groups. The idea is to make firstly one filter group for OR clause. Afterwards, you create a second filter group, which combines a first one OR and other clause. By default filters are added via AND.

getCurrentUserAndTypesFilter: function() {

   var filterGroup = new this.Terrasoft.createFilterGroup();

   filterGroup.logicalOperation this.Terrasoft.LogicalOperatorType.OR;

   var innerFilterGroupCreatedBy = new this.Terrasoft.createFilterGroup();

   innerFilterGroupCreatedBy.add("CurrentUser"this.Terrasoft.createColumnFilterWithParameter(

      this.Terrasoft.ComparisonType.EQUAL"Tag.CreatedBy",this.Terrasoft.SysValue.CURRENT_USER_CONTACT.value));

   innerFilterGroupCreatedBy.add("PrivateType"this.Terrasoft.createColumnFilterWithParameter(

      this.Terrasoft.ComparisonType.EQUAL"Tag.Type", TagConstants.TagType.Private));

   var innerFilterGroupOtherTypes = new this.Terrasoft.createFilterGroup();

   var types = [TagConstants.TagType.Corporate, TagConstants.TagType.Public];

   innerFilterGroupOtherTypes.add("OtherTypes",this.Terrasoft.createColumnInFilterWithParameters(

      "Tag.Type", types));

   filterGroup.addItem(innerFilterGroupCreatedBy);

   filterGroup.addItem(innerFilterGroupOtherTypes);

   return filterGroup;

},

Regards,

Anastasia

Show all comments

Hi,

How can I make the full text of a checkbox field appear in the same line and change the order of them, that is, the button appears first and then the text.

Currently appears as in the figure below.

 

Thanks!

Version: 7.14

 

Like 0

Like

1 comments

Try to create a replacing client module for the page module and modify CSS of the checkboxes according to the article by the link below.

https://community.bpmonline.com/questions/how-add-custom-style-control-page-based-condition

Show all comments

Hi,

How can I change a checkbox design so that the text appears all in the same line and not as the image bellow?

Like 0

Like

1 comments

Hello Nuno!



Usually, for changing the appearance of some elements css stylesheets are used.

The idea is to override css rules for the desired elements. I also recommend to use devtools to test css rules in runtime. Article about it: https://developers.google.com/web/tools/chrome-devtools/css/



Also please note on these articles where similar development cases are displayed:



1. https://academy.bpmonline.com/documents/technic-sdk/7-12/advanced-settings-custom-detail-fields?_ga=2.91757139.837207587.1557733380-1226153156.1549047745

2. https://community.bpmonline.com/questions/how-add-custom-style-control-page-based-condition

3. https://community.bpmonline.com/articles/how-add-or-edit-css-style



Best regards,

Alex

Show all comments



Hi,

 

Does anyone know if there's a way to unmerge the merged contacts?

 

Regards,

AK

Like 0

Like

2 comments

Hi,

Basically, merge deletes all duplicate records from DB, so after records are merged they cannot be restored. You can create a backup before merging records to use it later for restoring data. 

Best regards,

Angela

Ah Alright. No worries.

Thanks :)

Show all comments

Does the notification " Deduplication task completed" imply that there are no duplicates in the system?

 

When I run the duplicate search in the contacts section, I get this notification.

Like 0

Like

3 comments

Hello,

This notification indicates that the process of duplicates search is finished, but there are two possible results: duplicates are found or duplicates are not found. To find out if duplicates were found you can go to "Setup duplicates rules" section of system designer and in "Actions" drop-down choose "Show duplicate contacts/accounts". This action will open the list of duplicated contacts or accounts. Or you can click on "Actions" in accounts or contacts section and click on "Show duplicate accounts/contacts" and it should return the list of duplicates.

Best regards,

Oscar

Oscar Dylan,

Alright!

Also, what does this error imply?

I've been getting this error for last few hours when I run the duplicate search.

aaykay,

This error can be received if there are some issues with duplicates search functionality like incorrect procedure (or errors in it) that is executed when the search is started. It is difficult to say without access to the application in which the issue can be reproduced. Please email us at support@bpmonline.com and provide us with access to the application and we will check it.

Best regards,

Oscar

Show all comments

Hi,

 

Can someone please help me with how to create columns for the lookups?

When we create a new lookup, it only has 2 columns: Name and Description. As you can see below, the following lookup has another column called Region Code.

How can we create this kind of lookups?

Also, how can we create lookups such as city which is linked to all the different objects? Is it documented somewhere or if someone can guide me, that'd be great.

Thanks.

Like 0

Like

2 comments

Hello, 

If you have section for this lookup you can open section wizard for this section and drag and drop field of a needed type (if you want it to link to other objects it would be a lookup type field). If you don't have a section for this lookup you can open the configuration (advanced settings -> configuration) and whether just add a column of a needed type or create a replacing object depending on if the object is locked. 

https://academy.bpmonline.com/documents/technic-sdk/7-13/creating-entity-schema

Best regards, 

Dennis 

Dennis Hudson,

 Thanks :)

Show all comments