Hello, colleagues.

 

Im using swagger api on 

*:81/api/index.html 

to configure global search services.

 

My actions:

  • Launch all required docker containers according with documentation
  • Registered a 'my_precious' site name with the parameters 

    {"databaseType": "mssql", "databaseConnectionString": "Server=DB_SERVER_IP; Database=DATABASE; User Id=USERNAME; Password=PASSWORD; Connection Timeout=10; TrustServerCertificate=true"}
  • Created an index with the parameters 

    {"templateName": "ngram_3.json"}

     

Configured the system settings according to the academy instructions:

  • Executed an SQL query to activate the global search feature
  • Filled three system settings with url's :81, :82, and :83/indexname

     

Port 1433 (SQL) on the CRM database server is open.

 

When checking the status of the global search using 

*:81/sites/my_precious/search/state

, I receive the following error: 

Failed to check state for the 'my_precious' site: Internal connection fatal error.

I have checked the logs of all Docker containers related to the global search and haven't found anything similar to this error.

What does this error indicate, and where can I find a more detailed description of it?

 

And no, global search isn't working.

Like 0

Like

1 comments

Hello

1. I suggest performing a check using the Swagger interface:

  1. Follow this link:

    http://GS_server_address:81/api/index.html
     

Where GS_server_address is the address of the server hosting the global search services. Locate the command /sites/my_site_name/search/state

Essentially, this is the same check but through a more user-friendly interface.
 

  1. 2. Additionally, I noticed that the connection string uses PostgreSQL server flags (Server/Database). I suggest trying the following format, which is more typical for MSSQL:

 

"Data Source=server\\Instance;Initial Catalog=DB;User ID=*****;Password=*****"  

 

or

 

"Data Source=ip;Initial Catalog=DB;User ID=*****;Password=*****" 

 


  1. 3. I also recommend verifying that the database server and the database itself support external connections. You can refer to this guide:

    https://www.apesoftware.com/calibration-control/help/sql-remote-connections
Show all comments

Hi Community,

I’m trying to set up global search using Docker, following the documentation. However, when I attempt to run the containers for the global search service components (see image below)

 

I encounter the following error:

 

Does anyone know what might be causing this error and how to resolve it?

Thank you!

Like 0

Like

0 comments
Show all comments

Hello,

 

is it possible to include Feed into global search results?

And/Or filter records by Feed in Section?

 

Thank you.

Vladimir

Like 1

Like

1 comments

Hello!

 

Regarding your first question, please note that at the moment, the feed is not indexed in the global search (the columns 'Message' of the 'CaseMessageHistory' object and the 'Message' of the 'SocialMessage' object). It is not possible to enable the feed in the global search in the current system configuration.

We have received similar inquiries in the past, and a development team has already registered a task to add this functionality. I have attached your request to the task to increase its priority. We will plan how to address this task and strive to develop a suitable mechanism, which will be presented in future Creatio releases.

Regarding your second question, unfortunately, it is impossible since we don't have direct connections between the record and Feed.


Best regards,

Mariia

Show all comments

Hello community, 

 

I have received feedback from users that global search "What can I do for you?" (upper right corner search box) is not showing less result. few weeks back it was showing more results. Is there any updates happened from creatio side or any setting needs to be turned on? 

 

Thanks

Like 0

Like

1 comments

Hello,
 

Thank you for your question. We see that you have already contacted the support team and we have successfully solved your problem.
 

Have a nice day!

Show all comments

We are trying to deploy Global Search service in kubernetes environment but globalsearch-web-indexing-service is failing in CrashLoopBackOff. Do we need repository access to set up the current version of the global search service?

If yes, how can we achieve that. Do we need separate license for it?



We are following the documentation https://academy.creatio.com/docs/8-0/user/on_site_deployment/containerized_components/global_search_shortcut/global_search

 

 

Like 0

Like

2 comments

Hi,

 

I asked Creatio's support and they provided access to their repository.

 

BR,

Robert

Hi Sabin,

 

as for now, you need to contact the Creatio Support team in order to get access to the files for the services such as Global search.

Please, don't hesitate to send an email to support@creatio.com.

 

Regards,

Gleb.

Show all comments

Hi Team,



How does this merge records will work?



There are dplicate record in a section and this "Merge Record" menu option is disabled. Bulk duplicate search service installed.



If "Show duplicate Account" duplicate rule is ran, it shows the list and the merge works and generally if a duplicate record is searched in filter and if there are multiple entries, after selecting all duplicate entries, this merge record menu option is disabled.

 

 

Besr regards,

Bhoobalan Palanivelu.

Like 1

Like

4 comments

"Merge records" on the actions menu should become enabled when you select more than one record in the list (as long as the user also has the "Duplicates processing" (CanMergeDuplicates) operation permission). Could it be that the user account doesn't have this permission?

Ryan

Ryan Farley,

Thanks for the note!



1. Here more than one duplicated record is selected

2. The logged-in user is the supervisor and has the "Duplicates processing" (CanMergeDuplicates) operation permission). 

 

Note:

If a record is filtered and multiple entries (i.e., duplicates) are selected this merge record is disabled. If multiple records in a section are selected without applying any filters in the section filter (OOTB filter option --: "Merge Record" option is enabled).

 

 

Best regards,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

I looked at the code for the merge button, it looks like it sets visible based on if the user has the permission or not, not the enabled property. For the menu item to be enabled, it looks like it just uses the "isAnySelected" to determine if any records are selected in the list (isAnySelected is implemented in GridUtilitiesV2 mixin). 

Apparently, that is returning false for your section. Do you have any console errors showing when using that section?

Ryan

Ryan Farley,



No console errors for the section.

Now it works. But haven't changed any operation permission or configuration.



Thanks for the insight !

It seems the property enabled/disabled is based on  "isAnySelected"  attribute and the operation permission read from "SysAdminOperation" which defines the access right.



could you please help with the module that has this Merge menu code? 

 

 



Best regards,

Bhoobalan Palanivelu.

 

Show all comments

Hi Team,



We are able to update the global search result for a few of the OOTB object schemas by replacing the corresponding module such as AccountSearchRowSchema and for contacts - ContactSearchRowSchema.



a)OOTB object schema,

Contact, Account



https://community.creatio.com/questions/modify-global-search-result



b)I couldn't find any schema as BankCardSearchRowSchema for the OOTB object

BankCard.  How to get this XSearchrowSchema generated?

No details on BankCardSchema



Please note the indexing for the object BankCard is enabled and the results are retrieved but wanted to update the result for this object. Unable to find 

 



Any help would be greatly appreciated!





Best Regards,

Bhoobalan P.

Like 0

Like

13 comments
Best reply

Hi Bhoobalan,

 

You can track if the global search results for the section uses its own SearchRowSchema or the BaseSearchRowSchema using the query below (MS SQL):

SELECT
	sme.Id, sme.ActionKindName, ss.[Name], ss.[UId]
FROM 
	SysModuleEdit sme
JOIN 
	SysSchema ss
ON
	sme.SearchRowSchemaUId = ss.UId
WHERE
	sme.SearchRowSchemaUId IS NOT NULL

But you can create a custom SearchRowSchema module for some section that doesn't have its own SearchRowSchema. The example below is for Documents section that also doesn't have its own SearchRowSchema module.

 

Here is the screenshot of the base result that the Global Search returns when searching a document:

Let's say we want to add the "Status" column to the search result (the one from the screenshot below):

To achieve this:

 

1) Create the "Page view model" in configurations with "UsrDocumentSearchRowSchema" code, "Document search row" name and select BaseSearchRowSchema as a parent:

2) Specify the following code in this schema:

define("UsrDocumentSearchRowSchema", [], function() {
	return {
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"parentName": "DataContainer",
				"propertyName": "items",
				"name": "State",
				"values": {
					"layout": {
						"column": 4,
						"row": 0,
						"colSpan": 12
					}
				}
			}
		]/**SCHEMA_DIFF*/
	};
});

and save the schema.

 

3) Find the SysModuleEdit record related to the Documents section (for example using the query below):

SELECT
	*
FROM
	SysModuleEdit
WHERE 
	ActionKindName = 'Document'

and then update the value for the "SearchRowSchemaUId" column in this record:

UPDATE 
	SysModuleEdit
SET 
	SearchRowSchemaUId = '63388eba-74f2-4bc4-85f2-e6c326adb3e5'
WHERE
	Id
IN
	(
		SELECT 
			Id
		FROM 
			SysModuleEdit
		WHERE
			ActionKindName = 'Document'
	)

4) Refresh the page and check the result. The "Status" column should appear in the SearchRowSchema for documents:

Same operation can be performed to any section needed.

 

Best regards,

Oscar

Hi Bhoobalan,

 

You can track if the global search results for the section uses its own SearchRowSchema or the BaseSearchRowSchema using the query below (MS SQL):

SELECT
	sme.Id, sme.ActionKindName, ss.[Name], ss.[UId]
FROM 
	SysModuleEdit sme
JOIN 
	SysSchema ss
ON
	sme.SearchRowSchemaUId = ss.UId
WHERE
	sme.SearchRowSchemaUId IS NOT NULL

But you can create a custom SearchRowSchema module for some section that doesn't have its own SearchRowSchema. The example below is for Documents section that also doesn't have its own SearchRowSchema module.

 

Here is the screenshot of the base result that the Global Search returns when searching a document:

Let's say we want to add the "Status" column to the search result (the one from the screenshot below):

To achieve this:

 

1) Create the "Page view model" in configurations with "UsrDocumentSearchRowSchema" code, "Document search row" name and select BaseSearchRowSchema as a parent:

2) Specify the following code in this schema:

define("UsrDocumentSearchRowSchema", [], function() {
	return {
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"parentName": "DataContainer",
				"propertyName": "items",
				"name": "State",
				"values": {
					"layout": {
						"column": 4,
						"row": 0,
						"colSpan": 12
					}
				}
			}
		]/**SCHEMA_DIFF*/
	};
});

and save the schema.

 

3) Find the SysModuleEdit record related to the Documents section (for example using the query below):

SELECT
	*
FROM
	SysModuleEdit
WHERE 
	ActionKindName = 'Document'

and then update the value for the "SearchRowSchemaUId" column in this record:

UPDATE 
	SysModuleEdit
SET 
	SearchRowSchemaUId = '63388eba-74f2-4bc4-85f2-e6c326adb3e5'
WHERE
	Id
IN
	(
		SELECT 
			Id
		FROM 
			SysModuleEdit
		WHERE
			ActionKindName = 'Document'
	)

4) Refresh the page and check the result. The "Status" column should appear in the SearchRowSchema for documents:

Same operation can be performed to any section needed.

 

Best regards,

Oscar

Oscar Dylan,

 

This is informative and thanks for sharing the steps!



I have an issue,



By default, the card search is working for the BankCard object in the customer journey bundle but one of the values shows as (not filled in)



a) Bound values not shown



b) When clicked on (not filled in) it opens the record and the top left label is filled in as depicted below,





I have ran the re-indexation, but still the value is not shown in UI.



Any help would be higly appreciated!







Best Regards,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

 

Please send a complete code of the SearchRowSchema of the BankCard schema.

 

Best regards,

Oscar

Oscar Dylan,

Thanks for the quick response!



Unfortunately, there is no SearchRowSchema of the BankCard schema.



I have enabled the indexed in BankCard section and the result appears but there is no trace for "SearchRowSchema".

 



Also, I ran the query to track the schema of Global search below is the result

 

Attaching the "BaseSearchRowSchema" of Customer journey bundle,

define("BaseSearchRowSchema", ["NetworkUtilities", "ConfigurationEnums", "EmailHelper", "GlobalSearchViewGenerator",
	"MiniPageUtilities"], function(NetworkUtilities, ConfigurationEnums, EmailHelper) {
	return {
		hideEmptyModelItems: true,
		attributes: {
			/**
			 * Schema view config.
			 */
			"ViewConfig": {
				dataValueType: Terrasoft.DataValueType.CUSTOM_OBJECT
			},
			/**
			 * Array of found column names.
			 */
			"FoundColumnsCollection": {
				dataValueType: this.Terrasoft.DataValueType.COLLECTION
			},
			/**
			 * Entity schema caption.
			 */
			"EntitySchemaCaption": {
				"dataValueType": Terrasoft.DataValueType.TEXT,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
			},
			/**
			 * Primary column url value.
			 */
			"PrimaryColumnURL": {
				"dataValueType": Terrasoft.DataValueType.TEXT
			}
		},
		mixins: {
			MiniPageUtilities: "Terrasoft.MiniPageUtilities"
		},
		methods: {
 
			/**
			 * Returns state object module id for edit page.
			 * @private
			 */
			_getStateObjModuleId: function() {
				return Ext.String.format("{0}_{1}_{2}", this.sandbox.id,
					this.entitySchemaName, this.get(this.primaryColumnName));
			},
 
			/**
			 * @private
			 */
			_initTypedColumnValue: function (callback, scope) {
				const typeColumnName = this.get("TypeColumnName");
				if (typeColumnName && !this.get(typeColumnName)) {
					NetworkUtilities.getAttributeValueByRecordId({
						entitySchemaName: this.entitySchemaName,
						entityId: this.get(this.primaryColumnName),
						attribute: typeColumnName
					}, function(typedValue) {
						this.set(typeColumnName, { value: typedValue });
						Ext.callback(callback, scope);
					}, this);
				} else {
					Ext.callback(callback, scope);
				}
			},
 
			/**
			 * @inheritdoc Terrasoft.BaseSchemaViewModel#init
			 * @overridden
			 */
			init: function(callback, scope) {
				const parentMethod = this.getParentMethod();
				Terrasoft.chain(
					function(next) {
						parentMethod.call(this, next, this);
					},
					this._initTypedColumnValue,
					function() {
						this.initEditPages();
						this.initMultiLookup();
						this.initAttributeValues();
						Ext.callback(callback, scope);
					}, this
				);
			},
 
			/**
			 * Fills lookup field.
			 * @param {String} name Entity schema name
			 * @param {String} value Entity value.
			 * @param {Function} callback Callback-function.
			 * @param {Object} scope Execution context.
			 */
			loadLookupDisplayValue: Terrasoft.emptyFn,
 
			/**
			 * @inheritdoc Terrasoft.BaseSchemaViewModel#sendGoogleTagManagerData
			 * @overridden
			 */
			sendGoogleTagManagerData: Terrasoft.emptyFn,
 
			/**
			 * Initializes viewmodel attributes.
			 * @protected
			 */
			initAttributeValues: function() {
				this.initSchemaCaption();
				this.set("PrimaryColumnURL", this.getPrimaryColumnURL());
			},
 
			/**
			 * Initializes entity schema caption.
			 */
			initSchemaCaption: function() {
				this.set("EntitySchemaCaption", this.entitySchema && this.entitySchema.caption || "");
			},
 
			/**
			 * Returns eintity image url or section logo url or default image url.
			 * @protected
			 * @return {String} Image url.
			 */
			getImage: function() {
				var primaryImageColumnValue = this.get(this.primaryImageColumnName);
				if (primaryImageColumnValue && primaryImageColumnValue.value) {
					return this.getSchemaImageUrl(primaryImageColumnValue);
				}
				var moduleStructure = this.getModuleStructure(this.entitySchemaName);
				if (moduleStructure && moduleStructure.logoId) {
					return this.Terrasoft.ImageUrlBuilder.getUrl({
						source: Terrasoft.ImageSources.SYS_IMAGE,
						params: {
							primaryColumnValue: moduleStructure.logoId
						}
					});
				}
				return this.getDefaultImage();
			},
 
			/**
			 * Returns default image url.
			 * @protected
			 * @return {String} Default image url.
			 */
			getDefaultImage: function() {
				return this.Terrasoft.ImageUrlBuilder.getUrl(this.get("Resources.Images.DefaultSearchImage"));
			},
 
			/**
			 * Returns primary display column value.
			 * @protected
			 * @returns {String} Primary display column value.
			 */
			getPrimaryDisplayColumnValue: function() {
				var notFilledValue = this.get("Resources.Strings.NotFilled");
				if (this.primaryDisplayColumnName) {
					return this.get(this.primaryDisplayColumnName) || notFilledValue;
				}
				return notFilledValue;
			},
 
			/**
			 * Returns primary display column caption.
			 * @protected
			 * @returns {String} Primary display column caption.
			 */
			getPrimaryDisplayColumnCaption: function() {
				if (this.primaryDisplayColumnName) {
					var primaryColumn =  this.columns[this.primaryDisplayColumnName];
					return primaryColumn.caption;
				}
				return "";
			},
 
			/**
			 * Returns found column items view config.
			 * @private
			 * @return {Array} Found column items view config.
			 */
			getFoundColumnItemsConfig: function() {
				var columnNames = this.getAdditionalColumnNames();
				var items = [];
				Terrasoft.each(columnNames, function(columnName) {
					var columnContainer = {
						"id": columnName + "Container",
						"className": "Terrasoft.Container",
						"items": []
					};
					var column = this.getColumnByName(columnName) || this.get(columnName);
					var caption = column && column.caption || columnName;
					var value = this.get(columnName);
					if (this.isNotEmpty(value)) {
						columnContainer.items.push({
							"className": "Terrasoft.Label",
							"classes": {"labelClass": ["found-column-caption"]},
							"caption": caption
						});
						columnContainer.items.push({
							"className": "Terrasoft.Label",
							"classes": {"labelClass": ["found-column-value"]},
							"caption": value.displayValue || value,
							"highlightText": this.getHighlightText(columnName)
						});
						items.push(columnContainer);
					}
				}, this);
				return items;
			},
 
			/**
			 * Returns found columns.
			 * @private
			 * @return {Object} Found columns array.
			 */
			getFoundColumns: function() {
				var foundColumnsCollection = this.get("FoundColumnsCollection");
				return foundColumnsCollection.getByIndex(0).get("FoundColumns");
			},
 
			/**
			 * Returns additional column names for view searcg result.
			 * Gets not showed found column names.
			 * @private
			 * @return {String[]} Not showed found column names.
			 */
			getAdditionalColumnNames: function() {
				var bindMap = this.getBindMap();
				var bindMapKeys = bindMap ? bindMap.getKeys() : [];
				var foundColumns = this.getFoundColumns();
				var additionalColumnNames = [];
				Terrasoft.each(foundColumns, function(item, columnName) {
					if(!(Ext.Array.contains(bindMapKeys, columnName)
							|| this.primaryDisplayColumnName === columnName)) {
						additionalColumnNames.push(columnName);
					}
				}, this);
				return additionalColumnNames;
			},
 
			/**
			 * Generates configuration of the element view.
			 * @protected
			 * @param {Object} itemConfig Link to the configuration element of ContainerList.
			 */
			onGetItemConfig: function(itemConfig) {
				var viewConfig = {
					"id": "foundColumns",
					"className": "Terrasoft.Container",
					"classes": {"wrapClassName": ["found-columns-list"]},
					"items": []
				};
				viewConfig.items = this.getFoundColumnItemsConfig();
				itemConfig.config = viewConfig;
			},
 
			/**
			 * Returns not showed columns container visibility.
			 * @protected
			 * @return {Boolean} Not showed columns container visibility.
			 */
			isFoundColumnsVisible: function() {
				var notShowedFoundColumns = this.getAdditionalColumnNames();
				return notShowedFoundColumns.length > 0;
			},
 
			/**
			 * Returns primary column link url.
			 * @protected
			 * @return {String} Primary column link url.
			 */
			getPrimaryColumnURL: function() {
				return Ext.String.format("ViewModule.aspx#{0}", NetworkUtilities.getEntityUrl(this.entitySchemaName,
						this.get(this.primaryColumnName), this.getTypeColumnValue(this)));
			},
 
			/**
			 * Handler on primary column link mouse over.
			 * @protected
			 */
			onPrimaryColumnMouseOver: function(options) {
				this.openMiniPage({
					targetId: options.targetId,
					entitySchemaName: this.entitySchemaName,
					recordId: this.get(this.primaryColumnName)
				});
			},
 
			/**
			 * Handler on primary column link click.
			 * @protected
			 * @return {Boolean} False.
			 */
			onPrimaryColumnLinkClick: function() {
				var typedColumnValue = this.getTypeColumnValue(this);
				NetworkUtilities.openEntityPage({
					entityId: this.get(this.primaryColumnName),
					entitySchemaName: this.entitySchemaName,
					typeId: typedColumnValue,
					sandbox: this.sandbox,
					stateObj: {
						moduleId: this._getStateObjModuleId()
					}
				});
				return false;
			},
 
			/**
			 * @overridden
			 * @inheritdoc Terrasoft.BaseSchemaViewModel#onLinkClick
			 */
			onLinkClick: function(url, columnName) {
				this.updateColumnReferenceSchemaByMultiLookupValue(columnName);
				var column = this.getColumnByName(columnName);
				var columnValue = this.get(columnName);
				var entityId = columnValue && columnValue.value;
				if (!column || !entityId) {
					return true;
				}
				NetworkUtilities.openEntityPage({
					entityId: entityId,
					entitySchemaName: column.referenceSchemaName,
					sandbox: this.sandbox,
					stateObj: {
						moduleId: this._getStateObjModuleId()
					}
				});
				return false;
			},
 
			/**
			 * Returns found column text for highlight.
			 * @private
			 * @param {String} columnName Column name.
			 * @return {String[]} Found column text array.
			 */
			getHighlightText: function(columnName) {
				var highlightTextArray = [];
				var foundColumns = this.getFoundColumns();
				if (columnName === "PrimaryColumn") {
					columnName = this.primaryDisplayColumnName;
				}
				Terrasoft.each(foundColumns, function(item, foundColumnName) {
					if (foundColumnName === columnName) {
						highlightTextArray = item;
					}
				}, this);
				return highlightTextArray;
			},
 
			/**
			 * Returns email url.
			 * @protected
			 * @param {String} columnName Column name.
			 * @return {String} Email url.
			 */
			getEmailUrl: function(columnName) {
				return EmailHelper.getEmailUrl(this.get(columnName));
			},
 
			/**
			 * Open browser mailto.
			 * @param {HTMLElement} target Target element.
			 * @param {String} columnName Email column name.
			 */
			onEmailUrlClick: function(target, columnName) {
				location.href = EmailHelper.getEmailUrl(this.get(columnName));
			},
 
			/**
			 * @overridden
			 * @inheritdoc Terrasoft.BaseSchemaViewModel#getLinkConfig
			 */
			getLinkConfig: function(columnName) {
				var config = this.callParent(arguments);
				var lookupLinkConfig = this.getLookupLinkConfig(columnName);
				this.Ext.apply(config, lookupLinkConfig);
				return config;
			},
 
			/**
			 * Gets lookup link config for open card.
			 * @private
			 * @param {String} columnName Column name.
			 * @return {Object} {schemaName: String} lookup link config for open card.
			 */
			getLookupLinkConfig: function(columnName) {
				var column = this.getColumnByName(columnName);
				var columnValue = this.get(columnName);
				if (column && this.isNotEmpty(column.multiLookupColumns)) {
					var multiLookupColumn = this.getColumnByName(columnValue.column);
					var referenceSchemaName = multiLookupColumn.referenceSchemaName;
					var schemaName = this.getCardSchemaName(referenceSchemaName, multiLookupColumn.name);
					return {schemaName: schemaName};
				}
				return {};
			}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "PrimaryImage",
				"propertyName": "items",
				"values": {
					"getSrcMethod": "getImage",
					"readonly": true,
					"onImageClick": {bindTo: "onPrimaryColumnLinkClick"},
					"generator": "ImageCustomGeneratorV2.generateSimpleCustomImage"
				}
			},
			{
				"operation": "insert",
				"name": "DataContainer",
				"propertyName": "items",
				"values": {
					"isViewMode": true,
					"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
					"items": [],
					"collapseEmptyRow": true
				}
			},
			{
				"operation": "insert",
				"name": "PrimaryColumnContainer",
				"parentName": "DataContainer",
				"propertyName": "items",
				"values": {
					"itemType": Terrasoft.ViewItemType.CONTAINER,
					"classes": {
						"wrapClassName": ["primary-column-container", "control-width-15"]
					},
					"items": [],
					"layout": {
						"column": 0,
						"row": 0,
						"colSpan": 12
					}
				}
			},
			{
				"operation": "insert",
				"name": "PrimaryColumnCaption",
				"parentName": "PrimaryColumnContainer",
				"propertyName": "items",
				"values": {
					"itemType": Terrasoft.ViewItemType.LABEL,
					"caption": {"bindTo": "getPrimaryDisplayColumnCaption"},
					"classes": {
						"labelClass": ["primary-column-caption"]
					}
				}
			},
			{
				"operation": "insert",
				"name": "PrimaryColumnValue",
				"parentName": "PrimaryColumnContainer",
				"propertyName": "items",
				"values": {
					"itemType": Terrasoft.ViewItemType.HYPERLINK,
					"classes": {"hyperlinkClass": ["primary-column-link"]},
					"caption": {"bindTo": "getPrimaryDisplayColumnValue"},
					"click": {"bindTo": "onPrimaryColumnLinkClick"},
					"linkMouseOver": {"bindTo": "onPrimaryColumnMouseOver"},
					"href": {"bindTo": "PrimaryColumnURL"},
					"tag": "PrimaryColumn",
					"highlightText": { bindTo: "getHighlightText" }
				}
			},
			{
				"operation": "insert",
				"name": "EntitySchemaCaption",
				"parentName": "DataContainer",
				"propertyName": "items",
				"values": {
					"caption": {"bindTo": "Resources.Strings.EntitySchemaLabelCaption"},
					"layout": {
						"column": 12,
						"row": 0,
						"colSpan": 6
					}
				}
			},
			{
				"operation": "insert",
				"name": "FoundColumnsContainerList",
				"propertyName": "items",
				"parentName": "DataContainer",
				"values": {
					"layout": {
						"column": 0,
						"row": 1,
						"colSpan": 12
					},
					"itemType": Terrasoft.ViewItemType.CONTAINER,
					"generator": "ContainerListGenerator.generateGrid",
					"collection": {"bindTo": "FoundColumnsCollection"},
					"onGetItemConfig": {"bindTo": "onGetItemConfig"},
					"visible": {"bindTo": "isFoundColumnsVisible"},
					"selectableRowCss": "",
					"items": []
				}
			}
		]/**SCHEMA_DIFF*/
	};
});

 

 

Any insight or help is highly appreciated!





Best Regards,

Bhoobalan Planivelu.

Bhoobalan Palanivelu,

 

Thank you!

 

I understood that you've created the SearchRowSchema for the BankCard and asked to share its code.

 

I will try to implement the same on my side and see what happens.

 

Best regards,

Oscar

Oscar Dylan,

Thanks, please let me know the results once you have a successful implementation.



I enabled the index in the section page of BankCard but no SearchRowSchema is found for it.

 

Oscar Dylan,

Any update on this part, please?



Best regards,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

 

Hi,

 

I am sorry, but I don't need the BaseSearchRowSchema from your app (I do also have access to the BaseSearchRowSchema module from the bank bundle app), I need your custom SearchRowSchema code for the BankCard schema.

 

Best regards,

Oscar

Oscar Dylan,

That is the catch here, I couldn't find any SearchRowSchema for BankCardSchema. That is what I have shared in previous comments.



1. The SQL query doesn't return the BankCardSchema

2. There is no SearchRowSchema for BankCard.

3. All I did is open the Bank Card section and enable the Indexing by clicking the check box Indexing for full-text search.



The results appear and it doesn't have any X-SearchRowSchema and at the same time it shows (not filled in).



Best Regards,

Bhoobalan Palanivelu.

Oscar Dylan,

Any help/update on this?



Best regards,

Bhoobalan PAlanivelu

Bhoobalan Palanivelu,

 

Please read my post with the instruction carefully. I've asked to create a replacing view module using the BaseSearchRowSchema as a parent and then connect it to the SysModuleEdit record of your section using the SearchRowSchemaUId column (and provided an example with the Documents section that also don't have its own SearchRowSchema).

Oscar Dylan,

I have followed the same steps as suggested and there needs a little update.



Step 1: Find the target object for GS result update (Here, it is BankCard)

Step 2: Create the "Page view model" in configurations with "CTZBanCardSearchRowSchema" code, "BankCard search row" name and select BaseSearchRowSchema as a parent

Step 3: Update the design of the schema and save.

Step 4: Find the SysModuleEdit record related to the BankCard section (for example using the query below):

SELECT
	*
FROM
	SysModuleEdit
WHERE 
	ActionKindName = 'BankCard'

Step 5: update the value for the "SearchRowSchemaUId" column in the target objects record.

UPDATE 
	SysModuleEdit
SET 
	SearchRowSchemaUId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
WHERE
	Id
IN
	(
		SELECT 
			Id
		FROM 
			SysModuleEdit
		WHERE
			ActionKindName = 'BankCard'
	)



**Note: This Column's "SearchRowSchemaUId" value should be the UID of the newly created Page view model performed in Step 2.



UID can be obtained by using the below query,

select Id, UId, Name from SysSchema 
where 
Name like ('%CTZBanCardSearchRowSchema%')



Thanks for the guide!





Best regards,

Bhoobalan Palanivelu

 

Interesting.

Will this work for Details as well, if we make a SearchRowSchema? 

Show all comments

Hello,

 

I'm currently dealing with an issue similar to the one outlined in this post:

https://community.creatio.com/questions/searching-user-fields

 

I have been able to confirm that checking the "Indexed" box on a custom field will allow me to search on that column in the global search. However, the column that I actually need to be able to search is an Unlimited length text field. When I attempt to publish the entity, I receive the following error:

 

I believe the reason for this error is that it's attempting to add the new index to some table using the above stored procedure, but the index wasn't created due to the size constraints on non-clustered indexes outlined at the Microsoft link below. It's a fairly large page and the relevant part is this: "The maximum allowable size of the combined index values is 900 bytes for a clustered index, or 1,700 for a non-clustered index"

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-index-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15

 

Is there a way to index an unlimited length text field in the global search results?

Or can I bypass having to create an index on the field but still have the Elastic Search pick it up?

 

Thanks.

Like 0

Like

1 comments

Hello Daniel,

 

We have received a reply from our R&D that indexing unlimited length text fields by checking the 'indexed' box will not work. To do this you will need to do the following:



1. Add a column

2. Compile the appllication

3. Run the following script in the browser console under the Supervisor user:

require(["ServiceHelper"], (ServiceHelper) => { ServiceHelper.callService("IndexingConfigService", "SendIndexationConfigs"); });



Then create a new record and after some time the record will be indexed by the created column.

 

Best regards,

Max.

Show all comments

On the LEAD object, we have a user field ("UsrSecondaryPhone") and it is not indexing via Global Search (or at least no values in this field result in search results in a global search).  I have made sure that the section is marked for Index for Global Search (check box is checked).  How do I get this and other user fields to index via global search?

Like 0

Like

4 comments

Hello,

 

It is also necessary to mark the necessary column attribute Indexed as true. After that the column data will be available in the search list.

If it is still not found by the global search, I suggest to contact the support team via support@creatio.com to have a closer look at your object settings.

 

Regards,

Dean

Thank you for the reply.  I see how to do this when adding a new column.  But in this case, I have a user column that was previously added and I cannot find how to edit the column to check this box.

Hello,

 

Here it is:

 

 

Regards,

Dean

Dean,  Thanks again.  I've tried that.  I can follow these steps in our DEV environment and I can check the box in DEV, however, in our production environment, I cannot make the same change (and I've tried several instances of the LEAD object.  We made the changes to add user columns in our DEV environment, then exported a package and imported it into our production environment.  Now, I want to make this change for indexing purposes in production, but I am unable to make changes on the column.  Any ideas?

Show all comments

Hello, is it possible to have the global search include records from custom sections I've created? It appears to only search ootb sections. 

Like 0

Like

9 comments

You can try enabling the indexing for full text search option in section wizard.  https://academy.creatio.com/docs/user/no-code_customization/ui_and_busi…

Can that only be done upon initial setup? I set this custom section up a year ago and now if I go to the section wizard I don't see that option.

 

Dear Mitch, 



Can you please check SysModule table and make sure that for this section value of "GlobalSearchAvailable" column is set to 1? 



Kind regards,

Roman

Roman Brown,

 It was not set to 1, I updated the column so it was now 1. But still, this section does not show up in the global search.

Dear Mitch, 



Please contact our support team at support@creatio.com with a short description of the issue or simply provide a link to this post so we could help you with it. 



Kind regards,

Roman

Will this work for detail columns also ?

Dear Shailey, 



Can you please provide more details on your question?



Kind regards,

Roman

Hello,

 

same questions:

 

1. Custom section is set up as indexing for full-text search but I dont see in a result window.

2. Enabling section for fulltext search: would it find the details records aswell. For example if I search for product name, it find me all orders where that product in placed. Will it work for custom section as well with products detail?

Dmytro Oliinyk,


Did you manage to make it work? I'm curious about this too.

 

Show all comments