Although the Approver for an Approval process element must be a Contact, the documentation only refers to employees and users.  Also, the dropdown list for Approver only contains User, Employee's manager and Role, not Contact.  This is very confusing when trying to set up approvals. Please update the documentation and dropdown list to be consistent with the functionality of the application.

[Approver] – specify the approver user. Approver can be a specific employee, manager of a specific employee, or any employee who is a member of a bpm’online organizational or functional role.
 
If you select “Employee”, specify bpm’online user who is the approver in the [Employee] field.
 
If you select “Employee's manager”, specify bpm’online user whose direct superior is the approver. Direct superior is specified in the [Manager] profile of the employee's record in the [Employees] section.

 

2 comments

Dear Janine,

The approval can only be approved by the user of the system. That is why in Approver dropdown you can choose user(employee) himself, manager of a user(employee) who is also a user and role, which is a group of users. Contacts can not be approvers as contact is not necessarily a user of the system and it's not quite logical to give an option to approve for a non-user as it wouldn't be possible to approve an approval for the Contact who is not a user. That is why Contact is neither in a dropdown list nor in a documentation. 

Best regards, 

Dennis 

Dennis Hudson,

The action only works when a Contact object is used, not a User or Employee.  It may need to be a Contact who is a User, but User doesn't work. Only a Contact can be selected.

Show all comments

What section is Approver expecting passed in the Approval process element?  The documentation below is using Employee and User interchangeably. The Approver field will not accept Manager read from an Employee record using a Read data System action and errors when the manager's User Id read from the System administration object is passed.

[Approver] – specify the approver user. Approver can be a specific employee, manager of a specific employee, or any employee who is a member of a bpm’online organizational or functional role.
 
If you select “Employee”, specify bpm’online user who is the approver in the [Employee] field.
 
If you select “Employee's manager”, specify bpm’online user whose direct superior is the approver. Direct superior is specified in the [Manager] profile of the employee's record in the [Employees] section.
Terrasoft.Common.DbOperationException: The INSERT statement conflicted with the FOREIGN KEY constraint "FKep594q6vK4JwPEgwcbsZ9TIk". The conflict occurred in database "katerra", table "dbo.UsrKaterraContactRoles", column 'Id'.
The statement has been terminated. ---> System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FKep594q6vK4JwPEgwcbsZ9TIk". The conflict occurred in database "katerra", table "dbo.UsrKaterraContactRoles", column 'Id'.
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Polly.Policy.<>c__DisplayClass119_0`1.<Execute>b__0(Context ctx, CancellationToken ct)
   at Polly.Policy.<>c__DisplayClass129_0`1.<ExecuteInternal>b__0(Context ctx, CancellationToken ct)
   at Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct)
   at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.Execute[TResult](Func`1 action)
   at Terrasoft.DB.MSSql.MSSqlExecutor.FailoverExecute[TResult](DbCommand command, Func`1 func)
   at Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)
   at Terrasoft.Core.DB.DBExecutor.Execute(String sqlText, QueryParameterCollection queryParameters)
   at Terrasoft.Core.Entities.Entity.InsertToDB(Boolean skipLookupColumnValues, Boolean validateRequired)
   --- End of inner exception stack trace ---
   at Terrasoft.Core.Entities.Entity.InsertToDB(Boolean skipLookupColumnValues, Boolean validateRequired)
   at Terrasoft.Core.Entities.Entity.InternalSave(Boolean validateRequired, Boolean setColumnDefValue)
   at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue)
   at Terrasoft.Core.Process.ProcessEngineImpl.AddProcessListener(Entity entity, Guid processElementUId, String conditionData, String changedColumns, EntityChangeType entityChangeType)
   at Terrasoft.Core.Process.Configuration.ApprovalUserTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

 

Like 0

Like

1 comments

Hello,



It seems that "Approver" is not a section, but a field in "employee" object. This fields should contain the Id of contact instead of id of the system administration object. 

In case you use script task and have difficulties with it, you may try to create a business process and use process elements like "read data" or "modify data" to perform some manipulations with data.



Basically, what I recommend to do is to trigger business process from the c# code. 

https://community.bpmonline.com/questions/calling-business-process-parameters-anonymous-web-service 



Best regards,

Alex

Show all comments

Hi,

I have gone through this doc

For a contact, once I try to click on FB button from 'Communication options' than nothing is happening and below errors are showing on browser console

I'm doing this testing on local dev system. If 'http' is causing problem than how to avoid this issue?

 

Any help will be highly appreciable.

 

Regards

Like 0

Like

1 comments

Dear Muhammad, 

The error says that the site needs to be switched to https, you can find the instruction how to set it up here: https://academy.bpmonline.com/documents/administration/7-13/switching-h…

However, the integration with Facebook may be working incorrectly now because Facebook closed the possibility to integrate with closing their API.

Best regards, 

Dennis 

 

Show all comments

Hi,

Translation Section loading not completing and continuously showing loading message "Loading Actualisation" since 4 hours. Is there any missing configuration which causing this slowness?

application in on-site*

Any help will be highly appreciable.

 

Regards

Like 0

Like

1 comments

Dear Muhammad, 

Translation actualization indeed can take much time since the system actualizes all translations even if no modifications were made and especially if you have multilingual application. However, since the process takes 4 hours without ending, most likely there is some issue in your application. To understand the reason for it, please try to wait till the process is finished, even if it takes more time. We need to know that the process can be either finished within some time or it cannot be finished at all. With the results, I'd like to ask you to contact our support team for deeper investigation of the problem. Could you please email our support team at support@bpmonline.com and also provide the screenshot of loading page with opened browser console? Thank you beforehand.

Best regards,

Dean

Show all comments

Hi Community,

Any idea how to fix this issue, we have already changed the title of our section and disable the add record mini page in our development but when we transfer our package (using export to archive and install application using install application) to Production, still the add record mini page is enabled and the title does not changed at all.

 

 

Like 0

Like

1 comments

Dear Fulgen,

The the reason for this issue might be in not compiled production system before transferring packages. Please, compile the production system and update the database structure before the package installation. Once the packages are installed in the production environment try to compile and update the database structure again. This should resolve the issue.However if it still persists - please contact our support team via email support@bpmonline.com to have a closer look into your particular installation.

Best regards,

Dean

Show all comments

Hi 

I would appreciate if someone could guide me how to read the value from a WiJob object, which has a lookup WiBuilding and WiBuilding has a column WiChargeRate. I added this as dependency in attributes, I can see teh value is there but I am unable to read it. Please see image below.

Like 0

Like

3 comments

Hello Waseem,



You can operate with value of the property of the JS object just by using the property name e.g. to get the "WiBuilding" value you should use "job.WiBuilding".  The value that you will get is the WiBuilding object.

The "value " property of the "WiBuilding" object stores the Id of the record in "WiBuilding" lookup (since the "WiBuilding" is the lookup). 



How to get object`s value from the database by it`s id:

https://academy.bpmonline.com/documents/technic-sdk/7-13/use-entitysche…

Best regards,

Alex

Thank you Alex, you are right I do get the value of the WiBuilding by writing Job.WiBuilding or Job.WiBuilding.value. I am struggling with the next layer which is the WiBuilding.WiChargeRate (displaying 125 in the above image). I tried Job.WiBuilding.WiChargeRate but it does not give me the value of 125. Should I try Job.WiBuilding.WiChargeRate.value. 

In regards to Entity Schema, I wrote the following ESQ and I could get the value to display in the pop up but I could not read it in to variable to do some calculation.

this.showinformationDialog works, but when I try

var chargeRate = result.entity.get("WiChargeRate") I get 0 value

The ESQ code below:

//var building = this.get("WiBuilding");

/*

var recordId = building.value;

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

rootSchemaName: "WiBuildings"

});

esq.addColumn("WiChargeRate", "WiChargeRate");

esq.filters.add("IdFilter", esq.createColumnFilterWithParameter(

Terrasoft.ComparisonType.EQUAL, "Id", recordId));

esq.getEntity(recordId, function(result) {

if (!result.success) {

this.showInformationDialog("Data query error");

return;

}

this.showInformationDialog(result.entity.get("WiChargeRate"));

}, this);

*/

Hi Alex

I have resolved it. The syntax needed to be as follows:

var chargeRate = job["WiBuilding.WiChargeRate"];  //read building charge rate

Thank you for your help.

Show all comments

I've run into issues where a process errors out or doesn't send an email because I'm trying to read data from a later step in the process to use in an earlier step by accident.  It would be helpful to :

  • have a warning that a formula in a User Action or System Action is referencing a later process element
  • enable a selection to only display process elements before the process element I am currently editing to:
    • avoid selecting the wrong element for a formula
    • make it quicker to make process element choices 
1 comments

Dear Janine,

I'll inform our R&D team about this idea and suggest them to implement it. Thank you for helping us to make our application better!

Best regards,

Angela

Show all comments

Hi Community,

We have a total of hundred of portal users, is there a way to import the user license in BPM online so we don't need to do this manually hundred times.

 

Like 0

Like

1 comments

Dear Fulgen, 

Unfortunately you wouldn't be able to import licenses as this pretty unique system object. The license distribution should be done by hand. 

Best regards,

Dennis  

Show all comments

I want to send a notification to all users with a specific functional role.  I know how to get the list of users with the role from User in role, then get the contacts for the users from User profile.  How do I feed the list of contacts or their email addresses to the Send email process element?

Like 0

Like

7 comments

Dear Janine,

Unfortunately as for now there is no way to specify a role in the "Send email" element of the business process. But here is the solution that can fit your needs: you can specify one recipient in "To" field in the business process "Send email" element and on mail-server side you can setup filters which will transfer notification emails to some specific folder and then mail-server can transfer all emails sent to this folder to other mailboxes. And it will fit your business target. But I will notify our R&D team about your question and ask them to develop new logic that allows using roles in "To" field.

Best regards,

Oscar

Oscar Dylan,

Unfortunately, I don't have access to configure anything on the mail server, except my own account.  I need to be able to email a collection of users, contacts or email addresses in the process. I could use a section that is a collection of contacts and iterate through it, but that will require maintaining a duplicate set of information, much like maintaining an Outlook distribution list that gets updated manually.  Thanks for forwarding the suggestion.

Janine White,

Well, there is another way how you can achieve a target. You can sync the mailbox for notifications with bpm'online. After that you can share access to this mailbox to a functional role needed. You can also specify that the application sync emails only from some particular folder. On mail-server you can create a filter which will put all notifications sent to this mailbox to a folder and as a result all users of this functional role will receive this email directly into the application and they will be able to see it.

Best regards,

Oscar

Oscar Dylan,

The only mailbox I have available is mine, which I do use for sending notifications. I don't have access to change mail server settings, which is handled by IT.  It would be a security breach to expose reading emails in my mailbox to other people.

Janine White,

Dear Janine,

Unfortunately as for now it is the only way to achieve a target: you need to sync another mailbox with the application (not your personal, but some work mailbox that can be used by employees), grant access rights for this mailbox to other system users based on their functional role and use it for reciving notifications. Developing new functionality on this topic demands huge work and changes applied to core features so it is the most easiest way to achieve a target now. Please use a separate mailbox with granting of access to functional role.

Best regards,

Oscar

Oscar Dylan,

I requested an Outlook distribution list that I can manage to send the notifications when the project is live.  I'd rather not have to maintain two separate lists, but it will work for now.

Show all comments

Hello,

We have a grid that shows virtual objects, which we are getting over api, this detail is placed in a custom page also for a virtual object.

We have to show a list of history for each row in the grid on link click as a popup modal box(also the history detail is virtual).

Like 0

Like

1 comments

Hello ayman,



General properties and behavior of modal windows are specified in the ModalBox and ModalBoxSchemaModulemodules of the NUI package. 

In your specific case you should take a look on "LookupUtilitiesV2" schema. The modal window for selecting data from lookups is called in this schema.

So to achieve the task you should understand how the "LookupUtilitiesV2" works and create something similar.



Best regards,

Alex

Show all comments