atg advanced rql

Post on 10-May-2015

1.623 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

some ATG RQL tricks

TRANSCRIPT

ATG RQLRepository Query Language

RQL

generic language for formulating queries that map to any repository implementation, such as SQL or LDAP.

Multi-Valued Property Queries

• interests INCLUDES "biking“

• interests INCLUDES ANY { "biking", "swimming" }

• interests INCLUDES ALL { "biking", "swimming" }

• addresses INCLUDES ITEM (zip = "48322" AND state = "MI")

RQL RANGE

• age > 30 RANGE +10

• age > 30 RANGE 10+

• age > 30 RANGE 40+10

atg.repository.QueryBuilder

defines the available query operations

build Query objects

ComparisonQuery

RepositoryView userView = getRepository().getItemDescriptor(USER).getRepositoryView();

QueryBuilder userBuilder = userView.getQueryBuilder();

QueryExpression userType = userBuilder.createPropertyQueryExpression(USER_TYPE);

QueryExpression two = userBuilder.createConstantQueryExpression(USER_TYPE_2);

Query userTypeIsTwo = userBuilder.createComparisonQuery(userType, two, QueryBuilder.EQUALS);

RepositoryItem[] answer = userView.executeQuery(userTypeIsTwo);

PatternMatchQuery

RepositoryView employeeView = getRepository().getView(USER);

QueryBuilder queryBuilder = employeeView.getQueryBuilder();

QueryExpression propertyExpression = queryBuilder.createPropertyQueryExpression(“login”);

QueryExpression valueExpression = queryBuilder.createConstantQueryExpression(“name”);

Query accountQuery = queryBuilder.createPatternMatchQuery(propertyExpression, valueExpression, QueryBuilder.CONTAINS);

RepositoryItem[] repositoryItems = employeeView.executeQuery(accountQuery);

IncludesQuery

RepositoryView employeeView = getRepository().getView(USER);

QueryBuilder queryBuilder = employeeView.getQueryBuilder();

QueryExpression propertyExpression = queryBuilder.createPropertyQueryExpression("user_id");

QueryExpression valueExpression = queryBuilder.createConstantQueryExpression(ids);

Query employeeQuery = queryBuilder.createIncludesQuery(valueExpression, propertyExpression);

RepositoryItem[] repositoryItems = employeeView.executeQuery(employeeQuery);

Complex QueryRepositoryView userView = getRepository().getItemDescriptor(USER).getRepositoryView();

QueryBuilder userBuilder = userView.getQueryBuilder();

QueryExpression userType = userBuilder.createPropertyQueryExpression("userType");

QueryExpression two = userBuilder.createConstantQueryExpression(2);

Query userTypeLTTwo = userBuilder.createComparisonQuery(userType, two, QueryBuilder.LESS_THAN);

QueryExpression login = userBuilder.createPropertyQueryExpression("login");

QueryExpression j = userBuilder.createConstantQueryExpression("j");

Query startsWithJ = userBuilder.createPatternMatchQuery(login, j, QueryBuilder.STARTS_WITH);

Query[] pieces = { userTypeLTTwo, startsWithJ };

Query andQuery = userBuilder.createAndQuery(pieces);

RepositoryItem[] answer = userView.executeQuery(andQuery);

atg.repository.QueryOptions

let you limit the size of the result set, direct how the result set should be sorted,

precache specified properties

QueryOptions

RepositoryView view = getRepository().getView(USER);

Query query = view.getQueryBuilder().createUnconstrainedQuery();

String[] precachedPropertyNames = { "login", "password" };

SortDirectives sortDirectives = new SortDirectives();

sortDirectives.addDirective(new SortDirective( "login", SortDirective.DIR_ASCENDING));

RepositoryItem[] items = view.executeQuery(query, new QueryOptions(0, 5, sortDirectives, precachedPropertyNames));

atg.repository.rql.RqlStatementRepositoryView view = getRepository().getView(USER);

RqlStatement statement = RqlStatement.parseRqlStatement("lastName STARTS WITH ?0");

Object params[] = { new String("m") };

RepositoryItem items[] = statement.executeQuery(view, params);

Operation tags

<add-item>

<update-item><remove-item>

to add or update or remove items

<export-items><import-items>

to export and import items 

<print-item> to print item 

<transaction>

to maintain transactions while adding or removing items.

Generate DDL

<print-ddl/>

• bin\startSQLRepository -m <module-name> -repository /atg/commerce/catalog/ProductCatalog -outputSQLFile product_catalog.sql

startSQLRepository

To check what items are in cache

<dump-caches item-descriptors="skuSpecialPriceRules" dump-type="both"/>

Querying using date or timestamp by using RQLdate <query-items item-descriptor="order">

creationDate>

date("2011-10-10") and state="SUBMITTED" </query-items>

Timestamp

<query-items item-descriptor="order"> creationDate>

date("2011-10-10 10:00:00 EST") and state="SUBMITTED"

</query-items>

How to get sysdate in RQL named query?

Repository filtering

• Use the <rql-filter> tag in the definition file for an item descriptor.

• Set the filterQuery property of the item descriptor to a Query object.

• Set the rqlFilterString property of the item descriptor to an RQL string, which is compiled into the Query object that defines the filter.

<rql-filter>

<item-descriptor name="article">

<rql-filter>

<rql>name starts with ?0 or availabilityDate &lt; ?1</rql>

<param value="n"></param>

<param bean="/myApp.IssueDate"></param>

</rql-filter>

<table name="article" id-column-names="article_id">

<property name="name" />

<property name="date" />

</table>

</item-descriptor>

QUESTIONS?

top related