Hi all.
I've been doing LDAP integration setup (which is start "Run LDAP import" Process) in creatio.

For Local (Onsite) environment has ben success import data from LDAP but for the cloud environment always error with message:

System.Exception: LDAP import error: 22021: invalid byte sequence for encoding "UTF8": 0x00.
  at Terrasoft.Core.Process.RunLDAPImport.InsertLDAPElementsScriptTaskExecute(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessFlowElement.CallInternalExecute(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context)
  at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

anybody know the problem and how to solve it?

Like 0

Like

2 comments
Best reply

Hello,

The issue you have reported happens because you are trying to use the format of the values, which isn't supported in PostgreSQL. In order to fix the issue, you should exclude system groups with pre-Windows 2000 support from the synchronization. 
To resolve this issue, please change the group filter to the following:
(&(objectClass=group)(!userAccountControl:1.2.840.113556.1.4.803:=2)(!isCriticalSystemObject=TRUE))


Best regards
Ivan

Hello,

The issue you have reported happens because you are trying to use the format of the values, which isn't supported in PostgreSQL. In order to fix the issue, you should exclude system groups with pre-Windows 2000 support from the synchronization. 
To resolve this issue, please change the group filter to the following:
(&(objectClass=group)(!userAccountControl:1.2.840.113556.1.4.803:=2)(!isCriticalSystemObject=TRUE))


Best regards
Ivan

Ivan Savenko,

Thanks, its worked

Show all comments

Hi Community,

 

I have three objects: Contact, Accounts details, AccountContact. Contacts has contact details unique on email address. Contact and Accounts details have many to many mapping with AccountContact being the mapping table. We have created lookups in accountcontact table on contact and accounts to get the mapping. Now we want to show all the accounts in Accounts details for a contact in an expanded list on the contact form page. How do we reach from contact object to accounts via accountcontact object? Screenshot of the properties of expanded list attached

Like 0

Like

1 comments

Hi,

Unfortunately, I didn't fully understand your task. Could you please provide a schematic representation of the table relationships and the data you want to display on which page?

Show all comments

Hello. One of our recent emails had quite a few "delivery errors". When I went in to look more closely, the Reason Details says "Reason details: Sending failed and all attempts to resend failed" 



While it's clear the sending failed, there's no detailed context as to why it failed (i.e. Invalid email, unsubscribed, etc). Please advise on how to gather more concrete and detailed data. Thanks.

 

Like 0

Like

1 comments

Hi!

For a more detailed analysis, please contact support@creatio.com.

Regards,
Anton

Show all comments

Hello everyone,

 

Is there a way to create a filter in a metric or columns widgets that returns the number of active users based on the shift ? (Morning: 7 am-3 pm, Night: 3pm-11pm, overnight: 11pm-7am) 

 

Note that it needs to be refreshed daily

 

does anyone has an answer to this one?

 

Thanks in advance.

Like 0

Like

2 comments

Dear Anas, 
 
To achieve this functionality you can add a new boolean field (for example: IsActive) for users. This field will be updated by a business process that will start every hour.  

The business process can set the value of the IsActive field according to the filtration or you can create an object where you will specify the shifts that users have. 
 
I hope this helps. Have a great day! 

Alina Yakovlieva,

Thank you for responding!, 

could you please elaborate more about the steps that you provided? 

Show all comments

Hi,

Our team is working on a project for Creatio 8.1.2 (for Linux and PostgreSQL). We collaborate using filesystem mode and save our changes in a Git repository. When uploading changes to the instance, we first perform the "Update packages from filesystem" operation, followed by "Compile." Our project currently consists of slightly over 30 packages. We have encountered several issues when transferring changes to other instances.

At a certain point, we started experiencing problems with uploading changes to the instances. This is particularly noticeable when creating new instances. After connecting the repository and performing "Update packages from filesystem" for the first time, numerous errors can be observed (by going to the /dev view, then selecting all packages and sorting by status in descending order). These errors include information about a broken constraint, a non-existent column in the database, etc. Following this lead, I hypothesized that during the "Update packages from filesystem" operation, many database connections are opened, exceeding the limit defined in the PostgreSQL configuration. I verified it, and the default max_connections option was set to 100. When I increased it to 300, the problem stopped occurring on newly created instances. However, it seems to me that it should not consume such a large number of connections, and I don't think continuously increasing this number is a good solution as our project grows. Is there any option in Creatio to fix it?

Some changes do not work immediately after being uploaded to a new instance. You need to go into the configuration of the specific element and perform the PUBLISH operation on the target instance. Sometimes (although rarely), the system informs us that a given business process requires re-publishing. More often, however, something doesn't work, and it's hard to know this normally. For example, a query to a web service returns 404, even though it was uploaded to the target instance, and the compilation was performed immediately after the upload. Performing a complete compilation does not solve this problem. I have to go into the class with the given web service and re-publish it. The problem is that whether something works after uploading the changes seems completely random. Sometimes restarting a container with creatio, redis and postgres help, but it's not a rule. We test the changes thoroughly on our own instances, but after uploading the changes to the client's production instance, they may not work. We would really have to perform full regression tests to detect all the problems, and this is cumbersome.

Do any of you have similar problems and know how to deal with them? Thanks in advance for your responses!

Like 4

Like

2 comments

Hi Eryk, 

Thank you for your thorough feedback, looking forward to an answer from Creatio because the phrase "The problem is that whether something works after uploading the changes seems completely random. Sometimes restarting a container with creatio, redis and postgres help, but it's not a rule. We test the changes thoroughly on our own instances, but after uploading the changes to the client's production instance, they may not work. We would really have to perform full regression tests to detect all the problems, and this is cumbersome." is exactly something we struggle with. 


More advanced documentation , training and tutorials from Creatio on how to handle this more effectively, ideally with some tools to avoid full manual regression tests, are more than welcome

Bookmarking this feed. 

Cheers, 

Damien

Dear Eryk,

Many connections are created to optimize the installation process. If this approach doesn't work for you, you can disable specific settings in the application's web.config file, reducing the number of connections.
 

Please disable the following features in the external \web.config:
 

UseAsyncSaveSchemaResourcesInstallation
UseBulkSaveSchemaResourcesInstallation
UseAsyncSchemaCaptionsInstallation
UseAsyncPackageInstallation
 

To do this, open the web.config file, locate the above settings, and set their values to false. The lines should look like this:

 

<add key="UseAsyncSaveSchemaResourcesInstallation" value="false" />
<add key="UseBulkSaveSchemaResourcesInstallation" value="false" />
<add key="UseAsyncSchemaCaptionsInstallation" value="false" />
<add key="UseAsyncPackageInstallation" value="false" />
 

After making these changes, please clear Redis, restart the application, perform a source code generation for all schemas, and compile all actions.
 

For any other issues, please create a support request with Creatio, which requires a more detailed investigation.

Best regards,
Andrii

Show all comments

Hi Team,

When creating a new custom UserTask, I notice that certain field types like 'Unlimited length text' and 'Localizable String' are available in existing UserTasks but are missing in my custom UserTask.I would greatly appreciate any assistance with this. Thank you in advance.

Regards,
Mahalaxmi.G

Like 0

Like

2 comments

Dear Mahalaxmi,
 

Thank you for reaching out regarding the missing parameter types in your custom UserTask.
 

The “Unlimited length text” and “Localizable String” parameter types, which you noticed in existing UserTasks, were removed starting from version 7.17.0. 

These parameter types are still present in UserTasks created in previous versions for backward compatibility, but they are no longer available when creating new UserTasks in the latest versions.
 

I understand how this might be unexpected, and I appreciate your understanding.
 

Best regards,
Andrii

Show all comments

Hi Team,

 

We have open and click rates out of the box in Creatio for email analytics. We can also track link peroformance (click #) for multiple links sent out in the email. Is there a way to see a list of contact records (name & email address) who clicked for each of these links sent out in the email? Thanks

Like 0

Like

1 comments

Yes, you'll create a contact filter using the "Click through links with email (by column Contact)" to view the contacts that clicked a specific link. See https://customerfx.com/article/creating-a-filter-of-contacts-that-clicked-a-specific-link-in-a-creatio-bulk-email/

Note, you can also bind that to a List on the contact page to get a list of links the contact has clicked.

Ryan

Show all comments
Question

Hi,


I would appreciate your help. I need to send an email that has to approve a request for an entire department. How is it correct to do it and extract all the emails of the contacts?

Like 0

Like

1 comments

Hi!

 

You can find an example of how to develop an Approval process, including sending email notifications in the following Creatio Academy: https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/bpm-process-examples/configur-document-approval-process

 

Also, you can get more information about business processes in the following link tree:

https://academy.creatio.com/docs/user/bpm_tools/business_process_setup 

 

I hope this helps. Have a great day!

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 &amp;&amp; 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