We have created a Quotation tab on the Lead page in Creatio. This tab displays the plan options. Here's the scenario:

When a user selects a Plan from the detail object and clicks Next,


The system should display values related to the selected plan within the same tab.

These related plan values should be displayed as a detail object so that the user can select the desired Sub-Plan.

 

 

Is it possible to implement this functionality using Business Processes or any other method within Creatio? If yes, could you guide me on the best approach?

 

Like 0

Like

1 comments

Hello,
 

A business process cannot cover such a business task, as business processes cannot change the view of the page you are on. You can configure the business process to start on a button for the page, in which you will pass the selected record as a parameter, but the business process in turn will already open a new page (that are available in terms of business processes) where you can already filter the records based on the selected option.

We believe that to achieve this behavior, you will need to consider developing at the client module level. From the screenshots provided, it looks like this is a FreedomUI page, so we recommend that you have a look at the materials on Creatio Academy for development:
1) https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/category/freedom-ui
2) https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/freedom-ui-customization

Thank you.
 

Show all comments

I need a way to prevent user from leaving the page, but only when he clicks on sections menu. 

 

i need to show a popup message with a question, and only after then allow or deny from navigation from the page. is that possible? 

 

Like 0

Like

1 comments

Hello!

 

At the moment, unfortunately, there is no out-of-the-box (OOTB) functionality available in Creatio to achieve this. The only option for implementing this feature is through custom development.

 

We have already submitted a request to our R&D team to consider adding this functionality in future versions of Creatio.

 

We truly appreciate your feedback, and thank you for helping us improve our product!

Show all comments

Hello, community

 

The question regarding campaings running context: when a particular user starts a campaign, will it be executed in his|her role (rights) context, or it will be executed in the context of a some kind of system account (with full set of rights)?

 

I'm interesting in could the following situation appear: user had set up filter for the campaign audience, but after starting of the campaign more contacts were added in it (even those who are unavailable for the user)  due to extended rights of an account in which context the  campaign was started. 

Like 0

Like

1 comments

Hello,

 

In Creatio, campaigns are executed with the same permissions and access rights as the user who started them. This means that only the contacts the user has access to will be included in the campaign. The situation you described, where more contacts are added to the campaign audience, should not occur. 

Show all comments

Hi Community,

I encountered an error while trying to change the Default Page in an object.

 

 

Does anyone know what might be causing this issue or how to resolve it? Any insights would be greatly appreciated.

Thank you in advance!

Like 0

Like

1 comments

Hello,

The issue can occur if you have two add-ons with different names referring to the same object. This typically happens when the object was renamed, and a new add-on was generated as a result. Or if duplicate add-ons were created for the same object in one package.

I'm also adding an example of how the addon will look in the system:

 

In order to solve this problem, it is necessary:
1. Identify and Remove the Conflicting Add-On
2. After removing the conflicting add-on, regenerate and compile the system to ensure all settings are correctly applied.

This should resolve the issue and ensure consistent behavior for your Default Page settings.

Show all comments

I have the following script task in a bpm.
This is responsible for taking the results of this api and inserting the records into a Creatio object.

Script task:

 var baseUrl = "https://angelbaraldo.creatio.com";
    var authUrl = baseUrl + "/ServiceModel/AuthService.svc/Login";
    var apiUrl = baseUrl + "/0/rest/CustomStockService/GetNoConciliadosData";
    var username = "MyUser";
    var password = "MyPassword";
 
    // Cuerpo de autenticación
    var authBody = new
    {
        UserName = username,
        UserPassword = password
    };
 
    var authBodyJson = Newtonsoft.Json.JsonConvert.SerializeObject(authBody);
 
    // Solicitud de autenticación
    var authRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(authUrl);
    authRequest.Method = "POST";
    authRequest.ContentType = "application/json; charset=utf-8";
 
    using (var streamWriter = new System.IO.StreamWriter(authRequest.GetRequestStream()))
    {
        streamWriter.Write(authBodyJson);
    }
 
    string authCookies = null;
    string bpmcsrf = null;
 
    // Obtener la respuesta de autenticación
    using (var authResponse = (System.Net.HttpWebResponse)authRequest.GetResponse())
    {
        authCookies = authResponse.Headers["Set-Cookie"];
 
        // Buscar el token BPMCSRF en las cookies
        var cookies = authResponse.Headers.GetValues("Set-Cookie");
        if (cookies != null)
        {
            foreach (var cookie in cookies)
            {
                if (cookie.Contains("BPMCSRF"))
                {
                    bpmcsrf = cookie.Split('=')[1].Split(';')[0];
                }
            }
        }
 
        if (string.IsNullOrEmpty(authCookies) || string.IsNullOrEmpty(bpmcsrf))
        {
            throw new Exception("Autenticación fallida: no se obtuvieron cookies o token BPMCSRF.");
        }
    }
 
    // Solicitud autenticada a la API
    var apiRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(apiUrl);
    apiRequest.Method = "GET";
    apiRequest.ContentType = "application/json";
    apiRequest.Headers["ForceUseSession"] = "true";
    apiRequest.Headers["Cookie"] = authCookies;
    apiRequest.Headers["BPMCSRF"] = bpmcsrf;
 
    // Obtener respuesta de la API
    string apiResponseContent;
    using (var apiResponse = (System.Net.HttpWebResponse)apiRequest.GetResponse())
    {
        using (var streamReader = new System.IO.StreamReader(apiResponse.GetResponseStream()))
        {
            apiResponseContent = streamReader.ReadToEnd();
        }
    }
 
    // Parsear los datos de la API
    var jsonRecords = Newtonsoft.Json.JsonConvert.DeserializeObject<System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, object>>>(apiResponseContent);
    // Procesar los registros (como en tu código original)
    var cantidadInsertados = 0;
 
    foreach (var record in jsonRecords)
    {
        var tipo = record.ContainsKey("Tipo") ? record["Tipo"]?.ToString() : null;
        var letter = record.ContainsKey("Letter") ? record["Letter"]?.ToString() : null;
        var cardCode = record.ContainsKey("CardCode") ? record["CardCode"]?.ToString() : null;
        var nroComprobante = record.ContainsKey("Nro Comprobante") ? record["Nro Comprobante"]?.ToString() : null;
        var nroOv = record.ContainsKey("Nro OV") ? record["Nro OV"]?.ToString() : null;
        var pymentGroup = record.ContainsKey("PymntGroup") ? record["PymntGroup"]?.ToString() : null;
        var docDate = record.ContainsKey("DocDate") ? record["DocDate"]?.ToString() : null;
        var vencimiento = record.ContainsKey("Vencimiento") ? record["Vencimiento"]?.ToString() : null;
        var docCur = record.ContainsKey("DocCur") ? record["DocCur"]?.ToString() : null;
        var docRate = record.ContainsKey("DocRate") ? record["DocRate"] : null;
        var debe = record.ContainsKey("Debe") ? record["Debe"] : null;
        var haber = record.ContainsKey("Haber") ? record["Haber"] : null;
        var debeUsd = record.ContainsKey("Debe USD") ? record["Debe USD"] : null;
        var haberUsd = record.ContainsKey("Haber USD") ? record["Haber USD"] : null;
 
        // Verificar si el registro ya existe
        var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "AgbCuentaCteSocioNegocios");
        var idColumn = esq.AddColumn("Id");
        esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "AgbCuemtaCteNumeroComprobante", nroComprobante));
        var entityCollection = esq.GetEntityCollection(UserConnection);
 
        // Consultar la cuenta relacionada
        var esq2 = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
        var accountIdColumn = esq2.AddColumn("Id");
        esq2.Filters.Add(esq2.CreateFilterWithParameters(FilterComparisonType.Equal, "AgbCodigoSocioDeNegocios", cardCode));
        var accountCollection = esq2.GetEntityCollection(UserConnection);
 
        Guid? accountId = accountCollection.Count == 1 ? accountCollection[0].GetTypedColumnValue<Guid>(accountIdColumn.Name) : (Guid?)null;
 
        // Insertar el registro si no existe
        if (entityCollection.Count == 0 && !string.IsNullOrEmpty(nroComprobante))
        {
            var newEntity = UserConnection.EntitySchemaManager.GetInstanceByName("AgbCuentaCteSocioNegocios").CreateEntity(UserConnection);
 
            newEntity.SetDefColumnValues();
 
            newEntity.SetColumnValue("AgbCuemtaCteNumeroComprobante", nroComprobante);
            newEntity.SetColumnValue("AgbCuentaCteCodigoSn", cardCode);
            newEntity.SetColumnValue("AgbCuentaCteCondicionPago", pymentGroup);
            newEntity.SetColumnValue("AgbCuentaCteCuentas", accountId);
            newEntity.SetColumnValue("AgbCuentaCteDebe", debe);
            newEntity.SetColumnValue("AgbCuentaCteDebeUsd", debeUsd);
            newEntity.SetColumnValue("AgbCuentaCteFechaDocumento", docDate);
            newEntity.SetColumnValue("AgbCuentaCteFechaVencimiento", vencimiento);
            newEntity.SetColumnValue("AgbCuentaCteHaber", haber);
            newEntity.SetColumnValue("AgbCuentaCteHaberUsd", haberUsd);
            newEntity.SetColumnValue("AgbCuentaCteLetra", letter);
            newEntity.SetColumnValue("AgbCuentaCteMoneda", docCur);
            newEntity.SetColumnValue("AgbCuentaCteNumeroOv", nroOv);
            newEntity.SetColumnValue("AgbCuentaCteTipoCambio", docRate);
            newEntity.SetColumnValue("AgbCuentaCteTipoDocumento", tipo);
 
            newEntity.Save();
 
            // Incrementar el contador de registros insertados
            cantidadInsertados++;
        }
    }
 
    // Establecer el valor de registros insertados en la variable del proceso
    Set<int>("CantidadInsertados", cantidadInsertados);
 
    return true;

 

But when I run the bpm I get this error

Error:

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()
   at Terrasoft.Core.Process.AgbProcess_93e521fAngelBaraldo1MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.CallInternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

 

Like 1

Like

2 comments

Are you trying to send requests from Creatio to the same Creatio environment? 

If that's so, it's really strange implementation. I think it's much better to call the service logic directly rather then  send an HTTP request to the endpoint and parse the response json. 

the mock code would look like this 

var service = new CustomStockServiceHelper(userConnection); 
var response = service.GetNoConciliadosData();

I assumed that you use a CustomStockServiceHelper in CustomStockService to retrieve the data. 

 

DM me if you need more help. 

Best regards, 
Yurii

 

Yuri Sokil,

Yuri thanks for you response.

Show all comments

Hi Team,

 

We have a requirement for filtering the mobile application records in the freedom UI but we doesn't have the filter icon to filter the records. 
Please help us to solve the issues.

 

Note: We are using the updated mobile application version



Like 0

Like

2 comments

Hi Team,

Please help us solve the requirement.
 

Thanks,

Prem

 

Hello,
 

Unfortunately, fast filtering options on mobile devices are currently only available in Classic UI. We realize the importance of this feature and are actively working on implementing it in Freedom UI in future application releases.


Best regards,
Malika

Show all comments

Hi

I am trying to follow the example of building a custom components using remote module from this page: 

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/front-end-development/freedom-ui/remote-module/implement-a-remote-module/overview

But when I reach the part of building the project on VS code using "npm run build" I always get the following error:

 

Generating browser application bundles (phase: setup)...C:\Users\Lenovo\Downloads\example4\node_modules\webpack\lib\container\ModuleFederationPlugin.js:58
                       throw new TypeError(
                             ^
TypeError: The 'compilation' argument must be an instance of Compilation
   at ModuleFederationPlugin.getCompilationHooks (C:\Users\Lenovo\Downloads\example4\node_modules\webpack\lib\container\ModuleFederationPlugin.js:58:10)
   at C:\Users\Lenovo\Downloads\example4\node_modules\webpack\lib\container\HoistContainerReferencesPlugin.js:36:33
   at Hook.eval [as call] (eval at create (C:\Users\Lenovo\Downloads\example4\node_modules\tapable\lib\HookCodeFactory.js:19:10), <anonymous>:88:1)
   at Hook.CALL_DELEGATE [as _call] (C:\Users\Lenovo\Downloads\example4\node_modules\tapable\lib\Hook.js:14:14)
   at Compiler.newCompilation (C:\Users\Lenovo\Downloads\example4\node_modules\@angular-devkit\build-angular\node_modules\webpack\lib\Compiler.js:1121:30)
   at C:\Users\Lenovo\Downloads\example4\node_modules\@angular-devkit\build-angular\node_modules\webpack\lib\Compiler.js:1166:29
   at eval (eval at create (C:\Users\Lenovo\Downloads\example4\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:31:1)

   

Any help for this?

Like 0

Like

1 comments

Hello,
I do not believe this issue has something to do with the article you provided or the Creatio system. Try to look for this error in other sources for example here.

Show all comments

If we want to add few more colors to the Dashboards, Is it possible? 

Like 0

Like

1 comments

Hello,
 

Unfortunately, at the moment it is impossible to customize colors in Dashboards.
 

However, we understand that this is not ideal for your specific needs.
 

We want to assure you that we have created a request for our development team to implement this functionality in future versions of our application. We understand the importance of providing our clients with the best possible experience and will work hard to implement the changes you have suggested.
 

Thank you again for bringing this to our attention, and please do not hesitate to reach out if you have any further questions or concerns.

Show all comments

Hey Everyone,


I am trying to change the order of the address in full address field in Accounts section of Customer360 creatio. Instead of Zip + Country + State + City + Address I want it as Address + City + State + ZipCode + Country.

 

I tried overriding the BaseAddressEventListener with my custom event listener but it didn't worked

 

Can someone please guide me on how to do it?

Like 1

Like

2 comments

Hello Ansh,
 

I have contacted our R&D team regarding this question. First of all, this logic is implemented on the backend side, which means that even if it is possible, it would likely be extremely challenging to achieve.
 

To conclude, I believe it is not feasible at the moment. However, I will register this as a potential improvement, and hopefully, this feature will be implemented in the future.
 

Best regards

Yevhenii Grytsiuk,

Thank you
The issue is fixed now, As I added a CustomAddressEventListener to override the BaseAddressEventListener in the source code of my custom package.

Show all comments

I am currently customizing the Account module in the Freedom UI and encountering an issue with the PDS_UsrBillToNumber_volqoyn field. This field is an integer field bound to PDS.UsrBillToNumber in the model configuration.

My goal is to remove the comma separator from this field, but the solutions I have tried so far have not worked. These include:

  1. Using useThousandSeparators: false in controlConfig.
  2. Setting useGrouping: false in the numberFormat object within controlConfig.
  3. Modifying configurations in the format object for field values.
  4. Implementing custom methods for formatting.

Unfortunately, none of these approaches have yielded the desired result. Could you kindly guide me on the correct implementation or suggest an alternative solution?

Like 4

Like

1 comments

Hello Shraddha,

Currently this task is impossible to accomplish with no-code/low-code tools. I have tried to do similar approach as described here: https://community.creatio.com/questions/freedomui-format-number-list-view-without-commas but did not achieve anything. I tried to add eventListenere on the input and replace any non-digit character, but again i could not achieve anything. Anyway i will inform R&D team, so in the nearest future this might be implemented.
 

Show all comments