Hello, I'm currently trying to make a case stage process where an approval is sent out tothe selected approver by an user. I've set up so that when a case reaches the "Approval" stage a sub-process is run that will open a mini page for asking the approver name by a user.

 

But sub process is not automatically open that page for asking the approver name. Please see the screenshots below:

 

Can anyone please help with this? Any help is really appreciated!

Like 0

Like

0 comments
Show all comments

Dear colleagues,

 

In Classic UI when ran a process we can get resultParameterValues in Client Code.

 

I need to do the same but in Freedom UI client module,

 

I saw some code like this in Academy, Community and so on, but didn't any who shows us how to get process output paramaters

const handlerChain = sdk.HandlerChainService.instance;
const result = await handlerChain.process({
    type: "crt.RunBusinessProcessRequest",
    processName: "UsrSomeProcess",
    processParameters: {
        AccountId: await request.$context.Id,
        InputParameter1: "Some Value 1",
		InputParameter2: "Some Value 2"
 
    },
    $context: request.$context
});
 
if (result.success) {
    // process was sucessfully executed
}

 

Please help

 

Thanks

Julio Falcón

Like 1

Like

5 comments

I saw in the debugging is there some resultParameterValues in the response, but is null and I have one output parameter?

 

Julio.Falcon_Nodos,

Solved! due the debugging resultParameterNames element I tried and works, here the result

 

// Inicialize Process input parameters
var ClienteObject = await request.$context.NCSDetalleDelPedidoDS_NCSCuenta_kn04jps;
var LugarPobladoObject = await request.$context.NCSDetalleDelPedidoDS_NCSLugarPoblado_g8rmatm;
var ProductoObject = await request.$context.NCSDetalleDelPedidoDS_NCSProducto_cuzrngv;
if ( ClienteObject == null || LugarPobladoObject == null || ProductoObject == null ) {
	await next?.handle(request);
 
}
/// Run process
const handlerChain = sdk.HandlerChainService.instance;
const result = await handlerChain.process({
	type: "crt.RunBusinessProcessRequest",
	processName: "NCSPrecioFinalProductoPedido",
	processParameters: {
		DetallePedidoID: await request.$context.Id,
		ClienteID: ClienteObject.value,
		LugarPobladoID: LugarPobladoObject.value,
		ProductoID: ProductoObject.value
 
	},
	/* Process Output Paramters */
	"resultParameterNames": [
		"PrecioFinal",
		"ProcessesRanOK"
	],
	$context: request.$context
});
 
// Result is OK?
if ( result.success && result.resultParameterValues[ "ProcessesRanOK" ] ) {
	// OK, get price
	request.$context.NCSDetalleDelPedidoDS_NCSPrecio_leqtalu = result.resultParameterValues[ "PrecioFinal" ];
 
} else {
	// Some error msg
	console.log( "Error getting price" )
 
}

Julio.Falcon_Nodos,

Julio, excellent find - I assume the start of the process needs to be marked as "run in background" = false? Can you check if your process is marked that way?

Ryan

.

Ryan Farley,

Hi Ryan, 

 

Yes, I have configured it as you indicate. Happy to help you!

Julio

Show all comments

Hello,

 

we want to use cloud version of PowerBI, that's why we cannot use addon from marketplace (https://marketplace.creatio.com/app/microsoft-power-bi-connector-creatio)

 

As I see, PowerBI has option to get data via OData Feed.

 

But basic authorization doesn't work there (the same in Excel, for example). Do you have any experience how to achive that?

Thank you!

Like 1

Like

0 comments
Show all comments

I want to export creatio contacts data on a daily basis to specific location

I am taking approach of using BPM tools to create a process where I can read the contact data, convert them all in uppercase and then export it to specific location. 

I don't know how to export data after converting them to uppercase

Like 0

Like

4 comments

The latest version of the Excel reports add-on in the marketplace has a process element to generate excel files. https://marketplace.creatio.com/app/excel-reports-builder-creatio

You could possibly use that in a process and then attach it a record or email it somewhere to include the data you want to export. Not sure if that would help you accomplish the task or not, but wanted to mention that as a no code approach to generate an Excel file as an "export". 

However, you could also read the data from Creatio via OData and write it to files somewhere as well.

Ryan

The API is very powerful as well. There is also a product called Starfish that can work. Depends on your level of expertise. We use both.

Is it possible to make automated process to export contact data on a daily basis without using marketplace products?

 

Ryan Farley,

After reading the description and installation part of Excel reports add-on in the marketplace, I came to know that this product will provide analysis reports in Excel file. Is there a way to have process element in process designer which directly takes data and export it in specific location?

Show all comments

Hi All,

 

We are trying to insert data in a datetime field in contact table from database via API. But the time shown in Creatio is different from the database. For example - one record shows as 2024-01-15 16:54:48.000 in the database whereas in Creatio it shows as 1/15/2024 10:54 AM. We are in central timezone and user profile is set to central timezone. How can we correct this?

 

Thanks

Like 1

Like

1 comments

Hello!

 

Actually it occurs because all dates savings in DB in UTC time zone and only then converting to users according their timezone settings. But when you making API request it returns date same as in DB. There is no possibility to change this behavior at this moment.

Show all comments

Hello Community,

I added an expanse list like below:

I find the Apply column quite wide, and I want to narrow it down, but I can’t do it through the interface (perhaps the width has hit the minimum column width). I have also gone into the source and adjusted the parameters, but it still has no effect. Anyone with experience, please help me. Thanks very much

File attachments
Like 0

Like

2 comments
Best reply

Hi,

 

Unfortunately, the current version does not allow for changing the minimum column width. We have not received similar requests before, which is why the implementation of this functionality was not considered. Based on your request, I will create a suggestion for implementation, and we will collect user feedback to assess the possibility of adding this functionality in future versions. 

 

Please stay tuned for updates, and thank you for helping us improve our products!

Hi,

 

Unfortunately, the current version does not allow for changing the minimum column width. We have not received similar requests before, which is why the implementation of this functionality was not considered. Based on your request, I will create a suggestion for implementation, and we will collect user feedback to assess the possibility of adding this functionality in future versions. 

 

Please stay tuned for updates, and thank you for helping us improve our products!

Sergii Zhmurko,

Thanks very much

Show all comments

Hello community

 

I would like to monitor the progress of the "Generate all schema" request,

While for the "compile all" request I can monitor the progress by checking the build.log file in c:\windows\temp, the "generate all schemas" does not loggine anything.

 

Do you have suggestions?

Like 0

Like

1 comments

Hello!
 

Indeed, we do not log this anywhere, as it’s handled at the database level. We’ll create a task for the R&D team to consider implementing this in future updates.


Thank you for helping make Creatio better!

Regards,

Orkhan

Show all comments

Hi, I've searched and found this post - https://community.creatio.com/questions/how-can-i-manage-my-sale-teams-kpi-creatio-sale which was in March 2022, over 2 years ago "As for target KPI, at the moment there is no corresponding functionality to setup constant numbers in Dashboard section. Our R&D team works on implementing such tool in future releases."

 

Is there any update on this? 

 

It would be very, very beneficial to be able to set a target/constant number to compare against for a variety of metrics. Such as Total Number of Calls / Target Number and I get a percentage or Total Number of Appointments / Target Number and get a percentage. 

 

I know that you can manually do this with a gauge but it doesn't provide a percentage and is very limited.

Like 0

Like

1 comments

You can do this using the format options for a metric. Steps are: 

  1. Set up a metric that would return no results (like Contact where Id is not filled in)
  2. Click the format options. Enter your static number in the Text field. If this is a Freedom UI metric, change Text Position to before and after value

The end result: 

However, this sort of thing is better (IMO) to add to a table (such as a lookup or system setting). Then just have the metric display the max from that field (which would just display that same value since there would be only one number, which would be the max). This allows you to adjust the value there, rather than edit dashboards where used.

Ryan

Show all comments

I’m currently working on establishing a two-way connection between two applications in Creatio for adding and modifying records.
 

  1. One-Way Connection: I successfully created two business processes that allow for one-way synchronization of records.
  2. Two-Way Connection Issue: However, when I attempt to set up the two-way synchronization, it leads to the creation of multiple records in an infinite loop instead of just one record being created or updated.

 

Could anyone provide guidance on how to avoid this infinite loop in a two-way connection? Any insights on best practices for implementing two-way synchronization in Creatio would also be greatly appreciated.
 

I can provide screenshots of my setup for further clarification if needed. I followed the same process for the one-way connection as shown in the attached business process screenshot.

Like 0

Like

2 comments

Good day,

The issue you're encountering is related to the number of records being passed to the subprocess. Here are some suggestions for resolving this situation:

1. Add or adjust recursion trigger conditions:
   - For instance, if the trigger is based on changes to the `Contact.Age` field, consider adding a condition to ensure the age is not empty before initiating recursion.

2. Redesign the process to avoid recursion:
   - Replace recursion with iteration: Instead of processing records one by one with recursion, you can read and process multiple records in a sequential manner, ensuring that you do not handle a new record until the current one is fully processed.
   - Consolidate changes into a single process: Rather than reacting to various changes across different processes, use one process to handle all necessary changes at once. For example, initiate triggers in a single business process (BP) with all modifications related to a specific entity, which helps in minimizing and managing recursion more effectively.

It is crucial to first review the process logic with the above suggestions, as increasing the `MaximumBackgroundRecursionDepth` parameter could lead to application performance issues, such as slowing down or exhausting server memory, which might result in application restarts or stops.

In your system, the `MaximumBackgroundRecursionDepth` parameter is currently set to 100 (default is 100). The issue arises when the number of subprocess calls exceeds this value.

To address this problem, you may need to increase the `MaximumBackgroundRecursionDepth` parameter to accommodate all records, rather than only the initial 100.

Regards,
Orkhan

You need to have some way to determine the source of a record, so if the record came from the other object, you don't send it back again. 

For records added in "Data App", you'd flag those as coming from "Data App" when adding in "Info App", so the process that syncs from "Info App" back to "Data App" knows to exclude it from sending back to "Data App", etc.

If the records need to sync updates as well, you'd want to store the original record's Id value so you know where to update. You could then use the column storing the Id to know to exclude sending it back to add.

Ryan

Show all comments

Hi community,

I’m working on a custom web service in Creatio that connects to an external PostgreSQL database deployed on Neon. My goal is to query data from this external database, acting like a custom ORM. However, I’m running into an issue with using the Npgsql package inside Creatio’s source code.

 

I’ve added the necessary references, but I keep getting the following error:

The type or namespace name 'Npgsql' could not be found (are you missing a using directive or an assembly reference?)

 

I’ve already added the Npgsql.dll to the Terrasoft.web/bin folder and modified the web.config to include a binding redirect for Npgsql. After restarting the IIS server and flushing Redis, I now get a 'System.Data.Common' assembly error.

Here’s the code I’m using:

using Npgsql;
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System.Data;
using System.Collections.Generic;
using Terrasoft.Core;
using Terrasoft.Web.Common;
 
namespace Terrasoft.Configuration
{
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class PostgresService : BaseService
    {
        private string connectionString;
 
        public PostgresService()
        {
            // PostgreSQL connection string
            connectionString = "Host=your_host;Port=5432;Database=your_database;Username=your_username;Password=your_password";
        }
 
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetData")]
        public List<Dictionary<string, object>> GetData()
        {
            var result = new List<Dictionary<string, object>>();
            try
            {
                using (var connection = new NpgsqlConnection(connectionString))
                {
                    connection.Open();
                    string sql = "SELECT * FROM users LIMIT 100";
 
                    using (var cmd = new NpgsqlCommand(sql, connection))
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var row = new Dictionary<string, object>();
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                row.Add(reader.GetName(i), reader.GetValue(i));
                            }
                            result.Add(row);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"Error retrieving data: {ex.Message}");
            }
 
            return result;
        }
 
 
 
    }
}

 

Like 1

Like

1 comments

Hello,

 

Please revert all the changes and perform the setup in the following manner:

 

  1. 1) Deploy another website that will be used as a mediator between the custom PostgreSQL database and your local Creatio app.
  2. 2) Create an endpoint in this separate server that can be accessed either via POST\GET request and that can receive some parameters in the request body.
  3. 3) Create a code in this separate server that will communicate with the custom PostgreSQL server in some method (that will be used as an endpoint to be called).
  4. 4) Call this endpoint from the webservice in local Creatio app and get data from the database as a JSON string and then process it as you need in the local Creatio app.
Show all comments