Hello community:



I'm defining a rule inside the section code schema to remove spaces from a field value when the user tries completes the field "UsrTexto1". It is defined as follows:

methods: {
    cambioTexto1: function() {
        var vueltas = this.get("Vueltas");
        this.set("Vueltas",vueltas+1);
 
        var txt1 = this.get("UsrTexto1");
        if (txt1.includes(' ')) {
            var txt2 = txt1.replaceAll(' ','');
            this.set("UsrTexto1",txt2);
        }
    },
}

So when the field is modified it searches for spaces inside the text and removes them. This is an example of execution:

1) When the user types the text value

2) After the method is executed:

 

The problem is that the function is executed too many times. I've added a counter 'vueltas' to show how many times the function is called and here it is the result:

It doesn't make sense as I think that the method should be called exactly 2 times (1st when it removes the spaces, and 2nd when the system detects new changes on the field and now there are no spaces). The main problem is that the whole operation is slowed down because of the high number of calls.

 

How can I fix this?

 

Thanks in advance!

Like 0

Like

5 comments

Hello,

Can you please clarify how exactly the cambioTexto1 method is called?

Thank you!

The issue is that every change made to the text results in it firing the function again, plus, the changed value won't be read by the function on subsequent calls due to the timing is that the function firing and the value changing, which is why it's getting called so many times (and likely exceeding out the call stack max).

 

Instead if firing the value on the change, maybe fire it on the blur (when the user exits the control). To do this, remove the change attribute for the control and add this to the values block for the control in the diff:

"blur": {
    "bindTo": "cambioTexto1"
}

Or you could do it on save before using callParent.

 

Ryan

Oleg Drobina,

Hello Oleg,

In the section page there is a field called "Texto1" (with the code UsrTexto1). Inside the code schema of that section is the method that I provided earlier.

As you may see the method is called cambioTexto1, which is compose of cambio ("change" in Spanish) and Texto1 (the name of the field). It means that Creatio internally calls that function each time the value of that field is modified (with a built-in trigger I guess).

Therefore, the method is always called automatically, I don't call it manually.

Thanks for your interest!

Ryan Farley,

That makes sense,



I will try that tomorrow and check if it solves the problem



Thanks for you help!

Ryan Farley,

Hi again,

 

I've tried with the solution you provided but I haven't been able to fix the issue yet.

 

I also took a look at and older post where you submitted the same solution. I've tried to follow the implementation as you suggest. Here I share the current code:

{
	"operation": "insert",
	"name": "STRINGe5cdab8a-f59c-4c1c-aa90-c412e4c3e5ae",
	"values": {
		"layout": {
			"colSpan": 24,
			"rowSpan": 1,
			"column": 0,
			"row": 1,
			"layoutName": "ProfileContainer"
		},
		"bindTo": "UsrTexto1",
		"enabled": true,
		"blur": {
			"bindTo": "cambioTexto1"
		}
	},
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"index": 1
},

Note: I have also removed the attributes part as you mentioned.

The problem is that when I try to modify a register or create a new one this happens:

The page displays blank content and, as you can see on the browser console at the right, there is an error related to an undefined value.

The messages you see before the error are traces I added to see the variable values:

console.log("Vueltas: " + this.get("Vueltas"));
- Vueltas: 0
 
console.log("Modificado: " + this.get("Modificado"));
- Modificado: false
 
console.log("Value read: " + this.get("UsrTexto1"));
- Value read: undefined

I have already read the documentation for the client schemas and I still have no clue how to solve it.

 

Regards.

Show all comments

Hello team,

 

I would like to monitor the synchronizations of email addresses opening incidents in Creatio.

 

I would therefore like to create a dashboard indicating for each of the email addresses declared in MailboxForIncidentRegistration the number of emails received per day.

Except that I don't know in which tables the received emails are stored, can someone help me on the subject?

 

Thank you in advance for your assistance.

 

Vincent

Like 0

Like

1 comments

Dear Vincent,

 

Thanks for your question. 

 

To display the number of cases registered by email, you may build the dashboard with a filter by Case Source and Case Category that were indicated in lookup "List of mailboxes for case registration". 

 

In case you wish to build the dashboard based on email from which the case was registered, please consider creating a column where the info about emailbox will be recorded and saved. 

 

If additional questions arise, feel free to get back to us. 

 

Best regards,

Anastasiia

 

 

Show all comments

Hi all,



clients using service are receiving more and more emails with encrypted pdf that are synchronizing as p7m in Creatio (whereas can be seen as pdf in outlook).



Is it possible to have a workaround / solution ? The aim is for service not to need to go into Outlook to manage the pdf and stay in Creatio.



Also, has anyone an idea on the added value of this addon  https://marketplace.creatio.com/app/mime-attachment-creatio  ? From what I understand, the addon only helps to make sure the encrypted attachements are attached (p7m) to email, but this seems to be native behaviour in Creatio 8. Am I missing anything ?



Cheers,



Damien

Like 0

Like

1 comments

Hi Damien,

 

Creatio attaches .p7m files to emails out of the box. The MIME attachment for Creatio add-on helps to decrypt these files and adds the decrypted files to the Files detail of incoming emails. You can also order a free trial and install the app to test the app functionality in action.

Show all comments

Hi, 

I'm looking for some guidance on setting up a process.

 

I want the process to run once per week, reading all Activities where the start date is <= Yesterday and the field (Result) is not filled in. 

Then I want the process to send 1 E-mail to the organiser listing the records that need the results field completing. 

 

I'm  relatively new to processes and sub processes so any guidance would be really appreciated.

 

Like 0

Like

1 comments

Hello Tom,

 

You can design your business process to run once a week with a help of "[Start timer] event" element, more detailed information is available on our Academy:

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

 

Best regards,

Anastasiia

Show all comments

Hello. I'm working with the Multiple choice field setup for Creatio (https://marketplace.creatio.com/app/multiple-choice-field-setup-creatio) add-on but I'm not getting it to save the selected values.

I've followed the guide here: https://marketplace.creatio.com/sites/marketplace/files/app-guide/Multi…

I get the values correctly on the page, and they are selectable. But nothing is saved to the database when i Save the record

Object: UsrContactLabels

Lookup: UsrLabels

Link-object: UsrContact

 

 

Like 0

Like

10 comments

Hi Vasili,

Could you please give us more details about your issue?



Specifically, please describe your object model based on the following template:

The example implies the following conditions:

1. Multiple choice field was added to the Activity page.

2. The method uses the ActivityParticipant object linked to the Activity object.

3. The Contact object is a source object for the Multiple choice field.

 

As such, the structure comprises three main objects:

• Activity: main object

• ActivityParticipant: decoupling object

• Contact: source object for the Multiple choice field

 

Also, please send us the list of columns in the decoupling object, your Creatio version, product, and DBMS

Yevhen Vorobiov,



Thank you for your response,

DBMS is a MSSQL Server 19 ,

Creatio Version is 8.0.1,

Product is bpmonline bank customer journey on-site,

 

This is a  Piot Table, connecting contact and labels objects.

We are expecting that, all label information for all contacts will be saved in this Object "UsrContactLabels", after adding labels and saving the contact page, when we refresh the page it does not save it in object and after refreshing this field is empty.

 

 

We added multiselect element on Contact Page:

 

 

MultiSelect values are Labels from Lookup (sceen below):

• Activity: main object - For us is "UsrContact" (all our contacts)

• ActivityParticipant: decoupling object - For us is "UsrContactLabels" (Piot Table joining Contacts and Labels"Lookup")

• Contact: source object for the Multiple choice field - For us is "UsrLabels" (Labels Lookup)

Hi Vasili,

 

Thank you for the detailed description.

I tested your case on the same Creatio version, product, and DBMS. I created the same object model and was unable to reproduce the issue on my end.

Could you please send us the full JavaScript page code?

Also, please reproduce the issue with the browser console open. Do you get any errors in the console?

Hi Yevhen Vorobiov,

Thank you for your response.

I did not get any errors in console after selecting MultiSelect value and saving Contact Page.

Here we choose your Labels in MultiSelect without saving Contact Page.

Here we Saved Contact Page and There are no Errors in Console.

    attributes: {

            "UsrAutomaticLabel": {

                "dataValueType": Terrasoft.DataValueType.LOOKUP

                },

   },

        mixins: {

        MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"

        },

methods: {

    getMultiChoiceEntitiesConfig: function () {

                const items = {

                        UsrAutomaticLabel: {

                            mainEntitySchemaName: "UsrContactLabels",

                            mainColumnName: "UsrContact",

                            relatedEntitySchemaName: "UsrAutomaticLabels",

                            relatedColumnName: "UsrLabels"

                            }

                        };

                        return items;

                        

                },

},

diff:[

        {

                "operation": "insert",

                "name": "UsrAutomaticLabel67a256f2-7c41-4c17-b736-ad94b31105ec",

                "values": {

                    "layout": {

                        "colSpan": 12,

                        "rowSpan": 1,

                        "column": 0,

                        "row": 0,

                        "layoutName": "GeneralInfoTabGridLayout9426c6e2"

                    },

                    "className": "Terrasoft.MultiChoiceCombobox",

                    "dataValueType": 11,

                    "bindTo": "UsrAutomaticLabel",

                    "enabled": true,

                    "contentType": 5

                },

                "parentName": "GeneralInfoTabGridLayout9426c6e2",

                "propertyName": "items",

                "index": 0

            },

 

 

]

Vasili Piruzashvili,

Hi Vasili,

 

Your source code has to include the following method:

init: function() {

                this.callParent(arguments);

                this.mixins.MultiChoiceMixin.init.call(this, arguments);

 

In other words, the source code should look as follows: 

methods: {
 
			init: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
		},
 
    getMultiChoiceEntitiesConfig: function () {
                const items = {
                        UsrAutomaticLabel: {
                            mainEntitySchemaName: "UsrContactLabels",
                            mainColumnName: "UsrContact",
                            relatedEntitySchemaName: "UsrAutomaticLabels",
                            relatedColumnName: "UsrLabels"
                            }
                        };
                        return items;
 
                },
 
},



If the issue persists, please send me the complete source code of this page as text.

Hi Yevhen,

 

Sending source code:

define("ContactPageV2", ["MultiChoiceMixin"], function(MultiChoiceMixin) {
	return {
		entitySchemaName: "Contact",
		attributes: {
			"UsrAutomaticLabel": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP
				},
		},
		mixins: {
		MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			onEntityInitialized: function() {
				window._contactObject = this;				
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
 
			},
			getMultiChoiceEntitiesConfig: function () {
				const items = {
						UsrAutomaticLabel: {
							mainEntitySchemaName: "UsrContactLabels",
							mainColumnName: "UsrContact",
							relatedEntitySchemaName: "UsrAutomaticLabels",
							relatedColumnName: "UsrLabels"
							}
						};
						return items;
 
			},
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "STRING0d5c646a-a2a5-4b05-bdd5-91eda99aa462",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 6,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "UsrExternalId",
					"enabled": true
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 6
			},
			{
				"operation": "merge",
				"name": "ContactClientProfileIcon",
				"values": {
					"layout": {
						"colSpan": 4,
						"rowSpan": 1,
						"column": 0,
						"row": 0
					}
				}
			},
			{
				"operation": "merge",
				"name": "Type",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 0
					}
				}
			},
			{
				"operation": "move",
				"name": "Type",
				"parentName": "AdditionalContactProfileContainer",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "merge",
				"name": "AccountServiceLevel",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "AccountBranch",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "Owner",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "BirthDate",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "Citizenship",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "ClientType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "SalutationType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 4
					}
				}
			},
			{
				"operation": "merge",
				"name": "Language",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 12,
						"row": 3
					}
				}
			},
			{
				"operation": "move",
				"name": "Language",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 7
			},
			{
				"operation": "merge",
				"name": "Age",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 5
					}
				}
			},
			{
				"operation": "move",
				"name": "Age",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 8
			},
			{
				"operation": "insert",
				"name": "LOOKUP5f31e5a7-d07e-4752-925a-df3453f2a040",
				"values": {
					"dataValueType": Terrasoft.DataValueType.ENUM,
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ContactGeneralInfoBlock"
					},
					"className": "Terrasoft.MultiChoiceCombobox",
					"bindTo": "UsrAutomaticLabel",
					"enabled": true,
					"contentType": 3
				},
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 9
			},
			{
				"operation": "merge",
				"name": "ContactPageV26Tab",
				"values": {
					"order": 2
				}
			},
			{
				"operation": "merge",
				"name": "JobTabContainer",
				"values": {
					"order": 5
				}
			},
			{
				"operation": "merge",
				"name": "HistoryTab",
				"values": {
					"order": 6
				}
			},
			{
				"operation": "merge",
				"name": "NotesAndFilesTab",
				"values": {
					"order": 7
				}
			},
			{
				"operation": "merge",
				"name": "ESNTab",
				"values": {
					"order": 8
				}
			},
			{
				"operation": "move",
				"name": "Gender",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "INN",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "SocialStatus",
				"parentName": "group51e8654c265f_gridLayout",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "DecisionRole",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "Job",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "EmploymentType",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "Account2",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 2
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Yevhen Vorobiov,

Hi Yevhen, I made new Server and added Multiple Choice as it was in documentation. I have same problem with saving data. There are not any error in console ,  after chosing multiple Choiche values "Labels"  and saving Contact page, but after reloading the page the data is not saved and Labels are deleted so its empty .

Hi Vasili,

I can see that your code uses this method:

methods: {
onEntityInitialized: function() {
window._contactObject = this;
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

However, the instruction uses the following method instead:

methods: {
init: function() {
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

When I use the former method, I get the same issue. I can select data in the field, but Creatio will not save it. When I use the method from the instruction, everything works as expected.
Could you please test the method from the instruction? Is using a different method required in your case?

It worked! Thanks a lot

Show all comments

Hello community,

 

I need to add two lookup columns to an edit page connected to the same object but with different displayValue. I have read this article https://community.creatio.com/ideas/multiple-display-values-same-lookup and I would like to know if this feature was finally implemented.

 

Thank you!

 

Like 0

Like

1 comments

Hello,



I believe your business task could be achieved by this MarketPlace add-on.

Show all comments

Hello,

 

I need to add some code when opening a record in edit mode so I have overwritten the method "openRecord" in the section Schema. When I open the record from the List view, the method does execute but from the Dashboard view it is not. 

 

Does a different method execute when opening the record from the Dashboard view? In that case I would like to know which method is executed in order to overwrite it.

 

Hope you can solve this issue.

Thank you in advance!

Like 0

Like

3 comments

Hi, 

If I understand your task correctly, you need to use the method onEntityInitialized. An example of this you can find in this article, there when the page is opened we fill in the value for some field.

Hi,

 

The problem is that before opening the record, I need to execute a business process in which the record permissions are modified. I have tried to add it on the onEntityInitialized but as the record is already openned, the permissions cannot be modified.

 

Thank you!

In that case, try using the method init(). 

If I understand your task, when you open a page you want to run a process that will modify the rights to this page, and if the user doesn't have that anymore, the page will not open. If init didn't work I recommend you to write a business process that will run periodically and will update access rights to records without needing to do it every time someone tries to open a page.

Show all comments

InvalidArgumentException: invalid argument: Unsupported locator strategy: 0

Вот такая ошибка появляется после логина в систему на дальнейшие любые действия с локаторами. Локаторы корректные, действия с ними после их загрузки в DOMе. На всех других версиях отрабатывает корректно (конкретно версия 7.15.3.1649, на других версиях 7.15.3.... - все работает нормально).

Использую Java, Maven, Selenide, TestNG, Chrome.

Подбор больших-меньших версий Selenuim-chrome-driver ничего не дал.

Нашел решение: запуск на версии Chrome и chromedriver меньше 76 (начиная с 75).

Может кто-то сталкивался с данной проблемой и может объяснить в чем проблема?

Like 0

Like

1 comments

Добрый день!

Со стороны системы могу сказать, что нам не приходилось сталкиваться с такой ситуацией. Мы используем Selenuim для проведения тестов, однако, подобную ошибку видим впервые.

Если никто из других пользователей не сможет вам помочь, рекомендую создать обращение в поддержку с точным описанием ваших действий при появлении ошибки, что и как вы настраивали и так далее.

Show all comments

Hi,

 

is there a way to change to name of the browser tab depending on which page you're in?

Example: You're in a case and want to have the case number displayed in the browser tab name for a better overview.

Like 0

Like

1 comments

Hello,

 

You can customize only the favicon and the company's name in the browser tab. Detailed instruction can be found in the Add corporate logo Academy article

Unfortunately, there are no ways to customize tabs according to your business task at the moment. The idea to extend the possibility of browser's tab customization is already accepted by our R&D team. 

Show all comments

Hi community,



I want to modify the value of the field "Notes" from a process but the field does not appear in the block "Modify data". We have checked the object "Case" and the field does exist. Hope you can tell me the reason.



Thank you in advance!

Like 0

Like

0 comments
Show all comments