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

Hi Community,

 

We made changes to existing tabs under "Dashboard" section in dev environment. Then we data bound the tabs data in SysDashboard Object and migrated to Pre environment. But the changes we made to the existing tabs such as Campaign Totals, Email Total etc. are not reflecting in the pre environment. How can we resolve it? Attached are the two screenshots from the 2 environments - we have an additional chart "Campaign by status" in the dev environment but is missing in pre even after data migration. Thanks!

Like 0

Like

1 comments

Hi,

 

When dashboards are added to an edit page, the corresponding records are created in SysWidgetDashboard and SysWidgetDashboardLcz tables.

If a dashboard is added not to an edit page but to the "Dashboards" tab, then records will be added in the SysDashboard and SysDashboardLcz tables, respectively.
.
Also, these data are correspondingly bound to the package that was set as the current package when the dashboards were created.

The thing is that dashboards are localizable system objects. When a dashboard is created, records are created in two tables:
- a record about a dashboard created in the localization, which corresponds to the base culture of the system, is created in the [SysWidgetDashboard]/[SysDashboard] table;
-records about dashboards of all other localizations are created in the [SysWidgetDashboardLcz]/[SysDashboardLcz] table and are linked to a record in the [SysWidgetDashboard]/[SysDashboard] table by the [RecordId] column.

So, basically, all you need to do is prepare a package that contains all the needed data bindings and SQL scenarios to perform the records' entry into the tables mentioned above.

More information on data binding is available at our academy.
Also, knowledge of SQL might be needed to find the needed dashboard in the database, although you can always create a lookup and search via UI. 

Show all comments

Hi Community!

 

We are trying to find an elegant way of preventing the execution of business processes from create, update and delete elements within other business processes.

Think of it as Outlook's 'Stop processing more rules' flag.

 

We could set a certain flag and add it to the other processes' signal conditions, but this leads to a high coupling of business processes, more complexity, and over the lifetime of a Creatio instance inevitably to errors as everyone needs to know this 'magic' behavior.

 

Ideally, signals in Creatio would have the option to distinguish between different triggering options, like 'user', 'business process', 'import', 'odata', 'event handler', etc. but unfortunately, this is a missing feature.

 

Any thoughts would be more than welcome!

 

Thanks,

Robert

Like 1

Like

2 comments

Hi Community,
any ideas on this?

 

Thanks,

Robert

Hello,
 

At the moment, such functionality is not available in Creatio's OOTB solution for triggering the addition/modification of records. 
Indeed, a workaround in this situation can be to create additional columns at the level of the object model that will be filled in depending on which method the record was created/modified (for example, a special column for OData).
We will register this development idea with our R&D team so that they can consider implementing such functionality in future versions of the Creatio product.
 

Thank you.

Show all comments

Dear colleagues

 

I have a process that runs when a new record is inserted and ‘does stuff’, it works perfectly, but.

 

When I do a bulk upload from Excel to that object, the process runs in isolation, in parallel, for each row in Excel.

 

Is there any way that the process could ‘detect’ that the inserted record comes from an Excel import and wait for FIleImport process to finish loading and then process row by row of excel?
 

Or some another approach?

 

Thanks in advance,

Julio

Like 4

Like

4 comments

Hello!
 

A quick solution would be to add a timer—say, 10 seconds—after which the process will read the data and proceed with the flow. This would be the fastest approach.

Regards,
Orkhan

Orkhan,

Thanks Orkhan, I tried, but didn't works, so if several records are inserted on the "same" time, the 10 seconds are not a difference so all process instances are waiting the same 10 seconds.. :-(

The best approach I found is to import on temporary table and when done run a process who move records to final one, but I want to found some method to avoid this kind of approach.

 

Some ideas?

 

Regards 

Julio.Falcon_Nodos,

have you seen the following post https://community.creatio.com/questions/run-process-after-excel-import ?

 

Show all comments

I’m trying to hide fields in Freedom UI conditionally, but it seems this can only be done with code. Unfortunately, the online resources available did not help me that much. Any guidance would be greatly appreciated!

Like 0

Like

5 comments

Dear Prachi, you have the option to hide/show in field property, see image

 

 

 

Then with business rules you enable to see or to hide the field as you need

 

Regards

Julio

Hi Julio, 
Thank you for your response. But then this is not triggered by condition, right? 

Hi

 

I'm not sure what your question is. You have business rules to hide or show fields, tabs, groups, etc.

 

Julio

Julio.Falcon_Nodos,

In Freedom UI. I did not see an option to do that by using business rules. 

Prachi Bhelkar,

You have access tu BR in this icon

 

There you must add a Page Bussiness rule, like you can see in the image

Show all comments

Good afternoon and Happy Friday! Is there a way to confirm my text messages are getting delivered and read through Twilio?

Like 0

Like

5 comments

Hi Eric,

Are you talking about this Marketplace solution? https://marketplace.creatio.com/app/twilio-sms-connector-creatio

Oleksandr Bilousko,

SMS Message looks like what I am using, but not exactly. When sending a Text, this is what I am seeing . My version is not giving me an option to verify my text was delivered.

Eric J Buglar,


There are a few connectors to Twilio available on the Creatio Marketplace.
Unfortunately, I couldn't recognize the exact app you mentioned.
Could you please check your Application hub or Marketplace catalog and share the link to a certain app?

I am not sure if I have authorization to do so, but I will try. What do you need?

 

Eric J Buglar,


If you’re unsure, I recommend asking the individual responsible for administering Creatio in your organization to access the Application Hub. This tool provides an overview of all installed Marketplace apps.

For further guidance, you can refer to more details here: Application Hub Documentation.

Show all comments

Hi all,

This email for asking additional hints/clarifications.

We are preparing Creatio UI automatic testing using Selenium.

ID locator in Selenium is the most preferred and fastest way to locate desired WebElements on the page. Since IDs are unique for each element on the page, it is considered the fastest and safest method to locate elements.

We have noticed, performing a Creatio UI testing with Selenium, that ID locator method cannot be adopted with Creatio since the IDs are recreated during each Creatio login session.

In order to let Selenium properly works we had to use Xpath in order to find elements on a Creatio UI.

Do you confirm what we are experimenting with Selenium (i.e. no possibility to use ID locator)?

Best regards,

Stefano

Like 0

Like

1 comments

Hi Stefano.

 

The IDs of the elements are autogenerated each time the page loads, so using IDs is impossible during the tests. Theoretically, if it's possible with Selenium, you need to think on how the DOM tree can be retrieved using querySelector\querySelectorAll and using (once again if possible with Selenium) it instead of element IDs.

Show all comments

Hi Community,

 

We are inserting records in GivenName and Surname fields in Contact Table via API. We are seeing full name in the Name field in UI (which is a concatenation of GivenName and Surname), but the GivenName and Surname fields are blank. How can we get GivenName and Surname to display values?

 

Thanks

Like 0

Like

5 comments

Dear Puneet

 

You may have some considerations to treat contact names in Creatio:

  1. 1.- Adjust the System Setting called: ContactFieldConverter (Order of first/last names) to Creatio complete Full Name based on the specified selection
  2. 2.- You must select one of the provided choices to Creatio convert the Full name of the contact, see the image
  3.  

3.- Have in consideration Contact field names are as follows (Code/Title):

  • - Full name: Name
  • - First Name: GivenName
  • - Middle Name: MiddleName
  • - Last Name: Surname
  • 4.- Also, if you need to display some of the contact name fields, you need to add them in the Contacts_FormPage

Regards

 

Julio Falcón

Hello !

We're also adding API contacts
I don't fill in the GivenName or Surname when I create the contact, just the Name.
If I check the database, the GivenName and Surname have been filled in.

Julio Falcón (NoCode-Services),

Thanks Julio! My query is little different. I am sending GivenName and Surname using API. Creatio system is creating Full Name automatically using GivenName and Surname. In the contact section list I see Full Name populated; but GivenName and Surname are blank. How can I get GivenName and Surname to display on the section list? Screenshot:

Dear Puneet,

 

You must have in consideration to insert records in Creatio via OData or importing from excel, YOU MUST include all required fields, in this case Full Name is a required field, sou you need provide it in the API JSON.

 

Also if you provide this data in the JSON they must be inserted in Creatio. Can you share the JSON and Method you are using to insert on Creatio?

 

Try to use a tool like SQL Query to made a select to all records to see where are the data you 're inserting

 

Julio

I tried with this JSON and works

{
    "GivenName": "John",
    "MiddleName": "Fitzgerald",
    "Surname": "Kennedy",
    "BirthDate": "1990-01-01T15:24:00Z",
    "TypeId": "60733efc-f36b-1410-a883-16d83cab0980" 
}
Show all comments