I need to read all the filters of all the entities via odata. 

https://XXXXXXXX-se-m-se-demo.creatio.com/0/odata/FolderTree

 

When I run the above URL in the browser, it gives me the names of all the folders of all the objects of creatio. I need to fetch the dataset, which is returned by the folder name of the object.

 

 

For example, in the above screenshot, the filter name is "My overdue cases." I need to create or construct a query or Postman URL that will give me all the cases returned by the "My overdue cases" folder tree.

I run below URL in the Postman.
{{BaseURI}}/0/odata/FolderTree(c651a067-8639-f779-0323-e1133cc4cb76)/FilterData

It gave me below response. 


 

However, I cannot identify how to fetch all the cases returned by the "My overdue cases" folder tree.

 

Any help in this matter would be greatly appreciated. 

Like 0

Like

1 comments

One option would be to look at the network tab of dev tools when using Creatio client, you'll see it accessing data using a SelectQuery - what you posted above would be used as the filter for that SelectQuery - you could do the same POST externally. 

Another option, would be to create a custom configuration service to retrieve the records in a filter. The code for the config web service would deserialize the filters, do an ESQ and return the records from the ESQ. You can see how to deserialize the filters in server side C# here: https://customerfx.com/article/programmatically-using-section-folder-filters-in-processes-or-server-side-code-in-creatio/

Ryan

Show all comments

[ec2-user@ip-x-x-x-x ~]$ COMPlus_ThreadPool_ForceMinWorkerThreads=100 dotnet Terrasoft.WebHost.dll

2024-11-27 00:56:21,031 Application starting

Unhandled exception. System.Security.SecurityException: System login error. Error has been recorded in system log of the server. Please contact your system administrator.

---> Npgsql.PostgresException (0x80004005): 28000: no pg_hba.conf entry for host "", user "postgres", database "creatio", no encryption

   at Npgsql.NpgsqlConnector.DoReadMessage(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isPrependedMessage)

   at Npgsql.NpgsqlConnector.ReadMessage(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications)

   at Npgsql.NpgsqlConnector.ReadMessage(Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications)

   at Npgsql.NpgsqlConnector.ReadExpecting[T](Boolean async)

   at Npgsql.NpgsqlConnector.Authenticate(String username, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)

   at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)

   at Npgsql.ConnectorPool.AllocateLong(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)

   at Npgsql.NpgsqlConnection.Open(Boolean async, CancellationToken cancellationToken)

   at Npgsql.NpgsqlConnection.Open()

   at Terrasoft.Core.DB.DBExecutor.b__23_0() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core/DB/DBExecutor.cs:line 224

   at Polly.Policy.<>c__DisplayClass109_0.b__0(Context ctx, CancellationToken ct)

   at Polly.Policy.<>c__DisplayClass103_0.b__1(Context ctx, CancellationToken ct)

   at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.<>c.b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.Execute(Action`2 action, Context context, CancellationToken cancellationToken)

   at Polly.Policy.Execute(Action action)

   at Terrasoft.Core.DB.RetryDBOperation.Execute(Action operation) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core/DB/RetryDBOperation.cs:line 29

   at Terrasoft.Core.DB.DBExecutor.RetryOnFailure(Action action) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core/DB/DBExecutor.cs:line 432

   at Terrasoft.Core.DB.DBExecutor.get_DBConnection() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core/DB/DBExecutor.cs:line 223

   at Terrasoft.Core.DB.DBExecutor.PingDB(UserConnection userConnection) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core/DB/DBExecutor.cs:line 1126

   --- End of inner exception stack trace ---

 

 

I get this error when i'm trying to start the application..the connectivity is all fine fro the server..

Like 0

Like

1 comments

Hello!

 

The error you encountered suggests that the application could not connect to the PostgreSQL database because of a misconfiguration in the pg_hba.conf file.

 

Error message: "28000: no pg_hba.conf entry for host "", user "postgres", database "creatio", no encryption" indicates that either The client IP or hostname does not match any rule in the pg_hba.conf file, or The database connection parameters (host, user, or authentication method) do not align with the allowed configurations in the PostgreSQL server.

 

Possible causes:

  1. 1) The server does not have a rule allowing connections for the postgres user to the creatio database from the host making the request
  2. 2) The host parameter appears empty (host "" in the error). This might happen if the application’s configuration is missing or incorrect
  3. 3) The PostgreSQL server is not accessible from the host where the application runs

 

To resolve the issue, please try the following:

  1. 1) Update pg_hba.conf file by adding a rule to allow the required connections. For example,
  2. # TYPE     DATABASE          USER           ADDRESS     METHOD
  3. host        youdatabase      postgres             IP                md5

2) Verify Connection String, specifically:

<add name="db" connectionString="Server=[Database server name];Port=31436;Database=[Database name]; User ID=[Name of the user who will connect to the DB];password=[Password of the user who will connect to the DB];Timeout=500; CommandTimeout=400;MaxPoolSize=1024;" />

 

Have a nice day!
 

Show all comments

For the data received from Microsoft Power Automate, such as the following example: {"Q1":"1","Q2":"[\"Option 1\",\"Option 3\",\"Another Information\"]","EntityName":"UsrInfo"}, how should I record the information so that the values in Q2 are registered in separate columns?

Example:
Q1 – 1
Q2 – Option 1
Q2 – Option 3
Q2 – Other Information

Like 0

Like

4 comments

I don't think the OOTB webhooks will handle that structure. You'll probably have to have it go to a text field, which will store the array as a text string, then use a process on record added to parse it to put in the correct places.

Ryan

Thank you. Based on my research, this seems to be the most suitable solution. Do you have any example of a process that performs this transformation?

Hello!

 

OOTB webhooks will not handle such a structure. 

You can use Business Processes with Custom Script Tasks. You would need:

  1.  -Parse the JSON data using a Script Task.
     -Loop through the Q2 values and save them using a Data ScriptTask.
     -Trigger the Process
     -Integrate the process with the incoming data from Microsoft Power  -Automate via:
     -Webhooks: Call a Creatio web service with the JSON payload.
     -Integration Process: Use the Creatio API to receive the data directly.
     

Kyrylo Atamanenko,

Hello! 

Do you have any example of a script to convert the data ["Option 1", "Option 3", "Another Information"] into an object and insert it into the database?

Thank you. 

Show all comments

Hey Community, i'm trying to write a piece of code which will show a popup to the user on login. Thinking of overriding the shell page for the same,but unable to find the sourcecode.Has any one tried it before.I'm specifically trying to show the pop up on this page.

Like 1

Like

1 comments
Best reply

Hey community, 
I found the client module it is called BaseShell

Hey community, 
I found the client module it is called BaseShell

Show all comments

We've been building out API data flows into Creatio including automated order/invoice creation from cart data and webinar registrations from our website. We are now creating a support request form on a website that should create a case linked to a matching contact in the CRM. 

 

Retrieving the contact ID isn't a problem, but we're stuck trying to figure out how to create the new Case. We can query the /Case endpoint and see existing case data. How do we POST a new case?

 

And will we be able to take  file uploads from the webform and submit them into the /CaseFile object? Or will it have to a linked reference like a URL?

Thanks in advance!

Like 0

Like

3 comments

You would just POST to https://mycreatiourl/0/odata/Case with a payload that is structured using Case columns, something that looks like what you get when you GET an existing case. You only need to include the columns you're setting in the new case, not all columns that you see in that payload.

Ryan

As for adding a CaseFile, I use the FileApiService endpoints for that, which is what the Creatio client uses as well. If you look at the network request in the dev tools when you add an attachment to a case, you'll see it uses FileApiService - you can use this externally as well to mimic the same request as it does internally.

Ryan Farley,

Thanks for your help on this Ryan. It worked like a charm.

Show all comments

Hi,

I’m wondering if it’s possible to configure Creatio to save previously entered values in a field (similar to how browsers remember login credentials).

For example, I’d like users to see a list of their most recently used values when they focus on a specific field, so they can reuse them without re-entering manually.

Does Creatio have a built-in feature for this, or would it require customization?
If customization is needed, I’d appreciate any guidance or examples.

Thank you in advance!

Like 0

Like

1 comments

Hello,

 

Creatio does not have a built-in feature to save previously entered values in a field, similar to how browsers save login credentials.
 

Best regards,
Ivan

Show all comments

Hi All, 

 

I've got an incoming webhook where the application on the other side is unable to conform to the request body that Creatio would like. 

Is there any straight forward way to parse a webhook in a different way?  My other solution is some middleware code which ideally I don't want to do. 

Anyone encountered this before? 

Thanks in advance. 

Like 0

Like

3 comments

Hi Harry,

 

We've created our custom process, that reads our webooks filtered by API Key:

 

And then custom processing written by code

 

Kind regards,

Vladimir

We do this via Script task. It is the only way I have seen for it to work.

Thank you both. Vladimir - will try that approach!

Show all comments

Hi all, 

I'm trying to calculate 60 days before a date captured by the user to create a reminder. I'm using the Formula in the Business Process but I cannot make it work, I see the following error: Formula value error: Cannot convert type "Int32" to "Entity"

 

Any suggestion?

Thank you

Like 0

Like

2 comments

It looks like it's an issue with trying to set the parameter you've selected to the value of the formula - what is the type of the parameter? It should be an integer based on the formula shown, which will be returning the day of the month 60 days before the Fecha de Lanzamiento date.

Hello,
 

We tried to check the behavior. It looks like the problem lies in expression because you are using .Day at the end.
We were able to successfully subtract -60 days simply by using the .AddDays(-60) method. [#read contact.First item of resulting collection.Birth date#].AddDays(-60)

AddDays(-60)

AddDays(-60)

 

Show all comments
Hello everyone,
I have set up and configured Identity Service in IIS and now I am trying to test it in postman (https://identityservice_url/connect/token).
 
I am getting the following exception in identity service log:
 
IdentityServer4.Hosting.IdentityServerMiddleware[0]
     Unhandled exception: The system cannot find the file specified.
     Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The system cannot find the file specified.
        at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider, CngKeyOpenOptions openOptions)
        at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider)
        at Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func`2 createCsp, Func`2 createCng)
        at Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey()
        at Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPrivateKey[T](X509Certificate2 certificate, Predicate`1 matchesConstraints)
        at System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2 certificate)
        at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey()
        at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKeyStatus()
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.FoundPrivateKey(SecurityKey key)
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures, CryptoProviderFactory cryptoProviderFactory)
        at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures, Boolean cacheProvider)
        at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm, Boolean cacheProvider)
        at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm)
        at Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
        at Microsoft.IdentityModel.JsonWebTokens.JsonWebTokenHandler.CreateTokenPrivate(String payload, SigningCredentials signingCredentials, EncryptingCredentials encryptingCredentials, String compressionAlgorithm, IDictionary`2 additionalHeaderClaims, IDictionary`2 additionalInnerHeaderClaims, String tokenType)
        at Microsoft.IdentityModel.JsonWebTokens.JsonWebTokenHandler.CreateToken(String payload, SigningCredentials signingCredentials, IDictionary`2 additionalHeaderClaims)
        at IdentityServer4.Services.DefaultTokenCreationService.CreateJwtAsync(Token token, String payload, Dictionary`2 headerElements)
        at IdentityServer4.Services.DefaultTokenCreationService.CreateTokenAsync(Token token)
        at IdentityServer4.Services.DefaultTokenService.CreateSecurityTokenAsync(Token token)
        at IdentityServer4.ResponseHandling.TokenResponseGenerator.CreateAccessTokenAsync(ValidatedTokenRequest request)
        at IdentityServer4.ResponseHandling.TokenResponseGenerator.ProcessTokenRequestAsync(TokenRequestValidationResult validationResult)
        at IdentityServer4.ResponseHandling.TokenResponseGenerator.ProcessAsync(TokenRequestValidationResult request)
        at IdentityServer4.Endpoints.TokenEndpoint.ProcessTokenRequestAsync(HttpContext context)
        at IdentityServer4.Endpoints.TokenEndpoint.ProcessAsync(HttpContext context)
        at IdentityServer4.Hosting.IdentityServerMiddleware.Invoke(HttpContext context, IEndpointRouter router, IUserSession session, IEventService events, IBackChannelLogoutService backChannelLogoutService)
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
     An unhandled exception has occurred while executing the request.
     Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The system cannot find the file specified.
        at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider, CngKeyOpenOptions openOptions)
        at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider)
        at Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func`2 createCsp, Func`2 createCng)
        at Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey()
        at Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPrivateKey[T](X509Certificate2 certificate, Predicate`1 matchesConstraints)
        at System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2 certificate)
        at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey()
        at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKeyStatus()
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.FoundPrivateKey(SecurityKey key)
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
        at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures, CryptoProviderFactory cryptoProviderFactory)
        at 
 
Does someone knows why might this be happening?
 
I am attaching a screenshot of the appsettings.json file
Like 0

Like

2 comments

Screenshot of appsettings.json

Hello!

 

To test the identity service run it and try to test by http://[path-to-dentity]/.well-known/openid-configuration

 

This is mentioned here in the documentation. Regularly to fix this issue help next:

for the IdentityService application pool, the pool setting ProcessModel->Load User Profile = true must be specified.

Show all comments

Hi Creatio Community,

 

I am developing a client side filter for a lookup in a section page (Freedom UI). I want to reload (re-filter) the lookup when the stage of the current record is updated (when GlbReloadEntityPage message is received).

Base logic for lookup loading:

{
	request: "crt.LoadDataRequest",
	handler: async (request, next) => {
		if(request.dataSourceName == "PDS_LookupCol") {
 
			request = await ModFunctions.filterAssignTo(request);
		}
		return await next?.handle(request);
	}
}

Reload function (Re-triggered ModFunctions.filterAssignTo(request);)

{
	request: "crt.HandleViewModelInitRequest",
	handler: async (request, next) => {
 
		request.$context.ServerMessageReceivedFunc = async function(event, message) {
			if (message.Header.Sender === "GlbReloadEntityPage") {
				await OPGlbReloadEntity.refreshScreen(request, message);
				ModFunctions.filterAssignTo(request);
			}
		};
		Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, (await request.$context.ServerMessageReceivedFunc), request.$context);
		return next?.handle(request);
	}
},

Filtering function 

		filterAssignTo: async function(request){
		    .... Custom logic .......
			const newFilter = Object.assign({}, filter);				
			newFilter.items = filter.items;
 
			if(request.parameters){
				request.parameters.push({
					type: "filter",
					value: newFilter
				});
			}
			return request;
		},

Even if the function is triggered when "GlbReloadEntityPage" is called the lookup is not reloaded with the new filtering rules. 

How can i reload lookup options from freedom ui client side?

 

 

Like 0

Like

2 comments

Any updates about this topic?

Hello,
Try to reload the data using the following code:

const handlerChain = sdk.HandlerChainService.instance;
await handlerChain.process({
      type: 'crt.LoadDataRequest',
      $context: request.$context,
      config: {
             loadType: 'reload'
      },
      dataSourceName: '{YOUR LOOKUP DATA SOURCE}'
});

Show all comments