I tried returning false and not calling next?.handle(request), but the record still seems to get saved. In Classic UI it was possible to prevent saving by not calling the this.callParent method, which I believe is somewhat analogous to the next?.handle(request), but I guess not perfectly? Maybe I'm missing something.

Like 1

Like

1 comments
Best reply

Hello Harvey,

It is possible, and you do it in the right way as I can see from the description. To prevent saving you have to declare this handler in the scheme and simply do not call next?.handle(request). 

Hello Harvey,

It is possible, and you do it in the right way as I can see from the description. To prevent saving you have to declare this handler in the scheme and simply do not call next?.handle(request). 

Show all comments

Hi all,

 

I am required to set authentication for the Redis server (bitnami/redis image)  (Email server microservices) for production on-site deployment email server.

Setting the password from the docker-compose file using REDIS_PASSWORD : 123abc as the environment variable, creates the password authentication successfully. the issue I am having is specifying the new password in my Redis connection string which is used by ListenerAPI & ListenerWorker containers. 

The docker-compose file

 

version: "3.8"

services:

  redisOfficial:

    image: 'docker.io/bitnami/redis'

    container_name: 'redisOfficial'

    restart: unless-stopped

    environment:

      REDIS_PASSWORD : 123abc # redis Authentication mode

      REDIS_AOF_ENABLED : "no"

    ports:

      - "6379:6379"

     

  rabbitmqOfficial:

   image: rabbitmq:management-alpine

   container_name: 'rabbitmqOfficial'

   restart: unless-stopped

   volumes:

    - ./rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro

    - ./definitions.json:/etc/rabbitmq/definitions.json:ro

   ports:

    - 5672:5672 # AMQP protocol port

    - 15672:15672 # HTTP management UI

   

  ListenerAPI:

    image: registry.creatio.com/emaillistener:1.0.24

    container_name: 'ListenerAPI'

    restart: unless-stopped

    ports:

      - 10000:8080 # Port forward. External port:local port

#      - 10001:8443 # SSL port by default. Uncomment if https endpoint needed

    environment:

      ExchangeListenerRedisHost: redisOfficial:6379 # Redis connection

      ExchangeListenerRedisPassword: "123abc"

      ExchangeListenerRedisDatabase: 0 # Redis DB

      PodName: ExchangeListener

# SSL certificate parameters by default. Uncomment if https endpoint needed

#      ASPNETCORE_Kestrel__Certificates__Default__Password: password

#      ASPNETCORE_Kestrel__Certificates__Default__Path: /https/el_self_signed.pfx

    depends_on:

      - redisOfficial

      - rabbitmqOfficial

    volumes:

# SSL certificate folder by default. Uncomment if https endpoint needed

#     - ./ssl:/https:ro

     - ./appsettings.json:/app/config/appsettings.json:ro

     - ./rmqsecret.json:/app/config/rabbitmq.secrets.json:ro

#    dns:

#      - 10.0.7.1

#      - 10.0.7.2

#    dns_search:

#      - tscrm.com

     

  ListenerWorker:

    image: registry.creatio.com/emaillistener-worker:1.0.24

    container_name: 'ListenerWorker'

    restart: unless-stopped

    environment:

      ExchangeListenerRedisHost: redisOfficial:6379 # Redis connection

      ExchangeListenerRedisPassword: "123abc"

      ExchangeListenerRedisDatabase: 0 # Redis DB

      PodName: ExchangeListenerWorker

    depends_on:

      - redisOfficial

      - rabbitmqOfficial

    volumes:

     - ./appsettings.json:/app/appsettings.json:ro

     - ./rmqsecret.json:/app/appsettings.Production.json:ro

#    dns:

#      - 10.0.7.1

#      - 10.0.7.2

#    dns_search:

#      - tscrm.com\

 

When I run this container in docker, i am getting blow mentioned container log for the LisenterAPI container

2024-01-24 13:24:01 [Microsoft.AspNetCore.Server.Kestrel] 2024-01-24 07:54:01,426 [40] ERROR: Connection id "0HN0SM07SMRGL", Request id "0HN0SM07SMRGL:00000018": An unhandled exception was thrown by the application.

2024-01-24 13:24:01 StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s). There was an authentication failure; check that passwords (or client certificates) are configured correctly.

2024-01-24 13:24:01    at StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(ConfigurationOptions configuration, TextWriter log, Nullable`1 serverType) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 733

 

I suspect the way (syntax) password is specified docker-compose file is not supported for the LisenterAPI container. How to fix this issue?

 

Note: Container connections work fine because, if I use ALLOW_EMPTY_PASSWORD : "yes" for redis environment variable, the service works perfectly.

Like 0

Like

1 comments

Hello!



Docker is not a scalable option for development or pre-production environments. For Docker, we provide a ready-made docker-compose file.

We do not support connecting to Redis with a password in a configuration deployed in Docker. 

We recommend using Kubernetes to add password to REDIS in the Email Listener microservice:

https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-d…

Show all comments

Hi all,



When this page opens, a process runs automatically, and the 'Mandatory Values' field is filled. The 'Mandatory Values' field specifies which fields should be compulsory to fill. Accordingly, based on the values in the 'Mandatory Values' field, I need to make related fields mandatory (required).

For example, if the 'Mandatory Values' field value is 'Package Name, Price,' I need to make the 'Package Name' and 'Price' fields required.

Can I run a function on the client side to make fields compulsory after the automatic process has run?

Like 2

Like

1 comments

I have an application that is going through rapid development iterations.  It would be nice to not have to rebuild the app from scratch every time.  A self-documenting application also appeals to me.

Some feedback on my experience of generating an app and why I say this is still a long way off:

  • Form page lists were not created (i.e., details).
  • Section names and column names have to be specified as valid identifiers (not so much natural language).
  • It’s not possible to set the prefix for an identifier for an app.
  • A progress bar was created for one section that I hadn’t asked for.
  • An email feed that I hadn’t asked for was included on one form.
  • Activities section was included which I didn’t particularly want.
  • Maximum of 500 chars for the text description, which is way too small.
  • All text fields seem to be 250 chars, would be nice to define this when describing the app.
Like 2

Like

1 comments

Hello!

 

We genuinely appreciate the time you've taken to share your insights with us. Your feedback is invaluable as it helps us understand your needs better and allows us to continuously improve our services.

To further investigate the issue you've encountered and address it more comprehensively, we kindly request you to contact our support team via email at support@creatio.com 

 

Thank you for choosing Creatio!

 

Best regards,

Kate

Show all comments

Hi

Tell me how you can sort the registry by field, the field can be either integer or lookup.

I tried it in the viewModelConfig block

indicate

"attributes": {
"ItemsSorting": {
{
"direction": "asc",
"columnName": "MscPriorityInteger"
}
}



but there is no effect, what am I doing wrong? How to correctly formulate conditions for sorting.

Thank you

Like 0

Like

3 comments
Best reply

Шевчук Святослав,

 

this can be checked out of the box. For example this code is autogenerated in the viewModelConfigDiff for the data source of the new list added to the page:

 

"DataGrid_3t5aefx": {

                        "isCollection": true,

                        "modelConfig": {

                            "path": "DataGrid_3t5aefxDS",

                            "sortingConfig": {

                                "default": [

                                    {

                                        "direction": "asc",

                                        "columnName": "Number"

                                    }

                                ]

                            }

                        },

 

Changing columnName and direction here will also change it on the page after refresh. So your code above should be changed to the one I shared and should be inside the viewModelConfigDiff array of the schema to change the default sorting.

Hello, 

Let me share some articles to explain the Creatio app's filtering. In the example of code that you've posted there is no filtering.

Please check the next examples of filtering, it can be helpful for your business task:

https://community.creatio.com/questions/building-column-path-filter-rec…

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

https://community.creatio.com/questions/sort-objects-server-side

Anhelina, But I'm not saying anything about filtering! I'm talking about Sorting and the new interface. I don’t see anything about the new interface in the articles you cited.

Шевчук Святослав,

 

this can be checked out of the box. For example this code is autogenerated in the viewModelConfigDiff for the data source of the new list added to the page:

 

"DataGrid_3t5aefx": {

                        "isCollection": true,

                        "modelConfig": {

                            "path": "DataGrid_3t5aefxDS",

                            "sortingConfig": {

                                "default": [

                                    {

                                        "direction": "asc",

                                        "columnName": "Number"

                                    }

                                ]

                            }

                        },

 

Changing columnName and direction here will also change it on the page after refresh. So your code above should be changed to the one I shared and should be inside the viewModelConfigDiff array of the schema to change the default sorting.

Show all comments

Hi comunity,

 

I've an issue when I work in filedesign mode and git repository.

When I update my local dev environment using "update from file system" I received several error when I run a "compile all" action.

The errors are similar to this:

Type 'xxxUserTask' already defines a member called 'CancelExecuting' with the same parameter types

 

The issue raises because in the Terrasoft.Configuration.Dev.csproj there are more class which contains the same member:

  1. \Autogenerated\xxxUserTask.yyyBase.cs
  2. \Autogenerated\xxxUserTaskSchema.yyyBase.cs

I tried deleting the file nr. 1 from csproj, the build from Visual studio works fine, but if I run the "Compile all" the deleted file appears and the build fails.

Can you suggest me how to solve this problem correctly?

Like 0

Like

1 comments

I found the error.

If I don't set correctly the maintainer on system settings, the "update from file system" action does not work correctly.

Show all comments

Hello team,

 

We have enabled Azure AD SSO for our customer. One issue we face is that every time the customer hits the login page, they are required to click on the "Login with Single Sign On" link. Is it possible to auto redirect to SSO (assuming that users are signed in)?



Could you also please let us know if there are any config related changes we need to enable to auto login via SSO?

Like 2

Like

3 comments

We're also facing this same requirement for our client and haven't seen an option for this - would be great to hear if it's possible and if not if it could be added to Creatio.

Harvey Adcock, Shivani,



It is possible. Do you use cloud or on-premise?



BR,

Bhoobalan Palanivelu.

Hi Bhoobalan, it is possible on cloud instances by contacting Creatio to enable it. The implementation isn’t great unless all your users (including dev/admins) use SSO though, as the auto-redirect will be cached meaning you cannot log in using Creatio username and password without using a fresh incognito window every time - it’s quite frustrating. They need to add a link that can always be used to log in via non-SSO means. 

Show all comments
// Read entity.
EntitySchemaManager manager = UserConnection.EntitySchemaManager;
var entity = manager.FindItemByName("Account");
// Tables that reference the entity.
var entityCollection = manager.GetSchemaOppositeReferences(entity.UId, EntitySchemaColumnUsageType.General, UserConnection, false);
string result = string.Join(", ", entityCollection.Select(i => i.SchemaName));
 
/*
VwAccountRelationship, VwAccountDuplicate, VwRelationship, VwAccountRelationship, VwAccountModuleHistory, VwAnniversary, CompetitorProduct, AccountCommunication, Relationship, Call, VwAccountDuplicate, CTISearchResult, Contact, AccountAlternativeName, AccountEnrichedData, AccountInFolder, VwModuleHistory, AccountFile, Relationship, ContactCareer, QuickDialUserSettings, EmailFolderColumnValuesSetting, VwRelationship, Employee, AccountAnniversary, AccountInTag, AccountDuplicate, VwSspAdminUnit, AccountOrganizationChart, AccountAddress, AccountBillingInfo, VwSspAdminUnit, VwSSPSysAdminUnit, EnrchFoundAccount, EmployeeCareer, AccountDuplicate, Account, VwContactRelationship, Activity
*/

I can read the tables that reference an entity with an opposite references call on the entity.

How would I i) find out what the details (classic UI) and the list components (Freedom UI) of a section are?  and, ii) know what object the grid object was referencing?

Like 0

Like

2 comments

Hello,

 

i) From the server-side - there is no way to get this information since this is the information on the client side (on the page) and connections are done only on the page. For example you cannot retrieve Contract object in case you have a list of Contracts on the account form page with the connection like the following:

ii) Once again - this is a client-side information that is not available from the server-side code. This information cannot be retrieved from the server-side methods.

Oleg Drobina,

Thanks for looking at this.

 

I have been asked for a data dictionary, which I can do with the API provided in the .NET classes reference.  I have been asked also for user interface documentation, which is where I could do to know what the fields, tabs, etc. of a section edit page are.  This information is going to have to be entered manually for now.

 

Module information I think has to be in Creatio tables, but I don't know what the rubric is for querying Creatio tables with SQL, let alone which tables.  An API would be better.

Show all comments

I'm looking to trigger page data validation in a specific circumstance from code. I've found that you can use

request.$context.validate()

within client event handlers to trigger the OOTB fields validation for the page, but this just returns an object representing any/all errors in validation for the data. What would make sense to do in our use case after that would be to trigger the NotifyService message you usually see when saving fails due to such validation checks, but I can't see how to trigger it/how to fetch the string that should be shown in the message. I located a method that looks like it is performing this task for the OOTB save validation, called getValidationErrorMessage, which would be passed the request context and the error object returned by the validate function, but this method doesn't seem to be available for use.

 

Has anybody had any luck with triggering validation in Freedom UI and then displaying the OOTB message based on that validation result? Any help would be greatly appreciated. We're currently running on 8.1.0

Like 2

Like

4 comments

Hello,

If I'm not mistaken, you can use simple OOTB validation that is described here https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Hi Dmytro,

 

This doesn't give us a way to trigger the validation manually though unfortunately. What we were trying to achieve was to show the validation message to users without saving/trying to save the record at that point in time. We ended up making our own very basic error message that shows the results returned by

request.$context.validate()

if there are any and stops the user progressing in our custom path, but it would be good to be able to tap into the OOTB error toast message so it's a little more detailed and polished.

Harvey Adcock,

 

Hello! 

Unfortunately, so far, we don't have the functionality to trigger the OOTB validation snackbar-message without saving /trying to save the record. 

We have registered your suggestion, and our R&D team will consider implementing it in future releases.

Thank you for making our product better!

 

Best regards, 

Natalia

Harvey Adcock,

Dear Harvey,

 

See this community article, I think it could help you to answer your question https://community.creatio.com/questions/dynamic-parameter-validator-freedom-ui

 

Regards,

Julio

Show all comments

Hello,

 

I am trying to automate the gathering of data using some business process that perform API calls to one of our client private APIs. I have defined the WebServices with no problem like the one from this example:

 

 

And sending the test request with a valid API Key and Authorization token works perfectly. However, if I try to group all of this inside a business process I get an error that I don't know how to solve. This is the business process:

 

 

And the error that I get exactly on the web service call is this one:

 

 

The full error message states:

Terrasoft.Common.UnsupportedTypeException: Type "System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" is not supported.

 

I have done some tests and I can confirm that the error only appears when I try to use a the valid Authorization token retrieved previously, and if I set any other value in that Web Service parameter I don't get the error but obviously the call fails because I am using and incorrect token.

 

The length of the token is 299 characters and as it is an authorization token, it must be preceded by the word "Bearer", so the full value that I am passing to that parameter is "Bearer " with a total length of 306 characters. I also tested using some random strings of length 500+ and the error doesn't show up, so it is not related to a limit of the parameter length. I also checked that the token I am passing is 'correct', i.e. no breaklines, weird characters (not UTF-8) or anything that could cause problems with the encoding of the string.

 

Therefore, I guess it is something related to the way Creatio builds the API request from inside the process, that is not the same as doing from a test request inside the Web Service...

 

Your help is highly appreciated.

Regards.

Like 0

Like

2 comments

Note: I have not tried yet to perform the same kind of requests inside a business process to another API (like a public one), but the error I am getting is not related to the API I am using, it must something related to the Creatio business process logic when invoking web services methods, regardless of the endpoint and the API specifications.

Hello,

 

I recommend that you create a support request.

Show all comments