Hi,

Is it possible to specify a binding redirect in web.config for a specific version of an external assembly, if another version of the same assembly is already being used internally by BPM'Online?

I am building an external assembly which has a dependency on a different version of an already existing assembly that is being used by BPM'Online. It would be great to know if there is a way to redirect logic to the right assembly at runtime. Will the "LoadOnAppStart" column of the [SysPackageReferenceAssembly] table help in anyway?

Any help in this regard will be much appreciated. Thanks in advance!

Like 0

Like

2 comments

Dear Amanthena,

In case you are talking about assembly, which is a part of out-of-the box system, we do not recommend to apply any changes to this assembly. Particularly, because much of core logic dependent on it and its specific version. This can lead to full system inoperability. 

In case you are referring to the external assembly, which was installed to the system, please consider firstly removing it from External Assembly tab before installing a newer version.

Regards,

Anastasia

Thank you Anastasia!

Show all comments

Hi Community,

Any idea how can I override the Open section record button and the Name Link on section?

 

Like 0

Like

1 comments

Hi Fulgen, 

You can try overriding the button in the diff section:

diff: /**SCHEMA_DIFF*/[
            {
                // values from parent, replacing and replaced schemes merge together,
                // the "values" parameter properties of the last inheritor have priority
                "operation": "merge",
                "name": "DataGridActiveRowOpenAction",
                "parentName": "DataGrid",
                "propertyName": "activeRowActions",
                "values": {
                    "className": "Terrasoft.Button",
                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,
                    // new caption
                    "caption": "Test",
                    // new tag that will call the custom method
                    "tag": "test"
                }
            },
        ]/**SCHEMA_DIFF*/
in the "methods" section, override the onActiveRowAction parent method(buttonTag, primaryColumnValue) .
onActiveRowAction: function(buttonTag, primaryColumnValue) {
                // calling the method implementation from the
                this.callParent(arguments)base schema;
                // adding the button custom tag that calls the custom method 
                switch (buttonTag) {
                    case "test":
                        this.testFunction(primaryColumnValue);
                        break;
                }
            },

and add the testFunction() method with new functionality

Show all comments

Hello,

I set up a stardard filter on Account page, lets say I want to filter all accounts starting with "A". 

Is there any way that I can read/access this filter from a business process, so I can know which accounts were selected by that filter?

Thank you,

Cristian Galatan.

Like 0

Like

6 comments

Dear Cristian,

Unfortunately it will be difficult to read this filter since it is stored as an encrypted value in the section for which this filter was created. There is more elegant and easy way to achieve a target: you can create a dynamic folder and specify filtering conditions for it and then read this folder from AccountFolder table in the database (http://prntscr.com/mzgcjp) and after that perform operations on this folder.

Best regards,

Oscar

Oscar Dylan,

Hey Oscar,

Thank you for your answer. Indeed using a dynamic folder is more elegant and I've seen that I can read that folder from a business process. The question that remains is how can I get the list of the accounts that this filter is referring too?

This table/entity has a field "search data" which is a binary one. I guess that is an encrypted value such as the standard filter is using too.

Thank you.

Cristian Galatan,

Yes this is data that stores filtering conditions, but it will be very hard to use it and that's why I suggest using business process for these proposes.

Best regards,

Oscar

I will use a business process for sure. But still, how can I know the list of the accounts that are filtered by this folder?

Cristian Galatan,

This is task for programming. I think, you can take sample from bpm'online marketing (adding group of contacts to Bulk Email audience)



We have used similar methods to get list of contacts

Vladimir Sokolov,

Thank you Vladimir. I will check that.

Show all comments
Question

Dear all,

 We have requirement to create dispatch plans for the contract orders.  Created a table call UsrDispatchPlan... In this table, I need auto increment number for UsrNumber field.

We are trying to create auto numbering for the 

We followed the below steps

1. Create system settings for UsrDispatchPlanCodeMask, UsrDispatchPlanLastNumber

2. I did not created a replacing module, since i am doing it for new requirement(table)

3. Created a process before saving with the below steps

        ->message start with message: UsrDispatchSaving

        ->ScriptTask "SetNumberGenerationParameter" with code:

              GenerateNumberUserTask.EntitySchema = Entity.Schema;

              return true;

        -> a user task "GenerateNumberUserTask", task type "Generate ordinal number ( Base )"

        -> as Script task "SetGeneratedNumber" with code :

                 Entity.SetColumnValue("UsrNumber", GenerateNumberUserTask.ResultCode);

                 return true;

4. Saved and published the process and object as well.

 But the code is not generated in the field. 

 

Same i did from client side.. It worked!!!! But I need to implement from server side.,.. Because Add option is given with the mini page, where i was not able to process the auto increment.

 

Even i tried to implement the auto increment with reference to the link.

https://community.bpmonline.com/questions/question-about-auto-numbering…

 

But did not work!!!. So i am trying to do it with server side.

 

Please help!!!!

 

Like 0

Like

1 comments

Hi Community,

Any idea how can I open a section in client code?

Like 0

Like

2 comments

You'll use PushHistoryState to navigate to a section in client code. The following will go to the Contacts section: 

this.sandbox.publish("PushHistoryState", {hash: "SectionModuleV2/ContactSectionV2"});

The "hash" parameter is what appears after the ViewModule.aspx# in the url. 

Ryan

Dear Fulgen,

You can achieve such task in two ways. The first one is described by Ryan. This is an elegant and easy way to manipulate navigation.

Other approach is to use window.location.assign method https://webplatform.github.io/docs/apis/location/assign/ using relative or full path to the page. This approach will save browser history.

Regards,

Anastasia

Show all comments

I want to modify the value shown on Lead column on Leads detail.

Currently is showing "LeadType / Contact, Contact.Account" as shown below and I would like to customize the fields used to compose the value. Thank you.

Like 0

Like

1 comments

Dear Damian,

The value for lead column is taken from Lead object, particularly LeadName column. In fact, the detail "Lead" is a representation of data from Lead object. In case you want the lead to be displayed in different way on detail you may consider following option:

Create a new business process, which by the signal of creation or editing of lead record will be populating Lead (LeadName) column with needed value.

Regards,

Anastasia

Show all comments

I would like to have multiple edit pages configured to display depending on what needs to be done with a record that is not necessarily dependent on section field or for use with multiple statuses. For example, having the same edit page used for modifying a page that may be active or obsolete, which is different than adding a new record. If I add multiple edit pages and no field is selected in the New Page dialog, then all of the pages are "Not used," which is not accurate.

Like 0

Like

1 comments

Please investigate the structure of the "add" button in the diff. 

http://prntscr.com/n3nu3n

http://prntscr.com/n3nuj4

http://prntscr.com/n3nuyr

There are attributes and methods that you can override in order to add the functionality that you need. 

Show all comments

Hi all,

       I add an attribute which type is LOOKUP to a custom page like this

      attributes: {

                  "ContactId": {

                          "dataValueType": this.Terrasoft.DataValueType.LOOKUP,

                          "type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

                   }

      }

 

      And then, I want its datasource is Filtered Contacts with condition is "he/she has mobile phone number". I know "lookupListConfig", but can't set Contacts is the datasource. Please help me to do that.

Many thanks

Like 0

Like

4 comments

From where I stay it's much easier to add the "contact" column into the related object and then apply the filtration with a business rule. 

attributes: {
"WO": {
	dataValueType: this.Terrasoft.DataValueType.LOOKUP,
	type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	caption: "Some caption",
	hideActions: true,
	value: {
		value: "",
		displayValue: ""
	},
	referenceSchema: {
		name: "Contact",
		primaryColumnName: "Id",
		primaryDisplayColumnName: "Name"
	},
		referenceSchemaName: "Contact"
}
}
methods{
 
setWO: function(){
   this.set("WO", XXXXXXXXXXXX)
}
}

 

Eugene Podkovka,

Hi Eugene,

        Because I did a custom campaign element, I don't have any object to add relationship to Contact.

https://academy.bpmonline.com/documents/technic-sdk/7-13/adding-custom-…

Thanks

Kirill Krylov CPA,

Hi Kirill

    It works well

Thanks

Show all comments

Hi Community,

On Case Edit Page when saving a record, it is going back to the previous screen, how can we forced it to stay on the current edit page after saving the record.

Like 0

Like

3 comments

You need to override the save method on the edit page and set isSilent to true in the config. Add this code to the edit page:

save: function(config) {
  config = config || {};
  config.isSilent = true;
  this.callParent([config]);
}

Ryan

Ryan Farley,

Hi,

In cases After saving the record on edit page i want to open next case without going back previous screen.How can we this.

Dear Harish,

In order to open next case without going back to the section page please consider using the following code:

save : function(config){

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

                // get the primaryId of the next case

                var primaryId = "57286774-E71A-4530-BB60-B2E514FA535F";

                // go to another edit page

                var requestUrl = "CardModuleV2/CasePage/edit/" + primaryId;

                this.sandbox.publish("PushHistoryState", {

                    hash : requestUrl

                });

            }

Please find an example of using this code in the article by the link below:

https://academy.creatio.com/documents/technic-sdk/7-15/how-add-button-section

Best regards,

Norton

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