I have scenario where I want to update a particular detail table to the user once the background process finish to show newly added entries in that detail.

How to achieve this scenario?

Like 0

Like

1 comments
Best reply

This article shows how to refresh a page from a process once complete: https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

To refresh a specific detail, see https://customerfx.com/article/refreshing-a-page-or-detail-sections-on-…

Basically, the process needs to send a message back to the client. The client listens for this message on the page, then when received, refreshes the detail.

Ryan

This article shows how to refresh a page from a process once complete: https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

To refresh a specific detail, see https://customerfx.com/article/refreshing-a-page-or-detail-sections-on-…

Basically, the process needs to send a message back to the client. The client listens for this message on the page, then when received, refreshes the detail.

Ryan

Show all comments

Hi all,



were trying to show the contact who was responsible for setting an opportunity at a certain stage of the DCM .



The base object of the dashboard is on Opportunity. So when we try to add the person who modified the opp, we try to look in available data on the object "Stage in opportunity". We are able to show when the stage started. But we cannot figure out how to select who did the change (Modified by). Any advice ?



Like 0

Like

1 comments

Hello Damien, 

 

In this particular case object "Opportunity" may have a lot of connected records with  "Stage in opportunity" object. In other words, the system doesn't know which value exactly should be displayed for the record and you can only display the number of it (Quantity column from your screenshot).

 

In order to achieve your business task there is a need to create a chart based on the "Stage in opportunity" object.

Hope it clarifies! 

 

Best regards,

Anastasiia

Show all comments

We are having an issue with the BPMonline WordPress plugin not pulling information from our forms - instead sending them to an error page. We have isolated that the plugin is the issue as the forms work okay when the plugin is removed. 

 

Have upgrades been made to the plugin's compatibility with the Php 8.0 and/or WordPress Platform 5.9?

 

Please advise.

Like 0

Like

6 comments

Hello Jess,

 

Could you please tell us with what versions of PHP and WordPress the plugin did work?

 

Thank you,

Artem.

Pre-issue:

PHP: 7.4

Wordpress: 5.9.1



We are currently on:

PHP: 8.0

Wordpress: 5.9.2



We started having this issue on 3/9. We updated the platforms on 3/23. We have just gone in and tested - by turning the BPMonline plugin back on and we are still receiving a Wordpress "critical error" notice.

 

Thank you,

Jess

Artem,

Hi Artem, Making sure you saw my above response.

Thanks,

Jess

Artem,

Will you be able to assist here?

Artem,

I just messaged you directly regarding the above.  Hoping you can help or point me in the direction of someone who can.

Thanks,

Jess,

Do you know what the error is? If it is something like this:

Fatal error: Uncaught Error: Undefined constant "bpmRef"

Then it is because of how newer php versions treats constant string values. If you feel adventurous enough to edit the plugin (and if that is the error you're getting), you can fix it by doing the following (there are 3 lines to change, basically just enclosing some values in quotes). NOTE: only do this if you're comfortable editing the PHP code, doing something wrong can break your whole website. So proceed at your own risk. If this isn't something you're comfortable with, contact a PHP developer for help.

  1. In Wordpress to go Plugins -> Plugin Editor.
  2. Select "Forms-3rd-Party-Integration-Bpmonline-1.0.6" and make sure you have the "forms-3rdparty-integration.php" file selected.
  3. Go to line 611 and change this: 

    if(isset($_COOKIE[bpmRef])) {
  4. to this (notice quotes around bpmRef): 

    if(isset($_COOKIE["bpmRef"])) {
  5. Go to line 617 and change this:

    if(isset($_COOKIE[bpmHref])) {
  6. To this (notice quotes around bpmHref):

    if(isset($_COOKIE["bpmHref"])) {
  7. Go to line 623 and change this:

    if(isset($_COOKIE[bpmTrackingId])) {
  8. To this (notice quotes around bpmTrackingId):

    if(isset($_COOKIE["bpmTrackingId"])) {
  9. Save the file by clicking "Update file"

I don't know if you'll encounter other errors with the plugin code, but that will fix the error I mentioned above.

Ryan 

Show all comments

Hi there,

I'm trying to UPLOAD a picture that I took from the camera of my Iphone, into the CRM.

Ideally, that picture would be connected to :

- an Account

- a Contact

- a custom list of competitors

- a description

 

How would you do that ?

 

Like 0

Like

0 comments
Show all comments

I need to invoke Creatio Rest API from a Business Process to take advantage of out-of-the-box functions available via Creatio API.

For example I need to create a copy of a given Project. I saw that the "copy" button of the user interface invoke this endopint: /0/rest/ProjectUtilitiesService/CopyProjectWithStructure

The payload is like {"projectId": "54df197d-7708-4c6d-8dea-778465bec49d"}.

The response is like {"errorInfo":null,"success":true,"nextPrcElReady":false,"queryId":null,"responseStatus":null,"rowsAffected":-1,"CreatedProjectId":"0198cd7d-75b4-4924-8b06-49e2acbcb8cf"}

I need to do the same thing of the "copy button" inside a business process so I configured a web service (standard Web Service section) setting the endpoint and Basic Authentication (Supervisor username with its password set in custom system settings).

When I try the web service I get an "Unauthorized" response:

How should the web service be set to be used "from Creatio to Creatio"?

Is there a better way to reach the same goal from Business Processes?

 

Thanks

Like 1

Like

2 comments
Best reply

Have you tried just calling the classes directly as classes? There's no need to call as a service since it's just a C# class that you can call directly. Or bypass the ProjectUtilitiesService, which is just a service wrapper around ProjectCopyManager and try calling that instead.

Something like (not tested):

var copyManager = new ProjectCopyManager(UserConnection);
copyManager.CopyProjectWithStructure(projectId);

Ryan

Have you tried just calling the classes directly as classes? There's no need to call as a service since it's just a C# class that you can call directly. Or bypass the ProjectUtilitiesService, which is just a service wrapper around ProjectCopyManager and try calling that instead.

Something like (not tested):

var copyManager = new ProjectCopyManager(UserConnection);
copyManager.CopyProjectWithStructure(projectId);

Ryan

Ryan Farley,

Thanks Ryan, it works; here's my code inside a script task:

var copyManager = new Terrasoft.Configuration.ProjectCopyManager(UserConnection);
Guid newProjectId = copyManager.CopyProjectWithStructure(projectId);

 

Show all comments

 Hi community,

I'm trying to disable the columns of an editable detail to make them read only and I have read many articles about it, but I'm still having a problem that I can't fix.



I wrote this code in the GridDetail to disable the fields but I noticed that for some of the columns of the detail is not working.

getCellControlsConfig: function(entitySchemaColumn) {
    if (!entitySchemaColumn) {
        return;
    }
    var columnName = entitySchemaColumn.name;
    var enabled = (entitySchemaColumn.usageType !== this.Terrasoft.EntitySchemaColumnUsageType.None) &&
        !this.Ext.Array.contains(this.systemColumns, columnName);
    var config = {
        itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
        name: columnName,
        labelConfig: {visible: false},
        caption: entitySchemaColumn.caption,
        enabled: enabled
    };
    if (!this.values.IsEnabled) {
        config.enabled = false;
        //config.labelConfig.enabled = false;
        //this.set("Is"+columnName+"enabled", false);
    }
    if (entitySchemaColumn.dataValueType === this.Terrasoft.DataValueType.LOOKUP) {
        config.showValueAsLink = false;
    }
    if (entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.DATE_TIME &&
        entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.BOOLEAN) {
        config.focused = {"bindTo": "Is" + columnName + "Focused"};
    }
    console.log(config);
    return config;
},

Debugging I have discovered that the detail adds to the labelConfig the property "enabled" which is binded to an attribute ("isProductenabled").

I tried to force the property writing it in the method and I also tried to set the attribute manually, but it's not working... do you have any idea?



Let me know.

Thanks in advance.



Best regards,

Luca

Like 0

Like

5 comments
Best reply

Luca Tavasanis,

While I was debugging I have noticed that the properties of the labelConfig that enabled some of the fields where added in the method: "applyBusinessRulesForActiveRow: function(id, gridLayoutItems)" and to fix the issue I just added this method in the client module.

You can lock the fields in the editable detail using business rules on the page for the detail, rather than in code. On the page for the detail, add a business rule to make the field not editable. Something like 

Condition: Boolean true = Boolean false (something that is never true)

Then: Make field editable (the condition is never true, so field is never editable)

The business rule will apply to the detail list and the fields will not be editable in the detail list.

Ryan

Hi Ryan,

I'm actually working with the BaseGridDetail so I can't lock it with a business rule... do you have any other idea?

 

Thanks anyway.

Luca

Luca Tavasanis,

IIRC to do it in code I usually do it like this (but unable to verify if this is correct at the moment)

getCellControlsConfig: function(entitySchemaColumn) {
    // get config from base 
    var config = this.mixins.ConfigurationGridUtilities.getCellControlsConfig.apply(this, arguments);
    var columnName = entitySchemaColumn.name;
 
    // if this is the column I want to disable
    if (columnName === "UsrMyColumn") {
        Ext.apply(config, {
            enabled: false
        });
    }
 
    return config;
}

Hopefully that gets you closer, of course, if you're wanting to disable all, you could just remove the if to check the column it's for.

Ryan

Ryan Farley,

I just tried what you suggested but unfortunately it's not working... it returns an error when I use this.callParent(arguments);.

Thank you anyway.



Luca

Luca Tavasanis,

While I was debugging I have noticed that the properties of the labelConfig that enabled some of the fields where added in the method: "applyBusinessRulesForActiveRow: function(id, gridLayoutItems)" and to fix the issue I just added this method in the client module.

Show all comments

Hi,



We would like to deactivate "New Order" in opportunities, we deactivated all the processes related to orders but it is still generating.



Any idea ?



(7.18.5)

Like 0

Like

3 comments
Best reply

Hi Damien,



If you want to deactivate button 'New order', you can add this code in diff of OpportunityPageV2:



            {

                "operation": "remove",

                "name": "CreateOrderFromOpportunityButton"

            }



 

Hello Damien,

 

Your business task could be achieved only by delelopment.

 

Please refer to the post by the link below:

https://community.creatio.com/questions/hide-button-opportunity-edit-pa…



Best regards,

Bogdan

Hi Damien,



If you want to deactivate button 'New order', you can add this code in diff of OpportunityPageV2:



            {

                "operation": "remove",

                "name": "CreateOrderFromOpportunityButton"

            }



 

Vladimir Sokolov,

 



Thanks a lot, worked like a charm :)

Show all comments

Hi community,

I'm trying to read the value of a custom system setting in creatio from the client-side, but I noticed that even if my setting has the flag "Cached" it results undefined when I try to get the value using this code:

var test = Terrasoft.SysSettings.cachedSettings.UsrSysSettingTest;





while when I use the asynchronous way it works fine.

Code for the asynchronous way:

Terrasoft.SysSettings.querySysSettingsItem("UsrSysSettingTest", function(sysSettingTest) { 

       var test = sysSettingTest; //here is defined

}, this);



Do you know why this is happening?

 

Let me know.

Thanks in advance,

Luca

Like 0

Like

5 comments
Best reply

Hi everyone,

I discovered that the problem with the cached setting was the type of it. To fix the issue I simply had to change the type from Text (500) to Text (250), I tried to do the same in other environments and I had the same result.

Hope it can help.

 

Best regards,

Luca

Hi Luca,

 

I was able to reproduce this behavior using the following steps:

 

1) Create a system setting

2) Don't relogin to the app and execute both commands you've shared in the developer console

 

As a result synchronous call returns undefined, async call returns value.

 

You need to relogin to the app to start using the setting value synchronously (if it won't help try flushing Redis).

 

Best regards,

Oscar

Hi Oscar,

I've actually logged into the app many times, I even closed the browser and flushed Redis, but I still have this issue.

 

Is there anything else I can do?

Thanks.

 

Best regards,

Luca

Luca Tavasanis,

 

Does this issue occur in another browser? In my case cached system setting was fetched properly after relogin and the issue is not in the rights for the setting since you can fetch it asynchronously.

 

Best regards,

Oscar

Oscar Dylan,

Yes, I have this problem also in other browsers.

 

Best regards,

Luca

Hi everyone,

I discovered that the problem with the cached setting was the type of it. To fix the issue I simply had to change the type from Text (500) to Text (250), I tried to do the same in other environments and I had the same result.

Hope it can help.

 

Best regards,

Luca

Show all comments

Hi Colleagues! How are you?

I'm trying to develop a kind of webhook on Creatio. To achieve it I have created an anonymous web service. The issue I'm experiencing is a Bad Request 400 when receiving the request that is going to be sent by third party app. They are going to send an XML using  POST request, Content-Type = text/xml, and XML Body similar to this one:

<?xml version="1.0" encoding="ISO-8859-1"?>

 

 

If i change the encoding for example to UTF-8 it works.

I tried a lot of alternatives but always I get the same result:

  1. Changing the service contract,
  2. Operation contract,
  3. Mapping a custom class,
  4. Override WebContentTypeMapper

 

Any recommendation? Any workaround?

Appreciate it!

Regards.

Like 0

Like

2 comments

can you post the code?

keith schmitt,

How are you? Thank you your interest. As I commented I tried a lot of alternatives. Attached the code. Focus on UpdateSMSStatus / 

GetInstructions / ProfileRequest. Each method has a different behavior but none of them works.

 

https://drive.google.com/file/d/1Q1cIxIN7GCUT-DsEJCHT2IKr1R39DkKL/view



Thank you!

Show all comments

Hi, 

 

I'd like to set permission for add-on (installed application). 

 

Anyone can help how can I do it please

 

Thanks

Like 0

Like

3 comments

Hello Minh,

 

It depends on the MarketPlace add-on. Let me explain to you on the SQL Executor for Creatio add-on:



In order to set permission rules you need to go to ‘System Designer’, click on ‘Operation permissions’, and select operation named ‘Access to ‘SQL Console Requests section’ (the code is CanUseSqlConsole).  

Having it done you can add or delete access rights for users and groups of users.

 

Right after you complete making these settings, please make logout and login into your account again.

 

Best regards,

Bogdan

Hi Bogdan,

 

Thank you for your reply,

But I cannot find operation 'Access to' SQL Console Requests section, please see picture

Can I add new operation permission and link it to an addon?

 

Kind Regards, 

 

Minh,

 

This operation permission shoud be created automatically after add-on installation. 



Please try to create it manually, if it wasn't created automatically.

 

Best regards,

Bogdan

Show all comments