Hello,

 

I've implemented some code because of the changes on the new version which is coming and do not support DB.Executor.

 

But when i'm executing my source code, the json result is dynamic : i've only the fields which are not empty.

In order to have a great code i've parse the json. So the format is correct that's a great json but I don't know how can I include empty field/value.

 

Is there somebody who can explain me how can I do in order to include all fields in the object to the json return list?

 

Thanks a lot.

Like 0

Like

0 comments
Show all comments

Please help....
I am seeing the following request dragging when I try to edit & save a contact on my on-prem Bpmonline application (v 7.13). 

Any idea why this is doing that? Has anyone else saw that the waiting screen shows for 40+sec after saving a Contact record? Everytime it is FindDuplicatesOnSave call that kept taking looong time. 

Like 0

Like

1 comments

Hi Kumar, 

The duplicate search service should definitely work faster. You can try debugging it to detect possible issues as described in the "Server code debugging" article. The service name is DeduplicationService, the "Deduplication" package.

The performance delay might appear at the database level, In this case. call the "tsp_FindDuplicate" procedure. You can check how it works.

Hope this helps.

Regards, 

Svetlana

Show all comments

Is it possible with a formula to change the belgium BTW-nummer like BE0123.456.789 in 0123456789 (strip spaces, dots...) so we can search in our database to find the correct account? People have different ways to write their number. 

I can only find functions with dates and integers (like RoundUp(), Minimum(), Day(),...)

Is there something like regular expressions in PHP to replace "." by "" and "BE" by "" and " " by ""?

Like 0

Like

2 comments

Unfortunately, there is no opportunity to process string in the Formula business process element. However it's possible to implement using the Script task element. There is an example of C# code snipped below:

  var subjectString = "BE0123.456.789";

var resultString = System.Text.RegularExpressions.Regex.Replace(subjectString, "[^0-9]", "");

Thanks. I discovered today also that I can use C# functions in the formula of business processes. So this did the work for me: [#lees inschrijvingen.Eerste item van de resulterende collectie.BTW-nummer#].Replace(".","").Replace("x","").Replace(" ","").Replace("BE","")

Show all comments

I am new to BPMonline CRM need certification for basic level.

Is it easy to pass certification?

what is the level of multiple choice questions?

Is Demonstration part tough?

Please Help

Like 0

Like

1 comments

Dear Nagaraju,

Certification for development on the bpm’online platform is intended for programmers that develop products and solutions on the bpm’online platform. “Advanced” level of certification enables you to be the authorized user of the bpm’online academy customer support services and get consultations on development on the bpm’online platform. For this purpose, you will have to complete the “Advanced” certification for development on the bpm’online platform.

Please, follow this link to get more detailed information about certification policy, exams and rules: https://academy.bpmonline.com/sites/default/files/pdf-com/Certification…

Here you can find the information that will help you to get prepared for the exam.

If you have some specific questions, please address them to support@bpmonline.com

Best regards,

Olga. 

Show all comments

Hi, community.

 

Activity reminders are nice but they are only system notifications. I would like to send email or SMS messages as reminders for certain activity types as well... But I cannot find a signal I can use to trigger the process to send the email... Has anyone set up something like this?

Thanks a lot!

Juan Carlos

Like 0

Like

1 comments

Dear Juan, 

You can do with the process setting the starting signal on the creation or modification of the activity in fields "Remind owner on" or "Remind author on" and one of those fields filled in. After that in formula you can calculate the amount of seconds between current date and time and needed one and pass this amount in the Wait for timer event. After the timer counts the needed time you can send a letter (or send SMS) pulling the information from the Activity records if needed/  
Formula to calculate needed amount of seconds: 
([#Read data 1.First item of resulting collection.Remind owner on#].Subtract([#System variable.Current Time and Date#])).TotalSeconds

Best regards,
Dennis 

Show all comments

Hello,

I have developed one service which inserts contact and contact-address from the third party to bpm'online. I have written below code to add contact and its Address simultaneously:

var insertContactQuery = new InsertQuery()

{
                    // Root schema name.
                    RootSchemaName = "Contact",
                    OperationType = QueryOperationType.Insert,
                    // New column values.
                    ColumnValues = new ColumnValues()
                    {
                        // Key-value collection.
                        Items = new Dictionary()
                                 {
                                     {
                                         "Account",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "Account",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.AccountId,
                                                 DataValueType = DataValueType.Lookup
                                             }
                                         }
                                     },
                                     {
                                         "Name",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "Name",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.StoreContactFirstName + " " + item.StoreContactLastName,
                                                 DataValueType = DataValueType.Text
                                             }
                                         }
                                     },
                                     {
                                         "MobilePhone",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "MobilePhone",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.StorePhoneNumber,
                                                 DataValueType = DataValueType.Text
                                             }
                                         }
                                     },
                                     {
                                         "ContactAddress",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "Address",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.StoreStreetAddress,
                                                 DataValueType = DataValueType.Text
                                             }
                                         }
                                     },
                                     {
                                         "ContactCity",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "City",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.StoreCityName,
                                                 DataValueType = DataValueType.Text
                                             }
                                         }
                                     },
                                     {
                                         "ContactZip",
                                         new ColumnExpression()
                                         {
                                             ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                             ColumnPath = "Zip",
                                             Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter()
                                             {
                                                 Value = item.StoreZipCode,
                                                 DataValueType = DataValueType.Text
                                             }
                                         }
                                     }
                                 }
                    }
                };

am I doing something wrong? Please guide.

Like 0

Like

4 comments

Dear Riddhi,

Unfortunately, it is not possible to add data to the “Contact” and “ContactAddress” tables simultaneously using the approach that was described early. However, we can offer two ways solving the issue:

1. In order to add data via DataService please do the following:

-Create custom columns in the “Contact” object for storing the corresponding address values.

-Create a business process that will take the values from these columns and add them to the corresponding columns from the “ContactAddress” table.

Please note that we do not recommend using DataService for adding data to the database.

2. Create a web service for adding data. This approach is recommended for solving such types of the issues.

Best regards,

Norton

Norton Lingard,

Thanks, Norton. Can you please provide any reference link or example for adding records with web service? It would be really grateful.

Dear Riddhi,

Please find more information by link below:

https://academy.bpmonline.com/documents/technic-sdk/7-14/how-run-bpmonline-processes-web-service

Best regards,

Norton

Norton Lingard,

Thanks

Show all comments

How to customize working Area the page that displays after application is loaded?

Like 0

Like

3 comments

Hello Nagaraju,

You can apply needed changes to the start page by replacing IntroPage schema of UIv2 package and applying changes to this replaced schema. This particular schema declares the state of Intro page that you see when you firstly login to the application.

Best regards,

Oscar

Hi Oscar,

Thanks for the Answer. I tried with creating a replacing client module for SimpleIntro schema in UIV2 package as I just want to add additional link in BasicTile. When I am saving the module I am getting "SimpleIntro not found" error. Could you please help me with this?

Nagaraju,

Try to create the URL as a custom control element 

https://community.bpmonline.com/articles/how-create-custom-control-element

Then place it in the replacing client module for the BaseIntroPageSchema

Show all comments

Can we assign multiple objects like leads, contacts to same lookup?

Like 0

Like

1 comments

Hello Nagaraju,

You can create a multi-lookup in the same way as it is created in an out-of-the-box version of the application for "Customer" field on an opportunity edit page (here is the screenshot of this field http://prntscr.com/p5ns1j) and achieve your business task in such a way. The code example can be found in OpportunityPageV2 (in Opportunity package) http://prntscr.com/p5nto6. Please analyze it and create the same logic for needed field.

Best regards,

Oscar

Show all comments

Hi Community,

Here is our scenario, we want to send sms to customer, this is sms will contain download link of printable. Is it possible to generate a download link for printable?

 

Like 0

Like

1 comments

Hello Fulgen,

To create a report you need to trigger CreateReportsList Report service via link http://bpmonline_site_name/0/rest/ReportService/CreateReportsList where recordIDs and templateId parameters should be transferred. This service generates reports and there is no way for an unauthorised system users to trigger this service (your clients that receive SMS should be authorised to bpm'online application so to trigger this service).

There is no way to insert a link to a printable in our system, but you can create some 3rd party service that will store all printables (ftp storage for example) and you can add the link to those files in this storage to a body of SMS and achieve your task like that.

Best regards,

Oscar

Show all comments

Hi,

 

I'm trying to retrieve a collection using EntitySchemaQuery but when try to assign it to a Parameter i get the following error:

System.NotSupportedException: EntityCollection
   at Terrasoft.Core.Process.FlowEngineStateService.InternalSetValue[T](Guid processUId, String parameterPath, T value)
   at Terrasoft.Core.Process.FlowEngineStateService.Terrasoft.Core.Process.IInternalProcessParameterStore.InternalSetParameterValue[T](Guid processUId, String parameterPath, T value)
   at Terrasoft.Core.Process.ProcessInstanceParameterStore.SetParameterValue[TValue](String parameterPath, TValue value)
   at Terrasoft.Core.Process.ProcessInstanceParameterStore.SetParameterValue[TValue](ProcessSchemaParameter parameter, Guid schemaElementUId, TValue value)
   at Terrasoft.Core.Process.ProcessModel.SetParameterValue[T](FoundParameterData result, T value)
   at Terrasoft.Core.Process.ProcessModel.TrySetValue[T](ProcessSchema processSchema, String propertyPath, T value)
   at Terrasoft.Core.Process.ProcessModel.Set[T](String propertyPath, T value)
   at Terrasoft.Core.Process.UsrGetLeadsBySalesCompanyMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Example code:

var salesCompanyId = Get<Guid>("InSalesCompany");
 
// Creating a query instance with the "Lead" root schema.
var esqLead = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Lead");
esqLead.AddColumn("UsrSalesCompany");
esqLead.AddColumn("CreatedOn");
esqLead.AddColumn("UsrLeadPriority");
esqLead.AddColumn("Id");
esqLead.Filters.Add(esqLead.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrSalesCompany.Id", salesCompanyId));
 
// Filters in the query filter collection will be combined with the logical OR operator.
esqLead.Filters.LogicalOperation = LogicalOperationStrict.Or;
 
 
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadActiveOverrides.ResultCompositeObjectList");
foreach(var entity in entities) {
 
    Guid value;
    var fromSalesCompanyId = entity.TryGetValue<Guid>("UsrFromSalesCompany", out value) ? value : Guid.Empty;
    var toSalesCompanyId = entity.TryGetValue<Guid>("UsrToSalesCompany", out value) ? value : Guid.Empty;
 
    if(fromSalesCompanyId == Guid.Empty){
        throw new Exception($"fromSalesCompanyId it is an empty guid {entity.ToString()}");
    }
 
    if(toSalesCompanyId == Guid.Empty){
        throw new Exception($"toSalesCompanyId it is an empty guid {entity.ToString()}");
    }
 
	esqLead.Filters.Add(esqLead.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrSalesCompany.Id", fromSalesCompanyId));
}
 
/*
Select selectEsq = esqLead.GetSelectQuery(UserConnection);
throw new Exception(selectEsq.GetSqlText());
*/
 
var res = esqLead.GetEntityCollection(UserConnection);
 
Set("OutLeads", res);

Paremeter OutLeads is a Collection of Objects (EntityCollection)

Any help is appreciated

 

Like 0

Like

6 comments

Theoretically, you can debug the business process and find the reason. Please check the "Server code debugging" article in the academy.bpmonline.com. However, I recommend you to investigate the situation one step forward. There is no way to operate EntityCollections in any business processes element except a script task. So probably it will be a good idea to continue processing the collection in the script task where it was created. Transferring collections might consume a lot of the application resources and decrease the performance if the collection is large.  

Additionally, please don't use "throw new Exception" at all. The fact that you use it means that you literally generate errors in the application. C# and JS code should not contain errors. It should communicate with a user in a regular way. 

Eugene Podkovka,

Hi Eugene, so the idea of sharing an EntityCollection created by ESQ on a script task using process parameters is not supported. correct?

I can put all the code inside a single script task but it will make it too big, the idea is to have different subprocess applying different filters.

Is there any other way to share at least a list of Ids between processes? I don't need a full entity only the ids are enough.

Eugene Podkovka,

Thank you for the answer, the throws new Exceptions are there to verify that the data is correct. I don't want the process running if it has missing information. 

How else can i leave the error on the process log?

Luciano De Munno,

I can't say that it's not supported, but it will be hard to do. The reason is that it's incorrect to split a single c# functionality between different business processes.
Just write correct c# code. Use different methods or even different classes. Create your own logging that will track all possible exceptions. This is the general way of good clean coding. 

Eugene Podkovka,

So, short answer is not supported.

The idea is to make a quick simple process to filter a list using what's already provided by bpm.

 

thank you for the answer

Show all comments