Hello.

 

I'm trying to save a pdf file that i get from a service web, the file comes in a base64 string so i use a script to convert it to a pdf and save it in Creatio, I have this code that works fine for the Accounts section but when i want to save the file in  a Custom section, the process send me an error sometimes because it doesnt find the Id other because it says that the duplicate key value violates unique constraint.

 

This is the code that works in the Accounts Section.

 

var base64FileString = Get<string>("Base64File");
var accountId = Get<Guid>("AccountId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName = Get<string>("NameFile"); // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("AccountFile");
var fileEntity = entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("AccountId", accountId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

 

And this is the code that I want to use in the custom section

 

var base64FileString = Get<string>("Base64File");
var resguardoId = Get<Guid>("ResguardoId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName = Get<string>("NameFile"); // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("SysFile");
var fileEntity = entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("ResguardoId", resguardoId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

 

 

Like 0

Like

4 comments

The SysFile entity doesn't, and won't, have a "ResguardoId" column. It has generic columns so it can work with any entity. Instead of setting ResguardoId, set the following: 

  • RecordId - the Id of the record (the value for ResguardoId)
  • RecordSchemaName - the name of the entity for the RecordId (whatever the entity name is for ResguardoId)

Ryan

Ryan Farley,

 

Thank you 

 

I'm made the change, the process starts without any error but the file is not save it in the record.

 

var base64FileString = Get&lt;string&gt;("Base64File");
var recordId = Get&lt;Guid&gt;("RecordId");
 
var attachFileType = new Guid("529bc2f8-0ee0-df11-971b-001d60e938c6");
var fileName ="New.pdf"; // set proper file type
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("SysFile");
var fileEntity =  entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("RecordId", recordId);
fileEntity.SetColumnValue("TypeId", attachFileType);
fileEntity.SetColumnValue("Name",fileName);
fileEntity.SetBytesValue("Data", Convert.FromBase64String(base64FileString));
fileEntity.Save();
return true; 

Laura Jurado,

You also need to populate the RecordSchemaName property - refer back to my previous comment.

Ryan

Show all comments

Hi. Is it possible to make the lookup fields of a record clickable in an editable detail?

Like 0

Like

3 comments

Hello,

In order to make the lookup fields of a record clickable, you need to set the Lookup view type to "Selection window." When the Lookup view type is set to "List," the records are not clickable.

image.png

Best regards,
Antonii.

Antonii Viazovskyi,

Hello. What's most interesting is that the value of this field is selected in the Window. And it's still not clickable. Maybe there's an option to hardcode this into the detail code?

Hello,
Take a look at this discussion, I believe there you can find an answer on how to do it.

https://community.creatio.com/questions/lookup-be-displayed-link-inside…

Show all comments

Hello Community,

I am currently facing an issue with a model page that contains two lookup fields: one for contact and the other for email. My goal is to allow the user to select an email address associated with the selected contact, not just the primary email, but any email linked to that contact. To achieve this, I am using dynamic filtering for ContactCommunication to filter by the current contact and email communication type.

I’ve implemented this logic within the crt.LoadDataRequest handler because the email field is a simple dropdown and does not open a separate selection page.

The problem: 
When a contact is selected, I refresh the email list data source as expected. However, the email list is not properly reloading after a contact is deselected and reselected. In this case, the email filters do not update correctly. The issue is that the email list only reloads and applies the correct filters when I manually reselect the email field.

This behavior is causing a problem where the email dropdown is not correctly filtered based on the newly selected contact. Below is the code I am using for the handler:
 

handlers: /**SCHEMA_HANDLERS*/[
 {
   request: "crt.LoadDataRequest",
   handler: async (request, next) => {
     const emailDataSource = "UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS";
     const contactDataSource = "UsrEntity_004572bDS_UsrContact_7esmp6a_List_DS";

     if (request.dataSourceName === emailDataSource) {
       const lookupValue = await request.$context.UsrEntity_004572bDS_UsrContact_7esmp6a;
       console.log("Lookup Value:", lookupValue);

       if (lookupValue) {
         console.log("Filter Hit");
         const filter = new sdk.FilterGroup();
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Contact", lookupValue.value);
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "CommunicationType", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6");

         const newFilter = Object.assign({}, filter);
         newFilter.items = filter.items;
         console.log("Filter created");
         request.parameters.push({
           type: "filter",
           value: newFilter
         });
         console.log("Filter added to request");
       } else {
         console.log("Empty Lookup");
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS = null;
       }
     }

     if (request.dataSourceName === contactDataSource) {
       console.log("Contact Selected, reloading email address list");
       // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;

       await request.$context.executeRequest({
         type: "crt.LoadDataRequest",
         $context: request.$context,
         config: { loadType: "reload", useLastLoadParameters: true },
         dataSourceName: emailDataSource
       });

       console.log("Email list reloaded successfully!");
     }

     return await next?.handle(request);
   }
 }
]/**SCHEMA_HANDLERS*/;
 

I would greatly appreciate it if you could look into this issue and suggest a solution.

Thank you!

Like 1

Like

1 comments

It is hard to tell what the issue is based on the code alone, in this situation, it would be better to run a proper debug to see what exactly went wrong. But, based on your description I can assume that there is something wrong with a refresh. Not with its code but rather with a place it is called. Try to use different approaches to it.

Show all comments

Hi team,

We want to add a button in communication panel through which cases section should open in the side pane ( opens on clicking of buttons in communication panel) through with cases can be created quickly without closing the current section page opened in the tab.

 

We have created button in communication panel but we are finding references to open the page in side pane.

if anyone of you can help on this ,I will really appreciate it.

 

Thanks in Advance

Like 0

Like

7 comments
Best reply

Kashish Shakeel,

For Classic, it's doable, but definitely not as easy (there is not a no code approach for classic shell, only for Freedom shell). If you're using classic shell, best approach is to look at the code for the other panels and duplicate for your needs.

Ryan 

Hello Kashish,

Thank you for your question. First of all, are you using the Shell of Freedom UI in the section from which you are opening the side panel? Secondly, while I believe that creating a case from the side panel is possible, I'm not sure if your logic can be fully implemented. Also, would it be easier to create the case using a modal page in your section?

I'll be happy to assist you and will be waiting for your response.

The Academy refers to those as sidebars and they can be created with no code (more or less) in Creatio 8.1.3 and higher. See https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ui-and-business-logic-customization/set-up-a-sidebar

Ryan

Yevhenii Grytsiuk,

 

Thankyou you your reply currently we are using the classic UI,we are not using Shell of Freedom UI in the section.

 

The requirement is to create  a quick access option for creating cases without needing to jump on another page and also in a way that  the information from the current open page can be visible properly as it is going to help in case creation.
 

The best that we thought of was using side panel for case creation while the user can see all information in the current open page.Is there any way you can help me achieve that?

 

 

Yevhenii Grytsiuk,

 

Ryan Farley,

 

Thank you for your reply, we are looking for some information on the same topic in the classic UI.

 

Is there any reference for classic UI? f yes can you please share that information with me?

Kashish Shakeel,

Answering question for Ryan - I am almost certain that, unfortunately not. That's why I was asking if you are using shell or freedom ui. However it is still possible to create a modal/minipage regardless.

Kashish Shakeel,

For Classic, it's doable, but definitely not as easy (there is not a no code approach for classic shell, only for Freedom shell). If you're using classic shell, best approach is to look at the code for the other panels and duplicate for your needs.

Ryan 

Ryan Farley,

 

Hi,

thankyou for your reply we will try to implement customized code.

 

Show all comments

Hello,

 

I would like to know how to approach the task of extracting the model of field entities to a CSV  or Excel file.

The idea is to provide project managers with a simplified view of the fields available in my Creatio instance. I'm not looking for details, just the field name, code, label (translation?), data type.

 

Any sugestions on how to approach this task?

 

Thanks,

Vlad 

Like 0

Like

4 comments
Best reply

This marketplace addon will provide you with an Excel export of all obejcts in the system, along with columns, data types, display titles of objects and columns, etc. 

https://marketplace.creatio.com/app/object-structure-export-creatio

Once installed, there will be a process you can run that gives you the Excel file. 

Ryan

Hello!

 

You can check all the information about data export on Creatio Academy:
https://academy.creatio.com/docs/8.x/creatio-apps/creatio-basics/business-data/exporting-list-data-to-excel

Thank you for your reply Arsenii, but it is not the data that I am trying to export, but the model.

 

Exemple for Accounts entity:

 

field name; field code; field label; data type; default value

Name; Name; The company name; Text - 250 caracters; <empty>

Phone; Phone; Main phone number; Text - Phone number; <empty>

Web; Web; Compny Website; Text - Web link; <empty>

(...)

 

Kind regards,

Vlad

 

This marketplace addon will provide you with an Excel export of all obejcts in the system, along with columns, data types, display titles of objects and columns, etc. 

https://marketplace.creatio.com/app/object-structure-export-creatio

Once installed, there will be a process you can run that gives you the Excel file. 

Ryan

Ryan Farley,

Perfect, I'll give it a try. 

 

Thank you,

Vlad

Show all comments

Hi Creatio Community,

I'm currently working on a customization for the Activity page, and I need some help with dynamically showing/hiding tabs based on the activity type. Here’s what I need to achieve:

  1. Hide the "Attachment" tab when the activity type is "Task."
  2. Show the "Case Attachment" tab for tasks related to a specific case only (it should display attachments only for the selected case).
  3. For all other activity types, the "Case Attachment" tab should be hidden, and the regular "Attachment" tab should be visible.

Essentially, I want the tab visibility to switch dynamically based on the activity type and the case involved. I’d appreciate any suggestions on how to implement this, whether through JavaScript handlers, custom logic, or any other method that can meet this requirement.

Thanks in advance

Like 0

Like

1 comments

Hello,
 

This can be easily implemented using business rules such as "Show/hide an element on a Freedom UI page." We recommend exploring this functionality on our academy.
 

https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ui-and-business-logic-customization/freedom-ui-business-rules#title-2416-2
 

I hope this helps!

Show all comments

Hello

 

Does anybody know how to share records in Freedom UI? In classic UI we have "Action" button with "Set up access right" menu item. But I can't see the similar button in Freedom UI, for example, on Contact form page. Shoud I customize the form and add it?

Like 0

Like

1 comments

How to hide Attachment tab in task type activity while showing my own case attachment tab or in general how can i programmatically hide a toggle tab in freedom ui .

I want to hide the attachment toggle tab and show case attachment which is created by be , also want to programmatically trigger their visibility , please refer below image for reference 

 

Like 1

Like

1 comments

I was able to achieve this using only DOM. To do this - two buttons were created: clicking the first button will trigger the usr.HideButtonRequest request, clicking the second button will trigger the usr.ShowAttachmentsRequest. Here is the code of schema handlers:

handlers: /**SCHEMA_HANDLERS*/[
          {
            request: "usr.HideButtonRequest",
            handler: async (request, next) =&gt; {
              let savedAttachmentsElement = document.querySelectorAll('[data-item-marker="Attachments"]')[0];
              request.$context.AttachmentToggleItem = savedAttachmentsElement;
              request.$context.AttachmentToggleItemParentNode = savedAttachmentsElement.parentNode;
              savedAttachmentsElement.parentNode.removeChild(savedAttachmentsElement);
              return next?.handle(request);
            }
          },
          {
            request: "usr.ShowAttachmentsRequest",
            handler: async (request, next) =&gt; {
              let attachmentToggleContainer = request.$context.AttachmentToggleItemParentNode;
              let attachmentsToogleItem = request.$context.AttachmentToggleItem;
              attachmentToggleContainer.appendChild(attachmentsToogleItem);
              return next?.handle(request);
            }
          },
        ]/**SCHEMA_HANDLERS*/,

And also two attributes were added to the viewModelConfig property of the schema (in case you don't have it in the schema - create it):

viewModelConfig: {
          attributes: {
            "AttachmentToggleItem": {},
            "AttachmentToggleItemParentNode": {}
          }
        },

As a result the "Attachments" toggle item is removed when the first button is clicked and then displayed when the second button is clicked. What is left to be done is add and test this approach with handlers like HandleViewModelAttributeChangeRequest.

Show all comments

Good day, I have a question regarding the tabs in Classic UI. I want to make them disabled, or locked or unclickable in my edit page. If you know how to implement it please could you show it in the following code snippet:

                "operation": "insert",
                "name": "AgbPrimaryDataTab",
                "values": {
                    "caption": {
                        "bindTo": "Resources.Strings.AgbPrimaryDataTabCaption"
                    },
                    "items": [],
                    "order": 0
                },
                "parentName": "Tabs",
                "propertyName": "tabs",
                "index": 2
 
Like 0

Like

1 comments

Hello Behruzbek, 

If you don't want some users to see the existing tabs, use the following article to hide tabs by code based on different conditions.

Also, it's possible to add business rules for some users. Please note that adding the role to the business rule is impossible for now.

Best regards, 

Anhelina!

Show all comments

Hello , 

 

I have been struggling with permissions lately , I have a Freedom UI Details page that shows sections depending on the user role or the user contact specific information .

When I try to create a Business rule I only find User contact But can't Access User Contact informations . 

Any suggestions please ?

Like 0

Like

1 comments

Could you please provide us with more details. For example, which permissions do you have on Contacts object.

Show all comments