Studio_Creatio
8.0

Organization roles


I already set Manager User in Organizational roles, but how to get that manager in business process? Cases: I want to give Perform Task for that manager based on user as you can see in the image (Nama RM) is user with Relation Manager Role, but I want to give that task to the manager. How to do that? Thanks
Business Process

Like 0

Like

3 comments

Hello,

Currently there is not possibility in the system to read a user's manager using a business process this way. However, we will register this idea for our R&D team so they could review the possibility of implementing such functionality in future releases.

Mira Dmitruk,

Thanks for the answer, are there any other solutions for my case instead of using a business process?

You have to read the sysadminunit object and find the hiearchy there.

It is a bit tricky but something like this should work:

"Nama RM"  will have a role in sysadminunit 

this role will have a management role in sysadminunit 

this management role will have users in sysadminunit 

Show all comments
How_to_Hide_a_Button_on_Add_Record_Page_in_Freedom_UI?
Studio_Creatio
8.0

I am working in Freedom UI and need to hide a custom button on the Add Record page.

The requirement is:

  • The button should be hidden when creating a new record
  • The button should be visible after the record is saved (Edit mode)

I tried using a business rule with the condition:
Page is opened or one of the attributes in conditions changed.

And checked whether a specific field is filled in. However, I would like to confirm the best and recommended approach to detect Add mode properly in Freedom UI.

Is checking whether the Id field is filled in the correct way to handle this scenario?
Or is there a better way to control button visibility based on Add/Edit mode?
 

Like 0

Like

4 comments

Hello,

Please note that there is no difference between a saved and unsaved record in the system - even all of the system fields like Id, CreatedOn, CreatedBy etc are already pre-filled in before saving. So there's no field that would automatically change after saving, that we could base such a business rule on.

The best solution in such case would be to create separate pages - one for adding new records where this button would be absent, and another page for editing records where this button would be present.

We will also register this idea for our R&D team and they will review the possibility of adding such functionality in future.

I typically hide buttons based on whether all the necessary fields have been completed. You can also set the button set to save data before running a process so if mandatory fields not populated it will not save and run. Alternatively as you have said you can do it in a business process by populating a hidden field when new record is created and then having a business rule based on that. I am not sure you can use ID for this as it is pre-populated like other fields

This is a point of frustration. Previously you could use something like CreatedOn for this, but that no longer works. I typically use an attribute bound to the visibility of the button and set the attribute based on changes to request.$context.CardState, but when adding a new record, the CardState doesn't change once saved, so you have to also set the attribute in the save request also. It's a lot of extra work that should not be necessary, but the only way it works currently. 

Ryan

Hello,

Thank you for all the suggestions. I created a custom field for order  and set that field using business process. Then added the field on form and based on that field made the button hidden.

This worked well. Now, I did the same thing for invoice. Initially, when new record page opens the button is hidden as expected but as soon as I enter value in Account field, button gets visible without saving the record. 

What can be the possible cause of this behaviour?

Show all comments
Studio_Creatio
Studio_Creatio
8.0

I am currently experiencing an issue after performing a fresh installation of Creatio Studio version 8.3.0.3031_Studio_Softkey_MSSQL_ENU on my local environment.

Issue:
I am unable to access the application locally. The site returns a server error related to SQLite native library loading.

Error summary:

  • Library: e_sqlite3 not found
  • Platform: Windows (win-x64)
  • Exception: System.ComponentModel.Win32Exception (0x80004005): The specified module could not be found
  • The system attempts to load e_sqlite3.dll from multiple locations, including the Terrasoft.WebApp/bin folder.

    here is sc https://prnt.sc/3YVykbJDXpNb
Like 0

Like

1 comments

Hello,

Based on the error on startup (“Library e_sqlite3 not found” / Win32Exception: “The specified module could not be found”), the issue is most commonly related to missing or incompatible prerequisites on the workstation, or a damaged/incomplete deployment package where the required native runtime libraries were not copied correctly. Please verify that the machine has all required system components installed (including the .NET 8 SDK and .NET Framework 4.7.2 Developer Pack/SDK as per the prerequisites), and also ensure that the application is running in the correct bitness (x64) so native dependencies can be loaded. In parallel, please re-check the deployment archive integrity (re-download/re-pack if needed) and confirm that the extracted folder contains the required runtime/native files (e.g., the runtimes\win-x64\native\e_sqlite3.dll path under the web application) and that the archive extraction completed without errors.

You can find the full list of required system components in the documentation here.

Show all comments
I_want_to_integrate_my_own_service_via_a_Marketplace_app
Studio_Creatio
8.0

Hey guys,

I want to integrate my own service via a Marketplace app — for example, add a button on the contacts page (or somewhere) to send an email or SMS to the user.

I'm having trouble creating my own Freedom UI page where I can embed a button like "Message the user". I need to somehow connect this Freedom UI page to my REST service.

Also, I want to pass a token so I know the request is coming from a specific client/user.

The docs only talk about OAuth for logging in somewhere with external services, but that's not what I need.

Can you help with this?

Basically, I need a place to store the token — something one-time setup in the app configuration, so when a user installs my app, they can enter their own tokens (API keys or whatever), and then every request from Creatio to my service includes that token so I can identify which client it comes from.

Thanks!

Like 0

Like

1 comments

Hello,
If I understand your requirement correctly, your implementation scenario looks approximately like this: a button in Freedom UI → triggers a server-side call → the server retrieves a token from configuration → calls your external REST service, including that token → returns the result back to the UI. 

The external service call should be executed on the server side (via a custom web service or application service in your Marketplace app), not directly from the browser. This prevents exposing the token in client-side code and ensures better control over authentication, logging, and error handling. 

If your main concern is token storage, the recommended approach is to create a system setting within your application package and store the required API key or token there. You can include a data installation script that creates this system setting automatically when the app is installed. This allows each client to configure their own token once during setup.

The token can then be safely retrieved on the backend using standard Creatio APIs (for example, via SysSettings) whenever your service call is executed.

Show all comments

Dear colleagues,

I have a Freedom UI page (Creatio v8.3.2.4166) that activates the Save button immediately on load, without any user interaction.

After extensive debugging, I identified three contributing factors:

1. ForwardReference attributes in modelConfigDiff. The page has multiple attributes of type "ForwardReference" resolving data from two related entities. These are all read-only fields. Example:

"NcsRelatedEntityNcsDescription_abc123": {
    "path": "NcsRelatedEntity.NcsDescription",
    "type": "ForwardReference"
}

When these attributes resolve asynchronously after page load, the framework registers them as user changes and sets HasUnsavedData = true.

2. RichTextEditor controls with <strong>needHandleSave: true</strong> — for some reason the page wizard generated them with true by default, even though all of them are readonly and display data from a related entity, not from the current object's own fields. We changed all of them to needHandleSave: false, which helped partially but did not fully resolve the issue.

3. Calculated field handlers. The page has a handler that calculates age from a birth date field (and another similar purpose handlers):

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) => {
        if (request.attributeName === 'PDS_NcsBirthDate_abc123') {
            const birthDate = await request.$context.PDS_NcsBirthDate_abc123;
            if (birthDate) {
                const today = new Date();
                const birth = new Date(birthDate);
                let age = today.getFullYear() - birth.getFullYear();
                if (today.getMonth() < birth.getMonth() ||
                   (today.getMonth() === birth.getMonth() &&
                    today.getDate() < birth.getDate())) {
                    age--;
                }
                request.$context.PDS_NcsAge_xyz789 = age;
            } else {
                request.$context.PDS_NcsAge_xyz789 = null;
            }
        }
        return next?.handle(request);
    }
}

When the page loads with an existing record, PDS_NcsBirthDate_abc123 fires as an attribute change event during model initialization, the handler writes PDS_NcsAge_xyz789, and that write marks the page dirty — even though both values were already saved in the database.

The same pattern applies to a handler that composes a full name from first and last name fields, and to the RichTextEditor ForwardReference fields that display read-only rich content from a related entity.

What we tried:

Approach 1 — Subscribing to events$ in HandleViewModelInitRequest to detect finish-load-model-attributes, setting a window._NcsPage_pageReady flag, and guarding all attribute change handlers behind it. This correctly prevents our own handlers from triggering dirty state, but does not prevent the framework itself from setting HasUnsavedData = true when ForwardReferences resolve.

Approach 2 — Adding a HandleViewModelResumeRequest handler that forces HasUnsavedData = false after the model is ready. This fires too early — ForwardReferences resolve after Resume, so they overwrite the reset.

Approach 3 — Using setInterval (up to 35 cycles × 200ms = 7 seconds) inside the Init handler to repeatedly reset HasUnsavedData = false. This does not work because the request.$context captured in the Init handler closure becomes stale after initialization — Creatio replaces the ViewModel reference, so we are resetting a dead object.

Approach 4 — Intercepting all HandleViewModelAttributeChangeRequest as the first handler in the chain, calling await next?.handle(request) and then forcing HasUnsavedData = false on the fresh request.$context. This works during the initial load phase (while _pageReady = false), but ForwardReferences continue resolving after _pageReady = true, still triggering dirty state.

Approach 5 — Combining Approach 4 with permanent suppression for all known ForwardReference attributes (since they are always readonly):

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) => {
        const result = await next?.handle(request);
        const isForwardRef = request.attributeName?.startsWith('PDS_NcsRelatedEntity');
        if (!window._NcsPage_pageReady || isForwardRef) {
            request.$context.HasUnsavedData = false;
        }
        return result;
    }
}

This still fails — HasUnsavedData keeps flipping back to true after each reset.

Questions:

  1. Is there a supported Freedom UI pattern to prevent HasUnsavedData from being set by ForwardReference resolution on page load?
  2. Is there a lifecycle event or request that fires reliably after all ForwardReferences have fully resolved?
  3. Is there a way to prevent a handler that writes a calculated field (like age from birth date) from marking the page dirty when it fires during initialization?
  4. Is there any way to mark specific attributes as non-dirty-tracking so the framework ignores their changes for save state purposes?

Any guidance from the community would be greatly appreciated. Thank you very much

Regards

Julio Falcón

Like 1

Like

2 comments

Hi Julio,

For the change event handler, you can use request.silent == false. The request.silent indicates if the change was from a model load (silent=true) vs a user change (silent=false).

{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next) =&gt; {
        if (request.attributeName === 'PDS_NcsBirthDate_abc123' &amp;&amp; !request.silent) { // only handle user changes
            //...
        }
        return next?.handle(request);
    }
}

Ryan

For question 3, you can use the method marked as being the answer in this thread: https://community.creatio.com/questions/it-possible-make-changes-attributes-code-freedom-ui-silently

 

Unsure about the others - I haven't seen forward references causing the page to think there's changed data that needs saving in earlier versions of Creatio, so if that is causing the issue it would sound like a bug in 8.3.2?

 

I'm also not aware of a supported way of resetting the page/specific attributes so that Creatio doesn't think they have changed or will never pay attention to changes in them. It would be nice to have this option though.

Show all comments

Hi Team,

We are currently using the following server-side code to send Mobile Push Notifications in Creatio:

var userConnection = this.Get<UserConnection>("UserConnection");
var pushNotification = new PushNotification(userConnection);
 
Dictionary<string, string> additionalData = new Dictionary<string, string>();
additionalData.Add("entityName", entityName);
additionalData.Add("recordId", recordIdStr);
 
pushNotification.Send(sysAdminUnitId, title, message, additionalData);

On the mobile side, we are using the standard:

Terrasoft.configuration.PushNotificationReceiver

Now we have a requirement to delete or cancel a previously sent push notification based on:

  • entityName
  • recordId

For example:
When a record is approved or completed, the related push notification should be removed from the mobile device.

However, we understand that Push Notifications are not stored in a database table like System Notifications.

Could someone please clarify If there is a supported way to cancel or remove a specific mobile push notification?

Any guidance or best practice would be greatly appreciated.

Thank you!

Like 0

Like

1 comments

Hello Puneeta Mehta,

Unfortunately, there is no supported way to cancel or delete a specific push notification.

Show all comments
Compile_an_app_on_a_web_farm
Studio_Creatio
8.0

i have a web farm with HAProxy and 3 Windows IIS web servers, im using gitlab ci/cd pipeline where im stopping IIS on server2 and server3, and deploying new packages on server1, after deployment finished im copying WebApp/conf/ and WebApp/Terrasoft.Configuration/Pkg as mentioned in documentation to server 2 and 3, but after enabling HAProxy, i need to manually do compile all in server 2 and server 3. what im doing wrong or what im missing 

Like 0

Like

5 comments

Hi!

Based on your description, the deployment is almost correct, but in a web farm scenario you’re syncing only package sources and config (WebApp\conf and WebApp\Terrasoft.Configuration\Pkg) from node1 to node2/node3. After HAProxy starts sending traffic to all nodes, node2 and node3 still have stale compiled artifacts and/or cached metadata (Redis), so they detect a mismatch and require a manual “Compile all” locally.

Recommended rollout flow:

  • Put the farm into maintenance / drain traffic in HAProxy
  • Stop IIS on node2/node3
  • Deploy to node1 and run compile there (if required)
  • Copy the required folders plus compiled output from node1 to node2/node3
  • Flush Redis
  • Start node2/node3
  • Re-enable HAProxy traffic

Please let me know about testing this approach.

Kalymbet Anastasia,

Thanks for replay Anastasia,
let me quickly represent my pipeline stages

1)  Stop HA Proxy (stopping HA Proxy service, for now I have a downtime as you can see, in future I'm planning to change it) 

2) Stop cluster ( Stopping node2 and node3)

3) Install Clio (checking if there is installed Clio on node1, if no install it)

4) Create zip (Building the environment)

5) Deploy ( deploying and compiling  )

6) Copy From Server1 ( copying the artifacts from node1)

7) Copy To Secondary Servers ( sending the copied zip files to node 2 and node 3)

8) Clear Redis (clearing Redis cluster)

9) Start cluster (starting node2 and node3)

10) Start HA Proxy (starting HA Proxy service)

with this pipeline I'm getting the result where I need to manually compile node 2 and node 3 from 0/dev. So my question is, do I need copy something else from node 1 ( beside the directories that are in documentation) or do I need add compile step after coping to Node 2 and Node 3

Hello,

After installing the packages, could you please try transferring not only the files you usually move to the adjacent node, but all application binary files?

This will help us better localize the issue and determine whether the problem is caused by incomplete file transfer or if it is related to something else.

Anastasiia Zhmud,

Hello,
well I have tried adding
/Terrasoft.WebApp/Terrasoft.Configuration/Autogenerated and /Terrasoft.WebApp/bin to my pipeline, but didn't helped, if you mean different bin can you please tell the path?

problem is solved, thank you for your help

Show all comments
FreedomUI
approvals
Studio_Creatio
8.0

Hi ,

I am facing an issue in changing the approver and delegated from using the business process if that Business process is triggered by the user who is not in the role of System administrators.

getting an error : 
System.Security.SecurityException: Object "UsrClaimEntriesVisa" record cannot be assigned more permissions than you currently have.



If i trigger the process using the supervisor account then i am easily able to complete the process of changing the approver and delegated from easily without any error.

can anyone help in this ?

how can i give rights to user to update the approvals object

 

Like 0

Like

4 comments

Hi, you can do it via Object permission

and then find your object and make all necessary settings

 

Dmitry S,

I Tried this, but still facing the same issue.

Can you please post here a screeshot with the object rights? 

Hello,

If a user, who is supposed to perform a process action does not have access permissions required to perform that action, the corresponding process task will not be able to complete. 

You can find more information in this Academy article.

It would be best for you to create a case directly for the support team at support@creatio.com so we could check the entire design of the process and the permissions the user who experiences the error to determine the exact cause of the issue.

Show all comments
#mobileapp
#FreedomUI
Studio_Creatio
8.0

Hi All, we are trying to create an intake request page for mobile using the Freedom UI. We have one dropdown field (Field 1) that is mandatory. This field has 4 values. Based on the selection of value by user, we want to expose certain fields. Hence, we have hidden these fields until the value selection of Field 1. But the business rules are not working to make these fields visible. Is this feature not available on the latest update to freedom UI in mobile?

 

Like 0

Like

1 comments

Hello,

I have confirmed that this functionality is working correctly in the latest out of the box version of Creatio. 

Below, you will find an example of how this type of business rule should be configured.



I verified this in Creatio version 8.3.2 (web) and version 8.3.7 of the mobile application. Please ensure that your mobile app is updated to the latest version.

If you continue to experience problems, please contact the Creatio Support team directly so your site configuration can by reviewed. Don't forget to provide the steps to reproduce the issue.

I trust this helps.

Best regards,
 

Show all comments
Studio_Creatio
8.0

Our customer needs to connect Creatio to Power BI Service, but the current connector only works with Power BI Desktop. When publishing to the Service, the gateway cannot connect to Creatio because the required connector/method is not available. 

I need  some clarification on:

  1. Whether Power BI Service connectivity is supported.
  2. Any supported alternative (API method, workaround, or integration pattern) to enable the Service to access Creatio data.
Like 0

Like

1 comments

Hello,

At the moment, the only officially supported way to connect Creatio to Power BI is via the Marketplace connector, which has limitations. Unfortunately, Creatio does not offer alternative OOTB solutions for connection. 

Show all comments