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

Hi

Does any one know how to make bold "new feed notification"  or mark as Unread? 

Like 0

Like

3 comments

Hello,

 

Could you please provide more details and/or screenshots of what you would like to achieve?

 

Best regards,
Yuliya

Hi Yuliya,

 

what Sergio is asking is to only mark feed notification as read when they are clicked (similar behaviour to monday and other applications). 

Otherwise every time a user opens the tab, all notifications are marked as read, independent of if the user has read it or not.
 

I also noticed that unlike the instructions (https://academy.creatio.com/docs/8.x/creatio-apps/creatio-basics/commun…) the notifications counter is not showing and the new notifictions do not appear as grey. Can this have something to do with the browser that is used?

 

Rgds,

Luis

 

Luis Tinoco Azevedo,

 

Hi!

 

Unfortunately, so far, there is no possibility of marking notifications unread / marking them as read only after they are clicked. 
We have registered your suggestion on this topic, and our R&D team will consider implementing it in future releases.

 

As for the Academy article, there is an inaccuracy. The logic with the counter is currently applied only to the Classic UI shell. And the highlighting of the new notification has not been implemented so far.
We apologize for this inconsistency. We have already informed the Academy team about it, and they will correct the article. Also, a separate suggestion was registered for the R&D team on implementing the counter for Freedom UI and adding highlighting.

 

Thank you for being an active part of the Creatio community!

 

Best regards,

Natalia

Show all comments

Hi. 

 

I'm trying to find some information about the field service, but I can't find it. The only information I had found is in the Product info of Service module but is just a little paragraph. Can you help me to know if there is more information about field service? 

Like 0

Like

1 comments

Hi guys,

 

Is there a way to sort a detail by a specific field in Freedom Mobile? I'm using this approach that works in Classic, but it does not seem to work when I switch to the Freedom version:

 

Terrasoft.sdk.GridPage.setOrderByColumns("Account", {
    column: "CreatedOn",
    orderType: Terrasoft.OrderTypes.DESC
});

 

Thanks!

Like 0

Like

1 comments

Hello,

 

This approach won't work in Freedom UI, this one is for classic UI. Here is the example of the code for ActivityDetailV2EmbeddedDetail out-of-the-box

"ActivityDetailV2EmbeddedDetail": {
                "properties": {"readonly": true},
                "modelConfig": {
                    "path": "ActivityDetailV2EmbeddedDetailDS",
                    "cacheConfig": {},
                    "sortingConfig": {
                        "default": [{
                            "columnName": "CreatedOn",
                            "direction": "asc"
                        }],
                        "name": "Attribute_ActivityDetailV2EmbeddedDetail_SortingConfig"
                    },
                    "name": "Attribute_ActivityDetailV2EmbeddedDetail_ModelConfig"
                },
                "name": "Attribute_ActivityDetailV2EmbeddedDetail"
            },

added to the MobileCaseRecordPageSettings (edit page of the case section in mobile). The code for your detail should be found in the same schema and modified.

Show all comments

It is necessary to configure the filter CreatedBy=CurrentUser in the mobile application.

The filter is saved in the file UsrMobileNotesModuleConfig and referenced in the manifest.

The file is specified in the manifest:

},
"UsrMyNotes": {
   "RequiredModels": [
       "UsrMyNotes"
   ],
   "ModelExtensions": [],
   "PagesExtensions": [
       "UsrMobileUsrMyNotesActionsSettingsBlyzenkoWS",
       "UsrMobileUsrMyNotesGridPageSettingsBlyzenkoWS",
       "UsrMobileUsrMyNotesRecordPageSettingsBlyzenkoWS",
       "UsrMobileNotesModuleConfig"
   ]
}

Filter code:

Terrasoft.sdk.Module.addFilter("UsrMyNotes", Ext.create("Terrasoft.Filter", {
   type: Terrasoft.FilterTypes.Group,
   logicalOperation: Terrasoft.FilterLogicalOperations.And,
   subfilters: [
       {
           property: "CreatedBy",
           comparisonType: Terrasoft.ComparisonType.EQUAL,
           value: Terrasoft.sdk.CurrentUser.getContactId()
       }
   ]
}));

But it does not work. Please help.
 

Like 1

Like

1 comments

Hello,

The example you provided is relevant for the classic sections of the mobile application; however, it appears that you are using the Freedom UI interface for the mobile section of your object. To implement your task in this case, you need to change the Mobile[Object]GridPageSettings[Workplace] schema. In this schema, inside the array [ ], you need to add a block with the code:
{
    "operation": "merge",
    "name": "settings",
    "values": {
        "viewModelConfigDiff": "[{\"operation\":\"merge\",\"name\":\"Attribute_Items_ModelConfig\",\"values\":{\"filterAttributes\":[]}},{\"operation\":\"insert\",\"name\":\"MyFilter\",\"values\":{},\"parentName\":\"Attribute_Items_ModelConfig\",\"propertyName\": \"filterAttributes\"},{\"operation\":\"merge\",\"name\":\"Attributes\",\"values\":{\"MyFilter\":{ YOUR FILTER }}}]"
    }
}

To obtain the filter itself, you should use the following method:

  1. 1) In the Freedom UI designer, add a new list to your object on any page.
  2. 2) In this list, configure the filter you want to apply in the mobile application.
  3. 3) Save the filter and the page.
  4. 4) Open the code of the page and find the complete filter code inside it.
  5. 5) Insert this code inside the {"MyFilter":{ YOUR FILTER }}.

It's important to escape the " characters with a backslash, like this \", and the filter code should not contain tabs. As a result, your Mobile[Object]GridPageSettings[Workplace] page should look something like this:

[
{
    "operation": "merge",
    "name": "settings",
    "values": {
        "viewModelConfigDiff": "[{\"operation\":\"merge\",\"name\":\"Attribute_Items_ModelConfig\",\"values\":{\"filterAttributes\":[]}},{\"operation\":\"insert\",\"name\":\"MyFilter\",\"values\":{},\"parentName\":\"Attribute_Items_ModelConfig\",\"propertyName\": \"filterAttributes\"},{\"operation\":\"merge\",\"name\":\"Attributes\",\"values\":{\"MyFilter\":{\"value\": {\"items\": {\"154ca683-b9f9-4359-88ca-e9dfbd10481a\": {\"filterType\": 4,\"comparisonType\": 3,\"isEnabled\": true,\"trimDateTimeParameterToDate\": false,\"leftExpression\": {\"expressionType\": 0,\"columnPath\": \"Status\"},\"isAggregative\": false,\"dataValueType\": 10,\"referenceSchemaName\": \"CaseStatus\",\"rightExpressions\": [{\"expressionType\": 2,\"parameter\": {\"dataValueType\": 10,\"value\": {\"Name\": \"In progress\",\"IsFinal\": false,\"Id\": \"7e9f1204-f46b-1410-fb9a-0050ba5d6c38\",\"Image\": \"\",\"StatusColor\": \"#FFAC07\",\"value\": \"7e9f1204-f46b-1410-fb9a-0050ba5d6c38\",\"displayValue\": \"In progress\"}}}]},\"d819453a-7122-4f49-92e8-3b0d7e4601f5\": {\"filterType\": 4,\"comparisonType\": 3,\"isEnabled\": true,\"trimDateTimeParameterToDate\": false,\"leftExpression\": {\"expressionType\": 0,\"columnPath\": \"Status\"},\"isAggregative\": false,\"dataValueType\": 10,\"referenceSchemaName\": \"CaseStatus\",\"rightExpressions\": [{\"expressionType\": 2,\"parameter\": {\"dataValueType\": 10,\"value\": {\"Name\": \"New\",\"IsFinal\": false,\"Id\": \"ae5f2f10-f46b-1410-fd9a-0050ba5d6c38\",\"Image\": \"\",\"StatusColor\": \"#0058EF\",\"value\": \"ae5f2f10-f46b-1410-fd9a-0050ba5d6c38\",\"displayValue\": \"New\"}}}]}},\"logicalOperation\": 1,\"isEnabled\": true,\"filterType\": 6,\"rootSchemaName\": \"Case\"}}}}]"}
}
]

After that, save the changes and synchronize the mobile application. As a result, the section should be filtered.

 

 

Show all comments

 
Hi Team,
We have a requirement to implement object permissions for our use case, and I have been working on setting these up. Despite following the documentation provided in the link below, we are encountering issues where the permissions do not seem to be functioning correctly. Specifically, users are able to delete records even when they do not have delete permissions, and similar issues are occurring with other operations.
I followed the guidance in the following documentation: Creatio Object Operation Permissions Documentation
Could you please assist us in resolving this issue?
Thank you!
Best regards,
Bala Koteswarareddy.

Like 0

Like

1 comments

Hi Team,
 

We have a requirement to implement object permissions for our use case, and I have been working on setting these up. Despite following the documentation provided in the link below, we are encountering issues where the permissions do not seem to be functioning correctly. Specifically, users are able to delete records even when they do not have delete permissions, and similar issues are occurring with other operations.
 

I followed the guidance in the following documentation: Creatio Object Operation Permissions Documentation
 

Could you please assist us in resolving this issue?
 

Thank you!
Best regards,
Asif Shaik

Like 0

Like

4 comments
Best reply

Asif Shaik,

Hello. Your user has System administrators role which by default has permission for operation CanDeleteEverything

Hello,

 

Could you please provide us with a screenshot of object permissions for the mentioned object and the screenshot of roles of a user that can delete the records despite not having the rights to do so.

 

Also, specify if you made sure to run the "Update object permissions" action after setting up the new access rights.

Mira Dmitruk,

Hello,
 

Thank you for your response.
 

I have used a sample object and user for testing purposes. Please find attached the screenshots you requested:
 

  1. Object Permissions Screenshot:

     

     

  2. User Roles Screenshot:

     

Despite these configurations, the user is still able to delete records. Could you please help me identify what might be going wrong or if there are additional steps I need to follow?
 

Thank you for your assistance!

Best regards,
Asif Shaik

Asif Shaik,

Hello. Your user has System administrators role which by default has permission for operation CanDeleteEverything

Andrii Orlenko,
 

Hello,

Thank you for your valuable input. I realized it was a simple mistake on my part regarding the System administrators role having the CanDeleteEverything permission. I have now corrected it and successfully achieved the desired outcome.

Thank you once again for your assistance!

Best regards,
Asif Shaik

Show all comments

Hello,

 

We calculate Total of sales for each month per customer. And we want to compare it to the Total of sales for the same month previous year.

Now we do this calculation in VIEW and display numers in pivot table.

 

But how can we display % of changes between current and previous year for totals?

This is how Excel does this. Can Creatio do that somehow as well? 

 

Like 1

Like

2 comments

  Hi, Vladimir,

 

Sorry, but we don't know if it can even be achieved using additional front-end development. The only solution we can think of is adding a column to the view you already use where the calculation will be performed automatically and displayed in the pivot table.

Sergii Zhmurko,

Thank you. A column with % will be summarized in totals, so it will show incorrect value.

Hope to see calculated fields in Creatio pivot tables (similar to Excel functionality) in future versions

Kind regards,

Vladimir

Show all comments

Hi Team,

 

Please let us know where to stored the user entered records are stored in Creatio in the backend.

 

For example: 

 

The user entered records in Stage A, once the Stage A is completed it will move to next Stage B then where to find the previous Stage A user entered records.

 

 

 

Regards,

Prem

Like 1

Like

1 comments

Hello,

 

Please provide more details regarding your business task. What details and in which section you would like to check?

 

Best regards,
Yuliya

Show all comments