When editing/deleting an existing inhereted data-model, has a compilation error:

This is a cloud Demo environment, so I can't troubleshoot the error from .cs file.

Like 0

Like

0 comments
Show all comments

So, in a new demo instance of Creatio, you can go to a message template and click the edit template button. When you do this, you will notice that a new tab is opened and a full page content panel is opened.  This is actually a classic module, but you will notice in the url for the page, that it's using the classic shell (/Nui instead of /shell).  Really, it opens without any shell at all.

I have a custom version of the same content editor, but when we open this module page the same way, you can see that it initially pops to the right url (similar to the demo instance), but it is immediately routed to a /shell url and stops there. 

I don't know if there's some internal router exception for the default editor module in Creatio that allows for it to open under the classic shell or if there's something else I'm missing.  In debugging the code, I open the page the same way, simply calling window.open and passing in the url with the same structure. 

For those familiar with this module, it's not entity bound, so you can add an exception in UI management. Wouldn't matter anyway, since the default creatio editor isn't doing this either (url would reflect the /shell path, instead of the /Nui classic path).

Anyone have any experience with this?

Jeremy

Like 0

Like

0 comments
Show all comments
Studio_Creatio
8.0

I'm working in in a cloud-based dev environment. I've created a message template and I'm trying to move it to QA. I've created a package, and I've added the EmailTemplate data to that package. I've added SysImage to the package, too, but adding it or removing it makes no difference to my problem.

When I import the package into my QA environment and open the template in the designer, the panel with the controls for adding blocks, image, text, spacers, etc. are all missing and it views the entire email as one large HTML block.

A package I created yesterday and imported to QA (with a different version of the template)_works fine. I can open the designer with no issues, the individual blocks, images, and text are all individually editable. (I'd use the package I created yesterday, but I thought I no longer needed it so I created a new one.)

When I compare the contents of the exported zip files using Beyond Compare, the one that works has a JSON element like the below (I only include the first part...it's a long string).

"Value": "{\"ItemType\":\"sheet\",\"Caption\":\"Content designer\",\"Width\":600,\"BackgroundColor\":\"#ffffff\",\

I'm assuming the fact the JSON with Content Designer missing is a part of my problem (there are other differences in the package, too - a large number of references to .csproj files that my broken package doesn't have). But I can't figure out why one package included it and the other doesn't. Anyone have an idea?

Like 0

Like

2 comments
Best reply

Hello Jeff,

I suggest you to manually move the template from your dev-site to to your QA. You can easily download the template information and import it using OData.

  1. Copy the email template Id that you want to move
  2. Access the email template information in the EmailTemplate table:
    https://your-dev-site.creatio.com/0/odata/EmailTemplate(template_id)

    You will need to take this JSON and remove the lines that have "@odata." in the name (the first line the last 12 lines) as they are not needed for the import. If you have any fields with value "00000000-0000-0000-0000-000000000000", you will need to remove those lines too. For this example, the result parsed JSON would be:

    {
        "Id": "0dc0759c-80b3-48b3-a832-7e32925d748b",
        "CreatedOn": "2019-07-15T23:30:13.367747Z",
        "CreatedById": "410006e1-ca4e-4502-a9ec-e54d922d2c00",
        "ModifiedOn": "2025-12-16T20:55:28.568102Z",
        "ModifiedById": "410006e1-ca4e-4502-a9ec-e54d922d2c00",
        "ProcessListeners": 0,
        "Name": "Case assigned to group",
        "Subject": "Case #[#Number#] \"[#Subject#]\" assigned to group",
        "Body": "<div>\n\t<div>\n\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\">Case <strong>#[#Number#]</strong> \"[#Subject#]\" has been assigned to your group.</em></span></span></div>\n\t<div>\n\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Priority:</strong> [#Priority.Name#]</span></span></div>\n\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Response deadline:</strong> [#ResponseDate#];</span></span></div>\n\t<div>\n\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Resolution deadline:</strong> [#SolutionDate#].</span></span></div>\n\t\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Contact:</strong> [#Contact.Name#].</span></span></div>\n\t\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Account:</strong> [#Account.Name#].</span></span></div>\n\t</div><div> </div>",
        "IsHtmlBody": false,
        "SendIndividualEmailId": "e75ac3fe-be9b-4a01-87db-c7dffd354f8c",
        "SaveAsActivity": false,
        "ShowBeforeSending": false,
        "TemplateConfig": "",
        "ConfigType": 0,
        "Notes": "",
        "TemplateTypeId": "74ff0cee-6593-482f-a62f-6dde6e17ab5e"
    }
  3. Send all this information to your QA site:
    1. If you want to update the existing template, send a PATCH request to https://your-qa-site.creatio.com/0/odata/EmailTemplate(template_id) with the parsed JSON in the body without the Id field
    2. If you want to re-create the template, remove it first and then send a POST request to https://your-qa-site.creatio.com/0/odata/EmailTemplate with the all the parsed JSON in the body.

I have moved a lot of templates from many sites using this method and it is by far the simplest for me when I want to have an exact copy between them. As you already moved the SysImage information, you won't need to migrate anything from that table using this method.

You can find more information about Creatio OData here:

 

Regards

Hello Jeff,

I suggest you to manually move the template from your dev-site to to your QA. You can easily download the template information and import it using OData.

  1. Copy the email template Id that you want to move
  2. Access the email template information in the EmailTemplate table:
    https://your-dev-site.creatio.com/0/odata/EmailTemplate(template_id)

    You will need to take this JSON and remove the lines that have "@odata." in the name (the first line the last 12 lines) as they are not needed for the import. If you have any fields with value "00000000-0000-0000-0000-000000000000", you will need to remove those lines too. For this example, the result parsed JSON would be:

    {
        "Id": "0dc0759c-80b3-48b3-a832-7e32925d748b",
        "CreatedOn": "2019-07-15T23:30:13.367747Z",
        "CreatedById": "410006e1-ca4e-4502-a9ec-e54d922d2c00",
        "ModifiedOn": "2025-12-16T20:55:28.568102Z",
        "ModifiedById": "410006e1-ca4e-4502-a9ec-e54d922d2c00",
        "ProcessListeners": 0,
        "Name": "Case assigned to group",
        "Subject": "Case #[#Number#] \"[#Subject#]\" assigned to group",
        "Body": "<div>\n\t<div>\n\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\">Case <strong>#[#Number#]</strong> \"[#Subject#]\" has been assigned to your group.</em></span></span></div>\n\t<div>\n\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Priority:</strong> [#Priority.Name#]</span></span></div>\n\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Response deadline:</strong> [#ResponseDate#];</span></span></div>\n\t<div>\n\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Resolution deadline:</strong> [#SolutionDate#].</span></span></div>\n\t\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Contact:</strong> [#Contact.Name#].</span></span></div>\n\t\t<div>\n\t\t\t </div>\n\t<div>\n\t\t\t<span style=\"font-size:12px;\"><span style=\"font-family:arial,helvetica,sans-serif;\"><strong>Account:</strong> [#Account.Name#].</span></span></div>\n\t</div><div> </div>",
        "IsHtmlBody": false,
        "SendIndividualEmailId": "e75ac3fe-be9b-4a01-87db-c7dffd354f8c",
        "SaveAsActivity": false,
        "ShowBeforeSending": false,
        "TemplateConfig": "",
        "ConfigType": 0,
        "Notes": "",
        "TemplateTypeId": "74ff0cee-6593-482f-a62f-6dde6e17ab5e"
    }
  3. Send all this information to your QA site:
    1. If you want to update the existing template, send a PATCH request to https://your-qa-site.creatio.com/0/odata/EmailTemplate(template_id) with the parsed JSON in the body without the Id field
    2. If you want to re-create the template, remove it first and then send a POST request to https://your-qa-site.creatio.com/0/odata/EmailTemplate with the all the parsed JSON in the body.

I have moved a lot of templates from many sites using this method and it is by far the simplest for me when I want to have an exact copy between them. As you already moved the SysImage information, you won't need to migrate anything from that table using this method.

You can find more information about Creatio OData here:

 

Regards

Alejandro González Momblán,

Thank you 100x!

I missed removing some of the odata on my first attempt at an insert but got past that pretty quickly.

Thanks again and I really appreciate this community!

Show all comments
Studio_Creatio
Sales_Creatio
Marketing_Creatio
Service_Creatio
8.0

Hello Community,


        I am developing a custom Angular component to be used in a Creatio instance. As shown in the screenshot, it directly prompts for “Open source code.” Instead, I want to pass inputs to the component in the same way standard components handle input parameters.

 

 

 

 

 

 

 

Currently, in the Angular code, the input is being passed as shown below:

@Input()
@CrtInput()
url: string = "";
 

Questions:

  1. What other approaches are available for passing input parameters to custom Angular components?
  2. Also, which JavaScript library would you recommend for working with fillable PDFs?

Regards,
Ajay Kuthe
(Creatio Developer)

Like 1

Like

2 comments

Hello Ajay,

In the current Freedom UI architecture, values defined inside an Angular custom component are never visible in the Freedom UI designer and cannot appear as configurable fields in the right-side settings panel(feature is under development). Freedom UI does not analyze Angular component metadata at design time, so decorators such as @Input() and @CrtInput() only enable runtime data binding, not visual configuration. As a result, the “Open source code” option is the expected and correct behavior for custom components. Input values can be passed only through page attributes and explicitly bound in the page schema (viewConfigDiff), where they are then delivered to the Angular component at runtime. Creating a custom settings panel or exposing Angular inputs visually, like standard components, is not supported at this time and is a known platform limitation.

 For working with fillable PDF files in Angular within Creatio, the recommended library is pdf-lib, as it supports form filling, runs in the browser, and integrates well with Angular-based Freedom UI components.

Jakub Wieczorek,

Thank you for the valuable information. Using pdf-lib, is it possible to save the modified, fillable PDF back into the Creatio database? Is there any documentation available for this?

Show all comments
system users
organizational roles
functional roles
Studio_Creatio
8.0

I have already created Organizational Roles and Functional Roles, and mapped them to multiple users.

Now I need to move this configuration to another sandbox environment.

My questions are:

  1. Is there a way to export Org Roles, Func Roles, and user mappings (include password, org role, and functional role together?
  2. Can the user–role mappings be directly imported into another sandbox, or do they need to be reconfigured manually?

I would appreciate any insights or best practices from anyone who has done this before. Thank you.

Like 0

Like

1 comments

Hello,

The transfer of organizational structure settings and access rights from one stand to another can be implemented using SQL scripts. To do this on the reference environment, you need to generate insert queries based on records from the following tables:

- SysAdminUnit (Administration object: users and roles)
- SysUserInRole (Direct user entries in roles)
- SysFuncRoleInOrgRole (Entry of a functional role into an organizational role)
- SysAdminOperation (System operations, if required)
- SysAdminOperationGrantee (Access to system operations, if required)
- SysEntitySchemaOperationRight (Access to objects)
- SysEntitySchemaRecordDefRight (Access to default records)
- SysEntitySchemaColumnRight (Access to object columns)
- SysAdminUnitGrantedRight (Delegation)
- SysWorkplace - (User Workplace)
- SysAdminUnitInWorkplace - (Users in Workplace)
- SysModuleInWorkplace - (Partition in Workplace)

You can use Microsoft SQL Server Database Publishing Wizard and similar tools to generate queries. The resulting SQL script must be attached to the package: "SQL script" type schema | Creatio Academy

Show all comments
FreedomUI
attachments
handlers
Studio_Creatio
8.0

Hello everyone, Is there a way to obtain the ID of the selected file in attachments in a Freedom UI section?

attachments files

Like 0

Like

5 comments
Best reply

I assume you could get it using the following (this works for lists, I assume it's the same for gallery mode)

const selectedId = await request.$context.TheListNameHere_ActiveRow;

See https://customerfx.com/article/responding-to-a-row-selected-event-in-a-creatio-freedom-ui-list/

Also, you could add the button/action as a menu item when you click the three-dots button, see https://customerfx.com/article/adding-row-action-menu-items-to-a-creatio-freedom-ui-list/ 

Ryan

I assume you could get it using the following (this works for lists, I assume it's the same for gallery mode)

const selectedId = await request.$context.TheListNameHere_ActiveRow;

See https://customerfx.com/article/responding-to-a-row-selected-event-in-a-creatio-freedom-ui-list/

Also, you could add the button/action as a menu item when you click the three-dots button, see https://customerfx.com/article/adding-row-action-menu-items-to-a-creatio-freedom-ui-list/ 

Ryan

Hello,

Basically there is no way to get the id when clicking, but maybe one of the options will be useful:

- you can create a list with files to write and display the id column
- when hovering over the file, the file id is displayed in the link

Ryan Farley,

Hi! Thanks for the suggestions.

I actually checked both approaches, but the AttachmentList  component seems to behave differently than a standard datagrid :

  1. The ActiveRow issue: I tried request.$context.AttachmentList_ActiveRow (and variations), but it appears the AttachmentList control does not populate the ActiveRow attribute in the ViewModel when you click on a file name. It seems the control handles the click event internally for downloading/previewing, without updating the page state.
  2. The Menu Items: Adding items via rowToolbarItems works visually, but there's a context issue. When using $Id as a parameter in a custom request within the AttachmentList, it returns the page Id  (the parent record) instead of the File Id . Unlike the DataGrid, the AttachmentList doesn't seem to "bridge" the row context to custom menu items easily.

Thanks!
Mario.

Mario Toro,

As for the selected row when clicked, you can try adding a change event handler and then output the change attributeName in the console, then click a row to see if it changes an attribute. 

As for the context menu, you can get the selected record Id, but its name won't be $Id. Somewhere in the page code you'll see the attributes for the data source for the attachments, you'll need to make sure you've wired it up correctly (I do know this works, I've added this for attachment lists before)

Ryan

Mario Toro,

If you look at the Attachment list on the Cases_FormPage you'll see it is named "AttachmentList" and has a an attribute for the primaryColumnName as "AttachmentListDS_Id" and it's Items collection is named "AttachmentList" (you can see this in the base page "PageWithTabsFreedomTemplate"). 

So, to wire up the menu, you'd use: 

{
	"operation": "merge",
	"name": "AttachmentList",
	"values": {
		"rowToolbarItems": [{
			"type": "crt.MenuItem",
			"caption": "Do something",
			"icon": "edit-row-action",
			"clicked": {
				"request": "cfx.doSomethingHandler",
				"params": {
					"itemsAttributeName": "AttachmentList",
					"recordId": "$AttachmentList.AttachmentListDS_Id"
				}
			}
		}]
	}
}

Then the event handler would be: 

{
	request: "cfx.doSomethingHandler",
	handler: async (request, next) => {
		const id = request.recordId;
 
		// do something here with the id
 
		return next?.handle(request);
	}
}

Ryan

Show all comments

Currently, when users click on the Email or Phone fields on the Contact page, the browser triggers its default behavior (launching the default mail client or calling application).

Is there a recommended way in Creatio (configuration, Freedom UI, or CSS/JS customization) to disable this on-click behavior so the fields are displayed as plain text instead of hyperlinks?

Like 0

Like

3 comments
Best reply

Probably the only way to do that currently is with some CSS. The following CSS will work for that on the contact page: 

crt-communication-options#ContactCommunicationOptions a {
    pointer-events: none !important;
    cursor: initial !important;
    color: initial !important;
    text-decoration: none !important;
}

Ryan

Probably the only way to do that currently is with some CSS. The following CSS will work for that on the contact page: 

crt-communication-options#ContactCommunicationOptions a {
    pointer-events: none !important;
    cursor: initial !important;
    color: initial !important;
    text-decoration: none !important;
}

Ryan

Thanks, @Ryan Farley, for the quick suggestion. However, clicking the phone icon is still triggering the browser’s default application to open.

Mohammad Arman Khan,

You'll need to inspect that as well to see how to identify that in CSS and add the "pointer-events: none !important" to that as well. 

Ryan

Show all comments
changelog
change_log
Studio_Creatio
8.0

Hi, is there any time limit set for change log retention? (something similar is already available for process log). 

 Or do I need to manually clear the change log every time? I know there is a business process called "Clear Change Log", which I could use to automate this.  I wanted to check if there is already an out-of-the-box feature available for this before beginning development.

I also noticed that even when a particular record is deleted, its change log remains in Creatio. I understand this is intended behavior to track changes, which is good, but we don’t want it to stay forever.

Thanks

Rishav

Like 0

Like

1 comments

Hello,

At the moment, there is no OOTB functionality for automatic retention or cleanup policy for the Change Log in Creatio.

By default, the change log is expected to be periodically cleared manually. To do so, use the instructions from the following article:
https://academy.creatio.com/docs/8.x/setup-and-administration/administr…

However, we have registered this idea and forwarded it to our R&D team for further review and implementation in future releases.

Have a great day!

Show all comments
Studio_Creatio

I have a question regarding creating a BPM in my environment.

When I select Contact.Id in the process (as shown in Action 1.png) and then save the process, it later shows only Contact instead of Contact.Id (as shown in Action 2.png).

 

 

 

 

 

 

Like 0

Like

2 comments

Both are equivalent. When checking if a lookup (in your case Contact is a lookup on System Administration Object) is equal to some Id, Creatio will be checking the lookup's Id against that parameter. So both are equivalent, so I guess Creatio simplifies it when saving.

Hello,

This behavior is expected. At this level of the BPM, Contact and Contact.Id are effectively the same. The system automatically resolves the primary key (Id) for the Contact object, so explicitly specifying .Id is not required.

When the process is saved, the designer simplifies the reference and displays it as Contact, since the identifier is implicitly assumed. Functionally, there is no difference in execution or behavior between selecting Contact.Id and Contact in this context.

So the disappearance of .Id after saving does not indicate an issue and does not affect how the process works.

Show all comments
Studio_Creatio
8.0

Could you please explain how I can obtain Creatio Studio so that I can install and run it locally on my machine?
I would like to know the available options for downloading the local/on-premise version, including any prerequisites, licensing requirements, and installation steps.

Thank you in advance for your support

Like 0

Like

1 comments

Hello.

To obtain the Creatio installation files for local deployment, please contact the support team directly at support@creatio.com.

Instructions on how to deploy the local instance are available here:
https://academy.creatio.com/docs/8.x/setup-and-administration/category/on-site-deployment

Best regards,
Antonii

Show all comments