Hi Creatio Team,

We have a creatio instance with around 100 users, who in order to authenticate use the Creatio authentication. This users are set in specific organizational and functional roles, with access rights applied to them.

We will do a sync with Active Directory through LDAP for the same 100 users, so that the users use LDAP authentication to log in to Creatio and not Creatio authentication?

1-Will these cause any duplicates with the existing Contacts ?

2- Should we deactivate the licenses of the existing users before doing the sync with AD ?

Thank you

 

Like 2

Like

2 comments

Hello,

 

 

During synchronization with LDAP is checked table SysAdminUnit (table section Users), so when you synchronize the new user will be created.

You can re-bind the contact with an SQL query and then delete the new contact.

The connection to the table of contacts in SysAdminUnit is made by the ContactId column.

Also, by checking the SysAdminUnit table, if the system already has a user bound to a contact, we cannot create another user bound to an occupied contact.

If users were previously synchronized over LDAP and they have an LDAP element, the system should not generate new contacts/users.

 

More information is available here:

https://academy.creatio.com/docs/user/setup_and_administration/user_and…

Hello

Kalymbet Anastasia,

Please what is your best suggestion on our scenario?

The old users were created manually. We want to import the same users through LDAP. Are the followoing steps a good workaround ?

1- Deactivate liceneses for existing users

4- Proceed to Synchronization with LDAP 

2- Delete old contacts

3- Delete old users

 

 

Show all comments

Hello!

I can change access rights to object in process. But before providing access rights to Document I would like to check whether desired group already has access to record. Is it possible to do it by process?

Like 0

Like

2 comments

Hello Yana,

 

There is a table in the database, where all rights for the object are stored,

unfortunately, you can't read this object by the 'read data' element in the business process.



The table is called SysOjectRight (SysOpportunityRight, SysActivityRight, etc).



But your business task could be achieved by the script-task. 



 

Bogdan,

thanks!

Show all comments

Hi Community,

 

Is there a way to freeze a record - lock all fields and  connected details - based on a condition? For example, if an Order status is set to Completed, all the fields and details connected to order record should be locked. In order to make any change to the record, the status has to be changed from Completed to In Progress and then the record is unlocked. 

Like 0

Like

3 comments

Hello,

 

If you wish to change access rights on a particular stage of the Order, you can simply add a "Change access rights" to its stage:

With it, you can state which roles/users should have their rights set to "read-only".

 

Alternatively, you could create a trigger process that is triggered once the stage of your Order section is changed and then do the same rights delegation as mentioned above with the "Change access rights" element in your business process (I created an example that is based on the stages of the leads section):

Hope it helps!

Best regards,

Artem.

I have an article on how to do that using code on a page here: https://customerfx.com/article/completely-locking-a-page-via-code-inclu…

However, the most reliable way to do this is to use a process and change the access rights of the record(s) - otherwise, they could still be changed in other places, such as the mobile client.

Ryan

Thank Ryan and Artem for the prompt response!

There are webservices that are called from client side when some fields are changed. Even with the permission restriction, these change events will still be triggered when the value is changed although it can not be saved by clicking the save button.

Looks like Ryan's solution is more compatible with the customizations we have in place now. That would help us lock the field giving no provision for the user to change the field value.

However, I do see in academy article (https://academy.creatio.com/docs/developer/interface_elements/interface… ) that setting the value for IsModelItemsEnabled will not lock fields that have "enabled" property defined in diff.

If the field has a binding for the enabled property in the diff array element or the business rule, the mechanism will not lock this field.

Not sure if there is a way to override the diff property other than removing it.

 

Regards,

Nirupama

Show all comments

Hello Creatio Community,

I have an editable list, and I want that one of its columns "Product" be displayed as a link. So that when its clicked it redirects automatically to the Product section.

How can this functionality be achieved ?

Does this involve overriding the addColumnLink: function ?

Thank you,

Petrika

Like 0

Like

2 comments
Best reply

Hi Petrika,



The below code will make the lookup column act as a link as to how it inherits the behaviours during a normal detail.



This is the actual logic to make the lookup a link in the detail Grid (Editable detail).



if (entitySchemaColumn.dataValueType === this.Terrasoft.DataValueType.LOOKUP{

                            config.showValueAsLink = true;

                        }

 

Add this method in your corresponding detail code,

getCellControlsConfig: function(entitySchemaColumn) {
					debugger;
						if (!entitySchemaColumn) {
							return;
						}
						var columnName = entitySchemaColumn.name;
						var enabled = (entitySchemaColumn.usageType !== this.Terrasoft.EntitySchemaColumnUsageType.None) &&
								!this.Ext.Array.contains(this.systemColumns, columnName);
						var config = {
							itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
							name: columnName,
							labelConfig: {visible: false},
							caption: entitySchemaColumn.caption,
							enabled: enabled
						};
						if (columnName === "MyColumn") {
							config.enabled = false;
						}
						if (entitySchemaColumn.dataValueType === this.Terrasoft.DataValueType.LOOKUP{
							config.showValueAsLink = true;
						}
						if (entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.DATE_TIME &&
								entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.BOOLEAN) {
							config.focused = {"bindTo": "Is" + columnName + "Focused"};
						}
						return config;
					},





BR,

Bhoobalan Palanivelu.

Hi Petrika,



The below code will make the lookup column act as a link as to how it inherits the behaviours during a normal detail.



This is the actual logic to make the lookup a link in the detail Grid (Editable detail).



if (entitySchemaColumn.dataValueType === this.Terrasoft.DataValueType.LOOKUP{

                            config.showValueAsLink = true;

                        }

 

Add this method in your corresponding detail code,

getCellControlsConfig: function(entitySchemaColumn) {
					debugger;
						if (!entitySchemaColumn) {
							return;
						}
						var columnName = entitySchemaColumn.name;
						var enabled = (entitySchemaColumn.usageType !== this.Terrasoft.EntitySchemaColumnUsageType.None) &&
								!this.Ext.Array.contains(this.systemColumns, columnName);
						var config = {
							itemType: this.Terrasoft.ViewItemType.MODEL_ITEM,
							name: columnName,
							labelConfig: {visible: false},
							caption: entitySchemaColumn.caption,
							enabled: enabled
						};
						if (columnName === "MyColumn") {
							config.enabled = false;
						}
						if (entitySchemaColumn.dataValueType === this.Terrasoft.DataValueType.LOOKUP{
							config.showValueAsLink = true;
						}
						if (entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.DATE_TIME &&
								entitySchemaColumn.dataValueType !== this.Terrasoft.DataValueType.BOOLEAN) {
							config.focused = {"bindTo": "Is" + columnName + "Focused"};
						}
						return config;
					},





BR,

Bhoobalan Palanivelu.

Thank you Bhoobalan Palanivelu,

 

It works perfectly.

Show all comments

We are running with critical issue with the BPM Sync emails.

The email account password expired and we are trying to reset it.

 

We did reset in the exchange, but when we try to update the new password in BPM the system shows the below message.

"Invalid email or password" 

But we verified by logging in in M365, able to login.

 

 

Like 1

Like

5 comments

Hi Selva,



Microsoft stopped using the "Basic authentication" type for mailbox authorization. Therefore, to solve the issue, It recommends switching to the OAuth authorization type to restore mail synchronization in the application. Microsoft provides the following set up instructions - https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchan…

For the application version 8.0.2 and above the steps are the following:
 
1.  Setup the application in Azure.
2.  Make changes to the mail provider on the Creatio side (change from basic to OAuth and fill in data form Azure side). 
3.  All user mailboxes will require user action to grant permission to continue synchronization.
 
Older versions:
1.  Setup the application in Azure.
2.  Setup the mail provider on the Creatio side (It’s better to create a Copy of the existing mail provider and use it but it’s also possible to change the old one) 
3 .a If it is OK to delete the mailbox and add it with the new mail server – it’s the easiest way and will cause no additional issues. That’s all.
3 .b In case you cannot / don’t want to delete a mailbox and want to adjust it to use the new mail provider then your IT team should do steps 1 and 2 and then contact Creatio support asking to:
-	Update the MailServerId column of the MailboxSyncSettings table with the value of the new/adjusted mail server that can work with Oauth.
-	Run the script: update "MailboxSyncSettings" 
-	set "ErrorCodeId" = '5f906e1c-9521-45df-8e43-82b5109e0e4d' 
-	where "Id" = 'the_Changed_Mailbox'
4.  All user mailboxes will require user action to grant permission to continue synchronization.





BR,

Bhoobalan Palanivelu.

As Bhoobalan mentioned, Microsoft has disabled basic authentication for Office 365 accounts, which means you can no longer use a username & password to log in from other applications (such as Creatio). Instead, you need to create an OAuth app in the Office 365 Azure portal, then use that in Creatio. 

I have an article with screenshots showing how to set up OAuth for using Office 365 in Creatio here: https://customerfx.com/article/setting-up-microsoft-office-365-email-fo…

The account will no longer work in Creatio until you switch it to use OAuth.

Ryan

Bhoobalan Palanivelu,

Thanks for the detailed info, much appreciated !

We are running with the version 7.16, is the changes and steps still same ?

 

Thanks,

Selva

 

Ryan Farley,

 

Thanks for the detailed steps.

 

We followed all the steps as per your link, and then tried to update the new password in Creatio ( where it shows warning message like specify the new password). It gives the same error message.

 

But when I deleted my email account and re-added , it works fine.

 

Do we need to delete all the email accounts ( We have 5 email accounts for renewal, case process) and re-add them ? or do we have any other way to provide permission and make it sync without deleting them ?

 

Please let me know.

 

Thanks,

Selva

 

Selva,

Selva,

 

Yes, The steps are the same for versions below 8 as mentioned.

It's not mandatory to delete the mailbox and re-add them but if it is fine to remove and re-add the mailbox, it's the easiest method to do.



All 5 accounts must be of Office 365 and currently you have updated the OAuth in Creatio following Ryan's article. So you can remove the other mailbox and re-add them and synchronize it.





BR,

Bhoobalan Palanivelu.

Show all comments

I need this button to be on all rows and not on "activeRowActions", and I can't find the right parent.

 

{
	"operation": "insert",
	"parentName": "DataGrid",
	"propertyName": "activeRowActions",
	"name": "MoveQtyButton",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": "Move Qty",
		 "className": "Terrasoft.Button",
         "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
         "tag": "call",
	}
},

 

Like 1

Like

6 comments

Hi Gabriel,



Please find the solutions in the below community threads.

https://community.creatio.com/questions/add-button-datagrid-active-row
https://community.creatio.com/articles/add-button-active-row-detail







BR,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

Thanks for responding, but I had seen these posts before, and they helped me in parts but not for what I need, the two are for activeRow, that is for when they are selected only, and I need them to appear in all rows even if not selected.

Gabriel Cassimiro,



Thanks for the briefing!

In this case, you need a button as a column in the grid.



ContactSectionV2 Grid

define("ContactSectionV2", ["css!UsrContactSectionV2CSS"], function() {
	return {
		entitySchemaName: "Contact",
		attributes: {
			"SelectButtonColumn": {
				"dataValueType": Terrasoft.DataValueType.TEXT,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
			}
		},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			onGridDataLoaded: function(response) {
				this.mixins.GridUtilities.onGridDataLoaded.call(this, response);
				this.addSelectCustomerButton();
			},
			onRender: function() {
				this.callParent(arguments);
				this.addSelectCustomerButton();
			},
			unSelectRow: function(id) {
				this.mixins.ConfigurationGridUtilities.unSelectRow.apply(this, arguments);
				this.addSelectCustomerButton();
			},
			addSelectCustomerButton: function() {
				var baseSelector = "#grid-ContactSectionV2DataGridGrid-wrap div.grid-listed-row div:last-child";
				var selector = baseSelector + ">span";
				var scope = this;
				$(selector).unbind();
				$(baseSelector).html(
					Ext.String.format("<span>{0}</span>", this.get("Resources.Strings.SelectCustomerButtonCaption")));
 
				$(selector).addClass("glb-select-customer-button");
 
				$(selector).click(function() {
					var id = "";
					try {
						id = arguments[0].currentTarget.offsetParent.offsetParent.attributes.id.value.split("item-")[1];
					} catch(e) {}
					if (id) {
						scope.onSelectCustomerButtonClick(id);
					} else {
						this.error("Active row id was not found");
					}
				});
			},
			onSelectCustomerButtonClick: function(id) {
				this.showInformationDialog(id);
			}
		}
	};
});

CSS Module:

.glb-select-customer-button {
	background: #8ecb60;
	color: white;
	padding: 2px 10px;
	border-radius: 3px;
}
 
.glb-select-customer-button:hover {
	background: #74bc48;
	cursor: pointer;
}



Result will be like below,





You need to do the same in your detail schema.





BR,

Bhoobalan Palanivelu.

 

Bhoobalan Palanivelu,

This is fantastic Bhoobalan, thanks for sharing!

Ryan

Bhoobalan Palanivelu,

Thanks, I have a question, because I'm trying to apply in a list of a detail, but I'm not having the same result for when it is a grid of a section, is there something I have to put different or does it work the same way?

Gabriel Cassimiro,



Please be informed to define the value for this label through the localizable string available on your schema page.

this.get("Resources.Strings.SelectCustomerButtonCaption"))

Also, you can check about the CSS and its dependency included in your schema.


 

BR,

Bhoobalan Palanivelu.

Show all comments

I have created a button that will do the same thing as "Export to Excel" and I need to call the same function. But I couldn't identify what the function is, if you can help me with what function to call.

Like 1

Like

1 comments
Best reply

The function is named "exportToExcel" and implemented in BaseDataView. If you add a button to the parentName "Detail" and propertyName "tools", then add the click as: "click": {"bindTo": "exportToExcel"}. It will trigger the export to excel just as if it was selected from the actions menu.

Note, this button would need to be added to the detail schema (not the page). It would look something like this: 

{
	"operation": "insert",
	"parentName": "Detail",
	"propertyName": "tools",
	"name": "ExportToExcelButton",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": "Export to Excel",
		"click": {"bindTo": "exportToExcel"}
	}
}

Ryan

The function is named "exportToExcel" and implemented in BaseDataView. If you add a button to the parentName "Detail" and propertyName "tools", then add the click as: "click": {"bindTo": "exportToExcel"}. It will trigger the export to excel just as if it was selected from the actions menu.

Note, this button would need to be added to the detail schema (not the page). It would look something like this: 

{
	"operation": "insert",
	"parentName": "Detail",
	"propertyName": "tools",
	"name": "ExportToExcelButton",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": "Export to Excel",
		"click": {"bindTo": "exportToExcel"}
	}
}

Ryan

Show all comments

Hello!



how would you suggest to solve the following case:



There is a product with base unit of measure - pieces

There is additional unit of measure - kg. As weight of one piece is 0.6 kg, so Number of base units = 1.667





When I add 60 kg of this product, I would like to see 100 pieces, but rounding issue doesn't give me such possibility





As I cannot switch additional and base units, I see, it is necessary to expand functionality of units conversion - add an option to set 'Number of base units' OR 'Number in base unit'



But maybe you have better suggestions?



Kind regards,

Vladimir

Like 0

Like

1 comments

Hello Vladimir,

 

Thank you for this question. In the OOTB logic it was not expected to have irregular fractured values. As a workaround - using grams may be helpful to avoid the visible issue, or to use custom and specific logic to fulfill your needs.

 

We have noted this request to our Backlog for our Developers. If there will be more customers arriving with the same issue - we will develop and implement this feature in further releases.

 

Best Regards,

Dan

Show all comments

Hello!



How is it better to hide specific columns (from column setup in sections and details) in Partner Portal? 

I see two options now:

- use access rights by columns (columns still present, but are empty)

- deny Portal users to setup columns in sections and details (users still can get some information using filters)



Maybe there are more better options?



Thank you!

Vladimir

Like 0

Like

4 comments
Best reply

Vladimir Sokolov,

 

What you are looking for can be achieved by adding only the columns that you want to show to the Portal users into "List of schema fields for portal access" lookup. As a result those fields won't be available on any of the dropdown list.

 

Regards,

Sourav Kumar Samal

Hi Vladimir,



We recommend hiding specific columns in the Partner Portal by the Section Wizard. 

Hi Bogdan,

we can hide columns only from the page (as far as I know), but these columns are still available in Column setup and filters, that :

1) allows client to see all internal infromation in the Portal

2) makes filter and column setup for them much more difficult (as they see all internal fields in the list)



Vladimir Sokolov,

 

What you are looking for can be achieved by adding only the columns that you want to show to the Portal users into "List of schema fields for portal access" lookup. As a result those fields won't be available on any of the dropdown list.

 

Regards,

Sourav Kumar Samal

Sourav Kumar Samal,

Thank you very much!

Show all comments

Hello,



we need to improve lookup selection for several section. The main idea is to reduce quantity of records for selection, but still give user to search through full list.



We tried to use multiLookup feature to give 2 options: "All products" and "Active products" (like we select Account/Contact in the Order)



 

"UsrProductLookup": {
    "dataValueType": Terrasoft.DataValueType.LOOKUP,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "multiLookupColumns": ["UsrProductA", "UsrProductB"],
    "caption": "Product",
    "onChange": "setProduct"
},
"UsrProductA": {
    "dataValueType": Terrasoft.DataValueType.LOOKUP,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "isLookup": true,
    "referenceSchemaName": "Product"
},
"UsrProductB": {
    "dataValueType": Terrasoft.DataValueType.LOOKUP,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "isLookup": true,
    "referenceSchemaName": "Product"
}

But then got an error, that we cannot use the same object for both lookups. 



message: Item with key "Product" Already exists 

date: Tue Oct 18 2022 02:01:40 GMT+0400 

moduleId: CardModuleV2_02b6b083-3cfa-4daf-a93c-632cb2420805_AccountPageV2_LookupPage

moduleName: MultiLookupModule



How is it possible to use multiLookup for this purpose? 

Or what alternative is for user-friendly quick filter in Lookup window?



Thank you.

Vladimir

Like 0

Like

4 comments

Hello Vladimir,



Please find the information about up filtering of lookup field values on a record page in this article

 

Bogdan,

thank you for link to Creatio basics.



But combination of quick filters (tabs in this case) gives possibility to search by second condition - by product name.



If you use search in lookup for one criteria (e.g. Inactive), you cannot search by another criteria - name. 

Besides, search in lookup requires much more actions (more than 4 clicks) comparing to 1 click in quick filter



That's why we are searching for smart solution



Kind regards,

Vladimir

Vladimir Sokolov,

 

We recommend creating a business rule on the page depending on a particular checkbox: if the checkbox is activated, then display the field in which the code filtering is implemented, if deactivated - hide the column with filtering in the code and show the column without filtering on the page.

 

You might need two columns so that you control the visibility of one depending on a particular checkbox. It can be achieved by using a business rule. 

 

Please try using the filters described in the article above for one column, and for the other one - do not apply the filters from the code (so that all Lookup records are displayed). This way, you may not use code elements as you just implement the business rule - filtering on the page.

Alla Blinova,

Thank you. Yes, we use solution with field and business rules, but customer should open lookup, search, then close lookup, change checkbox, open lookup again... 



Sometimes it can be acceptable, sometimes not. That's why we are looking for better option - to allow user change lookup filtration directly in lookup window. It can be a checkbox in lookup window or several predefined tabs. Maybe it sounds like an idea for future versions, maybe it is possible implement with current one



Kind regards,

Vladimir

Show all comments