Full requirement is 
 


Have 4 widgets and Global Area

Each Widgets calls behind the scene API with one key that is present in the global Area

Present that data in the widget

Now each widget can be consider as Page -- 

Now how easily create Page which invokes API and dispaly -- if API is returning 10 or so parameter do we need to create manually the page and have items and map items to API return value

Like 0

Like

5 comments

In order to display the result of the API call on the widget you will have to create the custom widget and implement the API call for retrieving necessary data in its source code. The key from Global area that will be used for calling the API you can send to your custom widget as a parameter. Also in custom widget configuration you will have to define "items" list that will represent the structure of the data you want to display. When the API call returns the result you will have to parse it and map to the corresponding columns in widget ViewModel.

You can find the detailed explanation and the example of custom widget implementation in the following article
https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/8.1/platform-customization/classic-ui/dashboard-widgets/examples/add-a-dashboard-widget

Hi thanks 

Widget is more of data view (list / form) 
Page will not have any backend data connected

Currently it's not possible to display API call result in List component on the page.

 

If you want to display API call result on the page you can add the custom attributes to your page, save the parsed response there and then bind the attributes to the labels on the page to make it visible.

 

Here is the example of the attribute:

 

viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
...
	{
		"operation": "merge",
		"path": ["attributes"],
		"values": {
			"MyAttrubute": { "value": "" }
		}
	}
]/**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/

 

and how you can set its value using the response from API call:

 

handlers: /**SCHEMA_HANDLERS*/[
	{
		request: "crt.HandleViewModelResumeRequest",
		handler: async (request, next) => {
			await next?.handle(request);       
			const url = 'https://open.er-api.com/v6/latest/USD';
			fetch(url).then(response => {
   				if (!response.ok) {
					return Promise.reject('Failed to load data: ' + response.statusText);
				}
 				return response.json();
			}).then(data => {
				request.$context.MyAttrubute = 'Rates: '+ JSON.stringify(data.rates);
			}).catch(error => {
				console.error('Error:', error);
			});
		}
	}
]/**SCHEMA_HANDLERS*/

 

 

Also you can find some useful information in these articles:

https://customerfx.com/article/using-custom-attributes-on-a-creatio-freedom-ui-page/

https://customerfx.com/article/binding-data-to-labels-on-a-page-in-crea…

THANKS -- wish there is way to invoke a business process with UI page value passed as parameters 

One question for the above method with handler the API call will be made from the client end -- wanted it to be done from server end (this way we can whitelist creatio iP range and only allow calls from those servers only)

 

Show all comments

Hi,

I am setting up automatic case registration through email. I have configured my mailbox and added it to the lookup "List of mailboxes for case registration." However, when I send an email to the configured address, only an activity is created—no case record is generated.

I also logged the "Incoming email registration process" business processes script task, and I noticed that the caseId is returning as 00000000-0000-0000-0000-000000000000.

Are there any additional features, system settings, or lookups that I need to configure for this to work properly?
I have shared a screenshot showing how the Activity appears in my communication panel.
 However, it is not being registered as a Case.
Could you suggest a solution for this?

Regards,
Mahalaxmi Ganesan

Like 0

Like

1 comments

Hi team,

I have identified the issue. It was caused by the lookup 'Blacklist of email addresses and domains for case registration', where certain domains or email addresses get blacklisted under specific conditions. If you encounter a similar issue, be sure to check this lookup.

Show all comments

What is the default AI model used by a Creatio trial instance, etc.?

Like 0

Like

3 comments

I would guess Open AI ? I Think there is other option at the moment anyways, or is there ?

You could probably ask it? 😂 Actually, the Academy docs discussing data privacy about Creatio AI mention it is using Azure OpenAI services, which is just REST services to facilitate working with OpenAI. See https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ai-tools/copilot/data-privacy

Ryan

I asked, the reply was:
 

I am an advanced language model designed to assist users within the Creatio platform. My primary task is to help with daily operations, provide contextual responses, and execute various skills to enhance productivity. How can I assist you today?

 

I asked if it was using the OpenAI engine:

 

I am powered by an advanced language model designed to assist users within the Creatio platform. My primary focus is to help with tasks and operations specific to Creatio. How can I assist you today?

 

Show all comments

Dear,

 

In my Opportunity Product Interest, i would like to set the price if the product is selected.

 

But in the business rules, i can only set a constant value for the Price.

 

any idea how to access product data ?

 

my mini page is in the custom package :

 

So how can i access to the selected product values in the mini page ?

Like 0

Like

2 comments
Best reply

Currently cannot be done with business rules on the page (they can't use data from related objects). Only way to accomplish this is to handle the change of the product lookup, retrieve the values from the selected product and then set on the page. Otherwise, you could use a process, but that won't update the values until saved. 

Ryan

Currently cannot be done with business rules on the page (they can't use data from related objects). Only way to accomplish this is to handle the change of the product lookup, retrieve the values from the selected product and then set on the page. Otherwise, you could use a process, but that won't update the values until saved. 

Ryan

i m trying to build Freedom UI pages without coding...
so i used for the moment the help you provided me here:
https://community.creatio.com/questions/depending-interface-behavior-no…

Show all comments

Hello !

We are currently migrating from Classic UI to Freedom UI.

Some Classic pages will be accessible from the Freedom interface, such as opportunities.

 

So the Opportunity Page is in classic mode even if the user shell is freedom.

 

If the user is logged in to Classic UI, adding a product opens a specific page:

When the user click on the add product button, this opens the opportunity specific product page :


but if the user is logged in under Freedom, this opens a modal:

So the behavior is not the same...

 

Here is my detail configuration:

 

why is Freedom opening a modal on the classic page ?

how can i correct this behavior ?

Thank you !!

Nicolas

Like 0

Like

2 comments
Best reply

Find the lookup named "Object-specific form page interface in the Freedom and Classic UI shell". In that lookup, add an entry for OpportunityProductInterest and for Freedom UI shell select Classic. Then log out and back in again. This will tell the system that if a user is using the Freedom UI shell, to use the classic page for Opportunity products.

Ryan

Find the lookup named "Object-specific form page interface in the Freedom and Classic UI shell". In that lookup, add an entry for OpportunityProductInterest and for Freedom UI shell select Classic. Then log out and back in again. This will tell the system that if a user is using the Freedom UI shell, to use the classic page for Opportunity products.

Ryan

Wonderful, thank you Ryan

Show all comments

I have a business process calling some subprocesses, and it should then open a new record page.  but for some reason, the page doesn't open, and the process is left in the running state. does anybody know what can prevent opening a page?

Like 0

Like

2 comments

Check the start of the process (select the green start where the process begins) and make sure it does not have the "run in background" option checked. 

I've checked that, and it's not checked. I did some further analysis, and the record is created and i can open it, it only doesn't want to open during the process flow. Furthermore, if I run the process under my colleague's credentials, the record does open. So, one would think it's a permission problem, although we both have the same permissions, we both have the system administrator role, and i can open the record 'manually'...

Show all comments

i amtrying to turn an image that i uploaded to be able to be seen what that image is

this is the image currently,

the image should be like this

does anyone know how to  make it so that the image can be previewed?

Like 2

Like

1 comments

Hi Michael!

Unfortunately, currently this is not possible with the out-of-the-box solution. 
If you want to display a certain image for the record, for example company logo for the account record, you can use an Image component.


You can also consider using the following marketplace solution: https://marketplace.creatio.com/app/banza-files-extended-creatio?check_logged_in=1

I hope this helps! If you have any further questions or need assistance, feel free to reach out.

Show all comments

Hi Creatio Community,

 

I am looking to consume my own or an external API that returns a JSON response and embed an IFRAME inside a Creatio Freedom UI page to display the relevant data.

 

My Goal:

Call an API that responds with JSON data.

Display the API response inside an IFRAME in Freedom UI.

Ensure the IFRAME updates dynamically based on API data.

  •  

My Questions:

  1. What is the best way to embed an IFRAME inside a Freedom UI page?
  2. How can I dynamically set the IFRAME's src based on API response data?
  3. Are there any security or CORS restrictions I should be aware of when using an external API?

     

If anyone has experience implementing this in Freedom UI or has sample configurations, I'd love to hear your insights!

 

Thanks in advance!

Like 0

Like

1 comments
Best reply

You can see an example of embedding an IFRAME and setting the src of the IFRAME dynamically here: https://customerfx.com/article/embedding-an-iframe-on-a-creatio-freedom-ui-page/

However, an IFRAME cant just display data from an API. An IFRAME simply embeds another page, it would be the responsibility of the page you're embedding to retrieve and display the API data. 

You could however, use a similar approach to the article for creating an IFRAME and just have that component retrieve the API data and render out HTML as needed. Alternatively, you could create a full Angular component that retrieves and displays the API data, which is likely a better route anyway. See https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/front-end-development/freedom-ui/remote-module/implement-a-remote-module/overview 

As for CORS restrictions, that would be something imposed (or not) by the API, not Creatio.

Ryan

You can see an example of embedding an IFRAME and setting the src of the IFRAME dynamically here: https://customerfx.com/article/embedding-an-iframe-on-a-creatio-freedom-ui-page/

However, an IFRAME cant just display data from an API. An IFRAME simply embeds another page, it would be the responsibility of the page you're embedding to retrieve and display the API data. 

You could however, use a similar approach to the article for creating an IFRAME and just have that component retrieve the API data and render out HTML as needed. Alternatively, you could create a full Angular component that retrieves and displays the API data, which is likely a better route anyway. See https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/front-end-development/freedom-ui/remote-module/implement-a-remote-module/overview 

As for CORS restrictions, that would be something imposed (or not) by the API, not Creatio.

Ryan

Show all comments

I'm installing Creatio 8.2.2 Studio MSSQL, but after everything is done, I get an error when logging in

 

Error: System.Exception: Library e_sqlite3 not found

 

https://prnt.sc/ds1ZddIu8vdx

Like 1

Like

3 comments

According to the post below, it could be that you need to possibly modify the permissions of the folders under Terrasoft.WebApp. See https://community.creatio.com/questions/error-logging-local-deployment-creatio

Ryan

Ryan Farley,

Still getting the same error, i think that is different case maybe

System.Exception: Library e_sqlite3 not found\r\nplat: win\r\nsuffix: DLL\r\npossibilities (3):\r\n

Ryan Farley,

 

Ahmad Bagus Ariyanto,

 

Tomasz Sawicki,


 

Greetings!
 

The error you're encountering is related to your system being unable to find or load the e_sqlite3 library. This can be caused by several reasons. Please note that this issue is not related to the Creatio system itself but rather to a Microsoft component.


This article might help you: Microsoft.Data.Sqlite library 'e_sqlite3' not found:

https://stackoverflow.com/questions/65750542/microsoft-data-sqlite-library-e-sqlite3-not-found
 

Below are a few steps that may help resolve the issue (please note that these are general recommendations, and since the issue is related to Microsoft components 
https://www.nuget.org/packages, you might also find assistance on forums or by contacting Microsoft support):


1. Make sure the e_sqlite3 library is present.
 

2. Install or update the SQLitePCLRaw.bundle_e_sqlite3 package. You can do this via the NuGet Package Manager using the following command: 
 

Install-Package SQLitePCLRaw.bundle_e_sqlite3

https://www.nuget.org/packages/SQLitePCLRaw.bundle_e_sqlite3/
 

3. Ensure that your target platform is compatible with the library. For example, if you're building for x86, make sure you’re using the correct version of the library (x86 or x64).
 

Installing or updating the package via command line (cmd):

1. Open the command prompt:  
On Windows, press Win + R, type cmd, and press Enter.

2. Navigate to your project directory: Use the cd command to change to the folder where your project is located. 

For example, cd path\to\your\project

3. Install or update the package: If you have NuGet CLI installed, you can run: 

nuget install SQLitePCLRaw.bundle_e_sqlite3 

However, if you're using .NET Core or .NET 5/6/7, it’s recommended to use the dotnet CLI instead: 

dotnet add package SQLitePCLRaw.bundle_e_sqlite3 

This command will automatically add the package to your project and update the .csprojfile.


Example commands:
 

1. Navigate to your project directory:
 cd C:\Projects\MyApp


2. Install the package: dotnet add package SQLitePCLRaw.bundle_e_sqlite3


After successful execution, dotnet will download and install the package. If everything goes well, you’ll see a message confirming the package has been added to your project.

Regards,
Orkhan

Show all comments

Hello,

 

I have a master record and a detail where I allow inline editing. Making changes on the detail triggers an update on the master record. Because the table behind the master record has live updates, the changes are immediately reflected on the master record. 

All that logic works fine. The issue I have is that if the user makes changes to the master record and then changes to the detail (like adding a new detail, deleting or editing an existing one,) the changes on the master record are not saved,.

Is there any way to save the master record when the user saves the detail changes?

Thanks,
Jose

Like 0

Like

1 comments
Best reply

Hello,

Thank you for your request. Unfortunately, it is not possible to change this behavior using custom methods.
 

As a workaround, you can achieve this using development methods.

To achieve this you can to implement custom handlers for two requests:


1. When saving changes in the detail list (crt.SaveRecordsRequest)

First, execute the default logic for saving the detail records.

Then, trigger crt.SaveRecordRequest to ensure that the master record is also saved.
 

Be careful not to confuse the requests—crt.SaveRecordsRequest is for saving multiple records, while crt.SaveRecordRequest is for a single record.
 

2. When deleting records from the detail list (crt.HandleModelEventRequest)

Execute the default logic first.

Then, check if request.modelEvent.type === 'delete'.

If it is a delete operation, trigger crt.SaveRecordRequest to save the master record as well.

Hello,

Thank you for your request. Unfortunately, it is not possible to change this behavior using custom methods.
 

As a workaround, you can achieve this using development methods.

To achieve this you can to implement custom handlers for two requests:


1. When saving changes in the detail list (crt.SaveRecordsRequest)

First, execute the default logic for saving the detail records.

Then, trigger crt.SaveRecordRequest to ensure that the master record is also saved.
 

Be careful not to confuse the requests—crt.SaveRecordsRequest is for saving multiple records, while crt.SaveRecordRequest is for a single record.
 

2. When deleting records from the detail list (crt.HandleModelEventRequest)

Execute the default logic first.

Then, check if request.modelEvent.type === 'delete'.

If it is a delete operation, trigger crt.SaveRecordRequest to save the master record as well.

Show all comments