Hello

I would like to build a business process parameter of type "Collection of records".

- The user is asked to choose an object in a lookup ( attachment file)

- This file is added to the collection (that is where I struggle)

- The user is asked if he want to add more object to the list.

- ... 

- The user validate and the list is used in a subprocess to process the choosen files

 

Many thanks if you can give me a hint on how to do that.   

Like 0

Like

3 comments

Dear Antoine, 

It's impossible to implement using basic application logic.

During single business process execution, it is possible only to upload files to a single object at once.

Hello, thank you for your answer.

I am not trying to upload multiple files.

I just want to ba able to add object references to an object collection parameter.

Let's say it like this:

- When you read Data from Creatio, if using filter others than ID, you get a collection of object. Which is stored into a "collection" variable.

-Now I have a collection, let say I read another object of the same type with anoter filter, I want to add that object to the above existing collection. How can I do that?

 

 

Thank you 

 

The code should look something like this:

// create collection/list or get from param
var list = new CompositeObjectList<CompositeObject>();
 
// create item and add to collection/list
var item = new CompositeObject();
item["SomeProperty"] = "Some value";
item["SomeOtherProperty"] = "Some value, etc";
list.Add(item);
 
// now set list in param
Set<CompositeObjectList<CompositeObject>>("MyCollectionParamName", list);

See https://customerfx.com/article/working-with-collection-parameters-in-a-…

Ryan 

Show all comments

Hi all, would appreciate any opinions on how you would set up the architecture based on the scenario below.  

 

I've got 'Agents' and 'Suppliers'. They are very different, but Agents can be a Supplier and a Supplier could be an Agent. From a user point of view, it would make sense to manage these as separate sections. 

 

I see my options as the following and would value anyones input. 

 

1. Use Accounts Section for both and create columns for both scenarios. 

The only disadvantage of this is that the user wouldn't have clear different sections to find each one. 

 

2. Create two new sections which are for 'Agents' and 'Suppliers' and do not use the 'Accounts' section. 

 

3. Use two sub-sections from Accounts for "Agents" and "Suppliers" - effectively creating separate profiles, but connected the overarching Account. I think this is built upon the "Partnerships" Section that is already there, which could be used for "Agents".

 

Thanks all!

 

 

 

Like 0

Like

3 comments

Hi Mark!



Use Accounts Section for both definitely (1st option).

sers can work with filters or you can add some 'Quick filters' for switching between Agents and Suppliers to make it more comfortable.

Vladimir Sokolov,

Thanks Vladimir.

 

I also read that you can create a section based upon the object of another section? I.E A Section called 'Agents' which would be Accounts with the type "Agents". Does this sound logical option? 



Would you also use the Invoice section for both "Agent" (revenue) invoices and "supplier" (Cost of sale) invoices? 

 

Thanks for your help!

 

 

 

 

Mark,

 

we would not recommend you to create a sub-object as a separate section as it can only be done through configuration and database changes, which can harm the system.

 

As a solution we can offer you a couple of options:

 

1. You can create a folder in the section, which contains all necessary data and will be available for you as a separate list.

 

2. If you need to transfer some data to a different section so it will only be visible for a number of users, this should be done via roles and permissions.

 

3. Finally, if a part of data in the object is really important and needs to be in a separate section, we would strongly recommend creating a new object and using it for a new section.

 

Regards,

Gleb.

Show all comments

Hi Team. Im try to add the excel report to the workplace sales (or any other) and getting this error:

 

https://i.imgur.com/uoLu5dC.png

https://i.imgur.com/rToRhPF.png

https://i.imgur.com/ZxbkuVz.png

 

Some idea?

https://marketplace.creatio.com/app/excel-reports-builder-creatio

Like 0

Like

3 comments

I get that often with that Addon for some reason, not sure why. It will usually work after a log out and back in again (or sometimes after a few). 

Sometimes I just add it directly to the SysModuleInWorkplace table.

Either way, it must be some sort of caching issue, since eventually it will work and all you to add it to the workplace.

Ryan

Yes, I just add it with SQLquery 

INSERT INTO "SysModuleInWorkplace" ("Position", "SysWorkplaceId", "SysModuleId") VALUES ('99', (select "Id" from "SysWorkplace" where "Name" = '<Name of workplace>'), (select "Id" from "SysModule" where "Caption" = 'Excel reports'))

Thanks Rayan.

 

Federico.

Federico Buffa ?,

 

Hi, Federico!

Thank you for the query.

We are aware of this issue. It can occur after the installation of any package, not just this add-on.

Our R&D department is reviewing it, but we don't have a solution currently.



As workaround, you can make any changes in workplaces. For example, delete a section and add it again. You should not have problems with adding a new section after this.

Show all comments

Dear Community,

 

Does any1 know how to remove some of the sections under 'Connected To' field group in 'Activity' section? Please see attached picture

And at later stage, if I want to add them back how can I do

 

Please kindly advise

 

Many thanks

 

Mich

Like 0

Like

3 comments

Hello Mihn,

 

Unfortunately, your task cannot be achieved by using OOTB tools.

Business rules functionality can be used for "Connected to" detail only for filtration. But sadly, other rules will not be applied to this detail.

 

We have already registered the corresponding query for our R&D team and will be waiting for the implementation of this functionality in future releases.

 

Thank you,

Artem.

Hello Mihn,

you can hide using css rule

hi Stefano,

 

Can you show me a bit in details about CSS rule please

 

Thanks in advance 

 

Mi

Show all comments

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