Top Banner
REL STANDARD TAG LIBRARY REL STANDARD TAG LIBRARY & ODATA QUERY EXTENSION Mihai Cădariu yatb.mitza.net
29

REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Jun 17, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

REL STANDARD TAG LIBRARYREL STANDARD TAG LIBRARY&ODATA QUERY EXTENSION

Mihai Cădariu yatb.mitza.net

Page 2: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

About Mihai

Principal Consultant, SDL WCM, San Jose, USAJ i d T idi i 2005 A d NLJoined Tridion in 2005, Amsterdam, NLPreviously Java developer

Yet Another Tridion Blog (yatb mitza net)Yet Another Tridion Blog (yatb.mitza.net)

Page 3: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

AgendaAgenda

OData Query Extension Extending OData?

REL Standard Tag Library JSTL only with REL

Why a Query Extension? It’s all about the parser…

The Tags It’s all about the parsers…p

Demo, demo, demo Resources

p Demo Resources Resources Resources

Page 4: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

OData Query Extension

Page 5: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Extending OData?Extending OData?

Yes, definitely possible… totally unsupported Implementing the CD WebService frameworkp g Tridion 2011

com.tridion.webservices.extension.ODataEntryRegistrationService com.tridion.webservices.extension.ODataEntryRegistrationService

Tridion 2013 com tridion webservices extension ODataResourceBundleRegistrationService com.tridion.webservices.extension.ODataResourceBundleRegistrationService

Tridion 2013

Self-registering... Woo-hoo!!! Self registering... Woo hoo!!! Just drop JAR in /web-inf/lib

Page 6: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Why a Query Extension?Why a Query Extension?

CD Web Service – limited functionality CD API – full functionality OData Query Extension uses CD API Specially crafted URL allows queries for content URL syntax almost OData standard Parser breaks down query into CD API callsMake full usage of CD API (no hacks)

Uses storage cache, Cache Channel Service

Parser cached expressions

Page 7: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

What Does it Do?What Does it Do?

Query Components Generates response with Component entities http://server/odata/odata.svc/QueryComponents

Query Component Presentationsy p Generates response with ComponentPresentation http://server/odata/odata.svc/QueryComponentPresentationsp // / / / y p

Query Pages Generates response with Page entities Generates response with Page entities http://server/odata/odata.svc/Pages

Page 8: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Querying CriteriasQuerying Criterias

Binar T pe P blicationKe BinaryType ItemCreationDate ItemInitialPublishDate

PublicationKey PublicationMultimediaPath PublicationMultimediaURL

ItemLastPublishedDate ItemModificationDate ItemReference

PublicationPath PublicationTitle PublicationURL ItemReference

ItemSchema ItemTitle

PublicationURL StructureGroup StructureGroupDirectory

Multimedia PageTemplate PageURL

StructureGroupTitle Taxonomy CustomMetaKey PageURL

Publication SchemaTitle

CustomMetaKey CustomMetaValue

Page 9: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Querying Criterias (2)Querying Criterias (2)

Using OData resource identifiers/odata.svc/Collection(CriteriaName=CriteriaValue)

Example:

/odata.svc/QueryComponents(Publication=3,ItemTitle=My Component Name)

Using $filter/odata svc/Collection?$filter=CriteriaName field operator CriteriaValue/odata.svc/Collection?$filter=CriteriaName field_operator CriteriaValue

Example:

$filter=Multimedia eq true and (Publication eq 3 or Publication eq 4)

$filter=CustomMetaValue like 'Artic%’

$filter=ItemModificationDate gt '2013-05-01 13:24:56.999'

Page 10: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Complex Queries – FunctionsComplex Queries Functions

CustomMetaKey CustomMetaValue

StructureGroup StructureGroupDirectory

CustomMetaDateRange CustomMetaStringRange

StructureGroupTitle TaxonomyKeyword

NumericalRange TaxonomyKeywordDescription TaxonomyKeywordKey TaxonomyKeywordName

Page 11: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Complex Queries – Functions (2)Complex Queries Functions (2)

CustomMetaKey(keyName[, field_operator])

CustomMetaKey('doc%', like)

CustomMetaValue(CustomMetaKey(keyName), value[, field_operator])

CustomMetaValue(CustomMetaKey('color'), 'red') CustomMetaValue(CustomMetaKey( color ), red )

Field operators:p eq, neq, gt, ge, lt, le, like

Page 12: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Sorting ResultsSorting Results

Using $orederby/odata.svc/Collection?$orderby=Column [asc|desc] [CustomMetaKey

[ i |fl |d ] [ |d ]][string|float|date] [asc|desc]]

Examples:Examples:

$orderby=ItemLastPublish desc

$orderby=ItemTitle ItemLastPublish desc$orderby ItemTitle ItemLastPublish desc

$orderby=GoLiveDate date desc

Page 13: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

PaginationPagination

Using $top and $skip specify $top, but not $skip: a LimitFilter returns only the top specified results

specify $skip, but not $top : a PagingFilter returns all results after skipping a few

specify both $top and $skip: a PagingFilter returns only the top results after skipping a few

Page 14: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

ParserParser

Custom LL1 recursive parser Breaks down query string ($filter)q y g ($ ) Caches parsed expressions

Page 15: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

ResourcesResources

On yatb.mitza.net

http://yatb.mitza.net/2013/06/extending-odata-query-functionality.html

http // atb mit a net/2013/06/ rl s nta for odata q er e tension html http://yatb.mitza.net/2013/06/url-syntax-for-odata-query-extension.html

http://yatb.mitza.net/2013/06/function-support-for-queries-in-odata.html

On Google Code

https://code.google.com/p/yet-another-tridion-p // g g /p/yblog/source/browse/trunk/OData+Query+Extension/

https://code.google.com/p/yet-another-tridion-bl / /b /b h /T idi +2011+SP1+HR1/OD t +Q +blog/source/browse/branches/Tridion+2011+SP1+HR1/OData+Query+Extension/ - Tridion 2011 branch

Page 16: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

REL Standard Tag Library

Page 17: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Just like JSTL… only with RELJust like JSTL… only with REL

Java Standard Tag Library RSTL is the Tridion equivalentq Tags for performing several common tasks

Iteration loops Iteration, loops Conditionals (if, switch)

F i (XML/XSLT f d i ) Formatting (XML/XSLT transforms, date time)

Page 18: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

The TagsThe Tags

<c:choose> / <c:when> / <c:otherwise><c:choose>

" "<c:when test="expr1">

Do something

</c:when>/c:when

<c:when test="expr2">

Do something else

</c:when>

<c:otherwise>

Do something otherwiseDo something otherwise

</c:otherwise>

</c:choose>

Page 19: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

ForEachForEach

<c:forEach>

<c:forEach var="expr" items="expr">

Do something

/</c:forEach>

<c:forEach var="cpMeta" <c:forEach var= cpMeta items="pageMeta.componentPresentationMetas">

<c:out value="cpMeta.componentId"/>

</c:forEach>

Page 20: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

IfIf

<c:if>

<c:if test="expr">

Do something

/</c:if>

<c:if test="userName == 'Mihai'"><c:if test= userName == Mihai >

Hello, Mihai!

</c:if></c:if>

Page 21: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Import resourceImport resource

<c:import>

<c:import var="expr" url="expr" componentTemplate="expr">

<c:param name="expr" value="expr"/>

/</c:import>

<c:import var="xml" url="tcm:1 23 64"><c:import var= xml url= tcm:1-23-64 >

<c:param name="color" value="${myColor}"/>

</c:import></c:import>

Page 22: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Output a ValueOutput a Value

<c:out>

<c:out value="expr"/>

" "/<c:out value="cp.componentId"/>

Page 23: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Set/Remove a VariableSet/Remove a Variable

<c:set> / <c:remove>

<c:set var="expr" value="expr"/>

<c:remove var="expr"/>

<c:set var="expr">

Do somethingDo something

</c:set>

<c:remove var="cpList"/>

Page 24: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Format DateFormat Date

<fmt:formatDate> / <fmt:parseDate>

<fmt:formatDate var="expr" value="expr" pattern="expr"/>

<fmt:parseDate var="expr" value="expr" pattern="expr"/>

<fmt:formatDate value="myDate" pattern="dd.MM.yyyy HH:mm"/>

<fmt:parseDate var="myDate" value="2013 07 23“<fmt:parseDate var= myDate value= 2013-07-23“pattern="yyyy-MM-dd"/>

Page 25: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

XML/XSLT TransformXML/XSLT Transform

<x:transform>

<x:transform var="expr" doc="expr" xslt="expr">

<x:param var="expr" select="expr" />

/</x:transform>

<x:transform doc="nav xml" xslt="top xslt"><x:transform doc= nav-xml xslt= top-xslt >

<x:param var="color" select="${bg-color}"/>

</x:transform></x:transform>

Page 26: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

DemoDemo

Page 27: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

ResourcesResources

On yatb.mitza.net

http://yatb.mitza.net/2013/07/rel-standard-tag-library-expression.html

http // atb mit a net/2013/07/rel standard tag librar html http://yatb.mitza.net/2013/07/rel-standard-tag-library.html

http://yatb.mitza.net/2013/07/rel-standard-tag-library-installation.html

On Google Code

https://code.google.com/p/yet-another-tridion-p // g g /p/yblog/source/browse/trunk/REL+Standard+Tag+Library/

Page 28: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

Questions & AnswersQuestions & Answers

?

Page 29: REL STANDARD TAG LIBRARY ODATA QUERY EXTENSION · Agenda OData Query Extension Extending OData? REL Standard Tag Library JSTL only with REL Why a Query Extension? It’s all about

That’s all, folks!That s all, folks!