Hi all,

 

Is there a settings to notify user when a ticket is open directly in the Case section?
 

We are basically registering cases through email, and it works fine, but if I register a case directly in the Case section there is no notification to the user.

 

User only receive email if I send an email from the case, meaning not automatically.

 

Any thougths?

Like 0

Like

2 comments

Hello,

 

This behavior can be achieved using the OOB functionality.

This article will help you with the setup: https://academy.creatio.com/docs/8.x/creatio-apps/products/service-tools/service-cases/case-settings/set-up-email-notifications

 

Please, pay attention to this block: https://academy.creatio.com/docs/8.x/creatio-apps/products/service-tools/service-cases/case-settings/set-up-email-notifications#set-up-contact-case-notification-rules

It will guide you through the necessary settings.

 

Hanna Skalko, 

Thank you, I will take a look on them

Show all comments

Добрий день. Намагаюсь зробити БП для створення нового Ліда з вхідного повідомлення на електронну адресу, але не можу зрозуміти до якої умови я маю причепитись в об'єкті Email повідомлення? 

Like 0

Like

2 comments

Добрий день!

Ви можете створити бізнес-процес для створення нового ліда на основі тригера — створення нового запису в об'єкті "Emil повідомлення".
 

Ви можете зчитати дані з пов'язаної з ним "Активності", щоб отримати відповідну інформацію, таку як тема, пов'язаний контакт/обліковий запис (якщо такий є), і включити це в процес створення ліда як параметр.

Класичним випадком було б перевіряти, чи є у темі повідомлення ключові слова для створення ліда.

На зображеннях нижче я надав приклади того, як буде виглядати такий тригер.

How to select activity subject

Email trigger

Дякуємо!

 

Andrii Kurta,

Добрий день. Дякую. Необхідний лист через Активність Кому отримую. Далі питання, як я з нього отримаю Тему листа - Хочу зробити її назвою Ліда наприклад. Контакт, хто надіслав створити контакт з його данними.

Потім вичитую дані з листа

 

Show all comments

Hello,

I'm in the process of migrating our classic Creatio pages to FreedomUI mode.


I'm having issues with the "Add New" option in some selector widgets:


for example, on the Order page, with the Contact entity, if I enter "a name" on the widget then select "Add new", a new contact is created but with an empty Account field.

If the "Add new" option is selected without any text, a "Full name field must be filled" error is raised.


in both cases I would expect a modal window to enter information about the contact.

 

The problem also happens with other entities (tried with AccountAddress).

 

did I miss something?


Greetings,
Patrice
 

Like 0

Like

1 comments

Hello!

Please contact support@creatio.com to analyze the situation in more detail. 

Best regards,
Anton

Show all comments

Hi Team, 
I want to style my dropdown which has element code : "Usrcodedropdowncode" 
Can you please provide your inputs to achieve this?
Thank you, 
Asif

Like 0

Like

1 comments
Best reply

Hello Asif,

I've found an excellent article by Ryan Farley that explains how to add custom CSS style sheets in Creatio. It may help you to understand how styling works.

P.S. Logic in Classic and FreedomUI is quite the same for this task. 

 

Hello Asif,

I've found an excellent article by Ryan Farley that explains how to add custom CSS style sheets in Creatio. It may help you to understand how styling works.

P.S. Logic in Classic and FreedomUI is quite the same for this task. 

 

Show all comments

Hi,

I'm developing my own custom Angular component for Creatio. I would like to use some of the standard components within it, such as a lookup field. How can I achieve this?

Is it possible to create a custom component that acts as a container for other elements, similar to crt.FlexContainer, which defines an items property for child components?

 

Like 1

Like

1 comments

Hello Eryk,

Unfortunately, it's impossible to reuse components in custom angular components for now, but Creatio plans to add such functionality in future releases.

Show all comments

Добрий день. Робимо запрошення на портал через автоматичну реєстрацію (Налаштування-Налаштування порталу-Організаційні ролі на порталі-Обираємо організацію - На вкладці "Основна інформація" натискаємо на "+", обираємо "Додати нові контакти"-Вказуємо email і надсилаємо запрошення). У зв'язку з великою кількістю запрошень необхідно розуміти кому запрошення на портал вже були надіслані. Яким чином можна вивести цей параметр (запрошення надіслане) в контактах?

Like 0

Like

2 comments

Доброго дня!

На жаль, в контактах не зберігається подібна інформація, тому і вивести її не буде можливим. 

Ми вже зареєстрували побажання на додавання такого функціоналу в майбутніх версіях системи, тому сподіваємось на скорішу реалізацію цього функціоналу. 

Дякуємо, що допомагаєте нам покращувати нашу систему. 

З повагою,
Антон

Дякую за відповідь. Дуже чекаємо на дане доопрацювання.

Show all comments

Hello,

I'm getting  "The system setting ExchangeListenerURI is not populated" error when I add new email account.
I'm using 8.1.1 version and postgre SQL database.

Thanks,

Asif Shaik

Like 0

Like

1 comments

Hey, everyone. 
I've been on this for a while now, but I can't figure it out. 

 

I've got this workflow from my print, and it has the following function: 

  • Get the information from a newly created entry on the object "Class"
  • Reading the information from "Class level" (it has the quantity of classes said level needs and what's the starting "Class number" that it must have),
  • Create "classroom" entries based on the "starting date" (it's a property from "Class") and "days of the week with time" (I've made it so that my object "Class" had a boolean for each day and a "time" for each day too ).

 

Does anyone knows how to construct a "Scripted task" (I belive that it is the ONLY way I can make it work) to do that? 

 

 

Business process:

 

Class table information, regarding how I've constructed the Day of the week + hour;

Like 0

Like

2 comments

Hello,

 

There is no need to use a script task here. A simple sub-process call with mass creation of records using the "Add data" element will also work as expected. 

 

If you want to use the code:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/back-end-development/data-operations-back-end/orm/examples/manage-the-database-entities

 

See example 6

EntitySchema contactSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
Entity contactEntity = contactSchema.CreateEntity(UserConnection);
contactEntity.SetDefColumnValues();
contactEntity.SetColumnValue("Name", "User01");
contactEntity.Save();
 

 

The things to change here are the entity name and the column values (and column names).

Hey, Kalymbet! 
Many thanks for the response. 
I'll try it and come back here later today to coment! 

Show all comments

Hi. 

 

I'm trying to deploy de Identity Service to be able to use the external Outh 2.0 authorization and im using the docker deploy option but when i run the container, i got the error "It was not possible to connect to the redis server(s). Error connecting right now."

 

I also tried to  modify the redis connectio string with my value in the ConnectionString.config file of my main creatio application but dosen't work.

 

I was following this documentation https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-deployment/deployment-additional-setup/identity-service/set-up-the-identity-service-instruction#title-2002-6

 

the documentation for docker deploy dont show anything about redis.

 

Would apprecite your help. 

Like 0

Like

1 comments

Hello!

 

For Identity service, is there no need to use Redis. Please remove any mention of Redis in the Identity service setup.

Show all comments

I added virtual Detail and after filling the object it displays all records. On not Virtual details recoreds are displayed with amount of 10 and after clicking "Show More" it shows another 10. Bassicaly I want the same  logic for my Virtual Detail. I tried to set "RowCount" to 10 but it did not work.

Is it possible to add record limitation as it works in  not virtual detail with rowcount 10

 define("UsrFinancialAccountsVirtualDetail", ['ContactPageV2' ], function(ContactPageV2) {
	return {
		entitySchemaName: "UsrFinancialAccountsVirtualObject",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
                "operation": "insert",
                "name": "LoadGridButton",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.LoadGridButtonCaption"},
                    "click": {"bindTo": "onLoadGridButtonClick"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                },
 
			},
 
		]/**SCHEMA_DIFF*/,
		attributes: {
			IsGridEmpty: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: true
			}
		},
		methods: {
     		sortColumn: this.Terrasoft.emptyFn,
            loadGridData: this.Terrasoft.emptyFn,
			      getRowCount: function() {
					return 10;
				  },
 
            init: function() {
                this.callParent(arguments);
                this.set("IsGridEmpty", true);
                this.set("IsGridDataLoaded", true);
 
            },
			onLoadGridButtonClick: function() {
				var _branchVirtualObject = this;
				this.set("MaskId", Terrasoft.Mask.show({timeout: 0}));
				var baseSecret = Terrasoft.SysSettings.cachedSettings.baseSecret;
    			var baseUrl = Terrasoft.SysSettings.cachedSettings.baseUrl;
 
				jQuery.ajax({
                        type: "GET",
 
                        url: `**************************************`,
                        headers: {
                            "Content-Type": "application/json",
                            "Accept-Language": "ru-RU"
                        },
                        dataType: "json",
                        success: function(getAccountsResponse) {
							if(getAccountsResponse.status.code == 1 && getAccountsResponse.data.accounts){
								let accountsData = getAccountsResponse.data.accounts
								 _branchVirtualObject.parseDataToDetail(accountsData)
								 _branchVirtualObject.showInformationDialog(getAccountsResponse.status.message)
								Terrasoft.Mask.hide(_branchVirtualObject.get("MaskId"));							
 
							}else{
								_branchVirtualObject.fallbackOnError(getAccountsResponse.status.message)
								Terrasoft.Mask.hide(_branchVirtualObject.get("MaskId"));
							}										
                        },
                        error: function(getCardsResponse) {
                           Terrasoft.Mask.hide(_branchVirtualObject.get("MaskId"));
							_branchVirtualObject.fallbackOnError("Error")   						
                        },                      
                    });				
			},
				fallbackOnError: function(message, response) {
				this.hideBodyMask();
				this.showInformationDialog(message, null, { style: Terrasoft.MessageBoxStyles.RED });
				console.log(message);
			},
			parseDataToDetail:function(cardsData){				 
				var data =[];				
				cardsData.map(x => {
					const tempObj = {
						UsrAccountId: x.accountId,
						UsrIndex: x.index,
						UsrBalance: x.balance,
						UsrStatus: x.status,
						UsrCurrency: x.currency,
						UsrType: x.type,
						UsrBankAccountNumber: x.UsrBankAccountNumber,						
					}	;					
					data.push(tempObj)
				})				
				var newCollection = Ext.create("Terrasoft.Collection");
				Terrasoft.each(data, function(item, key) {
					var model = Ext.create("Terrasoft.BaseViewModel", {
						rowConfig: {
							UsrId: {
								columnPath: "UsrId",
								dataValueType: Terrasoft.DataValueType.GUID
							},					
							UsrAccountId: {
								columnPath: "UsrAccountId",
								dataValueType: Terrasoft.DataValueType.TEXT
							},
							UsrIndex: {
								columnPath: "UsrIndex",
								dataValueType: Terrasoft.DataValueType.GUID
							},
							UsrBalance: {
								columnPath: "UsrBalance",
								dataValueType: Terrasoft.DataValueType.TEXT
							},
							UsrStatus: {
								columnPath: "UsrStatus",
								dataValueType: Terrasoft.DataValueType.TEXT
							},	
							UsrCurrency: {
								columnPath: "UsrCurrency",
								dataValueType: Terrasoft.DataValueType.TEXT
							},
							UsrType: {
								columnPath: "UsrType",
								dataValueType: Terrasoft.DataValueType.TEXT
							},
							UsrBankAccountNumber: {
								columnPath: "UsrBankAccountNumber",
								dataValueType: Terrasoft.DataValueType.BOOLEAN
							},
 
 
 
						},
						values: {
							UsrId: Terrasoft.generateGUID(),
							UsrAccountId: item.UsrAccountId,
							UsrIndex: item.UsrIndex,
							UsrBalance: item.UsrBalance,
							UsrStatus: item.UsrStatus,
							UsrCurrency: item.UsrCurrency,
							UsrType: item.UsrType,
							UsrBankAccountNumber: item.UsrBankAccountNumber,
						}
					}, this);
					newCollection.add(model.get("Id"), model);
				});
				var response = {
					collection: newCollection,
					success: true,
					errorInfo: undefined,
				};
 
				this.set("IsGridLoading", false);
                 this.set("IsGridDataLoaded", true);
				 this.set("IsGridEmpty", false);
				this.set("IsDetailCollapsed", false);
				this.set("RowCount", 10);
				this.updateLoadedGridData(response, this.onGridDataLoaded, this);
 
 
			},
 
		}
 
	};
}); 
Like 0

Like

2 comments

You can use my code as an example to implement your logic:

define("UsrSchema27d9d5e6Detail", [], function() {
	return {
		entitySchemaName: "UsrTestDetail",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
                "operation": "insert",
                "name": "LoadGridButton",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.LoadGridButtonCaption"},
                    "click": {"bindTo": "onLoadGridButtonClick"},
					"enabled": {"bindTo": "isLoadGridButtonEnabled"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                }
			},
			{
                "operation": "insert",
                "name": "LoadNextRecords",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.LoadNextRecords"},
                    "click": {"bindTo": "onLoadNextRecordsButtonClick"},
					"enabled": {"bindTo": "isLoadNextRecordsButtonEnabled"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                }
			},
			{
                "operation": "insert",
                "name": "ClearGridData",
                "parentName": "Detail",
                "propertyName": "tools",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {"bindTo": "Resources.Strings.ClearGridData"},
                    "click": {"bindTo": "onClearGridDataButtonClick"},
					"enabled": {"bindTo": "isClearGridDataButtonEnabled"},
                    "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT
                }
			}
		]/**SCHEMA_DIFF*/,
		attributes: {
 
			IsGridEmpty: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: true
			},
 
			NumberOfClicks: {
				dataValueType: this.Terrasoft.DataValueType.INTEGER,
				value: 0
			},
 
			NumberOfRecordsToDisplay: {
				dataValueType: this.Terrasoft.DataValueType.INTEGER,
				value: 10
			},
 
			CanLoadGridData: {
				dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
				value: true
			},
 
			ObjectsCollection: {
				dataValueType: this.Terrasoft.DataValueType.COLLECTION,
				value: [
					{
						UsrName: "1111",
						UsrIntColumn: 1
					},
					{
						UsrName: "Test2",
						UsrIntColumn: 24
					},
					{
						UsrName: "Test3",
						UsrIntColumn: 34
					},
					{
						UsrName: "Test4",
						UsrIntColumn: 44
					},
					{
						UsrName: "Test5",
						UsrIntColumn: 54
					},
					{
						UsrName: "Test6",
						UsrIntColumn: 64
					},
					{
						UsrName: "Test7",
						UsrIntColumn: 74
					},
					{
						UsrName: "Test8",
						UsrIntColumn: 84
					},
					{
						UsrName: "Test9",
						UsrIntColumn: 94
					},
					{
						UsrName: "Test10",
						UsrIntColumn: 104
					},
					{
						UsrName: "Test11",
						UsrIntColumn: 114
					},
					{
						UsrName: "Test12",
						UsrIntColumn: 124
					},
					{
						UsrName: "Test13",
						UsrIntColumn: 124
					},
					{
						UsrName: "Test14",
						UsrIntColumn: 124
					},
					{
						UsrName: "Test15",
						UsrIntColumn: 124
					},
					{
						UsrName: "Test16",
						UsrIntColumn: 124
					},
					{
						UsrName: "Test17",
						UsrIntColumn: 124
					}
				]
			}
		},
		methods: {
 
			isClearGridDataButtonEnabled: function() {
				var numberOfClicks = this.get("NumberOfClicks");
				var canLoadMoreData = this.get("CanLoadGridData");
				return numberOfClicks != 0 && !canLoadMoreData;
			},
 
			isLoadGridButtonEnabled: function() {
				var numberOfClicks = this.get("NumberOfClicks");
				var canLoadMoreData = this.get("CanLoadGridData");
				return numberOfClicks == 0;
			},
 
			isLoadNextRecordsButtonEnabled: function() {
				var numberOfClicks = this.get("NumberOfClicks");
				var canLoadMoreData = this.get("CanLoadGridData");
				return numberOfClicks != 0 && canLoadMoreData;
			},
 
			processObjectsCollection: function(collection, numberOfRecordsToLoad, skipRecordsNumber) {
				var newCollection = Ext.create("Terrasoft.Collection");
				Terrasoft.each(collection, function(item, key) {
					if (key < numberOfRecordsToLoad && key >= skipRecordsNumber) {
						var model = Ext.create("Terrasoft.BaseViewModel", {
						rowConfig: {
							Id: {
								columnPath: "Id",
								dataValueType: Terrasoft.DataValueType.GUID
							},
							UsrName: {
								columnPath: "UsrName",
								dataValueType: Terrasoft.DataValueType.TEXT
							},
							UsrIntColumn: {
								columnPath: "UsrIntColumn",
								dataValueType: Terrasoft.DataValueType.INTEGER
							}
						},
						values: {
							Id: Terrasoft.generateGUID(),
							UsrName: item.UsrName,
							UsrIntColumn: item.UsrIntColumn,
						}
					}, this);
						newCollection.add(model.get("Id"), model);
					}
				});
				return newCollection;
			},
 
			processNumberOfClicks: function() {
				var numberOfClicks = this.get("NumberOfClicks");
				var numberOfRecordsToDisplay = this.get("NumberOfRecordsToDisplay");
				var numberOfRecordsToLoad = (numberOfClicks + 1) * numberOfRecordsToDisplay;
				var numberOfRecordsToSkip = numberOfClicks * numberOfRecordsToDisplay;
				this.set("NumberOfClicks", numberOfClicks + 1);
				var result = {
					NumberOfRecordsToLoad: numberOfRecordsToLoad,
					NumberOfRecordsToSkip: numberOfRecordsToSkip
				};
				return result;
			},
 
			processDataLoadRequest: function() {
				var offsetFetchValue = this.processNumberOfClicks();
				var numberOfRecordsToLoad = offsetFetchValue.NumberOfRecordsToLoad;
				var skipRecordsNumber = offsetFetchValue.NumberOfRecordsToSkip;
				var object = this.get("ObjectsCollection");
				var processedCollection = this.processObjectsCollection(object, numberOfRecordsToLoad, skipRecordsNumber);
				var processedCollectionLength = processedCollection?.length;
				var response = {
					collection: processedCollection,
					success: true,
					errorInfo: undefined
				};
				this.updateLoadedGridData(response, this.onGridDataLoaded, this);
				return processedCollectionLength != 10;
			},
 
			onClearGridDataButtonClick: function() {
				const gridData = this.getGridData();
				gridData.clear();
				this.set("NumberOfClicks", 0);
				this.set("CanLoadGridData", true);
			},
 
			onLoadGridButtonClick: function() {
				this.processDataLoadRequest();
				this.set("CanLoadMoreData", false);
			},
 
			onLoadNextRecordsButtonClick: function() {
				var result = this.processDataLoadRequest();
				if (result) {
					this.set("CanLoadGridData", false);
				}
			}
		}
	};
});

The code is simple to read, and everything should be clear. The number of records to load per LoadNextRecords button click is controlled in the NumberOfRecordsToDisplay attribute. The idea was to add 3 buttons:

 

1) LoadGridButton performs the initial data load. Becomes disabled once it's clicked.

2) LoadNextRecords loads the next 10 records from the ObjectsCollection attribute. It becomes disabled once all records are displayed.

3) ClearGridData performs data grid clear, and data loading can start from the beginning. It is enabled only when all records are loaded into the grid.

Oleg Drobina,

Thanks Oleg, it works.

Show all comments