Wednesday, February 13, 2013

Changing operators for dynamic queries

In search screens in SAP CRM, you sometimes run in to the fact that for some reason, you are not able to select a search option you might want to be able to select.
For instance in the example, let's say we would like to select all service order types starting with 'ZS*'. This is not possible in the standard, but there is a way around this. Let's talk about 'Query Objects in the Generic Interaction Layer (GenIL).

Query objects are used to find business objects within the BOL. Many of SAP’s business objects have queries implemented to support specific search conditions. These query objects can easily be found using the GenIL Model Browser.
Besides standard query objects, supporting only 'values equal to' searches, some of the query objects are implemented as 'dynamic query objects'. Using these dynamic query objects it is possible to support multiple operators within the search. As said, it is possible. Not all dynamic query objects support all kinds of operators. This blog explains how to change the operators for dynamic query objects, to support custom specific search scenarios.


                                

Dynamic Query Object

Within this blog we will use component “BT”, dynamic query object “BTQSrvQuot”.

Using the BOL browser, we want to search for specific objects, where field “PROCESS_TYPE” is in between a range of values, but the dynamic query object doesn’t allow us to do so.


Using the Generic Interaction Layer Model Browser it’s easy to locate the dynamic query objects for a specific business object.

Check default query operators

Since the dynamic query object doesn’t allow us to search with operator “BT” for field “PROCESS_TYPE”, we need to check what is causing this behaviour. By double clicking the Dynamic Query Object, we get an overview of all allowed operators. As we can see, operator “BT” is supported for this query object.


Check exceptions per attribute

The dynamic query object specifies which operators are allowed within the search. But this doesn’t mean that all fields allow these operators as well. It is possible to set exceptions. By double clicking the field within the dynamic query object, we can see all allowed operators for that specific field.


As we can see, operator “BT” is not allowed for field “PROCESS_TYPE”.

Define operators for dynamic queries

To change the operators for dynamic query object we need to open the customizing using path:
Customer Relationship Management -> CRM Cross-Application Components -> Generic Interaction Layer/Object Layer -> Component-Specific Settings -> Define Operators for Dynamic Queries


Search for the corresponding component and dynamic query object. The customizing allows us to either change the default settings or the exceptions per attribute. In our specific case we need to change the exceptions per attribute and activate the “BT” operator.


Test new operator for dynamic query

Since we have added the “BT” operator for our field, the BOL browser should now enable us to search using this operator.



In case the BOL browser doesn’t enable the search using the new operator, try refreshing the buffer using customizing path:
Customer Relationship Management -> UI Framework -> UI Framework Definition -> Design Layer -> Maintain Shared Memory for the Design Layer

In case the dynamic query object itself doesn’t supply the required values, meaning the newly added operator doesn’t work correctly, you’ll have to find / enhance the corresponding search implementation.

Conclusion

It’s quite easy to allow a dynamic query object to use different kinds of operators, but depending on the implementation of the dynamic query object, this action would involve customizing only or also an enhancement of it’s implementation.

2 comments: