Is it possible to override an OOTB C#-defined REST endpoint in Creatio? In our case, we need to trigger some action when a file is uploaded, and since the file record creation doesn't trigger business processes/similar, we need to do this some other way. One option we are trying to attempt is overriding the FileApiService's UploadFile method to trigger the behaviour after calling the base class to behave as normal for the file upload, but we can't seem to get any override behaviour of the WCF method to work. Does anybody have information or an example of how this might be done, or some other option that we could pursue?

Like 0

Like

1 comments

Hello Harvey,

Overriding the base REST service seems to be impossible in our system. We attempted to do this but were unsuccessful. I suggest creating a business process that starts after a specified delay (for example, one hour) to perform the required actions after the file upload. 

Show all comments

Problem Description
I'm trying to integrate an external .NET library (Npgsql) into my custom Creatio package to connect with a PostgreSQL database. However, I'm encountering version compatibility issues with System.Runtime.

 Current Setup
- Package Name: UsrWebServiceLog
- Target Library: Npgsql
- Current Error:
 

Assembly 'Npgsql' with identity 'Npgsql, Version=8.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' uses 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime'

 What I've Tried
1. Adding the library reference directly to my package project
2. Attempting to use an older version of the library
3. Adding System.Runtime reference

 Questions
1. What is the correct approach to include external .NET libraries in a Creatio custom package?
2. Are there specific version requirements or limitations I should be aware of?
3. Should the library be installed at the workspace level or package level?
4. Is there a specific location where external DLLs should be placed?

 Code Context
I'm trying to implement a web service that connects to PostgreSQL:

namespace Terrasoft.Configuration.UsrPostgressConnection
{
   [ServiceContract]
   public class UsrPostgressConnection : BaseService
   {
       // Service implementation
   }
}

Any guidance on best practices for managing external .NET dependencies in Creatio would be greatly appreciated. Thank you in advance!

 Environment Details
- Creatio Version: 8.1.3
- Development Environment: On-site
- .NET Framework Version: 4.7.2

Like 1

Like

2 comments
Best reply

Kyrylo Atamanenko,

According to your suggestion, it might function if I use an older version of the Npgsql driver.

Hello!

 

Actually this issue occurs because Npgsql assembly (version 8.0.5) depends on System.Runtime version 8.0.0, which is a newer version than the System.Runtime the version currently referenced in your project.

 

.NET Framework 4.7.2 does not support System.Runtime version 8.0.0, as this version of System.Runtime is associated with .NET 8, which is part of the .NET (formerly .NET Core) family, not .NET Framework.

The highest System.Runtime version that .NET Framework 4.7.2 supports is within the 4.x series. .NET 8.0 and its libraries, including System.Runtime version 8.0.0, are compatible only with .NET Core 8 / .NET 8 or higher.

Kyrylo Atamanenko,

According to your suggestion, it might function if I use an older version of the Npgsql driver.

Show all comments

Hi everyone,

I’m working on a custom web service and tried integrating Npgsql. After encountering a "no namespace found" error, I took the following steps:

  1. Added the Npgsql.dll file to the Tearsoft.web/bin directory.
  2. Modified the web.config file with the following binding redirect:

    xml
     

  3. <dependentAssembly>
        <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-8.0.5.0" newVersion="8.0.5.0" />
    </dependentAssembly>
  4. Restarted the IIS server.
  5. Flushed Redis via the Clio CLI.

After these steps, I'm now facing the following error: Could not load file or assembly 'System.Data.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. (Screenshot attached for reference)

I've already checked assembly binding logging, but I’m unsure how to resolve this error. Any suggestions or help would be appreciated!
 

Additional Context:

  • Working with PostgreSQL using Npgsql in the custom web service.
  • I made changes to the web.config file after adding the Npgsql DLL.


    this is the current state for my local instance .
     

Thanks in advance!

Like 0

Like

1 comments

Hi,

This issue requires a deeper analysis, and we advise you to create a case for Creatio support.

Thank you!

Show all comments

Hello Community,

I am currently facing an issue with a model page that contains two lookup fields: one for contact and the other for email. My goal is to allow the user to select an email address associated with the selected contact, not just the primary email, but any email linked to that contact. To achieve this, I am using dynamic filtering for ContactCommunication to filter by the current contact and email communication type.

I’ve implemented this logic within the crt.LoadDataRequest handler because the email field is a simple dropdown and does not open a separate selection page.

The problem: 
When a contact is selected, I refresh the email list data source as expected. However, the email list is not properly reloading after a contact is deselected and reselected. In this case, the email filters do not update correctly. The issue is that the email list only reloads and applies the correct filters when I manually reselect the email field.

This behavior is causing a problem where the email dropdown is not correctly filtered based on the newly selected contact. Below is the code I am using for the handler:
 

handlers: /**SCHEMA_HANDLERS*/[
 {
   request: "crt.LoadDataRequest",
   handler: async (request, next) => {
     const emailDataSource = "UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS";
     const contactDataSource = "UsrEntity_004572bDS_UsrContact_7esmp6a_List_DS";

     if (request.dataSourceName === emailDataSource) {
       const lookupValue = await request.$context.UsrEntity_004572bDS_UsrContact_7esmp6a;
       console.log("Lookup Value:", lookupValue);

       if (lookupValue) {
         console.log("Filter Hit");
         const filter = new sdk.FilterGroup();
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Contact", lookupValue.value);
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "CommunicationType", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6");

         const newFilter = Object.assign({}, filter);
         newFilter.items = filter.items;
         console.log("Filter created");
         request.parameters.push({
           type: "filter",
           value: newFilter
         });
         console.log("Filter added to request");
       } else {
         console.log("Empty Lookup");
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS = null;
       }
     }

     if (request.dataSourceName === contactDataSource) {
       console.log("Contact Selected, reloading email address list");
       // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;

       await request.$context.executeRequest({
         type: "crt.LoadDataRequest",
         $context: request.$context,
         config: { loadType: "reload", useLastLoadParameters: true },
         dataSourceName: emailDataSource
       });

       console.log("Email list reloaded successfully!");
     }

     return await next?.handle(request);
   }
 }
]/**SCHEMA_HANDLERS*/;
 

I would greatly appreciate it if you could look into this issue and suggest a solution.

Thank you!

Like 1

Like

1 comments

It is hard to tell what the issue is based on the code alone, in this situation, it would be better to run a proper debug to see what exactly went wrong. But, based on your description I can assume that there is something wrong with a refresh. Not with its code but rather with a place it is called. Try to use different approaches to it.

Show all comments

Hello, I'm wondering if there is a way to import sharepoint comments directly into the feed in creatio? I could not find any articles or other questions on this. We'd like to move data from sharepoint over to creatio and to have users use the feed similar to how they used sharepoint comments. It's important that we can move over this data.

 

Thank you,

 

Eric

Like 0

Like

1 comments

Hello,

Unfortunately, the functionality you're requesting is not available at this moment. 
However, we have submitted a request to the responsible development team. They will assess the possibility of implementing this feature in future releases.
 

We value your feedback and ideas as they help us improve Creatio.

Best regards,
Antonii.

Show all comments

Hello,

 

I'm trying to implement a file storage that saves files on a network share instead of the database. I followed the instructions here:  API for file management | Creatio Academy but I'm getting a Cannot be null Parameter name: service error. 

Any help will be appreciated. 

Thanks,

Jose

 

Like 0

Like

1 comments

Good day,

Based on the screenshots, an empty value appears to be passed to a method with the “service” argument. Unfortunately, there's not enough information available to pinpoint the exact cause of the error at this time.
 

To further investigate, it would be necessary to debug and examine what the service returns in the browser console, identify what service it is, and review the function call stack.
 

These issues typically fall under the scope of a development consultation for a deeper investigation. 

If needed, you may want to discuss this with your manager to arrange a consultation.

Thank you!

Show all comments

Has anyone else encountered an issue where the section wizards will not open after updating Creatio?  Since updating to 8.1.3 from 8.0.6, we are not able to open the section wizards in several sections across Creatio.  

 

I did find an "Item not found” exception on the console tab of the developer console.  Has anyone else encountered this and how did you resolve it? Thank you!

Like 2

Like

1 comments

Hello,

Can you provide the screenshot with the console error that you are getting while opening the section wizard?

Show all comments

Creatio Community,

 

Is it possible to add to the Creatio Login Page the show password icon you get on some other logon windows/pages (like the one from Windows Security. See Attached.) 

Thanks,

Jose

 

Like 0

Like

1 comments
Best reply

Hello,

It is possible to show a password icon on your site. To do this, you must add and enable the feature: "UsePasswordIconForTextEdit" on the feature page.

More information about this page can be found in this article on the Creatio Academy:
https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/platform-customization/interface-control-tools/existing-feature/overview#title-3459-7

Hello,

It is possible to show a password icon on your site. To do this, you must add and enable the feature: "UsePasswordIconForTextEdit" on the feature page.

More information about this page can be found in this article on the Creatio Academy:
https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/platform-customization/interface-control-tools/existing-feature/overview#title-3459-7

Show all comments

We want to add filters in the same way that you can add them to lookups using code on the page, as there isn't a no-code way to configure additional filters for Timeline components. In our case, it's filtering out non-completed Activity records from the Timeline. We don't seem to be able to using similar methods to lookups though (i.e. adding custom code to the crt.LoadDataRequest handler. Has anyone found a way to add such a filter? It looks like all the Timeline code is in the 9351.xxxxxxx JS file.

Like 0

Like

3 comments

Hello,
We must say that the ability to add filters to a timeline is under development. Unfortunately, we cannot tell when it will be added.

Hi , Any update on this , we have a requirement to add a recipient filter inside timeline component , any idea

Pranshu Basak,

 

Hello,

This feature is currently in the planned stage, but no estimates for its release are available at the moment.

Show all comments

Hi all,

I have a customer need when opening a case the user has to choose which is the next status for going on.

I followed this article: https://customerfx.com/article/opening-a-record-for-edit-in-a-specific-…

 

I implemented successfuly on case record opening the popup for choosing the next status when status is new or reopened, .... 

 

It is working fine for opening first record but when closing the record and opening an other record then having an issue on opening the record the variable are not set. 

 

When doing a full refresh in the browser then the record is opening correctly. Do I need to invoke any destroy method after the popup ?

Here is the code of the handler:

          {
          request: "crt.HandleViewModelResumeRequest",
            handler: async (request, next) => {
              const handlerChain = sdk.HandlerChainService.instance;
              const recId = await request.$context.Id;
              const statusStr = await request.$context.PDS_Status_47jug57;
              
              const dspStatus = statusStr.displayValue;
                
                if(dspStatus=="New" || dspStatus=="Reopened"||dspStatus=="In progress" || dspStatus=="Waiting for response"){
                 await handlerChain.process({
                      type: "crt.OpenPageRequest",
                      $context: request.$context,
                      scopes: [...request.scopes],
                      schemaName: "s4aCaseStatus_ModalPage",
                        modelInitConfigs: [
                            {
                                action: "edit",
                                recordId: recId
                            }
                        ]
                    }
              );
             }
              
              return next?.handle(request);
            }
           }

 

Thanks in advance

Like 2

Like

2 comments

There are currently issues with reading/setting values in the HandleViewModelResumeRequest. For a workaround, try wrapping things in a setTimeout to delay it slightly. 

setTimeout(async () =&gt; {
	// do stuff here
	const statusStr = await request.$context.PDS_Status_47jug57;
	// etc
}, 300);

Hopefully we see this fixed/changed soon, it's a horrible hack :) See more here: https://community.creatio.com/questions/813-or-812-breaks-page-param-se…

Ryan

Thanks Ryan the fix workied. Hoping this bug is getting corrected soon.

Show all comments