Hi, community.

We have a client that wants to run bpmonline on older machines and with a low power internet connection... We have noticed that performance suffers particularly when running processes, both from a section (using the run process button) or triggered by a change in stage (using green buttons). A process that normally takes a few seconds can take up to 5 minutes....

Do any of you have experience implementing projects on older hardware and/or low power connections? Is there a minimum requirement for either of these? Do you have any tips for this?

Thank you!

Like 0

Like

2 comments

Dear Juan,

Here are server-side requirements that machine needs to have from hardware and software point of view. Also minimum client-side system requirements can be found here

Best regards,

Oscar

Thank you for your reply, Oscar!

Show all comments

When trying to call a web service from the BPM'Online platform, the process throws the following error: 

we assume that the error is due to the immense size of the JSON that we try to read from the external web service, so that the response would exceed the processing capacity limits of the webservice module of the bpm'online tool.

Our consulate is, if there is a way to increase the data processing limit of the bpm'online web service module in terms of reading the JSON delivered by the external web service.

We estimate that approximately 6 GB of RAM is needed to process the desired volume of data.

Like 0

Like

2 comments

It doesn't seem to be a memory issue. Bpm'online provides up to around 8 GB RAM in critical moments and 4 GB by default. Anyway, If the application consumes more than around 8 GB RAM, IIS restarts it automatically. If you need more resources, please contact your account manager and the limits will be increased. 

It seems like the issue is related to a wrong JSON format. However, since the JSON is huge you'll not be able to debug it. In this case I recommend to create your own web service according to the article by the link below. 

https://academy.bpmonline.com/documents/technic-sdk/7-13/how-create-cus…

This way in case of the exception message you'll be able to create your own logging or debug the service on a local copy of the application. 

Please be aware of the fact that during the integration process that consumes almost all available RAM users might face performance issues. 

Thank you very much for the reply; it was indeed an error of the JSON that was being called, since it contained Null fields that did not correspond.

Show all comments

Hi

I'm looking for an method that when triggered, all data is already loaded to the page.

I uses the "onEntityInitialized" and noticed that it is triggered before I have data so I can't do much with it.

Documentation suggest using the "init" or "render" methods but the only examples are not for a replacing client module.

I tried the "init" and "render" with "Hello World!" alert that never appeared.

My question is, is there a method that is triggered after the data is present and thus can be manipulated via JavaScript code ?

Thanks

 

Like 0

Like

3 comments

 

Everything works fine for me, you need to place your code after calling the base method

Post ypu code after this.callParent(arguments);

onEntityInitialized: function() {
	this.callParent(arguments);
	//you code
},
You can also use the method initTabs, called after "onEntityInitialized" trigger

Hello.

The onEntityInitialized method should work well as it is mentioned by Grigoriy. Looking at your message, maybe you want to use the onchange method instead?

https://community.bpmonline.com/questions/onchange-event

Best regards,

Matt

 

Thanks Grigoriy and Matt for your answers.

I think the problem is that when you go to the page from the mini page, the initialization method work in a different manner so to work around the problem I canceled the mini page for now

Show all comments
Question

Hi

I'm trying to do something quit simple but it is not working.

On the event of changing the Account in the LEad section, I want to set the PrimaryContact of the Account as a owner of a lead.

My code is like this:

 

onAccountChanged: function() {

                    var recordId = this.get("Id");

                    

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

                    rootSchemaName: "Lead"

                    });

                                       esq.addColumn("QualifiedAccount.PrimaryContact.Id", "SalesContact");

                    esq.getEntity(recordId, function(result) {

    if (!result.success) {

        // error processing/logging, for example

        this.showInformationDialog("Data query error");

        return;

    }

    

    this.set("Owner", "SalesContact");

   }, this);

 

When I check the value I got in "SalesContact" I can see the Id, but it won't update the lookup.

What am I missing here ?

 

Like 0

Like

8 comments

It's 

this.set("Owner",result.entity.get("SalesContact"));

Dear Oren,

It is more simple to create a business process that will change owner of Lead on changing of Account in this lead record. So the process will be triggered when the record in "Leads" section is modified and modification is expected in "Account" field. After that you need to read data from this account that was set for lead record. You need primary contact value. And after that you need to use "Modify data" element that will set owner of this lead as value of primary contact taken from "Read data" element. The only minus of this method is that it will be triggered only after saving of lead record. Also you can try the way Jerome has suggested.

Best regards,

Oscar

Jerome BERGES,

Hi Jerome

Thanks for your reply but it's not working.

I checked and the result of: result.entity.get("SalesContact") returns the Id of the record as a string. 

Maybe it has to do with the value I put in the "SalesContact", in this line?:

esq.addColumn("QualifiedAccount.PrimaryContact.Id", "SalesContact");

Maybe I need diferent data type than: QualifiedAccount.PrimaryContact.Id ?

 

 

Oscar Dylan,

Thanks Oscar

A business process can easily work but I need more elegant solution on the client side.

Oren Diga,

In order for the lookup to display the object you've set, it needs to be an object that contains both a value (the ID) and a displayValue (the text Name). 

Modify your esq to retrieve both the QualifiedAccount.PrimaryContact.Id as well as the QualifiedAccount.PrimaryContact.Name. Then, set it in the lookup like this: 

this.set("Owner", {value: result.entity.get("SalesContactId"), displayValue: result.entity.get("SalesContactName")});

 

Ryan Farley,

It's working !!!!

Thanks a lot

Ryan Farley,



How do we set Guid.Empty value to a lookup or remove the lookup data value in a record in server-side scripting?



Say., Owner is a lookup - Filled with a value as "Creatio Account"

There is a custom logic that runs and needs to update this Owner lookup to empty. How to set a Guid.Empty to a lookup?



BR,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

You can use the Update class:

var update = new Update(UserConnection, "Contact")
        			.Set("OwnerId", Column.Parameter(null, "Guid"))
        			.Where ("Name").IsEqual(Column.Parameter("Name2"));
    		var cnt = update.Execute();

 

Show all comments

Hi

 

Usually I use the Handler method when I want to update field value depending on another field value when it changes.

 

For example:

dependencies: [

columns: ["Amount", "PaymentAmount"], 

methodName: "Calculate"    

 

The function "Calculate" will be triggered when columns "Amount" or "PaymentAmount" are changed.

 

My question is, how can I trigger a function when a change uccur on a detail, for example in the Products Details.

How can I activate the "Calculate" function when a change was made in the detail, for example, in the quantity of products?

 

Thanks,

Like 0

Like

2 comments

You can send a message via sandbox from the detail to the edit page to trigger the function. On the detail, override the onSaved function and send the message. On the edit page subscribe to the message and call your Calculate function. 

On the detail page:

messages: {
    "MyMessage": {
        mode: Terrasoft.MessageMode.BROADCAST,
        direction: Terrasoft.MessageDirectionType.PUBLISH
    }
},
methods: {
    onSaved: function(response, config) {
        this.sandbox.publish("MyMessage", null, [this.sandbox.id]);
        this.callParent(arguments);
    }
}

On the edit page with the Calculate message:

messages: {
    "MyMessage": {
        mode: Terrasoft.MessageMode.BROADCAST,
        direction: Terrasoft.MessageDirectionType.SUBSCRIBE
    }
},
methods: {
    init: function() {
        this.callParent(arguments);
 
        this.sandbox.subscribe("MyMessage", function(arg) {
            this.Calculate();
        }, this, [this.sandbox.id]);
    }
}

Ryan

Ryan Farley,

Thanks a lot Ryan !

Show all comments

Hi all,

We have a custom section, which contains a contact field (label = Member): http://prntscr.com/luc7de

In the list view, this contact is clickable (clicking the contact name will redirect user to the contact page itself)

Now we want to make this field not clickable for specific user role. They are allowed to see the contact name, but thay are not allowed to click to the contact page where all info can be seen.

I tried this in the 'UsrReservations1Section'-page behind the 'onEntityInitialized'-method:

$("a").each(function() {

    var linkId = $(this).attr("id");

    var href = $(this).attr("href");

    var n = href.indexOf("ContactPage");

    if (n > 0) {

        document.getElementById(linkId).style.cursor = "default";

        document.getElementById(linkId).style.pointerEvents = "none";

        document.getElementById(linkId).style.color = "black";

    }

});

But this does not work...

Any ideas or advice would be appreciated!

Kind regards,

Vincent

Like 0

Like

3 comments

Hello Vincent,



Here is an example how to disable "Account" filed on Contact section.



Best regards,

Alex

define("ContactSectionV2", ["GridUtilitiesV2"], function(GridUtilities) {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			prepareResponseCollection: function(collection) {
				this.callParent(arguments);
				collection.each(this.removeLink, this);
			},
 
			removeLink: function(item) {
				var AccountId = item.values.Account.value;
				if(AccountId != undefined) { 
					item.customStyle = {"pointerEvents": "none"} 
				}
 
			}
		}
	};
});

 

Hi Alex,

 

Thank you for the feedback.

I slightly modified your code, since it would only be applicable for one specific user:

            prepareResponseCollectionItem: function(collection) {

                this.callParent(arguments);

                var currentUser = Terrasoft.SysValue.CURRENT_USER.value;

                if (currentUser === "ff64c809-3ff0-4d10-b096-a9c351db37cb") {

                    collection.each(this.removeLink, this);

                }

            },

            removeLink: function(item) {

                var MemberId = item.values.UsrMember.value;

                if(MemberId !== undefined) { 

                    item.customStyle = {"pointerEvents": "none"};

                }

            }

But I am getting following error in the console: http://prntscr.com/lvylzy

--> message: TypeError: n.each is not a function

Any idea what went wrong?

 

Kind regards,

Vincent

Vincent Tahon,

Unfortunately, it`s hard to say what exactly goes wrong. You should debug your code via devtools. At first you should check where exception is raising. Then check the value and type of "n" variable.

Basically, It seems that "each" function doesn`t exist in "n" object.



How to debug client code:

https://academy.bpmonline.com/documents/technic-sdk/7-13/client-code-de…

Best regards,

Alex

 

Show all comments

Hi,

 

In the overview of a custom section, the contact is shown in the second column. Clicking this contact will redirect to the Contact page. --> http://prntscr.com/lu135p

Now I want to disable this link to the contact. 

I tried this:

 

prepareResponseCollectionItem: function(item) {

this.callParent(arguments);

item.customStyle = {

"pointerEvents": "none"

};

}

 

But this disables all links, not only the link to the contact.

Any ideas? 

 

Thanks!

Like 0

Like

1 comments

Dear Vincent,

Please draw your attention to the addColumnLink() method of the GridUtilities schema. 

You can override this method in the replacing schema of needed section. Set if clause check so to pick needed column out of the collection. Set this column property for pointer events.

In this case changes will be applied only to the indicated columns.

Hope you will find it helpful.

Regards,

Anastasia 

Show all comments

Hi,

In Activity Section based on Type to change the tab changes,

Example:

Type is 'Call' it shows only tab2

Type is 'Task' it shows only tab1

 

kindly give me your feedback.

Thanks

Like 0

Like

3 comments

Hello,

You can create multiple section pages in Section Wizard and bind them to activity type, so that each type will have it's own edit page. You can find more about Section Wizard on Academy: https://academy.bpmonline.com/documents/administration/7-13/how-configu…

thanks a lot

This feature is implemented in Creatio 7.16.3 release via business rules

Show all comments

Hi,

I developed a package that name is 'A', which I try to import on another instance of bpm'online .In new instance current Package id is set 'A'. if  any changes made gets reflected in the custom package (default) not in the new package.

 

Please give me your feedback..

Regards,

Sunitha

Like 0

Like

3 comments

Dear Sunitha,

Please check if your package is locked or unlocked (it will be gray if it is locked). Packages are usually locked if they were imported to another instance. 

currently import package is lock.how to unlock my package using new instance

 

Sunithaa.s,

They are locked because development process expects user to develop everything on dev- and then transfer changes to prod. They are locked because system expects they are finished and will not be changed anymore. You can read more about developing process on our Academy: https://academy.bpmonline.com/documents/technic-sdk/7-13/how-start-deve…

If this way is not suitable for you you can use version control to transfer the changes and be able to modify them later (see https://academy.bpmonline.com/documents/technic-sdk/7-13/transferring-c… for more information) 

Show all comments

Transferred the package from one instance to another instance. The transfer was successful.

In the system setting the current package is also set as the transferred package. 

But any changes made is getting reflected in the default custom package rather than the new transferred package. 

The whole thing is happening in our dev cloud environment so even though the edit settings for the imported package has been set to "Allow", the package still restricts to edit and all the changes to the objects and schema are residing in "Custom" package.

Please suggest a efficient way on managing the changes relevant to that package. Kindly help us resolving it.

 

Thanks

Saranya

Like 0

Like

1 comments

Dear Saraya, 

Please make sure that the package you've set as a current package is not locked and the current package system setting is set to your package. If the package is locked the system would set Custom as a current package as it can't save anything to the locked package. If your package is unlocked and the current package is set to your package please contact support team at support@bpmonline.com

Best regards, 

Dennis

Show all comments