Working With Query Criteria and Expressions

If you run a query after selecting the QueryFields (which executes a SQL statement, such as SELECT EMPLID, DEPTID from PS_QE_EMPLOYEE), the system retrieves all the data in those columns; that is, it retrieves the data from every row in the QueryRecord or records because there is no filter limiting the number of rows.

You can select which rows of data you want by adding selection criteria to the query.

This document assumes that you know how to use selection criteria. This section discusses working with the QueryCriteria and QueryExpression objects in the query API only.

Before you can add a new expression (either Expression 1 or Expression 2) to your QueryCriteria, you must set the type for the expression.

The following code example adds a new criteria, sets the type for the first expression, adds the first expression to the main select of the query definition, then does the same thing for the second expression.

&MyQuerySelect = &MyQuery.QuerySelect; 
&MyCriteria = &MyQuerySelect.AddCriteria(); 
 
/* make expression 1 a field */ 
&MyCriteria.Expr1Type = %Query_ExprField;  
 
/* add the ABSENCE_TYPE field */ 
&MyCriteria.AddExpr1Field("A", "ABSENCE_TYPE");  
 
/* make it not equal to */ 
&MyCriteria.Operator = %Query_CondNotEqual;  
 
/* Make expression 2 a constant */ 
&MyCriteria.Expr2Type = %Query_ExprConstant;  
&MyCriteriaExpr = &MyCriteria.AddExpr2Expression1(); 
&MyCriteriaExpr.Text = "VAC";

When you use any of the QueryCriteria methods to add either a new Expression 1 or Expression 2, you destroy the existing value.

In general, you should use the QueryCriteria methods to add a new Expression 1 or Expression 2 only when you're adding a new criteria to a query.

Which values are valid for the Expression 2 type (Expr2Type property) depend on the value of the Operator property.

The following table describes which Expr2Type values are valid with which values of Operator.

Operator

Expression 2

equal to

not equal to

greater than

not greater than

less than

not less than

Constant

Field

Expression

Subquery

Prompt

Exists

not exists

Subquery

Like

not like

Constant (with wildcards)

Prompt

is null

is not null

 

in tree

not in tree

Tree Option

Tree Prompt Option

Eff Date <=

Eff Date >=

Eff Date <

EffDate >

Field

Expression

Constant

Current Date

First Eff Date

Last Eff Date

 

in list

not in list

In list

Subquery

Between

Not Between

Const-Const

Const-Field

Const-Expr

Field-Const

Field-Field

Field-Expr

Expr-Const

Expr-Field

Expr-Expr

A drilling URL provides a clickable link in query results allowing a user to drill from the query results to another query, to another component, or to an external site. A drilling URL is defined as a special type of query expression. Like other query expressions, the user can set the drilling URL on the Edit Expression Properties page, or the drilling URL can be set in a PeopleCode program as follows:

/* Setting a drilling URL */

&aQueryExpr = &aQuerySelect.AddExpression(&sExprName);

/* Set the expression type to drilling URL */
&aQueryExpr.Type = %FieldType_URL;

/* Set the expression text and number from record fields */
/* The Text property must conform to expected formats    */
&aQueryExpr.Text = &rRecordExpr.QRYCRIT1EXPRTEXT.Value;
&aQueryExpr.ExpNum = &rRecordExpr.QRYCRIT1EXPRNUM.Value;

Note: Run-time processing of drilling URLs is backward compatible. Therefore, drilling URLs that were defined in previous releases are expanded correctly in the current release without the need to redefine them.

For a drilling URL, the Text property of the QueryExpression object must conform to one of three expected formats. The value of the Text property is not validated; therefore, it is the calling program’s responsibility to ensure that value is complete and correctly formatted. Each of the drilling URL types has a different format as follows:

  • The drilling URL for a component requires the following format:

    '/c/menu.component.market?Action=Usearch_key=unique_field:unique_field_URL_is_mapped_to'

    For example:

    '/c/QE_SAMPLE_APPS.QE_DEPT_TBL.GBL?Action=U&DEPTID=A.DEPTID&SETID=A.SETID:A.SETID'
  • The drilling URL for a query requires the following format:

    '/q/?ICAction=ICQryNameURL={PUBLIC|PRIVATE}.query_name&unique_prompt_key=unique_field:unique_field_URL_is_mapped_to'

    For example:

    '/q/?ICAction=ICQryNameURL=PUBLIC.DESTINATION&BIND1=A.DEPTID:B.DEPTID'
  • The drilling URL for an external site requires the following format:

    '/e/?url=[full_external_URL]:unique_field_URL_is_mapped_to'

    For example:

    '/e/?url=[http://www.yahoo.com]:A.SETID'