आप इनमें से किसी भी चैनल का उपयोग करके शॉप्सी ग्राहक सहायता टीम तक पहुँच सकते हैं 0 908-8566-267✅और जितनी जल्दी हो सके अपनी शिकायत दर्ज करें।

Like 1

Like

0 comments
Show all comments

Hi,


We're currently developing and customizing pre-existing applications in Creatio, and we’ve encountered an issue that we need your assistance with.

For example, when we purchase the Sales module, Creatio comes with an Order Management app and others. We need to customize it by adding new columns and data tables to the Order package. However, we're unsure how to export these additional objects to another environment.


Here’s what we’ve tried:

  1. Using the Application Hub, we were able to install the entire Order Management app with the additional customizations the new objects we added (which are visible in the package) don't appear in the "All Apps" section.
  2. In advanced setting, we noticed that when we add new items to the Order Management app, a folder named "UsrCrtOrderContractMgmtApp" is automatically created, containing all the new elements we’ve added. But we’re unable to migrate this folder to the other environment because the system can’t find the schema ID.


We’re wondering if there’s a proper way to migrate these customizations to another environment, especially when the base module already exists.

Like 1

Like

1 comments

Hi,

You can read about App management and Package management by following links to articles on the Creatio Academy:

    App management
    Packages overview
    Packages transfer 

Thank you!

Show all comments

Hello,

 

I have a column called "Income" which contains sensitive information and is accessible based on multiple business rules and custom code. We realized that while this works on the form page, any user can add the column on the list page and get to see the values.

 

The column permissions using object permission will also not work because as mentioned above, the field is to be made visible based on multiple rules and custom logic.

 

Is there a way to prevent user from adding this column on the List page?

Like 0

Like

2 comments

We make detail (even if there will be only one record) with records permission for such cases

Vladimir Sokolov,

That is a great idea to be sure that this value is not pulled anywhere! As of current implementation for us, we would like to retain the field at the section level and are looking for ways by which the visibility can be controlled. 

I think, there has to be way for the rules on form page to reflect on the list page and in folders as well. In most cases, we hide the fields because it has information that need not be shown to some users and the platform unfortunately provides a way to by-pass this by letting users add the field on the list page.

Show all comments

As we create a new system user then all employees role is added automatically/by default, i need not to assign any role, where can i edit this thing?

Like 0

Like

1 comments
  • Hello,

    If you want to assign a new role for the system user, please navigate to System Designer → Organizational roles. 

    In this section, you can set up any existing role for the system user or create a new role and add the user to it.



    Or you can navigate to System Designer → System users. In this section, you need to select the user and switch to the Role tab. In this tab, you can add organizational or functional roles to selected user.



    You can find more information regarding your question here:

     Assign a user role
  •  Organizational roles
  •  Functional roles
     User management

    Best regards,
    Antonii.

     
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

Hello 
For some time now, I have noticed that the process of importing users from ldap does not start correctly even though it is set to synchronize every 2h. 


interestingly enough the process starts without problems if I run it manually 

Like 0

Like

3 comments

Hello!

 

Please provide us with a detailed information on what is not working correctly (business process not starting on time, is being delayed or not finished)?

Hello 
Business process not starting on time, it only works if I start it manually

Hello,
 

Please re-save the LDAP settings under the active user and make sure that the Creatio scheduler works.

Show all comments

Hi Community,

Can you provide a snippet on how we can achieve the following?

For example in the 'Contacts' editable list

We want the field 'Full Job title' to be editable and the field 'Email' to be NOT editable (its values are populated via Business processes) so we dont want manual insertion from the user. How can this be achieved?

Sasor

Like 3

Like

3 comments

You could add a business rule at the object level to disable editing of the email, but then it would also be disabled at the page level (unless that is also what you want). Other than that, the only option is to turn off the editable list property (since, currently, you can't make certain fields editable and others not)

@sasori Great idea !

Try add a readonly flag to your column in crt.DataGrid for Contacts
After that try to restore default settings on the page for this detail if you added more columns to this grid. This functionality is kinda buggy.

Show all comments

Hello team,

I have question that there are 2 tabs and inside it there is available 3 fields. For example, we have MainTab and AdditionalTab and inside MainTab there is firstname, lastname, middlename. Inside AdditionalTab there is Phonenumber, email, birthdate. I need to put validation to this fields separately. If I put validation to firstname and Phonenumber, these two shouldn't affect each other. when Firstname and Phonenumber is not filled in and try to save record, if I am on Maintab, system should return Firstname validation. at the same time, when I change tab to AdditionalTab, system should return Phonenumber validation. in this case how can I put validation based on tabs?

Below I'll share written code for validation.
 
define("UsrExample1Page", ["ConfigurationConstants"], function(ConfigurationConstants) {
    return {
        entitySchemaName: "UsrExample",
        attributes: {
         "CurrentActiveTab": {
               dataValueType: Terrasoft.DataValueType.TEXT,
               type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
               value: "" // Initial value, empty by default
           }
       },
        details: /**SCHEMA_DETAILS*/{
            "Files": {
                "schemaName": "FileDetailV2",
                "entitySchemaName": "UsrExampleFile",
                "filter": {
                    "masterColumn": "Id",
                    "detailColumn": "UsrExample"
                }
            }
        },
        methods: {
           onActiveTabChange: function(activeTab) {
               // Store the active tab identifier
               this.set("CurrentActiveTab", activeTab);
           },
 
           setValidationConfig: function() {
               this.callParent(arguments);
               this.addColumnValidator("UsrName", this.nameFieldsValidator);
               //this.addColumnValidator("UsrLastName", this.nameFieldsValidator);
               this.addColumnValidator("UsrPhoneNumber", this.phoneFieldsValidator);
           },
           nameFieldsValidator: function(value, column) {
               var invalidMessage = "";
               var firstName = this.get("UsrName");
               console.log("Name:", firstName);
               if (Ext.isEmpty(firstName)) {
                   invalidMessage = this.get("Resources.Strings.InvalidNameMessage");
                   // Switch to the tab containing the first name field
                   console.log("Switching to name tab:", invalidMessage);
                   this.set("CurrentActiveTab", "Tabbfc229c0TabLabel"); // Assuming "NameTab" is the tab identifier
               }
               return { invalidMessage: invalidMessage };
           },
           phoneFieldsValidator: function(value, column) {
             var invalidMessage = "";
             var phoneNumber = this.get("UsrPhoneNumber");
             console.log("Phone number:", phoneNumber);
             if (Ext.isEmpty(phoneNumber)) {
                 invalidMessage = this.get("Resources.Strings.InvalidPhoneNumberMessage");
                 console.log("Switching to phone tab:", invalidMessage);
                 this.set("CurrentActiveTab", "Tab68b5b8f6TabLabel"); // Ensure this is correct
             }
             return { invalidMessage: invalidMessage };
         }
       },
        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
        diff: /**SCHEMA_DIFF*/[
           {
               "operation": "insert",
               "name": "Tabs",
               "values": {
                   "tabs": [
                       {
                           "name": "MainTab",
                           "caption": { "bindTo": "Resources.Strings.MainTabCaption" },
                           "items": [],
                           "change": { "bindTo": "onActiveTabChange" }
                       },
                       {
                           "name": "AdditionalTab",
                           "caption": { "bindTo": "Resources.Strings.AdditionalTabCation" },
                           "items": [],
                           "change": { "bindTo": "onActiveTabChange" }
                       }
                   ]
               }
           }
        ]/**SCHEMA_DIFF*/
    };
});
Like 0

Like

1 comments

Hello Abbos,

To do so, you can replace the OnSaved method, where you make a check:

1) needed tab is active 

2) validation successful

If both are true - call this.callParent(arguments). Else - add needed conditions.

onSaved: function() {
	var activeTab = this.get("ActiveTab");
	var isActiveTabTab2 = activeTab == "Name of the tab"; //result true\false
	var isFirstColumnValid = this.validateFirstColumn(); //result true\false
	if (isActiveTabTab2 && isFirstColumnValid) {
		this.callParent(arguments)
	} elese if () {
		...
	} else if () {
		...
	} else {
		...
	}
},
 
validateFirstColumn: function() {
	var colValue = this.get("ColumnCodeHere");
	return colValue == "Test value" || colValue = "1" //add conditions here
}

P.S. This method will not work with the required fields, since disabling the requirement is impossible.

Show all comments

This column in the form page works with a case. It has rules for changing statuses.

 

I want to block only it so that it cannot be edited in the detail list.

 

 

Can anyone help me?

Like 1

Like

1 comments

Hello!

 

By using basic functionality, you can only turn off all inline editing. In this case, you will not be able to edit all columns on the List page.

 

Show all comments

Hi colleagues,

 

Somebody know how can I made the default column "Name" of a detail (in Freedom) not clickable? 

 

Thanks in advance

 

Regards

Julio Falcón

Like 0

Like

2 comments
Best reply

I'm not aware of anything you can add in the column properties to make it not clickable, but it's possible that there's something available (hard to know and it's not mentioned in the List properties). 

Would it work to just expand the Lookup column to map the display value column directly to the list? Also, if you never want it a clickable link you can remove the default page for the object (if that is something that would work for your scenario - obviously won't work for OOTB entities)

I'm not aware of anything you can add in the column properties to make it not clickable, but it's possible that there's something available (hard to know and it's not mentioned in the List properties). 

Would it work to just expand the Lookup column to map the display value column directly to the list? Also, if you never want it a clickable link you can remove the default page for the object (if that is something that would work for your scenario - obviously won't work for OOTB entities)

Ryan Farley,

Thanks Ryan, I created another field and when create a new record using a process copy the Name column value to this column and in the detail show this another... is not the very best, but works :-)

 

Thanks

Julio

Show all comments