Hello Community,

In this article it is described on how to deal with selection windows crt.OpenSelectionWindowRequest. https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/8.1/platform-customization/freedom-ui/selection-window/overview

but no information at all about predefined values.

Is there any possibilty that when clicking 'NEW' there are some predefined default values?

Example

The Account type is set to 'Our Company'

Thank you,

Sasori

Like 0

Like

4 comments

Hello,
 

You don't need to use programming for this task.
You need to create an object replacement (in your example, an Account object replacement), in which you can set the default value for the corresponding columns, save the changes, and publish the object.

defValue
defValue


 After that, when you open the pages of creating records, you will see the fields immediately filled with the default values.

defValue in Runtime

These links can also be useful for you to find more options for achieving your goal:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/development-tools/creatio-ide/configuration-elements/object

https://community.creatio.com/questions/it-possible-set-default-value-f…

Thank you.

Hello Serhii,

Thank you for the reply.

1) We can not utilize the generic default value, becasue depending on the conditions the Type, might have differnetvalues.

2) Our frontend logic is associated with OpenSelectionWindowRequest. In the documentation of OpenSelectionWindowRequest there is no documentation for default values.

Is there any workaround to achieve this?
Sasor

If you need to use a value based on one of the fields of an object, it is fashionable to use business rules at the object level, which, depending on the value in one field, will set the value for another field using the “Set values” option.

setValBusRul

setValBusRul
 

Hello community,

any new development in the new versions of the codebase that allows us to set default values on OpenSelectionWindowRequest?

Sasor

Show all comments

In the classic UI, the timeline showed portal messages.

 

However in the Freedom UI, portal messages are not available to select:

 

They are not available as an option in the timeline settings.

 

How do we enable these?

Like 1

Like

4 comments

I believe in Freedom UI cases, portal messages are just Feed messages (with the External property set). For the filter, you'd just set the option for Feed to see portal messages.

Ryan

Hi Ryan, thanks for the reply. I thought the same but they are not showing on our system.  Will have to log it with Creatio Support.

Hi Kieron!

To display portal feed messages in the timeline, you need to first allow external users to publish Feed messages:

 

After, these portal feed messages will be automatically displayed in the timeline.

I hope this helps. Have a great day!

Alina Yakovlieva,

Hi, that setting will display the messages in the Feed panel, but they still do not appear in the timeline.

Show all comments

Hi Creatio Community,

I’m currently working on a use case where we need to customize the email composer in Creatio. Specifically, we’d like to know the possibilities for:

  1. Editing or Updating the Email Composer:
    • Is it possible to modify the default email composer UI or add custom functionalities?
    • Can we add custom fields, change the layout, or integrate additional tools within the composer?
    • Are there any APIs or configuration settings available to achieve this?
  2. Adding a Scheduler on the Email Mini Page:
    • We have a requirement to create a scheduler feature directly on the email mini page.
    • The goal is to allow users to schedule emails to be sent at a specific date and time.
    • What’s the best approach to implement this? Would we need to create a custom section, or is there an existing feature we can extend?

Any guidance, documentation, or examples would be greatly appreciated. If anyone has worked on similar customizations, I’d love to hear your experiences.

Thanks in advance for your help!

Like 0

Like

1 comments

Hello,
 

  1. 1. Unfortunately, the Message Composer element is not customizable in the system at the moment. However, we have increased the priority of this task to add such a capability in a future product update.
     

2. We do not have ready-made examples of such an implementation, but you can achieve this using a business process instead of sending messages manually.
 

You can implement the sending functionality via a script task, where you pass the draft activity ID. A similar approach was discussed here:
 

🔗 Send email from a portal user using ActivityEmailSender
 

After that, you can use a task to send the record.

Hope this helps! 

Show all comments

Hello guys, I'm fairly new to Creatio, but I've seen there are a couple of functionalities that are missing. Some have never existed in Creatio and some others were in Classic but not available anymore. 

Right now I'm interested in calculated metrics, but for freedomUI. And maybe something similar for DataGrids

From what I see, It's seems possible for developers to make their own add-ons to provide certain functionalities and probably later put in on the marketplace.

 

I guess the normal procedure is reading the source code of the base packages of Creatio and seeing how you could edit them by importing/exporting/extending classes. Probably would help to downloa other marketplace freedomUI products and trying to see how did they do it

 

But well, I was wondering if someone that has had any experience in it maybe has some tips available before embarking into that journey

Like 1

Like

1 comments

Hello,

 

At this time, we don’t have a Calculated Metrics add-on that supports the Freedom UI. However, this functionality is on our development roadmap and is anticipated for release in versions 8.3-8.4, as it relies on advanced calculation features currently in progress for 8.2-8.3.

You can also take a look at the Custom Freedom UI page components article that provides instructions on developing your own components:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Show all comments

Hi everyone,

Is there a way to group and organize workplaces in the left navigation pane?
For example, would it be possible to group Sales, Service, and Marketing under CRM?



Regards,
HindujaShiri

Like 0

Like

1 comments

Hello,
 

At the moment, such grouping is not possible, and there were no plans for such an implementation.
 

However, we appreciate your user experience feedback, and we have created a task to consider implementing this logic in future versions of the application.
 

Currently, there is already an option to set the order of workplaces in the workplace configuration panel to ensure logical distribution.
 

Thank you for helping us make our product better!

Show all comments

Hello Community,

 

I'm trying to use the "Apply Filter" function to filter a lookup value based on three parameters. The business rule works correctly when adding a new record and copy record; however, when editing an existing record, only one filter is being triggered (marked).

 

 

Has anyone encountered this issue, and is there a solution to ensure all filters are applied when editing a record?

Like 0

Like

0 comments
Show all comments

We are trying to copy all attachments posted in an object's feed to the attachment's section of the object in Freedom UI. 

 

Here's the scenario, we created a section to hold data about all our subcontractors. The users are leaving comments and docs in the Feed, but we want all those same docs to copy over to the record within the attachments section. 

 

I have used the file transfer function the business processes but the feed not your typical object.

 

Like 0

Like

1 comments

Good day,

Could you please specify whether the you are trying to copy over are stored as, for example, "Feed uploaded file"?
Feed uploaded file

Have you attempted using a process element "Process file" mentioned in this article? 

 

If so, please let us know, what exact error you are experiencing.

Thank you in advance!

Show all comments

Hi Community,

 

Our customer has requested a bar code scanner inside Creatio, so they can scan products and check its information.

We have multiple ways of doing this:

 

  1. WebApp (Custom Component) that opens the smartphone camera;
  2. WebApp (Custom Component) that establishes a connection to a scanner device (for example a Zebra Scanner);
  3. Bar code scanner in the mobile app, which we will be able to configure as described here https://academy.creatio.com/docs/8.x/resources/release-notes/8-2-1-energy-release-notes#title-2782-13.

     

For our use case, we will be using the first option, since option three is not available at the moment.

 

After some digging, we discovered that there are multiple libraries that could help us implement this use case. However, we decided to post this question to know if someone has already implemented something similar, or at least tried to. So, we can share the know-how behind it.

 

Thank you.

Like 3

Like

4 comments

Have not tried, also looking forward to some knowhow. Not just to scan, but also to generate for event registrations for example. 

I have integrated a barcode scanner with Creatio. We've used a simple bluetooth barcode scanner connected to the device (in our case it was a tablet with full Creatio open in the browser). Most barcode scanners work just like a connected keyboard. When a barcode is scanned it sends the "text" value of the barcode to as input, just as if it were typed in. In my solution, we had a page that opened and we set focus to a text/input field on the page and dislayed some message about "waiting for barcode" for the user. Then, once scanned, the text value of the barcode scanned triggered a change event for the text/input field and we then did the action needed for the barcode (which in our case the barcode was a vehicle VIN, so we then used an API to get the vehicle details for the scanned VIN). All really simple to be honest. Using this approach, thinking of the barcode scanner as text entered by an input device, just like a keyboard, it all turned out to be really easy to work with.
Hope this helps.

Ryan.

Hey Community, 
Found this on the Creatio page 

Has anyone attempted to identify the exact code or reference methods that enable this feature? We're looking to leverage this capability for a client and are trying to figure it out.

Ryan Farley,

Hello, Looks like the barcode scan functionality has been released for Mobile version 8.2.4. Here is what Creatio sent us. Did anyone from community get a chance to try this?

BarcodeScanService is a service used to initiate the barcode scanner and retrieve the scan result using scan() method. Supported barcode types:

  • Aztec: ISO/IEC 24778 — 2D matrix barcode, compact, high data capacity, no quiet zone needed.
  • Code 39: ISO/IEC 16388 — Variable-length, alphanumeric, widely used in logistics and inventory.
  • Code 93: ISO/IEC 15417 — Higher density and reliability version of Code 39, supports more characters.
  • EAN: ISO/IEC 15420 — 1D barcode for retail products, encodes 12-13 digits, globally standardized.
  • Code 128: ISO/IEC 15417 — High-density 1D barcode, supports ASCII 128, used in shipping and logistics.
  • Data Matrix: ISO/IEC 16022 — 2D barcode, supports large data storage, error correction included.
  • QR: ISO/IEC 18004 — 2D matrix code, fast scanning, supports URLs, text, and more, error correction built-in.
  • ITF (Interleaved 2 of 5): ISO/IEC 16390 — Numeric-only, compact, used for cartons and packaging.
  • UPCE: ISO/IEC 15420 — Compressed version of UPC, for small products, 6-digit format.
  • PDF417: ISO/IEC 15438 — 2D stacked linear barcode, supports large data, used in documents and IDs.


 

Return data

type - Indicates the result type: barcode, error, or cancelled.

rawContent - The scanned barcode content; null if the scan is canceled or an error occurs.

errorMessage - Describes the error if an error occurs; null otherwise.

format - Specifies the barcode format (one of the supported types or unknown); null in case of an error.

Usage:

@CrtRequest({

    type: 'crt.TestBarcodeScanRequest',

})

export class TestBarcodeScanRequest extends BaseRequest { }

@CrtRequestHandler({

    requestType: 'crt.TestBarcodeScanRequest',

    type: 'usr.TestBarcodeScanRequest',

    scopes: ['MobileContact_ListPage']

})

export class TestCaseScanBarcodeRequestHandler extends BaseRequestHandler<TestBarcodeScanRequest> {

    public async handle(request: BaseRequest): Promise<unknown> {

        const res: BarcodeScanResult = await new BarcodeScanService().scan();

        Logger.console('___ Result type: ' + res.type);

        Logger.console('___ Content: ' + res.rawContent);

        Logger.console('___ Error: ' + res.errorMessage);

        Logger.console('___ Scanned code format: ' + res.format);

        return res;

    }

}

Show all comments

Hi everyone,
 

I am looking to replace the AttachmentList component on the Leads form page with a DataGrid component that uses the FileLead (Lead attachment) entity. The goal is to disable the downloading of attachments.
 

However, I’ve encountered an issue where the Name column in the DataGrid appears as a hyperlink, which attempts to navigate to a non-existent form page for the FileLead entity (refer attachment below with the navigation URL at the bottom left). Since FileLead is an attachment entity, it ideally should not have navigation associated with it, even when displayed in a list.

image
 

Interestingly, other sections like Contacts and Attachments are functioning as expected—the Name column in those sections is not hyperlinked to any entity page.
 

This behavior appears to be a product bug. Could anyone else confirm if they are experiencing the same issue?
 

Best regards,
Ramya

Like 0

Like

1 comments

Hello!

This does not seem to be a basic problem. 
Please contact our support team to help resolve the issue - support@creatio.com

Best regards,
Anton

Show all comments

Hello Community,

I’m working on creating a custom web service to delete a lead record, but I’ve run into an issue that I can’t seem to resolve. Whenever I attempt to delete a lead using its ContactId, I receive the following error:
"Error occurred while deleting: Item cannot be deleted because it is being used in a process."

Here’s what I’ve tried so far:

  1. Removing the Process Connection:
    The lead is connected to a business process (Lead Processing) through a "Connect process to object process element." I attempted to remove this connection from the base process, but doing so broke other functionalities that are dependent on this process.
  2. Calling the Process Cancel Execution Service:
    I attempted to call the CancelExecution service (ProcessEngineService.svc/CancelExecution) to cancel the execution of the process. However, this service requires processDataIds in the body, which I cannot retrieve within the delete contact web service.
  3. Deleting the Connected Record:
    I explored deleting the record connecting the process to the lead, but I couldn’t locate the object holding this connection.

Below is the source code for my delete operation. The logic works perfectly when I stop the "Lead Processing" business process, but that’s not a sustainable solution.

Source Code:
 using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using Terrasoft.Core;
using Terrasoft.Web.Common;
using Terrasoft.Core.Entities;
using System.Collections.Generic;
 
namespace Terrasoft.Configuration.UsrDeleteLeadNamespace
{
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrDeleteLead : BaseService
    {
        [OperationContract]
        [WebInvoke(Method = "DELETE", RequestFormat = WebMessageFormat.Json, 
                  BodyStyle = WebMessageBodyStyle.Wrapped,
                  ResponseFormat = WebMessageFormat.Json)]
        public string DeleteLead(string LeadId)
        {
            if (!Guid.TryParse(LeadId, out Guid parsedLeadId))
            {
                return "Invalid Lead ID format or Lead doesn't exist.";
            }
 
            UserConnection userConnection = GetUserConnection();
            EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
 
            try
            {
                // First check and delete connected Lead Products
                EntitySchema leadProductSchema = entitySchemaManager.GetInstanceByName("LeadProduct");
                var leadProductEsq = new EntitySchemaQuery(leadProductSchema);
                leadProductEsq.AddAllSchemaColumns();
                leadProductEsq.Filters.Add(leadProductEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Lead", parsedLeadId));
                var leadProductCollection = leadProductEsq.GetEntityCollection(userConnection);
 
                // Manually convert EntityCollection to a List
                var leadProductCollectionToDelete = new List<Entity>();
                foreach (var leadProductEntity in leadProductCollection)
                {
                    leadProductCollectionToDelete.Add(leadProductEntity);
                }
 
                // Delete the Lead Products
                foreach (var leadProductEntity in leadProductCollectionToDelete)
                {
                    leadProductEntity.Delete();
                }
 
                // First check and delete connected Activity
                EntitySchema activitySchema = entitySchemaManager.GetInstanceByName("Activity");
                var activityEsq = new EntitySchemaQuery(activitySchema);
                activityEsq.AddAllSchemaColumns();
                activityEsq.Filters.Add(activityEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Lead", parsedLeadId));
                var activityCollection = activityEsq.GetEntityCollection(userConnection);
 
                // Manually convert EntityCollection to a List
                var activityCollectionToDelete = new List<Entity>();
                foreach (var activityEntity in activityCollection)
                {
                    activityCollectionToDelete.Add(activityEntity);
                }
 
                // Delete the Lead Products
                foreach (var activityEntity in activityCollectionToDelete)
                {
                    activityEntity.Delete();
                }
 
                // Now check and delete the Lead
                EntitySchema leadSchema = entitySchemaManager.GetInstanceByName("Lead");
                Entity leadEntity = leadSchema.CreateEntity(userConnection);
 
                if (!leadEntity.FetchFromDB("Id", parsedLeadId))
                {
                    return "Lead not found.";
                }
 
                if (leadEntity.Delete())
                {
                    return $"Lead and {leadProductCollection.Count} related product(s) have been deleted successfully.";
                }
                else
                {
                    return "Failed to delete Lead.";
                }
            }
            catch (Exception ex)
            {
                return $"Error occurred while deleting: {ex.Message}";
            }
        }
    }
}

I would greatly appreciate any suggestions or guidance on how to resolve this issue. Specifically:

  • Is there a way to identify and cancel the process dynamically before deleting the lead?
  • Can I identify and delete the connecting record that prevents the deletion?
  • Are there alternative approaches I should consider?
Like 0

Like

1 comments

Hello,
 

Thank you for the detailed explanation of the task.
You can reproduce this behavior through the UI by creating a new lead record and then trying to delete it - you get a message about related records, as shown in the screenshot.

create a lead and try to delete
 

In this case, blocking the deletion of the record occurs due to the running business process “Lead processing”, which creates an activity on the lead and, accordingly, an instance of the process.

According to your code, we see that you are already deleting the activities associated with this lead, so you just need to cancel the business process instance.

To implement this, the ProcessEngineService.svc/CancelExecution endpoint can be a good fit, where you need to pass the business process instance ID in the request body:

{“processDataIds”:“045ea1bc-f366-4837-994f-d229fc8a91d4”}


So, the question remains as to where you can find the instance ID of the business process that uses this record.
The “SysProcessEntity” table stores data about the relationship of the record with the business process instance. The important columns for you are:
1) EntityId - the identifier of the linked record. That is, in your case, the record ID of the lead to be deleted
2) SysProcessId - the identifier of the process instance that is associated with this record.
3) EntityDisplayValue - the value from the Display Value column for the Lead object. By default, this is the “LeadName” column.

Before calling the ProcessEngineService.svc/CancelExecution endpoint with the process ID, you can also check the business process name in the SysProcessLog table (Id = {id from SysProcessid column}).

SysProcessEntity table
SysProcessLog
 

Thank you.

Show all comments