Filtering
LookupFilter
look up filters
Filters
filter
quick-filter
Sales_Creatio

How to filtering lookup with static filter that i have 1 object that is relation to contact and account, and i want to filter if the account is has been added to the object then the account not display in the lookup

Like 2

Like

1 comments

The necessary filtering can be implemented in section page source code. In order to do that you will have to write the handler for crt.LoadDataRequest request that appears when the lookup is opened.

Here is the example of the implementation:
 

/**SCHEMA_MODEL_CONFIG_DIFF*/,
	handlers: /**SCHEMA_HANDLERS*/[
		{
			request: "crt.LoadDataRequest",
			handler: async (request, next) => { 
				if(request.dataSourceName !== "PDS_UsrDoctor_sm2qg7w_List_DS") {
					return await next?.handle(request);
				}
				console.log('Lookup Load Data...');
				const cardModel = await sdk.Model.create("UsrHospitalVisitCardV3");
 
				// now load the records and provide the filters             
				const cards = await cardModel.load({
					attributes: ["UsrDoctor"]
				});
				console.log(cards);
 
				if (cards) {
					const filter = new sdk.FilterGroup();
					filter.logicalOperation = sdk.LogicalOperatorType.Or;
					cards.forEach(async (card) => {
						if(card.UsrDoctor && card.UsrDoctor.value){
							await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Id", card.UsrDoctor.value);
						}
					});
 
					// note, these lines are only needed due to an issue with filters in Creatio-DevKit SDK
					// expected to be fixed in Creatio 8.1
					const newFilter = Object.assign({}, filter);
					newFilter.items = filter.items;
 
					request.parameters.push({
						type: "filter",
						value: newFilter
					});
				}
 
				return await next?.handle(request);
			}
		}
	]/**SCHEMA_HANDLERS*/

 
In the example above "PDS_UsrDoctor_sm2qg7w_List_DS" is the name of the lookup that has to be filtered and "UsrHospitalVisitCardV3" is the object that contains that lookup and which records we should check.

You can also find some additional details and useful information in the articles:
https://customerfx.com/article/dynamically-filtering-a-lookup-on-a-creatio-freedom-ui-page/
https://customerfx.com/article/querying-data-using-filter-conditions-via-the-model-class-equivalent-to-enityschemaquery-in-a-creatio-freedom-ui-page/

Show all comments
Filtering
look up filters
lookup
FreedomUI
minipage
Studio_Creatio
8.0

Hello creatio community,

 

I am trying to apply a filter into cases mini page which is developed using freedom ui screens. Code as below:

{
	request: "crt.LoadDataRequest",
	handler: async (request, next) => {
 
		if(request.dataSourceName == "CaseDS_OPCaseType_4943d10_List_DS") {
			const caseType = await request.$context.CaseDS_OPCaseType_4943d10;
 
			var moduleTypesIds = await OPPermissionFunctionsSsp.getModuleTypes();
 
			const filter = new sdk.FilterGroup();
			if(moduleTypesIds.length > 0){
				filter.logicalOperation = sdk.LogicalOperatorType.Or;		
				for (let i = 0; i < moduleTypesIds.length; i++) {
					await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Id", moduleTypesIds[i].value);
				}
			}
			else{
				await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "OPCode", '');
			}
 
			const newFilter = Object.assign({}, filter);
			newFilter.items = filter.items;
 
			request.parameters.push({
				type: "filter",
				value: newFilter
			});
		}
		return await next?.handle(request);
	}
}

 

The filter newFilter shows the right filter condition. I also used sql profiler and it returned the correct values. The issue here is that the CaseDS_OPCaseType_4943d10_List_DS lookup its not showing any value and does not apply the developed filter.

 

This issue happens only in the mini page. I have used this approach in freedom ui form pages and it works fine. Is there something I'm missing?

 

Kind regards

Like 0

Like

2 comments

I assume this is a dropdown lookup and not a lookup that opens the Select dialog? 

I just double-checked and I do have similar code to filter a dropdown on a Freedom UI mini page/dialog and it is working. I don't see anything that looks incorrect in the code you posted - just wanted to confirm that it does work on mini pages (at least in my case it is)

Show all comments
Freedom
FreedomUI
Studio_Creatio
Filtering
lookup
8.0

Hi Creatio Community,

 

I am developing a client side filter for a lookup in a section page (Freedom UI). I want to reload (re-filter) the lookup when the stage of the current record is updated (when GlbReloadEntityPage message is received).

Base logic for lookup loading:

{
	request: "crt.LoadDataRequest",
	handler: async (request, next) => {
		if(request.dataSourceName == "PDS_LookupCol") {
 
			request = await ModFunctions.filterAssignTo(request);
		}
		return await next?.handle(request);
	}
}

Reload function (Re-triggered ModFunctions.filterAssignTo(request);)

{
	request: "crt.HandleViewModelInitRequest",
	handler: async (request, next) => {
 
		request.$context.ServerMessageReceivedFunc = async function(event, message) {
			if (message.Header.Sender === "GlbReloadEntityPage") {
				await OPGlbReloadEntity.refreshScreen(request, message);
				ModFunctions.filterAssignTo(request);
			}
		};
		Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, (await request.$context.ServerMessageReceivedFunc), request.$context);
		return next?.handle(request);
	}
},

Filtering function 

		filterAssignTo: async function(request){
		    .... Custom logic .......
			const newFilter = Object.assign({}, filter);				
			newFilter.items = filter.items;
 
			if(request.parameters){
				request.parameters.push({
					type: "filter",
					value: newFilter
				});
			}
			return request;
		},

Even if the function is triggered when "GlbReloadEntityPage" is called the lookup is not reloaded with the new filtering rules. 

How can i reload lookup options from freedom ui client side?

 

 

Like 0

Like

2 comments

Any updates about this topic?

Hello,
Try to reload the data using the following code:

const handlerChain = sdk.HandlerChainService.instance;
await handlerChain.process({
      type: 'crt.LoadDataRequest',
      $context: request.$context,
      config: {
             loadType: 'reload'
      },
      dataSourceName: '{YOUR LOOKUP DATA SOURCE}'
});

Show all comments
Filtering
Studio_Creatio

Hi I just have a question about filtering using a cross reference object. I have created a Cross reference object that has using two lookups as its cross reference, one from Service another from Fee Method. I want to use this cross reference object as a filter to a different object that has a Fee Method lookup within the object. I'm not sure how achieve this

Like 0

Like

1 comments

Hi Vincent,

You can use the following filtration as an example:






The filtration from the example is added in the Account section. We are using related object filtration (click on the plus button in the first screenshot) to find all accounts where column Number in the object Account communication option contains 000.

I hope this example helps you to build your own filtration. 

Have a great day!

Show all comments
odata4
Filtering
8.1.4
Studio_Creatio
8.0

Hello community!

 

I'm trying to filter contacts by unique keys from another system.

Currently, we are using 'eq' and 'or', but that has a limitation (the error states that only 100 nodes are supported in a filter).

After reading the oData 4.01 documentation that is linked in the creatio documentation here https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/architecture/development-in-creatio/integrations#title-2088-10, I found the "in" operator, which might bypass this issue completely, so we wouldn't need to page through records.

 

However, I couldn't get it to run...my filter looks like this:
 

$filter=["QsTbisKey"] in ["47928","50447"]

But it returns an error:

{
    "error": {
        "code": "",
        "message": "An error has occurred.",
        "innererror": {
            "message": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; odata.metadata=none'.",
            "type": "",
            "stacktrace": "",
            "internalexception": {
                "message": "Object reference not set to an instance of an object.",
                "type": "",
                "stacktrace": ""
            }
        }
    }
}

 

I tried using all combinations of other brackets and single quotes but was unsuccessful.

 

Does anyone know how to do this?

 

Thanks and BR,

Robert

 

Like 0

Like

4 comments
Best reply

Hello,

The 'in' operator is not supported in OData 4 in Creatio.
At the moment, it is possible to use the operators that are available in the examples in the official Postman collection of the Creatio API.
We have registered a task to improve this functionality ('in' operator for Creatio OData 4 requests) in future releases of Creatio.
 

Correct filter for In operator OData 4.01 is usually like:

filter=Id in ('6f2efedd-9b25-43b4-9cb9-0ebe60a02a8a','72509ae9-7065-465c-b7c5-3d193b8fe768')

However, it produces the same result with Creatio OData. It's possible Creatio only implements OData 4.0 and not 4.01 (which introduced the In operator).
Might need a different approach like a configuration service that takes the like of values as a param and returns the results? Or if it would work to create a common parent record of the values that could be used to retrieve the results?

Ryan Farley writes:

Correct filter for In operator OData 4.01 is usually like:

filter=Id in ('6f2efedd-9b25-43b4-9cb9-0ebe60a02a8a','72509ae9-7065-465c-b7c5-3d193b8fe768')

However, it produces the same result with Creatio OData. It's possible Creatio only implements OData 4.0 and not 4.01 (which introduced the In operator).
Might need a different approach like a configuration service that takes the like of values as a param and returns the results? Or if it would work to create a common parent record of the values that could be used to retrieve the results?

 

Hi Ryan,

I did try that syntax already, but it didn't work.

Maybe someone from Creatio can shed some light on the implemented OData version?

 

Thanks,

Robert

Hello,

The 'in' operator is not supported in OData 4 in Creatio.
At the moment, it is possible to use the operators that are available in the examples in the official Postman collection of the Creatio API.
We have registered a task to improve this functionality ('in' operator for Creatio OData 4 requests) in future releases of Creatio.
 

Serhii Parfentiev,

Thanks for the information!

Since the documentation I linked explicitly points to the OData 4.01 version, it should be updated and the exact version should be mentioned to know what is supported and what is not.

 

Thanks,

Robert

Show all comments
FreedomUI
TimeLine
Filtering
8.1.3
Sales_Creatio_enterprise_edition
8.0

We want to add filters in the same way that you can add them to lookups using code on the page, as there isn't a no-code way to configure additional filters for Timeline components. In our case, it's filtering out non-completed Activity records from the Timeline. We don't seem to be able to using similar methods to lookups though (i.e. adding custom code to the crt.LoadDataRequest handler. Has anyone found a way to add such a filter? It looks like all the Timeline code is in the 9351.xxxxxxx JS file.

Like 0

Like

3 comments

Hello,
We must say that the ability to add filters to a timeline is under development. Unfortunately, we cannot tell when it will be added.

Hi , Any update on this , we have a requirement to add a recipient filter inside timeline component , any idea

Pranshu Basak,

 

Hello,

This feature is currently in the planned stage, but no estimates for its release are available at the moment.

Show all comments

Hi 

 

I am unable to filter the records of Data Table using Custom Code But I am able to filter the records if List page Contains DataGrid Instead of Data Table using FilterGroup and LoadDataRequest. Is there any Differnce between the DataGrid and DataTable Elements.

Like 0

Like

1 comments

Hello,
 

Could you please tell us exactly how you are trying to add custom filtering and what problems you are facing when trying to configure filtering for a DataTable element?

Thank you in advance!

Show all comments

Hi, 

 

Any ideas why the code below is not working? I get an 'Object reference not set to an instance of an object.' here /0/DataService/json/SyncReply/SelectQuery 

I checked that the getUsersInRole function that I wrote is working. It returns an array of Contact Ids.

Thanks in advance,
Jose

{
    request: 'crt.LoadDataRequest',
    handler: async (request, next) => {
        if (request.dataSourceName === 'PageParameters_UsrLookupParameter1_13p73tg_List_DS') {
            var roleId = request.$context.attributes.PageParameters_UsrLookupParameter1_atde2dj?.value;
            var users = await UsrC2CUtilitiesV2.getUsersInRole(roleId);
            const usersFilter = new sdk.FilterGroup();
            await usersFilter.addSchemaColumnInFilterWithParameters(sdk.ComparisonType.Equal, "Id", users);                            
            request.parameters.push({
                type: "filter",
                value: usersFilter
            });
        }
        return await next?.handle(request);
    }
}

Like 0

Like

3 comments
Best reply

hi Jose,

try to use newFilter instead of usersFilter in the push

// workaround for filters required in Creatio 8.1.0 and older
const newFilter = Object.assign({}, usersFilter);
newFilter.items = usersFilter.items;

Hello,
Just on code alone, it is hard to tell what is the reason for the issue.
You need to do a debug and see at what moment the system cannot read the value.

hi Jose,

try to use newFilter instead of usersFilter in the push

// workaround for filters required in Creatio 8.1.0 and older
const newFilter = Object.assign({}, usersFilter);
newFilter.items = usersFilter.items;

Hi Stefano, 

That fixed my issue. 

Thanks!

Show all comments
Filtering
Contact
account
Filters

Hi,

 

Is it possible to filter the 'Search' results in the Contact Container so it only shows the contacts that are belonging to the account that is selected above?

 

Currently I have the full list of contacts displayed when i open the dropdown. (see images)

 

Many Thanks

 

Tom

 

 

Like 0

Like

1 comments

Hi!



Unfortunately, this cannot be done now. We have registered a feature request to our R&D team and added your case to it. This feature may be included in future releases. 



Best regards,

Anton

Show all comments

Dear colleagues

 

To implement a process who automatically cancel activities not started from more than "XX" hours from the hour they are created, I filter all activities which meet some another conditions and Created on < Previous hours XX.

 

I want to use a System setting if customer want to change the XX hours, in the future, and not need to touch the process. 

 

Is there any way possible to replace 10 by a formula like 

Created on < Previous hours [#System setting.SLATasks#] (in the filter condition)?

 

Thanks in advance

 

Best regards

Julio Falcón

Like 0

Like

3 comments
Best reply

What I did is to create a Date/Time parameter called FechaSLA with this value 

[#System variable.Current Time and Date#].AddHours( -[#System setting.SLA MDA's#] )

and in the filter use Created On < FechaSLA , that's all!

 

Thanks

Hello Julio,

You can create a date/time param to use in the condition and then populate the param with a formula like this:

[#System variable.Current Time and Date#].AddHours(-10)

This formula takes the current date/time and adds a negative 10 hours  (which is subtracting 10 hours). The value of 10 could be a int param so it's flexible the amount of hours subtracted. 

Ryan

Ryan Farley,

Thanks Ryan...

 

How come I didn't see it? hahaha :-(

 

Regards

Julio

What I did is to create a Date/Time parameter called FechaSLA with this value 

[#System variable.Current Time and Date#].AddHours( -[#System setting.SLA MDA's#] )

and in the filter use Created On < FechaSLA , that's all!

 

Thanks

Show all comments