tag:blogger.com,1999:blog-82456737282379823502024-03-13T15:54:45.661-03:00ATG & Endeca BRBlog dedicado ao aprendizado e compartilhamento de conhecimento sobre ATG Web Commerce e ENDECA.Jonathanhttp://www.blogger.com/profile/11174519393590215316noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-8245673728237982350.post-15539965796560949682015-07-13T14:19:00.002-03:002015-07-13T14:19:59.136-03:00Mapping types of ATG repositoryThe mapping a repository is very important in a database design, because if it is not done correctly, you may not be able to set-up your repository XML correctly, and if this is not done, you'll never be able to figure out what went wrong, or why your repository is functioning properly. Let us pick up various mapping topics and learn when to use them.<br />
<br />
<a name='more'></a><br />
<b>One-to-one Mapping</b><br />
<br />
Consider an example, wherein there is an "Employee". An employee can only be associated with exactly one "homeAddress" at a time. And, conversely, a "homeAddress" can only have one "employee". This is basically referred to as one-to-one mapping.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oh0Vt0fqpiGpqZKP_vMkHacPisfXyP5GoOH27whfDwCFv6KCoPTDEtf2Ezmg0TpQzWZ2CELzCoFcswnNmitXReq_UjKYm4KiLD_temAYhs55THVRi1WTuyFJqCMaM1Ek1GVKHzSSaUcQ/s1600/One_To_One.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oh0Vt0fqpiGpqZKP_vMkHacPisfXyP5GoOH27whfDwCFv6KCoPTDEtf2Ezmg0TpQzWZ2CELzCoFcswnNmitXReq_UjKYm4KiLD_temAYhs55THVRi1WTuyFJqCMaM1Ek1GVKHzSSaUcQ/s400/One_To_One.png" width="400" /></a></div>
<br />
<br />
<b>One-to-many Mapping</b><br />
<br />
Consider a similar example, where an "Employee" has many "credit cards". But a particular credit card can be associated with exactly one "Employee". See below diagram for more details:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6gnZ7syxpa05APhkMXPU8hmMIYKU-suWDC1pghbCw-rIlKwJBptKtRx6CweyPMtzkj8NmmHXaxcCtISAfaYXERB15bhxWQaTb_6ToePlK6Wr_-UgqmnIuErRm1zdX_Aj4NDvv9S83gmzX/s1600/One_To_Many.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6gnZ7syxpa05APhkMXPU8hmMIYKU-suWDC1pghbCw-rIlKwJBptKtRx6CweyPMtzkj8NmmHXaxcCtISAfaYXERB15bhxWQaTb_6ToePlK6Wr_-UgqmnIuErRm1zdX_Aj4NDvv9S83gmzX/s400/One_To_Many.png" width="400" /></a></div>
<br />
<br />
<b>Many-to-one Mapping</b><br />
<br />
Many-to-one mapping is similar to above example, but is the opposite. Here, consider an "Employee" can be associated with one "Organization", but an "Organization" can have many employees.<br />
See below diagram for more clarity:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq9m5tLqeoaj4vLhynzsiXfex1bq8dAT12PJVMc95e3HdRSM67NkTf55jvEuX35WtR2nLFd8xkDnkYl4Hl128xGr00Jb7oWuwsYf8cL2ln00bfX023nn97bmiVMig5AMXl_LyGBQ-JLl7a/s1600/Many_To_One.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq9m5tLqeoaj4vLhynzsiXfex1bq8dAT12PJVMc95e3HdRSM67NkTf55jvEuX35WtR2nLFd8xkDnkYl4Hl128xGr00Jb7oWuwsYf8cL2ln00bfX023nn97bmiVMig5AMXl_LyGBQ-JLl7a/s400/Many_To_One.png" width="400" /></a></div>
<br />
<br />
<b>Many-to-many Mapping</b><br />
<br />
Many-to-many mapping is simply the concept of many entities being associated with many entities. For example, An "Employee" can be a part of multiple "meetings" during the day, and a "meeting" can have multiple "Employees" associated with it. See below diagram for details:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAggTkCaCEFFUR83s0zTr3rGqgwhUwBpjXmBahJYU6sC5c2QmwnBb7lw8XasgWj1-_VLNW5v6cwu8REmE5FyEU1AieqovnJ72arIYnSLq7yW2G-TcysXpxdkqn9OYP7szthtAyB4GSGRz/s1600/Many_To_Many.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfAggTkCaCEFFUR83s0zTr3rGqgwhUwBpjXmBahJYU6sC5c2QmwnBb7lw8XasgWj1-_VLNW5v6cwu8REmE5FyEU1AieqovnJ72arIYnSLq7yW2G-TcysXpxdkqn9OYP7szthtAyB4GSGRz/s400/Many_To_Many.png" width="400" /></a></div>
<br />
<br />
Now that we know which mapping to choose for our requirements, we can to design patterns for database and repository for each of these types.<br />
<br />
<br />
<b>References:<br /></b><br />
<a href="http://learnoracleatg.blogspot.com.br/2014/12/art205-what-mapping-should-you-choose.html" target="_blank">What mapping should you choose for extending ATG repository?</a>Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-66498824240162722262015-07-13T13:18:00.000-03:002015-07-13T13:33:09.881-03:00Another references about ATGDuring my research to solve problems or get content for our blog ATG, some sites/blogs caught my attention and deserved to be saved for future reference.<br />
<br />
Below are being sharing a list of links collected with good contents about ATG:<br />
<br />
<a name='more'></a><br />
<b>Lakshya </b>- <a href="http://world-of-atg.blogspot.com.br/">http://world-of-atg.blogspot.com.br/</a><br />
<br />
<b>ATGkid </b>- <a href="http://atgkid.blogspot.com.br/">http://atgkid.blogspot.com.br/</a><br />
<br />
<b>Asknsay </b>- <a href="http://www.asknsay.com/category/java/atg">http://www.asknsay.com/category/java/atg</a><br />
<br />
<b>ATG-Tips </b>- <a href="http://atg-tips.blogspot.com.br/">http://atg-tips.blogspot.com.br/</a><br />
<br />
<b>Ourownjava </b>- <a href="http://ourownjava.com/atg/">http://ourownjava.com/atg/</a><br />
<br />
<b>Tips from Sony </b>- <a href="http://tips4ufromsony.blogspot.com.br/search/label/ATG">http://tips4ufromsony.blogspot.com.br/search/label/ATG</a> <b>+</b> <a href="http://tips4ufromsony.blogspot.com.br/search/label/ATG%20Search" style="text-align: right;">%20Search</a><br />
<br />
<b>Oracle ATG Tutorials</b> - <a href="http://learnoracleatg.blogspot.com.br/p/atg-e-commerce.html">http://learnoracleatg.blogspot.com.br/p/atg-e-commerce.html</a><br />
<br />Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-40202798846911116412015-07-08T15:00:00.000-03:002015-07-08T15:02:30.979-03:00Basic concepts about ATG.This post is for the ATG beginners to get some basic overview about ATG.<br />
<br />
At the framework level, ATG is a java based application platform for hosting web-based applications, as well as RMI accessible business components, with an ORM layer, a component container, an MVC framework, and a set of tag libraries for JSP.<br />
<br />
<br />
<a name='more'></a><br />
<br />
ATG mainly works on the basis of following concepts:<br />
<br />
Nucleus - (<a href="http://atgendecabr.blogspot.com.br/2015/03/nucleus-conhecendo-ferramenta.html" target="_blank">Nucleus: Conhecendo a ferramenta. / Nucleus: Inside the tool.</a>)<br />
Droplets - (<a href="http://atgendecabr.blogspot.com.br/2015/06/inthis-quick-tutorial-well-learn-how-to.html" target="_blank">Quick Tutorial to How to Create a Custom Droplet</a> // <a href="http://atgendecabr.blogspot.com.br/2015/06/atg-droplet-list.html" target="_blank">ATG Droplet List</a>)<br />
DSP Tag Libraries - (<a href="http://atgendecabr.blogspot.com.br/2015/06/dsp-tag-libraries.html" target="_blank">DSP Tag Libraries</a>)<br />
Form Handlers - (<a href="http://atgendecabr.blogspot.com.br/2015/07/formhandlers-atg.html" target="_blank">FormHandlers ATG</a>)<br />
Repository - (<a href="http://atgendecabr.blogspot.com.br/2015/07/rql-repository-query-language.html" target="_blank">RQL - Repository Query Language</a>)<br />
<br />
<b>1. Nucleus:</b> Nucleus is server side java beans. To use ATG platform functionality, a web application needs to start Nucleus by invoking atg.nucleus.servlet.NucleusServlet. It’s essentially an object container that manages the lifecycle of POJOs using reflection and dependency injection.<br />
<br />
<b>2. Droplet:</b> Droplet is a Servlet and is also a Java bean. Advantage of droplet is that you can have multiple Droplets in a single page. Droplets can be nested and can pass parameters to each other.<br />
<br />
<b>3. DSP Tag Libraries: </b>Dynamo Server Pages is a set of tags that ATG provides, that allow us to access the functionality provided by the Dynamo Application Framework such as accessing Nucleus componenets, passing parameters,...<br />
<br />
<b>4. Form Handler:</b> ATG Form Handlers are components for validating and processing html forms, calling business components and managing flow between a limited set of pages (e.g. success/error), so a bit like Struts Action classes in that they mediate between the view and model. ATG provides hundreds of readymade form handlers for performing all sorts of tasks, like updating a customer profile, managing your shopping cart, checking out, or interacting with a repository.<br />
<br />
<b>5. Repository: </b>A repository is a data access layer, which gives a generic representation for a data store.<br />
<br />
<br />
Following are the main administration UIs provided by ATG<br />
<br />
<b>Oracle ATG Web Commerce (Oracle Commerce Platform):</b> This application deals with the basic customer-facing back-end functionality. Basic eCommerce capabilities like cart, profile etc. are included in this application. This feature is mandatory to install.<br />
<br />
<b>Oracle ATG Business Control Center (BCC):</b> This application provides a wide-range of capability to the business users to manage content and catalog on the site.<br />
<br />
<b>Oracle ATG Control Center (ACC):</b> This is a developer's tool which provides a UI-based interface to edit some cool ATG features like Workflows, Pipelines etc.<br />
<br />
<b>Oracle ATG Customer Service Center (CSC):</b> This application provides capability for customer executives to view and solve customer problems. This application mostly involves order and profile management. A customer executive should have access to this application for viewing (and in some case editing) order/profile details. For example, a customer complains that his/her order has not been delivered. He calls-up the call center, where a customer executive asks for the order-id. The executive can search for the order in the CSC application, and fetch the order details, and communicate the delivery status. It provides a wide variety of other powerful features focusing on customer care.<br />
<br />
<b>Oracle ATG Commerce Reference Store (CRS):</b> This is a sample reference application, which uses ATG out-of-the-box functionality and API, with some customization. Code for this application can also be found on oracle website. There is a lot of implementation which can be used as a reference for actual implementation on ATG.<br />
<br />
<br />
<b>References:</b><br />
<br />
<a href="http://tips4ufromsony.blogspot.com.br/2012/03/atg-basic-concepts-of-atg.html" target="_blank">Basic concepts of ATG</a><br />
<a href="http://learnoracleatg.blogspot.com.br/2014/10/art103-oracle-atg-basics.html" target="_blank">Oracle ATG Applications</a>Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-3886503515944732022015-07-03T14:42:00.000-03:002015-07-03T14:42:52.800-03:00RQL - Repository Query Language<h2>
Repository Query Language</h2>
<div>
<br /></div>
<div>
DAF provides a generic language for formulating queries. Because these queries must map to any repository implementation, the queries cannot be expressed in terms of any one back-end implementation (such as SQL or LDAP query syntax). Instead, the queries must be expressed in Repository Query Language (RQL), and the individual repository connectors are responsible for translating those queries into the query syntax expected by the underlying data store.</div>
<div>
<br /></div>
<div>
<a name='more'></a></div>
<div>
<h3>
<br /> RQL Overview</h3>
<div>
<br /></div>
<div>
RQL is a textual query syntax that is similar to SQL. It describes the set of conditions that must be matched by items of a particular item descriptor. The following is a simple RQL query that matches all items whose age property is greater than 30.</div>
<div>
<br /></div>
<div>
<i> <b> age > 30</b></i></div>
<div>
<br /></div>
<div>
<b>Note</b>: This RQL query omits the name of the item descriptor, which is usually implied by the context of the query’s use.</div>
<div>
<br /></div>
<div>
RQL supports all standard comparison operators and logical operators such as AND, OR, and NOT. For example:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 AND (lastName = "jones" OR paymentOverdue = true)</b></i></div>
<div>
<br /></div>
<div>
RQL keywords are case-insensitive — for example, keywords NOT and not are equivalent.</div>
<div>
<br /></div>
<div>
Constants such as 30, true, or jones can represent numbers, boolean, or String values. String values are represented with Java syntax. They must be enclosed by quotes, and escape sequences for special characters or UNICODE characters must use Java escape syntax.</div>
<div>
<br /></div>
<div>
Properties such as age or lastName must be property names as they are defined in the repository. RQL statements specify the conditions that an item must meet in order to be included in the result set. An RQL statement can also specify other directives to apply to the result set, such as ordering results and returning a portion of the result set.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Comparison Queries</h3>
<div>
<br /></div>
<div>
Comparison queries are the simplest RQL queries, where a property’s value is compared against another property value, or against a constant. For example:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30</b></i></div>
<div>
<br /></div>
<div>
All standard comparison operators can be used:</div>
<div>
<ul>
<li><b>=</b></li>
<li><b>!=</b></li>
<li><b><</b></li>
<li><b><=</b></li>
<li><b>></b></li>
<li><b>>=</b></li>
</ul>
</div>
<div>
These operators can be applied to String properties and arguments, where case ordering is determined by lexical order of the Strings.</div>
<div>
<br /></div>
<div>
In general, these operators can only be used on properties that are scalar values. They should not be used on properties that are array or collection values.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Text Comparison Queries</h3>
<div>
<br /></div>
<div>
Text comparison queries can be applied to String properties to determine if a portion or all of a property’s value matches a given comparison value. For example:</div>
<div>
<br /></div>
<div>
<i> <b> firstName STARTS WITH "h"</b></i></div>
<div>
<i><b> lastName ENDS WITH "son"</b></i></div>
<div>
<i><b> phoneNumber CONTAINS "33"</b></i></div>
<div>
<i><b> state EQUALS "Utah"</b></i></div>
<div>
<br /></div>
<div>
Be sure to enclose the comparison value in double quotes; otherwise, the RQL parser assumes the operand refers to a property name rather than a value.</div>
<div>
<br /></div>
<div>
By default, text comparison queries are case-sensitive. To perform a case-insensitive comparison, use the IGNORECASE directive. For example:</div>
<div>
<br /></div>
<div>
<i> <b>sports CONTAINS IGNORECASE "ball"</b></i></div>
<div>
<br /></div>
<div>
You can also make a negative text comparison query:</div>
<div>
<br /></div>
<div>
<i> <b>NOT firstName STARTS WITH IGNORECASE "j"</b></i></div>
<div>
<br /></div>
<div>
<b>Note:</b> Negated pattern match queries can cause performance problems. Consider the queries you want to use and plan your database indexes accordingly to avoid table scans. STARTS WITH and EQUALS queries can be optimized easily with database indexes, while other pattern match queries generally cannot be. Case-insensitive pattern matching can also affect the ability of the database to optimize the query.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Property of Property Queries</h3>
<div>
<br /></div>
<div>
The queries shown earlier, as well as those described in the Full Text Search Queries section, can be applied to scalar properties. Some repositories support the use of properties that are themselves an item from another (or the same) item descriptor. For example, the address property might point to another item descriptor which itself has properties like city, state, and zip.</div>
<div>
<br /></div>
<div>
Queries can drill down through these properties with a dot notation. For example:</div>
<div>
<br /></div>
<div>
<i> <b> address.zip = "48322"</b></i></div>
<div>
<br /></div>
<div>
RQL allows for multiple levels of “property-of-property” expressions. For example:</div>
<div>
<br /></div>
<div>
<i> <b>department.manager.address.state = "NY"</b></i></div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Logical Operators</h3>
<div>
<br /></div>
<div>
Query expressions can be combined with AND, OR, and NOT operators. Parentheses can be used to affect grouping. NOT has the highest precedence, AND the next highest precedence, and OR has the lowest precedence. For example, this expression:</div>
<div>
<br /></div>
<div>
<b> <i>name = "joe" OR NOT phone ENDS WITH "7" AND age > 30</i></b></div>
<div>
<br /></div>
<div>
is grouped as follows:</div>
<div>
<br /></div>
<div>
<b> <i><span style="color: #38761d;">(name = "joe" OR </span><span style="color: #3d85c6;">(</span><span style="color: #e06666;">(NOT phone ENDS WITH "7")</span><span style="color: #f1c232;"> </span><span style="color: #3d85c6;">AND age > 30)</span><span style="color: #38761d;">)</span></i></b></div>
</div>
<div>
<b><br /></b></div>
<div>
<h3>
<br /> Collection Queries</h3>
<div>
<br /></div>
<div>
Logical operators and the MATCH and MATCHES operators (described in the later section Full Text Search Queries) should only be applied to scalar properties. Another set of queries can be applied to arrays or collections of scalar values—for example, properties of type int[], or Set of Strings. To query multi-valued properties, use the operators INCLUDES, INCLUDES ANY, and INCLUDES ALL.</div>
<div>
<br /></div>
<div>
The INCLUDES query matches items where the specified property includes the specified value. For example:</div>
<div>
<br /></div>
<div>
<i> <b>interests INCLUDES "biking"</b></i></div>
<div>
<br /></div>
<div>
The INCLUDES query can also match one of a set of items by including the ANY or ALL keyword, followed by a comma-separated set of items that are enclosed in braces. For example:</div>
<div>
<br /></div>
<div>
<i><b>interests INCLUDES ANY { "biking", "swimming" }</b></i></div>
<div>
<br /></div>
<div>
This is equivalent to:</div>
<div>
<br /></div>
<div>
<i> <b>(interests INCLUDES "biking") OR (interests INCLUDES "swimming")</b></i></div>
<div>
<br /></div>
<div>
While this:</div>
<div>
<br /></div>
<div>
<i> <b>interests INCLUDES ALL { "biking", "swimming" }</b></i></div>
<div>
<br /></div>
<div>
is equivalent to:</div>
<div>
<br /></div>
<div>
<i> <b>(interests INCLUDES "biking") AND (interests INCLUDES "swimming")</b></i></div>
</div>
<div>
<i><br /></i></div>
<div>
<h3>
<br /> Includes Item Queries</h3>
<div>
<br /></div>
<div>
Some repositories support properties that are arrays or collections of items belonging to another (or the same) item descriptor. For example, the addresses property might point to an array of items, which themselves have address-related properties.</div>
<div>
<br /></div>
<div>
In this case, RQL allows for a subquery to be defined on these properties. For example:</div>
<div>
<br /></div>
<div>
<i> <b>addresses INCLUDES ITEM (zip = "48322" AND state = "MI")</b></i></div>
<div>
<br /></div>
<div>
This query means “find all people whose list of addresses includes at least one address whose zip code is 48322 and whose state is MI”.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Is Null Queries</h3>
<div>
<br /></div>
<div>
An IS NULL query can determine whether an expression evaluates to null. For example:</div>
<div>
<br /></div>
<div>
<i> <b>phoneNumber IS NULL</b></i></div>
<div>
<br /></div>
<div>
This expression evaluates to true if the phoneNumber is null.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Count Expressions</h3>
<div>
<br /></div>
<div>
The COUNT operator can be used to query on the size of a collection property. For example:</div>
<div>
<br /></div>
<div>
<i> <b>COUNT (addresses) > 3</b></i></div>
<div>
<br /></div>
<div>
This finds all people whose addresses property contains 4 or more elements.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> All Query</h3>
<div>
<br /></div>
<div>
An RQL query of ALL returns all items in a particular item descriptor. Use this query with care, because the result set can be very large. Usually this is combined with an ORDER BY or RANGE directive (described below). The RQL query is simply:</div>
<div>
<br /></div>
<div>
<i> <b>ALL</b></i></div>
</div>
<div>
<i><br /></i></div>
<div>
<h3>
<br /> Full Text Search Queries</h3>
<div>
<br /></div>
<div>
Some content repositories support the ability to perform full text searches. The formats of the text strings and other search directives vary from repository to repository. However, the basic query looks like this:</div>
<div>
<br /></div>
<div>
<i> <b>MATCH "mars"</b></i></div>
<div>
<br /></div>
<div>
This returns those items whose content matches mars in a full text search. (Content repositories allow parts of the item’s data to be designated as “content” for the purposes of display and searching).</div>
<div>
<br /></div>
<div>
Another form of the query allows the full text search to proceed over a particular property:</div>
<div>
<br /></div>
<div>
<i> <b>firstName MATCHES "abr"</b></i></div>
<div>
<br /></div>
<div>
Note that MATCH and MATCHES queries apply only to scalar properties.</div>
<div>
<br /></div>
<div>
Both forms of the query allow a special USING directive to pass special instructions to the underlying search engine. The format of this directive depends on the repository and whatever search engine it uses.</div>
<div>
<br /></div>
<div>
For example, to use the Sybase Full-Text Search Specialty Data Store, the query looks like this:</div>
<div>
<br /></div>
<div>
<i> <b>firstName MATCHES "abr" USING "SYBASE_SDS"</b></i></div>
<div>
<br /></div>
<div>
To use the Oracle ConText full text search engine, the query looks like this:</div>
<div>
<br /></div>
<div>
<i> <b>firstName MATCHES "abr" USING "ORACLE_CONTEXT"</b></i></div>
</div>
<div>
<i><br /></i></div>
<div>
<h3>
<br /> ID-based Queries</h3>
<div>
<br /></div>
<div>
RQL can query items based on their repository IDs. This ability should be used with care, because repository IDs are not portable across repository implementations.</div>
<div>
<br /></div>
<div>
The first query searches for items that match a set of IDs. For example:</div>
<div>
<br /></div>
<div>
<i> <b> ID IN { "0002421", "0002219", "0003244" }</b></i></div>
<div>
<br /></div>
<div>
The next ID-based query applies only to content repositories, where items are organized into folders. This query restricts the search to only those items in the specified folders. The folders must be specified by ID:</div>
<div>
<br /></div>
<div>
<i> <b> IN FOLDERS { "10224", "10923", "12332" }</b></i></div>
<div>
<br /></div>
<div>
Note that passing in an empty or null set of IDs results in an exception.</div>
<div>
<br /></div>
<div>
Composite IDs can be specified in RQL queries with the following format for integers:</div>
<div>
<br /></div>
<div>
<i> <b>[value1, value2 ... valueN]</b></i></div>
<div>
<br /></div>
<div>
String IDs use the format:</div>
<div>
<br /></div>
<div>
<i> <b>["value1", "value2" ... "valueN"]</b></i></div>
<div>
<br /></div>
<div>
So a simple comparison query of a composite ID property might look like:</div>
<div>
<br /></div>
<div>
<i> <b> id = ["dept2", "emp345"]</b></i></div>
<div>
<br /></div>
<div>
Such a query returns an item with a composite repository ID of dept2:emp345. A query like this returns items with any of the IDs dept2:emp345, dept2:emp346, or dept2:emp347:</div>
<div>
<br /></div>
<div>
<i> <b>ID IN { ["dept2", "emp345"], ["dept2", "emp346"], ["dept2", "emp347"] }</b></i></div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Order By Directives</h3>
<div>
<br /></div>
<div>
After a query is defined with the aforementioned query elements, the result is a set of items. The ORDER BY directive orders the results by item properties. For example:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 ORDER BY firstName</b></i></div>
<div>
<br /></div>
<div>
This query returns a result set where items are ordered by the firstName property in ascending order—the default. Results can also be ordered in descending order by adding SORT DESC to the end of the directive:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 ORDER BY firstName SORT DESC</b></i></div>
<div>
<br /></div>
<div>
Results can be ordered by multiple properties. For example:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 ORDER BY lastName, firstName SORT DESC</b></i></div>
<div>
<br /></div>
<div>
This orders results by lastName. If multiple results have the same lastName, within their group they are ordered by firstName in descending order.</div>
<div>
<br /></div>
<div>
A further directive, CASE IGNORECASE, can specify case-insensitive sorting:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 ORDER BY firstName SORT DESC CASE IGNORECASE</b></i></div>
<div>
<br /></div>
<div>
Note that you can omit the tokens SORT and CASE, unless you use parameters for the ASC/DESC or USECASE/IGNORECASE tokens.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Range Directives</h3>
<div>
<br /></div>
<div>
Many queries have the potential for returning large result sets. Most applications do not want to display the entire result set –they might want to display just the first 10 results. Or they might want to page through the results, showing results 0-9, then results 10-19, and so on.</div>
<div>
<br /></div>
<div>
The RANGE directive is used to specify this in the RQL query. The RANGE directive must come after the ORDER BY directive (if any). It has three forms. The first is the most common:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 RANGE +10</b></i></div>
<div>
<br /></div>
<div>
This causes only the first 10 results to be returned. If the result set is already less than 10, all results are returned.</div>
<div>
<br /></div>
<div>
The next form of the RANGE directive allows the results to start at a specified index:</div>
<div>
<br /></div>
<div>
<i> <b> age > 30 RANGE 10+</b></i></div>
<div>
<br /></div>
<div>
This causes the first 10 results to be skipped, and the remaining results to be returned.</div>
<div>
<br /></div>
<div>
The final form of the RANGE directive combines the above two forms, and is often used for paging:</div>
<div>
<br /></div>
<div>
<i> <b>age > 30 RANGE 40+10</b></i></div>
<div>
<br /></div>
<div>
This skips the first 40 results, then returns up to the next 10 results.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Parameters in Queries</h3>
<div>
<br /></div>
<div>
In all of the previous examples, the queries contain hard-coded constants, such as 30 or joe. Most of the time, the actual values used in the query are unknown at the time the RQL statement is written. In these cases, the values may be substituted with parameter expressions. For example:</div>
<div>
<br /></div>
<div>
<i> <b>age > ?0 AND firstName CONTAINS ?1 RANGE ?2+10</b></i></div>
<div>
<br /></div>
<div>
Every ?{number} represents a parameterized value that is filled in when the query is executed. How those values are supplied depends on the application performing the query. In the case of entity EJBs, where RQL queries are used to represent finder methods, the parameters are filled in from the arguments of the finder methods. For example, ?0 is substituted with the value of the first argument, ?1 with the second, and so on.</div>
<div>
<br /></div>
<div>
Parameter expressions can generally be used wherever constant values are used, including in RANGE expressions. However, parameter expressions may not be used in array expressions, such as ID IN or IN FOLDERS queries. Also, parameter expressions may not be used as substitutes for property names; all property names must be hard-coded into the RQL query when it is written.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> Parameterized Field Queries</h3>
<div>
<br /></div>
<div>
When a parameterized query is used, each numbered placeholder is substituted with the value of an entire object at runtime. However, it is sometimes more useful to substitute in the value of one of the object’s fields, rather than the entire value of the object. A parameterized field query specifies this with the syntax ?{number}.{fieldName}. For example:</div>
<div>
<br /></div>
<div>
<i> <b>name = ?0.name AND age = ?0.age</b></i></div>
<div>
<br /></div>
<div>
In this example, only one object is passed into the query at runtime. However, this object is expected to have two public member variables called name and age. The query extracts the values of these member variables from the object and substitute those values for the ?0.name and ?0.age parameters. Note that the fields must be public member variables of the object that is passed in, not JavaBean properties. For example, the following object can be passed in to the query:</div>
<div>
<br /></div>
<div>
<i> <b> <span style="color: purple;">public class</span> QuerySpecifier {</b></i></div>
<div>
<i><b> <span style="color: purple;">public String </span>name;</b></i></div>
<div>
<i><b> <span style="color: purple;">public int</span> age;</b></i></div>
<div>
<i><b> }</b></i></div>
<div>
<br /></div>
<div>
Parameterized Field Queries are used most often for entity EJBs, which allow primary key classes to contain multiple fields. In this case, only one object is passed to the query (the primary key), but if the primary key spans multiple database fields, the primary key object contains the values of those fields in its public member variables.</div>
</div>
<div>
<br /></div>
<div>
<h3>
<br /> RQL Examples</h3>
<div>
<br /></div>
<div>
The following example shows how you might use a parameter expression in Java code. It creates an RqlStatement and uses it in executing a query to find person repository items where the value of the age property is greater than 23.</div>
<div>
<br /></div>
<div style="border: 1px solid black; padding: 10px;">
<div>
RepositoryView view = repository.getView("person");</div>
<div>
RqlStatement statement = RqlStatement.parseRqlStatement("age > ?0");</div>
<div>
<br /></div>
<div>
Object params[] = new Object[1];</div>
<div>
params[0] = new Integer(23);</div>
<div>
<br /></div>
<div>
RepositoryItem [] items = statement.executeQuery (view, params);</div>
</div>
<div>
<br />
Here is another example that demonstrates a text comparison query:</div>
<div>
<br /></div>
<div style="border: 1px solid black; padding: 10px;">
<div>
RqlStatement statement = RqlStatement.parseRqlStatement("lastName STARTS WITH ?0");<br />
<br /></div>
<div>
Object params[] = {new String("m")};<br />
<br /></div>
<div>
items = statement.executeQuery (view, params);</div>
</div>
<div>
<br />
Note how in the text comparison queries the comparison value "m" is enclosed in double quotes; otherwise, the RQL parser assumes the comparison term refers to a property name rather than a property value.<br />
<br />
<h3>
<br />RQL Grammar</h3>
<div>
<br /></div>
The following is a formal definition of the RQL grammar:<br />
<br />
<i> </i><b> RQLStatement::</b><i> <b>Query OrderByClause RangeClause</b></i><br />
<br />
<b><i>Query::</i></b> OR | AND | NOT | Comparison | ID IN | IN FOLDERS | ALL |<br />
TextSearch | PropertyTextSearch | INCLUDES ITEM | IS NULL | (Query)<br />
<br />
The precedence order of the queries from highest to lowest is as follows:<br />
<br />
<ul>
<li>(Query)</li>
</ul>
<ul>
<li>Comparison, ID IN, IN FOLDERS, ALL, TextSearch, PropertyTextSearch, INCLUDES ITEM, IS NULL</li>
</ul>
<ul>
<li>NOT</li>
</ul>
<ul>
<li>AND</li>
</ul>
<ul>
<li>OR</li>
</ul>
<div>
<h3>
<br /> <br /> RQL Grammar Examples</h3>
</div>
<div>
<br /></div>
<ul>
<li><b>OR::</b> Query OR Query ...</li>
</ul>
<ul>
<li><b>AND::</b> Query AND Query ...</li>
</ul>
<ul>
<li><b>NOT::</b> NOT Query</li>
</ul>
<ul>
<li><b>Comparison:: </b>Expression ComparisonOperator Expression</li>
</ul>
<ul>
<li><b>ComparisonOperator::</b> = | != | < | <= | > | >= | INCLUDES ANY | INCLUDES ALL | INCLUDES | STARTS WITH [IGNORECASE] | ENDS WITH [IGNORECASE] | CONTAINS [IGNORECASE]</li>
</ul>
<ul>
<li><b>IdIn::</b> ID IN StringArray</li>
</ul>
<ul>
<li><b>InFolders::</b> IN FOLDERS StringArray</li>
</ul>
<ul>
<li><b>All::</b> ALL</li>
</ul>
<ul>
<li><b>TextSearch:: </b>MATCH StringLiteral [USING StringLiteral]</li>
</ul>
<ul>
<li><b>PropertyTextSearch:: </b>ObjectExpression MATCHES StringLiteral [USING StringLiteral]</li>
</ul>
<ul>
<li><b>IncludesItem:: </b>Expression INCLUDES ITEM ( Query )</li>
</ul>
<ul>
<li><b>Expression:: </b>CountExpression | ObjectExpression | ParameterExpression | ConstantExpression</li>
</ul>
<ul>
<li><b>CountExpression::</b> COUNT ( ObjectExpression | ParameterExpression | ConstantExpression )</li>
</ul>
<ul>
<li><b>ObjectExpression::</b> PropertyName | ObjectExpression.PropertyName | ObjectExpression[Expression]</li>
</ul>
<ul>
<li><b>PropertyName::</b> <Java identifier></li>
</ul>
<ul>
<li><b>ParameterExpression::</b> ?<Parameter number>[.<Field name>]</li>
</ul>
<ul>
<li><b>ConstantExpression:: </b>StringLiteral | IntegerLiteral | DoubleLiteral | BooleanLiteral | ArrayLiteral</li>
</ul>
<ul>
<li><b>StringLiteral::</b> <span style="color: red;">“<Java string literal>“</span></li>
</ul>
<div>
<br /></div>
<span style="color: red;">The string literal</span> uses the Java format, including escape characters (including octal and Unicode), and must be enclosed in double quotes.<br />
<br />
<ul>
<li><b>IntegerLiteral::</b> <Java integer literal></li>
</ul>
<ul>
<li><b>DoubleLiteral:: </b><Java double literal></li>
</ul>
<ul>
<li><b>BooleanLiteral::</b> true | false</li>
</ul>
<ul>
<li><b>ArrayLiteral:: </b>{ ConstantExpression , ... }</li>
</ul>
<ul>
<li><b>StringArray::</b> { StringLiteral , ... }</li>
</ul>
<ul>
<li><b>OrderByClause::</b> ORDER BY PropertyName<span style="color: #38761d;"> </span><span style="color: blue;">[[SORT] [ ASC | DESC]]</span> [CASE [ IGNORECASE | USECASE]]</li>
</ul>
<br />
<span style="color: blue;">The SORT ASC/DESC</span> directives are optional and default to SORT ASC. The CASE IGNORECASE/USECASE directives are optional and default to CASE USECASE.<br />
<br />
<ul>
<li><b>RangeClause::</b> RANGE <Starting Index> + <Count></li>
</ul>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-61948399427733260562015-07-01T14:24:00.000-03:002015-07-01T14:27:31.247-03:00FormHandlers ATG<h2>
<span style="font-family: inherit;">What is </span>Formhandler<span style="font-family: inherit;">?</span></h2>
<div>
<span style="font-family: inherit;"><br />In many web applications users input are taken from the forms. A form may need to handle user input in a variety of formats, check input for validity, handle errors, and pass input to a servlet for processing or to a database for storage. ATG java classes that process these forms are none other than Formhandlers.</span></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">A Formhandler is just like any other component. They can exist out-of-the box, and can be used as-is OR they can be extended like any other component OR they can be created right from scratch.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">To start with, formhandlers mostly are of "request" scope as we dont want our form-data to be manipulated multiple times. If our formhandler's scope is session or global, our submitted form data can be modified within a session or globally by any user worldwide.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">A form handler class must include one or more handler methods. A handler method is typically invoked when the user clicks the submit button, and handles the processing of the form. Depending on the purpose of the form handler, it can have several different handler methods that each perform a different operation.</span><br />
<span style="font-family: inherit;"></span>
<br />
<a name='more'></a><br />
<span style="font-family: inherit;">Following are the tasks assigned to Form Handlers by ATG :</span><br />
<ul>
<li>Validate data before it is submitted.</li>
<li>Detect missing information and display appropriate messages to the user.</li>
<li>Direct users to different pages depending on form submission results.</li>
<li>Read and write database or repository data.</li>
</ul>
<h2>
<br />Out of The Box Formhandlers:</h2>
<span style="font-family: inherit;"><br />ATG provides hundreds of readymade form handlers for performing all sorts of tasks:</span><br />
<ul>
<li>ProfileFormHandler - Handling login/logout/registration etc.</li>
<li>CartModifierFormHandler - For Handling add/remove/update items to/in the cart.</li>
<li>RepositoryFormHandler - For saving data to repository.</li>
<li>ExpressCheckoutFormHandler - For checkout process and placing an order. etc. etc.</li>
</ul>
<br />
<span style="font-family: inherit;">Please note that for every handleXXX method in OOTB formhandlers, there is a preXXX and postXXX method called before and after the actual handler code.</span><br />
<span style="font-family: inherit;">You can chose to override these pre and post methods if necessary rather than overriding the actual handler method itself.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">For example, in ProfileFormHandler, there is a method handleLogin. </span><span style="font-family: inherit;">For this method there are two methods preLoginUser and postLoginUser. </span><span style="font-family: inherit;">Therefore, you can put all your email and password validation in preLoginUser method and some of the post login actions you can override postLoginUser. In these cases you dont need to override the whole handler method itself.</span><br />
<span style="font-family: inherit;">Check the original API for individual formhandler to check these handler and pre/post methods.</span><br />
<br />
<h2>
How to create a formhandler from scratch:</h2>
<span style="font-family: inherit;"><br />A better way to create a new form handler is to subclass a Dynamo class that implements DropletFormHandler interface. Dynamo provides three form handler base classes that implement this interface:</span><br />
<ul>
<li>atg.droplet.DropletFormHandler: Inteface.</li>
<li>atg.droplet.EmptyFormHandler: Implements DropletFormHandler</li>
<li>atg.droplet.GenericFormHandler: Extends EmptyFormHandler</li>
<li>atg.droplet.TransactionalFormHandler: Extends GenericFormHandler. </li>
</ul>
<br />
<span style="font-family: inherit;"><b>EmptyFormHandler: </b>atg.droplet.EmptyFormHandler implements the DropletFormHandler interface and provides empty implementations of the methods in th</span><br />
<span style="font-family: inherit;">is interface.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>GenericFormHandler: </b>atg.droplet.GenericFormHandler extends EmptyFormHandler. It provides simple implementations of DropletFormHandler interface methods and adds basic error handling logic. If errors occur in process<span style="font-family: inherit;">ing a form that uses GenericFormHandler, the errors are saved and exposed as properties of the form handler com</span>ponent. This form handler is included in the public API</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>TransactionalFormHandler: </b>atg.droplet.TransactionalFormHandler extends atg.droplet.GenericFormHandler; it treats the form processing operation as a transaction. Although this form handler methods are processed discretely, their results are saved simultaneously. The transaction management occurs in the beforeGet and afterGet methods. This establishes the transaction before any of properties are set or handler methods are called, rather than in the handler methods themselves.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">You can create a form handler by extending one of these classes or any of their subclasses. Some of the classes that extend the base class in ATG API are:</span><br />
<div>
<div>
<ul>
<li><b>SimpleSQLFormHandler </b>for working with form data that is stored in a SQL database.</li>
<li><b>RepositoryFormHandler </b>for saving repository data to a database.</li>
<li><b>ProfileFormHandler </b>class to connect forms with user profiles stored in a profile repository</li>
<li><b>SearchFormHandler </b>for specifying properties available to a search engine.</li>
</ul>
</div>
</div>
<br />
<br />
<h2>
Steps in Writing a Custom FormHandler:</h2>
<br />
<span style="font-family: inherit;"><b>1. </b>Firstly, there should be a FORM to have fields. So, we create a JSP and create a form. Inside a form, we write the <dsp:input> tags for getting the input from user against the form fields. See below screenshot for details.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJGBaWvN3uBM4hyphenhyphenwSUXsmG_b9ZVT5SoCiXO_GCjGtEfr1Rj4PGvLUlv24-vFHejTENxKOeebI5sZXJJraI_8_pzckzi7961IXBgbu8463aTxpxqLTXvy995MLHHzlrzbgiPRgLF19gnCvN/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJGBaWvN3uBM4hyphenhyphenwSUXsmG_b9ZVT5SoCiXO_GCjGtEfr1Rj4PGvLUlv24-vFHejTENxKOeebI5sZXJJraI_8_pzckzi7961IXBgbu8463aTxpxqLTXvy995MLHHzlrzbgiPRgLF19gnCvN/s320/1.png" width="320" /></a></div>
<br />
<span style="font-family: inherit;">Here, we have created a form with two text fields named, fName and lName with a submit button.</span><br />
<span style="font-family: inherit;">We have not provided a form-action yet. We will be discussing actions in further steps.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>2.</b> Now that you have a fo<span style="font-family: inherit;">rm with some fields, we need to pass it to some JAVA code to process it. The "JAVA code" resides inside</span> our formhandler. </span><span style="font-family: inherit;">In our formhandler (or to say our component which extends GenericFormHandler and has request scope), we should have JAVA fields corresponding to the fields in out JSP form. These JAVA fields can have same name or something else it does not matter. See below screenshot.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjQQHB6C9E7tQ6xxyLOZqOrCRGaKVeseBwIBpZ-OdbpFd4mIvacjhFUaa8u1DmSwwlSi24FWzTYh9uOszlxdcdUgTDs3LpQQaBFVS4XgoDrTcHbd8fsL2mrrX_DzV8uKgok7_TwIYJ9uwF/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjQQHB6C9E7tQ6xxyLOZqOrCRGaKVeseBwIBpZ-OdbpFd4mIvacjhFUaa8u1DmSwwlSi24FWzTYh9uOszlxdcdUgTDs3LpQQaBFVS4XgoDrTcHbd8fsL2mrrX_DzV8uKgok7_TwIYJ9uwF/s320/2.png" width="320" /></a></div>
<br />
<span style="font-family: inherit;">Our class extends GenericFormHandler class, has two fields firstName and lastName which correspond to form fields fName and lName in the JSP.</span><br />
<span style="font-family: inherit;">Next, we have setters and getters for these two fields.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>3.</b> Now we have a form, we have a formhandler with corresponding fields. We need to map the JSP form fields to our formhandler's "corresponding" properties. We do this in our JSP. See below screenshot to see the highlighted changes in the JSP.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNYc9NZugrMCRUwlGHocxi2-3MkuRH8AF_-LrLXK17WACnlrVSQHPrycy3OdwulQM974hIS1cM8CqIK7UrByYAyalRcvoieM6B8NUsuA9YJjiJsIas-pMzYmMmWiLclDjZlmwA-JDycqoP/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNYc9NZugrMCRUwlGHocxi2-3MkuRH8AF_-LrLXK17WACnlrVSQHPrycy3OdwulQM974hIS1cM8CqIK7UrByYAyalRcvoieM6B8NUsuA9YJjiJsIas-pMzYmMmWiLclDjZlmwA-JDycqoP/s320/3.png" width="320" /></a></div>
<br />
<span style="font-family: inherit;">We import the component (configuration file) which points to the class we crated in Step#2. Next, we provide a "bean=" attribute to the <dsp:input> tags to map the text fields to formhandler fields.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>4. </b>Our form is created, we have fields mapped to formhandler. Now we need to submit the form and do some real action. For this, we follow the below steps:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><b>4.1.</b> Create a method named public boolean handleXXX(final DynamoHttpServletRequest pRequest, final DynamoHttpServletResponse pResponse) in your formHandler. Here, "XXX" can be replaced by your logical name. (Below screenshot)</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWBsEU-FzTixcmvUX2sxcBTVTbli1kq2QrzLyEocZHnFX9dS6tReyfDwXNcVgA8lvm1fy1tkcwxWpjffDDxZPrp0G7mtylshunnvmmIoKc_aFZn270fG8FkbBcEfUmrFI4c91At3ZW-6d/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqWBsEU-FzTixcmvUX2sxcBTVTbli1kq2QrzLyEocZHnFX9dS6tReyfDwXNcVgA8lvm1fy1tkcwxWpjffDDxZPrp0G7mtylshunnvmmIoKc_aFZn270fG8FkbBcEfUmrFI4c91At3ZW-6d/s320/4.png" width="320" /></a></div>
<br />
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><b>4.2.</b> This method can access the fields in the formhandler which are mapped to JSP Form Fields.<br /><b>4.3.</b> Write custom code in handleXXX() method to perform specific action (like storing these fields in repository or session or anywhere)<br /><b>4.4.</b> Next you call this custom method from your JSP's submit action. See below screenshot for this. </span></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiut3HH6hcXXx5XtOXLjvf_cJrTkW2DkOnUD7nXIDdiHN4ELqpQ4sYPc3kiJheu_01dtjjOpdtBUrh_IhGc7CzXCiuGQ6GiTDPqAutdOwsrNapYEp8a5O89j6wGzs5uu__JxbRFlCqfJhtp/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiut3HH6hcXXx5XtOXLjvf_cJrTkW2DkOnUD7nXIDdiHN4ELqpQ4sYPc3kiJheu_01dtjjOpdtBUrh_IhGc7CzXCiuGQ6GiTDPqAutdOwsrNapYEp8a5O89j6wGzs5uu__JxbRFlCqfJhtp/s320/5.png" width="320" /></a></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<br /></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><span style="line-height: 21.7777786254883px;">Here, you are telling the submit button to call your handler method written in your java file (your formhandler class). <i>HelloWorldFormHandler.myForm </i>represents your <i>handleMyForm</i> method in your formhandler.</span><span style="line-height: 21.7777786254883px;">Whatever you name your handler method (<i>handleMyForm</i>), just remove the "handle" keyword (it becomes <i>MyForm)</i>, convert the next character into lowercase (it becomes <i>myForm), </i>and use it in your formhandler (marked in red box), and your are good to go.</span></span><br />
<span style="font-family: inherit; line-height: 21.7777786254883px;">Now that we have got our basic flow sorted, you must be wondering, "NO url has been provided in the form for "action" attribute in form tag.</span></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="line-height: 21.7777786254883px;"></span></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: 'Trebuchet MS', sans-serif; line-height: 21.7777786254883px;"><br /></span></div>
<h2 style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333; font-family: inherit; font-size: large;"><span style="line-height: 21.7777786254883px;">How to redirect a form in case of failure or success:</span></span></h2>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: 'Trebuchet MS', sans-serif; line-height: 21.7777786254883px;"><br /></span></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit; line-height: 21.7777786254883px;">The class GenericFormHandler, which you extend, has a method called <i>checkFormRedirect()</i> which is of type boolean. </span><span style="font-family: inherit; line-height: 21.7777786254883px;">You can use this method to control redirects. The API call of this method looks somewhat like:</span><br />
<span style="font-family: inherit; line-height: 21.7777786254883px;"><br /></span>
<span style="font-family: inherit; line-height: 21.7777786254883px;"><b>public boolean</b> checkFormRedirect(pSuccessURL, pFailureURL, </span><span style="font-family: inherit; line-height: 21.7777786254883px;">pRequest,</span><span style="font-family: inherit; line-height: 21.7777786254883px;"> </span><span style="font-family: inherit; line-height: 21.7777786254883px;">pResponse);</span></div>
<span style="font-family: inherit; line-height: 21.7777786254883px;"><br /></span>
<span style="font-family: inherit;"><span style="line-height: 21.7777786254883px;">Now, this method redirects to <i>pSuccessURL </i>if no form errors are found in the form. Otherwise, it redirects to<i>pFailureURL</i>.</span><span style="line-height: 21.7777786254883px;">Therefore, you can use it in the following way (see below screenshot):</span></span><br />
<span style="font-family: inherit;"><span style="line-height: 21.7777786254883px;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7fjAakd0JGCk76pnILfR0tPRg72WI5cJUmu8_2OcfQS2Hgge7K8gvFdkLgo5bsRsEnk-nmHs623Ra7TctHVuxpHTGMCAUZ6Vdwrpw0p3WnTp0DPB1SC737z-Qz6UZL4CqZzaO27sA21jk/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7fjAakd0JGCk76pnILfR0tPRg72WI5cJUmu8_2OcfQS2Hgge7K8gvFdkLgo5bsRsEnk-nmHs623Ra7TctHVuxpHTGMCAUZ6Vdwrpw0p3WnTp0DPB1SC737z-Qz6UZL4CqZzaO27sA21jk/s320/6.png" width="320" /></a></div>
<div style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; margin: 0px; outline: none; padding: 0px;">
<span style="font-family: 'Trebuchet MS', sans-serif; line-height: 21.7777786254883px;"><br /></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333;"><span style="font-family: inherit; line-height: 21.7777786254883px;">Now, in the same class (HelloWorldFormHandler.java), we have added two new variables viz. helloWorldSuccessURL and helloWorldFailureURL. We have setters and getters for these methods. Also, we have called the checkFormRedirect() method in our handler method to redirect to appropriate pages.</span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><span style="color: #333333;"><span style="line-height: 21.7777786254883px;"><br /></span></span></span>
<span style="font-family: inherit;"><span style="color: #333333;"><span style="line-height: 21.7777786254883px;">We can set these success/failure URLs in configuration file for this component (just like we set any other component property in the configuration file), </span></span><span style="color: #333333;"><span style="line-height: 21.7777786254883px;">OR </span></span><span style="color: #333333;"><span style="line-height: 21.7777786254883px;">we could pass it form the JSP (just like we mapped fName and lName to component properties, except, fName and lName were input fields of type "text", these URLs will be of type "hidden"). See below screenshot for the JSP snippet.</span></span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333; font-family: Trebuchet MS, sans-serif;"><span style="font-size: 14px; line-height: 21.7777786254883px;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv4-RV_7_3KFKjJ4dmU1swC24uzCswk-gRClBVaiphh3DauW8y8nVr0YlsOal8yqlEdl2PG-uu5JieGuiEYOGHytHigMoah3uOVJ4tR5FZSeVVHxQzia-ZybGfFCA22KCSLmYRixlx0aqD/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv4-RV_7_3KFKjJ4dmU1swC24uzCswk-gRClBVaiphh3DauW8y8nVr0YlsOal8yqlEdl2PG-uu5JieGuiEYOGHytHigMoah3uOVJ4tR5FZSeVVHxQzia-ZybGfFCA22KCSLmYRixlx0aqD/s320/7.png" width="320" /></a></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333; font-family: Trebuchet MS, sans-serif;"><span style="font-size: 14px; line-height: 21.7777786254883px;"><br /></span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><span style="color: #333333; line-height: 21.7777786254883px;">We're mostly done with the basics of formhandlers but wait. what if you add "action" attribute to your <dsp:form> tag and provide an action URL? How would ATG behave?</span><span style="color: #333333; line-height: 21.7777786254883px;">Let us say you provide "action=<some URL>" in your <dsp:form> tag. Now there could be two scenarios:</span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><span style="color: #333333; line-height: 21.7777786254883px;"><br /></span></span>
<span style="font-family: inherit;"><span style="color: #333333; line-height: 21.7777786254883px;"><b>1.</b> You have used checkFormRedirect() method in your handler method.</span><span style="color: #333333; line-height: 21.7777786254883px;">In this case, the <i>action</i> attribute in the <dsp:form> tag will be ignored.</span></span><br />
<span style="font-family: inherit;"><span style="color: #333333; line-height: 21.7777786254883px;"><b>2. </b>You have NOT used checkFormRedirect() method in your handler method.</span><span style="color: #333333; line-height: 21.7777786254883px;">In this case, your form will redirect to URL mentioned in the <i>action</i> attribute of the <dsp:form> tag irrespective of failure or success.</span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="font-family: inherit;"><span style="color: #333333; line-height: 21.7777786254883px;"><br /></span></span></div>
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333; font-family: 'Trebuchet MS', sans-serif; font-size: 14px; line-height: 21.7777786254883px;"><br /></span></div>
<h2 style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333;"><span style="font-family: inherit; font-size: large; line-height: 21.7777786254883px;">Displaying Error Messages in FormHandlers:</span></span></h2>
<div>
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"><br />Following are the form handler component properties to handle form errors/exceptions:</span></div>
<ul>
<li><span style="color: #333333; line-height: 21.7777786254883px;"><span style="font-family: inherit;"><b>formError:</b> Boolean that is set to true if any errors occur during form processing.</span></span></li>
<li><span style="color: #333333; line-height: 21.7777786254883px;"><span style="font-family: inherit;"><b>formExceptions:</b> A vector of the exceptions that occur during form processing. If your form handler is session-scoped, clear the formExceptions property after you display errors to the user.</span></span></li>
<li><span style="color: #333333; line-height: 21.7777786254883px;"><span style="font-family: inherit;"><b>propertyExceptions:</b> A read-only property that returns a Dictionary of subproperties, one for each property set by the form. For each property that generates an exception, a corresponding subproperty in the propertyExceptions Dictionary contains that exception</span></span></li>
</ul>
<br />
<div>
<span style="color: #333333; font-family: inherit;"><span style="line-height: 21.7777786254883px;">And use this droplet to loop through and display the error messages that are generated by a form:</span></span><br />
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"><dsp: droplet name="/atg/dynamo/droplet/ErrorMessageForEach"></span><span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"> </span><br />
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"> <dsp:oparam name="output"></span><br />
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"> <dsp:valueof param="message"/><br></span><br />
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"> </dsp:oparam></span><br />
<span style="color: #333333; font-family: inherit; line-height: 21.7777786254883px;"></dsp:droplet></span></div>
<div>
<div>
<div style="font-family: inherit; line-height: 21.7777786254883px;">
<span style="color: #333333;"><br /></span></div>
<h2 style="font-family: inherit; line-height: 21.7777786254883px;">
<span style="color: #333333;">
<br /> References:</span></h2>
<span style="color: #333333;"><br /></span>
<br />
<ul><span style="color: #333333;">
<li><span style="line-height: 21.7777786254883px;"><a href="http://learnoracleatg.blogspot.com.br/2014/11/art113-how-to-usecreate-formhandlers-in.html" target="_blank">How to use/create formhandlers in ATG?</a></span></li>
<li><span style="line-height: 21.7777786254883px;"><a href="http://atg-tips.blogspot.com.br/2013/08/custom-form-handlers-in-oracle-atg.html" target="_blank">Custom Form Handlers in oracle ATG</a></span></li>
<li><span style="line-height: 21.7777786254883px;"><a href="http://tips4ufromsony.blogspot.com.br/2012/08/atg-more-about-forms-and-form-handlers.html" target="_blank">More about Forms and Form Handlers</a></span></li>
</span></ul>
</div>
<span style="color: #333333;">
</span></div>
<br />
<div style="margin: 0px; outline: none; padding: 0px;">
<span style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21.7777786254883px;"></span></div>
</div>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-61647666678757867552015-06-29T14:40:00.000-03:002015-06-29T14:40:32.583-03:00XML Files Combination An XML file might appear at several points in the CONFIGPATH. The ATG platform, at runtime, automatically combines all the XML files in the CONFIGPATH with the same name into a single composite file, which is then used by the appropriate component.<br />
When two files are matched up, the way that they are combined is defined by an extra attribute that is specified in file 2 called xml-combine. This attribute is used only to specify how the files are combined, and is removed before the resulting file is generated. The xml-combine attribute can have the following values:<br />
<br />
<ul>
<li>xml-combine="replace"</li>
<li>xml-combine="remove"</li>
<li>xml-combine="append"</li>
<li>xml-combine="append-without-matching"</li>
<li>xml-combine="prepend"</li>
<li>xml-combine="prepend-without-matching"</li>
</ul>
<div>
<a name='more'></a><br /></div>
<style>
.tabs{
width: 100%;
}
.tabs td{
border: 1px solid black;
padding: 10px;
}
</style>
<!-- Replace -->
<br />
<table class="tabs">
<tbody>
<tr>
<td colspan="2"><b>xml-combine="replace"</b></td>
</tr>
<tr>
<td>File 1:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>File 2:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe" xml-combine="replace"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>Resulting File:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
</tbody>
</table>
<!-- /Replace -->
<br />
<br />
<!-- Remove -->
<table class="tabs">
<tbody>
<tr>
<td colspan="2"><b>xml-combine="remove"</b></td>
</tr>
<tr>
<td>File 1:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>File 2:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe" xml-combine="remove"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>Resulting File:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
</tbody>
</table>
<!-- /Remove -->
<br />
<br />
<!-- Append -->
<table class="tabs">
<tbody>
<tr>
<td colspan="2"><b>xml-combine="append"</b></td>
</tr>
<tr>
<td>File 1:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>File 2:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests xml-combine="append"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>Resulting File:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
</tbody>
</table>
<!-- /Append -->
<br />
<br />
<!-- append-without-matching -->
<table class="tabs">
<tbody>
<tr>
<td><b>xml-combine="append-without-matching"</b>
</td>
</tr>
<tr>
<td>This is the same as xml-combine="append", except that embedded files are not matched and combined recursively. The content is simply appended.
</td>
</tr>
</tbody>
</table>
<!-- /append-without-matching -->
<br />
<br />
<!-- Prepend -->
<table class="tabs">
<tbody>
<tr>
<td colspan="2"><b>xml-combine="prepend"</b></td>
</tr>
<tr>
<td>File 1:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>File 2:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests xml-combine="prepend"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
<tr>
<td>Resulting File:
</td>
<td><div class="atgtablecommand">
<code class="code"><people><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <person name="joe"><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="parenting"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="rollerblading"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> <interest interest="bass"/><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </interests><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /> </person><br xmlns:d="http://docbook.org/ns/docbook" xmlns="" /></people></code>
</div>
</td>
</tr>
</tbody>
</table>
<!-- /Prepend -->
<br />
<br />
<!-- prepend-without-matching -->
<table class="tabs">
<tbody>
<tr>
<td><b>xml-combine="prepend-without-matching"</b>
</td>
</tr>
<tr>
<td>This is the same as "prepend", except that embedded files are not matched and combined recursively. The content is simply prepended.
</td>
</tr>
</tbody>
</table>
<!-- /prepend-without-matching -->
<br />
<br />
References:<br />
<br />
<ul>
<li><a href="http://tips4ufromsony.blogspot.com.br/2013/06/atg-and-xml-file-combination.html" target="_blank">ATG and XML File Combination</a></li>
<li><a href="http://docs.oracle.com/cd/E23507_01/Platform.20073/ATGProgGuide/html/s0207combiningtwotags01.html" target="_blank">Combining Two Tags</a></li>
</ul>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-7067498824074362832015-06-25T12:00:00.001-03:002015-06-25T13:56:52.764-03:00Product Catalog Database Diagram Devido a baixa cobertura da documentação Oracle ATG e a grande quantidades de tabelas no banco de dados, há uma certa dificuldade em visualizar graficamente as relações entre as entidades.<br />
Para melhor entendimento do relacionamento entre as tabelas, segue abaixo três imagens do diagrama de entidade relacional do Catalogo de Produtos.<br />
<br />
<b>English version: </b><br />
Due to low coverage of Oracle ATG documentation and the large amounts of tables in database, there is some difficulty in graphically display the relationships between entities.<br />
For a better understanding of the relationship between the tables, see below three pictures of the Product Catalog entity relational diagram.<br />
<br />
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjarjhJcBqQCRwKhik95vqnvhP0iuQoqIrYWRzIfTRXhElanabDdhAtarODRHjS_mkS-c6TStvYH96P1y5LgzGgA2NVO3EmNOygehKaNraVGP0C-Z4u4Z03FhfUqLDXdOBVCXuH-4XaqAc/s1600/Product+Catalog+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjarjhJcBqQCRwKhik95vqnvhP0iuQoqIrYWRzIfTRXhElanabDdhAtarODRHjS_mkS-c6TStvYH96P1y5LgzGgA2NVO3EmNOygehKaNraVGP0C-Z4u4Z03FhfUqLDXdOBVCXuH-4XaqAc/s320/Product+Catalog+1.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczE29eGiS8YXuzJD0piD7_MH1_vGJ3BjxdrjNNbObmWIJFDxfJp2iF6k2CYIE8OuJyyxDSHDIZmYq8BVppcvCpff7MRp4Tus6NA5EmXRpOkViJ7sL85jcSgJptRAKAVDljvAy4QwLtyrB/s1600/Product+Catalog+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiczE29eGiS8YXuzJD0piD7_MH1_vGJ3BjxdrjNNbObmWIJFDxfJp2iF6k2CYIE8OuJyyxDSHDIZmYq8BVppcvCpff7MRp4Tus6NA5EmXRpOkViJ7sL85jcSgJptRAKAVDljvAy4QwLtyrB/s320/Product+Catalog+2.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQf_ZCEAGYjjVogqioHJkudPvcOvoX-tngJ28dHKZv8asmt2jFeP2ozc_EYNXVIWI-Nv0S8vILVdRe2-lpdycXsQUSCpgTt8rqoOSKWXHgu1Sv3ZR0X8vq25iabI_WqQqmaaKVlW_RC4b/s1600/Product+Catalog+3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQf_ZCEAGYjjVogqioHJkudPvcOvoX-tngJ28dHKZv8asmt2jFeP2ozc_EYNXVIWI-Nv0S8vILVdRe2-lpdycXsQUSCpgTt8rqoOSKWXHgu1Sv3ZR0X8vq25iabI_WqQqmaaKVlW_RC4b/s320/Product+Catalog+3.jpg" width="320" /></a></div>
<br />
<b>More Diagrams:</b><br />
<br />
<ul>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/order-database-diagram.html" target="_blank">Order Database Diagram</a></li>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/user-profile-database-diagram.html" target="_blank">User Profile Database Diagram</a></li>
</ul>
<br />
<br />
References:<br />
<ul>
<li><a href="http://tips4ufromsony.blogspot.com.br/2012/01/atg-product-catalog-schema-er-diagram.html" target="_blank">ATG Product Catalog schema ER diagram</a></li>
</ul>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-40702819831769525922015-06-25T11:13:00.000-03:002015-06-25T14:00:03.987-03:00Order Database Diagram Devido a baixa cobertura da documentação Oracle ATG e a grande quantidades de tabelas no banco de dados, há uma certa dificuldade em visualizar graficamente as relações entre as entidades.<br />
Para melhor entendimento do relacionamento entre as tabelas, segue abaixo duas imagens do diagrama de entidade relacional da Ordem.<br />
<br />
<b>English version: </b><br />
Due to low coverage of Oracle ATG documentation and the large amounts of tables in database, there is some difficulty in graphically display the relationships between entities.<br />
For a better understanding of the relationship between the tables, see below two pictures of the Order entity relational diagram.<br />
<br />
<a name='more'></a><div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAhhLzovG_tA0OXrCvGinzjnMjjs3kDHS4i6hxqOPE7c6kDR6plVa4SbcBuMJVKl_r7wBDLMefDcUQ3_YELV5Ls5Al9FsLioj3tHzgW8s05Joj6S6mt9q5NKes7m75Mkzsw_2OO5Ay8Gwn/s1600/Order+ER+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAhhLzovG_tA0OXrCvGinzjnMjjs3kDHS4i6hxqOPE7c6kDR6plVa4SbcBuMJVKl_r7wBDLMefDcUQ3_YELV5Ls5Al9FsLioj3tHzgW8s05Joj6S6mt9q5NKes7m75Mkzsw_2OO5Ay8Gwn/s400/Order+ER+1.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbTS3EAiE5WrAhsQjk5h_cryyyEQ7Ix0dtTV0JmoLpD0Rg1UZM1Q8GaA-lx268bLEuFB4ukT2givE6l5fab3vUzcZ4DkUaHX2NOEDDmv25RtgvDqEwrBwU5j3Dyh0omBcpfie8yOB2wFJz/s1600/Order+ER+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbTS3EAiE5WrAhsQjk5h_cryyyEQ7Ix0dtTV0JmoLpD0Rg1UZM1Q8GaA-lx268bLEuFB4ukT2givE6l5fab3vUzcZ4DkUaHX2NOEDDmv25RtgvDqEwrBwU5j3Dyh0omBcpfie8yOB2wFJz/s400/Order+ER+2.jpg" width="400" /></a></div>
<br />
<b>More Diagrams:</b><br />
<br />
<ul>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/user-profile-database-diagram.html" target="_blank">User Profile Database Diagram</a></li>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/product-catalog-database-diagram.html" target="_blank">Product Catalog Database Diagram</a></li>
</ul>
<br />
<br />
References:<br />
<div>
<ul>
<li><a href="http://tips4ufromsony.blogspot.com.br/2012/02/atg-order-schema-er-diagram.html" target="_blank">ATG Order schema ER diagram</a></li>
</ul>
</div>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-31740100966802579782015-06-25T10:44:00.002-03:002015-06-25T13:55:27.546-03:00User Profile Database Diagram Devido a baixa cobertura da documentação Oracle ATG e a grande quantidades de tabelas no banco de dados, há uma certa dificuldade em visualizar graficamente as relações entre as entidades.<br />
Para melhor entendimento do relacionamento entre as tabelas, segue abaixo uma imagem do diagrama de entidade relacional do Perfil do Usuário.<br />
<b><br /></b>
<b>English version:</b><b> </b><br />
Due to low coverage of Oracle ATG documentation and the large amounts of tables in database, there is some difficulty in graphically display the relationships between entities.<br />
For a better understanding of the relationship between the tables, see below a picture of the User Profile entity relational diagram.<br />
<br />
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaLIQ0CsdU1jWArzM-ZTy0DcdUiM7sFyPAxQMwK9p2Xe68nhHd0rBtnaCw5zwB43Fz1x7BprYi0xieDy7e44sVYTKMlwmeJb3kcZmLIy3pKR1PjKXdBBhl2iRDm5ramqYF4Zrerh28W_n2/s1600/ATG+User+Schema.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="391" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaLIQ0CsdU1jWArzM-ZTy0DcdUiM7sFyPAxQMwK9p2Xe68nhHd0rBtnaCw5zwB43Fz1x7BprYi0xieDy7e44sVYTKMlwmeJb3kcZmLIy3pKR1PjKXdBBhl2iRDm5ramqYF4Zrerh28W_n2/s400/ATG+User+Schema.JPG" width="400" /></a></div>
<br />
<b>More Diagrams:</b><br />
<br />
<ul>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/order-database-diagram.html" target="_blank">Order Database Diagram</a></li>
<li><a href="http://atgendecabr.blogspot.com.br/2015/06/product-catalog-database-diagram.html" target="_blank">Product Catalog Database Diagram</a></li>
</ul>
<br />
<br />
References:<br />
<ul>
<li><a href="http://tips4ufromsony.blogspot.com.br/2012/03/atg-user-profile-schema-er-diagram.html" target="_blank">ATG User Profile schema ER diagram</a></li>
</ul>
Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-49529209869313420122015-06-19T11:38:00.000-03:002015-06-23T10:49:51.681-03:00Oracle Commerce<h2>
History</h2>
<br />
We already have in our blog about Oracle Commerce history. You can check by accessing the post <a href="http://atgendecabr.blogspot.com.br/2015/03/atg-web-commerce-history.html" target="_blank">ATG Web Commerce History</a>.<br />
<br />
<h2>
Overview</h2>
<br />
Deliver Personalized and Optimized Experiences.<br />
Innovate as the market changes and expand quickly and easily to new touchpoints and geographies.<br />
<ul>
<li>Provides a proven, scalable, modern platform, business-user control, and omnichannel support.</li>
<li>Empowers marketers and merchants to manage omnichannel experiences, personalization, search and navigation, promotions, content, and more.</li>
<li>Enables the rapid launch of sites for new brands, markets, and even single-purpose campaigns.</li>
<li>Easily expands internationally to target new geographies and segments more effectively.</li>
<li>Includes B2B and B2C modules to better support different business and selling models.<br /><br /><a name='more'></a></li>
</ul>
<h2>
Features</h2>
<b><br />Scale and Performance</b><br />
Process data and deliver dynamic experiences at unparalleled scale.<br />
Efficiently expand to multichannel, multisite, multibrand, multilanguage, and multicurrency environments.<br />
<br />
<b>Data Anywhere Architecture</b><br />
Accelerate integrations and minimize integration costs with a flexible architecture.<br />
<br />
<b>Unified Multisite Architecture</b><br />
Share commerce and personalization resources, including content and components, between commerce sites.<br />
<br />
<b>Adaptive Personalization Engine</b><br />
Choreograph customer interactions to drive predesigned dialogues for a personalized commerce experience.<br />
Personalize content to target organizations, roles, individuals or customized segments.<br />
Leverage dynamic customer profiles and segments, updated continuously based on new interactions.<br />
<br />
<b>Best-in-Class Search and Guided Navigation</b><br />
Provide superior search for the most relevant results through transparent relevance rank controls, thesaurus, and keyword redirection.<br />
Provide visitors with guided navigation that dynamically summarizes results based on available metadata.<br />
<br />
<b>Advanced Segments and Targeted Content</b><br />
Target high-value groups with select products and promotions.<br />
Define segments based on demographics or on-site behavior.<br />
Use profile attributes to quickly place customers into segments.<br />
<br />
<b>Search Engine Optimization</b><br />
Surface all dynamic commerce-created pages in web search engines.<br />
<br />
<b>Reporting and Big Data Analytics</b><br />
Monitor and analyze commerce and customer behavior with fully integrated, interactive big data analytics capabilities that provide insight into key metrics and customer activity.<br />
<br />
<h2>
Popularity</h2>
<br />
<a href="https://www.sparkred.com/blog/2013-leading-ecommerce-platforms-for-the-top-100-online-retailers-research/" target="_blank">2013 Leading eCommerce Platforms For The Top 100 Online Retailers (America)</a><br />
<a href="https://www.sparkred.com/blog/2014-leading-ecommerce-platforms-for-the-top-100-online-retailers-america/" target="_blank">2014 Leading eCommerce Platforms For The Top 100 Online Retailers (America)</a><br />
<a href="http://www.powerretail.com.au/news/gartner-rates-2014-e-commerce-platforms/" target="_blank">Gartner Rates 2014 E-Commerce Platforms</a><br />
<a href="https://www.g2crowd.com/categories/e-commerce-platform" target="_blank">Compare Best E-Commerce Platform</a><br />
<a href="http://www.vizteams.com/blog/free-open-source-e-commerce-platforms-review/" target="_blank">TOP E-COMMERCE PLATFORMS CHOICES – 2014</a><br />
<br />
<h2>
Training</h2>
<br />
View the <a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=740" target="_blank">Guide to Selecting the Right Training</a> for Oracle Commerce, including ATG Web Commerce and Endeca Commerce, to help you identify the appropriate courses for your specific situation.<br />
<br />
<br />
<ul>
<li><a href="http://education.oracle.com/pls/web_prod-plq-dad/ou_product_category.getPage?p_cat_id=456" target="_blank">Oracle Commerce Business User</a><br />The platform for Oracle Commerce business users enables you to make every sales interaction relevant to each client. With Oracle Commerce Business User training learn to take control of the advertising process, including product catalog, pricing, promotions and profile management.</li>
<li><a href="http://education.oracle.com/pls/web_prod-plq-dad/ou_product_category.getPage?p_cat_id=457" target="_blank">Oracle Commerce Developer</a><br />Oracle Commerce Developer training provides you the basic knowledge and practical experience to extend Oracle Commerce platform and customize the guided search. Deliver personalized content using the Experience Manager.</li>
<li><a href="http://education.oracle.com/pls/web_prod-plq-dad/ou_product_category.getPage?p_cat_id=458" target="_blank">Oracle Commerce System Administrator</a><br />With Oracle Commerce System Administrator training will learn how to manage their Oracle Commerce production environment. Enroll in this hands-on training to become more efficient in supporting Oracle Commerce application.</li>
</ul>
<br />
<br />
<h2>
Contact</h2>
<br />
<ul>
<li><a href="http://www.oracle.com/br/corporate/contact/index.html" target="_blank">Brasil</a></li>
<li><a href="http://www.oracle.com/us/corporate/contact/index.html" target="_blank">USA</a></li>
<li><a href="http://www.oracle.com/us/corporate/contact/global-070511.html" target="_blank">More...</a></li>
</ul>
<br />
<h2>
References</h2>
<br />
<ul>
<li><a href="http://atgendecabr.blogspot.com.br/2015/03/atg-web-commerce-historia.html" target="_blank">History</a></li>
<li><a href="https://www.oracle.com/applications/customer-experience/commerce/products/commerce-platform/index.html" target="_blank">Overview</a></li>
<li><a href="https://www.oracle.com/applications/customer-experience/commerce/products/commerce-platform/features.html" target="_blank">Features</a></li>
<li><a href="http://education.oracle.com/pls/web_prod-plq-dad/ou_product_category.getFamilyPage?p_family_id=454" target="_blank">Training</a></li>
<li><a href="http://www.oracle.com/us/corporate/contact/global-070511.html" target="_blank">Contacts</a></li>
</ul>
<br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-1072167622873491552015-06-18T14:57:00.001-03:002015-06-23T11:21:54.218-03:00ATG Droplet List<style>
label {
font-size: 30px;
font-weight: bold;
}
.table table, .table th, .table td {
border: 1px solid black;
border-collapse: collapse;
font-size: 11.5px;
}
</style>
<label>Standard Droplets</label>
<br />
<table class="table" style="border-collapse: collapse; border: 1px solid black;">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>BeanProperty</b>
<br />
<hr />
/atg/dynamo/droplet/BeanProperty
</td>
<td class="Function">Sets any property value by dynamically specifying the property and value to update
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Cache</b>
<br />
<hr />
/atg/dynamo/droplet/Cache
</td>
<td class="Function">Caches content that changes infrequently
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Compare</b>
<br />
<hr />
/atg/dynamo/droplet/Compare
</td>
<td class="Function">Displays one of a set of possible outputs, depending on the relative value of its two input parameters
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>CurrencyConversionFormatter</b>
<br />
<hr />
/atg/dynamo/droplet/CurrencyConversionFormatter
</td>
<td class="Function">Displays a numeric value as a currency amount, and converts a value from one currency to another, formatting it based on the locale
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>CurrencyFormatter</b>
<br />
<hr />
/atg/dynamo/droplet/CurrencyFormatter
</td>
<td class="Function">Displays a numeric value as a currency amount, formatting it based on the locale
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>ErrorMessageForEach</b>
<br />
<hr />
/atg/dynamo/droplet/ErrorMessageForEach
/atg/userprofiling/ProfileErrorMessageForEach
/atg/demo/QuincyFunds/FormHandlers/RepositoryErrorMessageForEach
</td>
<td class="Function">Displays error messages that occur during a form submission
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>For</b>
<br />
<hr />
/atg/dynamo/droplet/For
</td>
<td class="Function">Displays a single output the number of times specified
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>ForEach</b>
<br />
<hr />
/atg/dynamo/droplet/ForEach
</td>
<td class="Function">Displays each element of an array
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Format</b>
<br />
<hr />
/atg/dynamo/droplet/Format
</td>
<td class="Function">Displays one or more text values, formatting them based on locale
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>IsEmpty</b>
<br />
<hr />
/atg/dynamo/droplet/IsEmpty
</td>
<td class="Function">Displays one of two possible outputs, depending on whether its input parameter is empty
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>IsNull</b>
<br />
<hr />
/atg/dynamo/droplet/IsNull
</td>
<td class="Function">Displays one of two possible outputs, depending on whether its input parameter is null
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>ProtocolChange</b>
<br />
<hr />
/atg/dynamo/droplet/ProtocolChange
</td>
<td class="Function">Enables switching between http and https protocols
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Range</b>
<br />
<hr />
/atg/dynamo/droplet/Range
</td>
<td class="Function">Displays a subset of the elements of an array
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Redirect</b>
<br />
<hr />
/atg/dynamo/droplet/Redirect
</td>
<td class="Function">Redirects the user to the specified page
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>Switch</b>
<br />
<hr />
/atg/dynamo/droplet/Switch
</td>
<td class="Function">Displays one of a set of possible outputs, depending on the value of its input parameter
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>TableForEach</b>
<br />
<hr />
/atg/dynamo/droplet/TableForEach
</td>
<td class="Function">Displays each element of an array, arranging the output in a two-dimensional format
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.<b>TableRange</b>
<br />
<hr />
/atg/dynamo/droplet/TableRange
</td>
<td class="Function">Displays a subset of the elements of an array, arranging the output in a two-dimensional format
</td>
</tr>
</tbody></table>
<br />
<a name='more'></a><br /><br />
<br />
<label>Database and Repository Access Droplets</label>
<br />
<table class="table">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.seo.<b>ItemLink</b>
</td>
<td class="Function">Takes a repository item as input and generates either a static or dynamic URL, depending on whether the page it is on is being viewed by a human visitor or a Web spider.
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.servlet.<b>ItemLookupDroplet</b>
<br />
<hr />
/atg/dynamo/droplet/ItemLookupDroplet
</td>
<td class="Function">Looks up an item in one or more repositories, based on the item’s ID, and renders the item on the page
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.servlet.<b>NavHistoryCollector</b>
</td>
<td class="Function">Tracks each page that a user visits and makes it easy for that user to backtrack and return to pages he or she has already visited
</td>
</tr>
<tr>
<td class="ClassName">atg.service.pipeline.servlet.<b>PipelineChainInvocation</b>
<br />
<hr />
/atg/dynamo/droplet/PipelineChainInvocation
</td>
<td class="Function">Initiates a pipeline thread
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.servlet.<b>PossibleValues</b>
<br />
<hr />
/atg/dynamo/droplet/PossibleValues
</td>
<td class="Function">Returns a list of repository items of the specified item type
</td>
</tr>
<tr>
<td class="ClassName">atg.rview.<b>RelationalViewDroplet</b>
<br />
<hr />
/atg/dynamo/service/jdbc/RelationalViewDroplet
</td>
<td class="Function">Specifies a RelationalView and subview, executes a query, and then passes the results of that query to another servlet bean (such as ForEach) for display
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.servlet.<b>RQLQueryForEach</b>
<br />
<hr />
/atg/dynamo/droplet/RQLQueryForEach
</td>
<td class="Function">Constructs an RQL query and renders its output parameter once for each element returned by the query
</td>
</tr>
<tr>
<td class="ClassName">atg.repository.servlet.<b>RQLQueryRange</b>
<br />
<hr />
/atg/dynamo/droplet/RQLQueryRange
</td>
<td class="Function">Constructs an RQL query of a SQL database and renders its output parameter for a selected subset of the elements returned by the query
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.sql.<b>SQLQueryForEach</b>
<br />
<hr />
/atg/dynamo/droplet/SQLQueryForEach
</td>
<td class="Function">Constructs a query of a SQL database and renders its output parameter once for each row returned by the database query
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.sql.<b>SQLQueryRange</b>
<br />
<hr />
/atg/dynamo/droplet/SQLQueryRange
</td>
<td class="Function">Constructs a query of a SQL database and renders its output parameter once for each of a specified range of the rows returned by the database query
</td>
</tr>
</tbody></table>
<br />
<br />
<label>XML Droplets</label>
<br />
<table class="table">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.xml.<b>NodeForEach</b>
<br />
<hr />
/atg/dynamo/droplet/xml/NodeForEach
</td>
<td class="Function">Given a DOM node, selects all nodes that match a specified pattern and iterates over each selected node
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.xml.<b>NodeMatch</b>
<br />
<hr />
/atg/dynamo/droplet/xml/NodeMatch
</td>
<td class="Function">Given a DOM node, selects the next node that matches a specified pattern
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.xml.<b>DOM</b>
<br />
<hr />
/atg/dynamo/droplet/xml/XMLToDOM
</td>
<td class="Function">Parses an XML document and transforms it into a DOM document, making the document’s nodes and attributes available as objects and object properties
</td>
</tr>
<tr>
<td class="ClassName">atg.droplet.xml.<b>XMLTransform</b>
<br />
<hr />
/atg/dynamo/droplet/xml/XMLTransform
</td>
<td class="Function">Given an XML document and an XSLT or JSP template, transforms and outputs the XML document, with the formatting provided by the template
</td>
</tr>
</tbody></table>
<br />
<br />
<label>Transaction Droplets</label>
<br />
<table class="table">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.dtm.<b>EndTransactionDroplet</b>
<br />
<hr />
/atg/dynamo/transaction/droplet/EndTransaction
</td>
<td class="Function">Commits or rolls back the current transaction
</td>
</tr>
<tr>
<td class="ClassName">atg.dtm.<b>TransactionDroplet</b>
<br />
<hr />
/atg.dtm.TransactionDroplet
</td>
<td class="Function">Marks the bounds of a transaction within a JSP
</td>
</tr>
</tbody></table>
<br />
<br />
<label>Personalization Droplets</label>
<br />
<table class="table">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>AddMarkerToProfile</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/AddMarkerToProfileDroplet
</td>
<td class="Function">Add a profile marker to a profile
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>ProfileHasLastMarker</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/ProfileHasLastMarkerDroplet
</td>
<td class="Function">Locates the last profile marker added to a profile
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>ProfileHasLastMarkerWithKey</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/ProfileHasLastMarkerWithKeyDroplet
</td>
<td class="Function">Locates the last profile marker with a particular key that was added to a profile
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>ProfileHasMarker</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/ProfileHasMarkerDroplet
</td>
<td class="Function">Determines whether a profile has a profile marker
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>RemoveAllMarkersFromProfile</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/RemoveAllMarkersFromProfileDroplet
</td>
<td class="Function">Removes all profile markers from a profile
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.userprofiling.droplet.<b>RemoveMarkersFromProfile</b>
<br />
<hr />
/atg/markers/userprofiling/droplet/RemoveMarkersFromProfileDroplet
</td>
<td class="Function">Removes a profile marker from a profile
</td>
</tr>
<tr>
<td class="ClassName">atg.service.collections.filter.droplet.<b>CollectionFilter</b>
<br />
<hr />
/atg/collections/filter/droplet/StartEndDateFilterDroplet
</td>
<td class="Function">Filters objects in a collection
</td>
</tr>
<tr>
<td class="ClassName">atg.userprofiling.<b>GetDirectoryPrincipal</b>
<br />
<hr />
/atg/userprofiling/GetDirectoryPrincipal
</td>
<td class="Function">Returns the DirectoryPrincipal for a specified type and ID
</td>
</tr>
<tr>
<td class="ClassName">atg.userprofiling.<b>HasEffectivePrincipal</b>
<br />
<hr />
/atg/userprofiling/HasEffectivePrincipal
</td>
<td class="Function">Fires a content event if a user has the appropriate Principal (identity)
</td>
</tr>
<tr>
<td class="ClassName">atg.userprofiling.<b>PageEventTriggerDroplet</b>
<br />
<hr />
/atg/userprofiling/SendPageEvent
</td>
<td class="Function">Sends page viewed events for the current page being viewed
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>RuleBasedRepositoryItemGroupFilter</b>
<br />
<hr />
/atg/targeting/RuleBasedRepositoryItemGroupFilter
</td>
<td class="Function">Renders a collection of RepositoryItems that belong to the specified RuleBasedRepositoryItemGroup
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>RepositoryLookup</b>
<br />
<hr />
/atg/targeting/RepositoryLookup
</td>
<td class="Function">Looks up an item in a specific repository, based on the item’s ID, and renders the item on the page
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>TargetingArray</b>
<br />
<hr />
/atg/targeting/TargetingArray
</td>
<td class="Function">Performs a targeting operation and then passes the results to another servlet bean for display
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>TargetingFirst</b>
<br />
<hr />
/atg/targeting/TargetingFirst
</td>
<td class="Function">Performs a targeting operation and displays the first n items returned by the targeter, where n is a number you specify
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>TargetingForEach</b>
<br />
<hr />
/atg/targeting/TargetingForEach
</td>
<td class="Function">Performs a targeting operation and displays all of the items returned by the targeter
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>TargetingRandom</b>
<br />
<hr />
/atg/targeting/TargetingRandom
</td>
<td class="Function">Performs a targeting operation and randomly selects and displays n items returned by the targeter, where n is a number you specify
</td>
</tr>
<tr>
<td class="ClassName">atg.targeting.<b>TargetingRange</b>
<br />
<hr />
/atg/targeting/TargetingRange
</td>
<td class="Function">Performs a targeting operation and displays a subset of the items returned by the targeter, specified as a range
</td>
</tr>
<tr>
<td class="ClassName">atg.workflow.servlet.<b>WorkflowInstanceQueryDroplet</b>
</td>
<td class="Function">Returns information about a specified set of workflow instances
</td>
</tr>
<tr>
<td class="ClassName">atg.workflow.servlet.<b>WorkflowTaskQueryDroplet</b>
</td>
<td class="Function">Returns information about a specified set of workflow tasks
</td>
</tr>
</tbody></table>
<br />
<br />
<br />
<label>Business Process Tracking Droplets</label>
<br />
<table class="table">
<tbody>
<tr>
<td class="ClassName"><b>Class Name</b>
<br />
<hr />
<b>Component</b>
</td>
<td class="Function"><b>Function</b>
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.bp.droplet.<b>AddBusinessProcessStage</b>
<br />
<hr />
/atg/markers/bp/droplet/AddBusinessProcessStageDroplet
</td>
<td class="Function">Adds a marker when a business object reaches a new business process stage
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.bp.droplet.<b>HasBusinessProcessStage</b>
<br />
<hr />
/atg/markers/bp/droplet/HasBusinessProcessStageDroplet
</td>
<td class="Function">Tests whether a business object has reached a specified business process stage
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.bp.droplet.<b>MostRecentBusinessProcessStage</b>
<br />
<hr />
/atg/markers/bp/droplet/MostRecentBusinessProcessStageDroplet
</td>
<td class="Function">Tests whether the business process stage most recently reached by a business object matches the specified stage
</td>
</tr>
<tr>
<td class="ClassName">atg.markers.bp.droplet.<b>RemoveBusinessProcessStage</b>
<br />
<hr />
/atg/markers/bp/droplet/RemoveBusinessProcessStageDroplet
</td>
<td class="Function">Removes a specified business process stage
</td>
</tr>
</tbody></table>
Jonathanhttp://www.blogger.com/profile/11174519393590215316noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-68679184745713200702015-06-17T13:47:00.000-03:002015-06-17T14:53:21.929-03:00DSP Tag Libraries The DSP tag library lets you work with Nucleus components and other dynamic elements in your JSPs. DSP library tags support both runtime expressions, such as references to scripting variables, and the JSTL Expression Language (EL) elements, which also evaluated at runtime.
<br />
DSP tag names and attributes that have equivalent names in HTML, JSP, or WML typically replicate the functionality of the corresponding tag while providing extra functionality. One exception applies: the iclass attribute is used in place of the class attribute to avoid using a standard method name in Java code.<br />
<br />
See tags table below...<br />
<br />
<br />
<a name='more'></a><br />
<br />
<style>
#conteudo{
border: 1px solid black;
}
#conteudo td{
border: 1px solid black;
padding: 5px;
}
</style>
<br />
<table id="conteudo">
<thead>
<tr>
<th><br />
TAGs:<br />
<br /></th>
<th><br />
Summary description:<br />
<br /></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1302dspa01.html" target="_blank"><dsp:a> </a></td>
<td>Supports passing values to component properties and page parameters on click-through. Also handles URL rewriting.
</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1303dspbegintransaction01.html" target="_blank"><dsp:beginTransaction></a></td>
<td>Starts a transaction.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1304dspcommittransaction01.html" target="_blank"><dsp:commitTransaction></a></td>
<td>Completes a transaction.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1305dspcontains01.html" target="_blank"><dsp:contains></a></td>
<td>Determines whether a Collection contains a specific single valued item.<br />
<br />
<b>Mandatory Attributes:</b><br />
- values</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1306dspcontainsejb01.html" target="_blank"><dsp:containsEJB></a></td>
<td>Determines whether a Collection contains an EJB.<br />
<br />
<b>Mandatory Attributes:</b><br />
- values<br />
- ejb</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1307dspdemarcatetransaction01.html" target="_blank"><dsp:demarcateTransaction></a></td>
<td>Manages a transaction by starting the transaction, checking for errors, rolling back the transaction when errors are found and committing it when they are not.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1308dspdroplet01.html" target="_blank"><dsp:droplet></a></td>
<td>Invokes an ATG Servlet Bean.<br />
<br />
<b>Mandatory Attributes:</b><br />
- name</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1309dspequalejb01.html" target="_blank"><dsp:equalEJB></a></td>
<td>Determines whether two EJBs have the same primary keys.<br />
<br />
<b>Mandatory Attributes:</b><br />
- ejb1<br />
- ejb2</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1310dspform01.html" target="_blank"><dsp:form></a></td>
<td>Encloses a form that can send DSP form events.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1311dspframe01.html" target="_blank"><dsp:frame></a></td>
<td>Embeds a page by encoding the frame src URL.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1312dspgetvalueof01.html" target="_blank"><dsp:getvalueof></a></td>
<td>Creates an EL variable that references the specified component property or page parameter.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1313dspgo01.html" target="_blank"><dsp:go></a></td>
<td>Encloses a form that can send WML form events.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1314dspiframe01.html" target="_blank"><dsp:iframe></a></td>
<td>Embeds a dynamic page, by encoding the frame src URL.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1315dspimg01.html" target="_blank"><dsp:img></a></td>
<td>Inserts an image.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1316dspimportbean01.html" target="_blank"><dsp:importbean></a></td>
<td>Imports a Nucleus component into a page so it can be referred to without using its entire pathname. Also, creates a reference to a Nucleus component in an attribute visible to EL expressions.<br />
<br />
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1317dspinclude01.html" target="_blank"><dsp:include></a></td>
<td>Embeds a page into another page.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1318dspinput01.html" target="_blank"><dsp:input></a></td>
<td>Passes values to a component property on submission.<br />
<br />
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1321dsplink01.html" target="_blank"><dsp:link></a></td>
<td>References a page, such as a stylesheet, by encoding the link src URLs.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1322dspoparam01.html" target="_blank"><dsp:oparam></a></td>
<td>Specifies content to be rendered by an enclosing dsp:droplet tag.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1323dspoption01.html" target="_blank"><dsp:option></a></td>
<td>Specifies content to be rendered by an enclosing dsp:select tag.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1324dsporderby01.html" target="_blank"><dsp:orderBy></a></td>
<td>Provides the sorting pattern to parent tag dsp:sort.<br />
<br />
<b>Mandatory Attributes:</b><br />
- property</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1325dsppage01.html" target="_blank"><dsp:page></a></td>
<td>Enables Oracle Commerce Platform page processing functionality.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1326dspparam01.html" target="_blank"><dsp:param></a></td>
<td>Stores a value in a parameter.<br />
<br />
<b>Mandatory Attributes:</b><br />
- name</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1327dsppostfield01.html" target="_blank"><dsp:postfield></a></td>
<td>Passes values to a component property on submission. (WML)<br />
<b><br /></b>
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1328dspproperty01.html" target="_blank"><dsp:property></a></td>
<td>Sets a component property from dsp:a tag.<br />
<br />
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1329dsprollbacktransaction01.html" target="_blank"><dsp:rollbackTransaction></a></td>
<td>Causes any actions in the current transaction to be returned to their pretransaction state.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1330dspselect01.html" target="_blank"><dsp:select></a></td>
<td>Passes values to a component property on submission.<br />
<br />
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1332dspsettransactionrollbackonly01.html" target="_blank"><dsp:setTransactionRollbackOnly></a></td>
<td>Specifies that, when a transaction is prompted to end, it ends in a rollback action.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1333dspsetvalue01.html" target="_blank"><dsp:setvalue></a></td>
<td>Sets the value of a component property or a page parameter to a specified value.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1334dspsetxml01.html" target="_blank"><dsp:setxml></a></td>
<td>Sets attribute display format to XML or HTML.<br />
<br />
<b>Mandatory Attributes:</b><br />
- value</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1335dspsort01.html" target="_blank"><dsp:sort></a></td>
<td>Organizes the contents of a Container or array based on a sorting pattern.<br />
<br />
<b>Mandatory Attributes:</b><br />
- values</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1337dsptest01.html" target="_blank"><dsp:test></a></td>
<td>Makes an object’s descriptive information available so other tags can find out its size, data type, and so on.<br />
<br />
<b>Mandatory Attributes:</b><br />
- value</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1338dsptextarea01.html" target="_blank"><dsp:textarea></a></td>
<td>Passes values to a component property on submission.<br />
<br />
<b>Mandatory Attributes:</b><br />
- bean</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1339dsptomap01.html" target="_blank"><dsp:tomap></a></td>
<td>Introduces a page parameter, standard JavaBean or Dynamic<br />
Bean component, or constant value as an element in a JSP that other tags can render using EL.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1340dsptransactionstatus01.html" target="_blank"><dsp:transactionStatus></a></td>
<td>Reads the current transaction’s status.</td>
</tr>
<tr>
<td><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1341dspvalueof01.html" target="_blank"><dsp:valueof></a></td>
<td>Retrieves and displays the value of a page parameter, component property, or constant value.</td></tr>
</tbody></table>
<br />
<b><br /></b>
<b>References:</b><br />
<br />
<ul>
<li><a href="http://atg-tips.blogspot.in/2014/10/dsp-tags-and-their-attributes-in-atg.html" target="_blank">ATG-TIPS</a> - acessado em: 17/06/2015</li>
<li><a href="https://docs.oracle.com/cd/E52191_02/Platform.11-1/ATGPageDevGuide/html/s1301appendixadsptaglibraries01.html" target="_blank">DOCS Oracle</a> - acessado em: 17/06/2015</li>
</ul>
<br />Anonymoushttp://www.blogger.com/profile/14364841874807581176noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-90995771350146159962015-06-17T10:21:00.002-03:002015-06-17T13:57:14.640-03:00Quick Tutorial to How to Create a Custom Droplet<br />
<span style="font-family: Arial, sans-serif;">In this quick tutorial we'll learn how to create a custom droplet and invoke it in
jsp</span><br />
<div style="margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<span lang="EN-US" style="font-family: Arial, sans-serif;">1- First create a new class that<span class="apple-converted-space"> </span><b>extends<span class="apple-converted-space"> </span></b><i>atg.servlet.DynamoServlet</i>.
You may place it inside a specific package for droplets, like:<span class="apple-converted-space"> </span><i>com.atgendecabr.droplet</i>, so you
keep things more organized.<o:p></o:p></span></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<br /></div>
<a name='more'></a><br />
<div style="margin: 0cm 0cm 0.0001pt;">
<span lang="EN-US" style="font-family: Arial, sans-serif;">2- Now override the<span class="apple-converted-space"> </span><b>service()</b><span class="apple-converted-space"> </span>method put your code inside, just like
a servlet.<o:p></o:p></span></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<span lang="EN-US" style="font-family: Arial, sans-serif;">3- You must create a properties file (place it insde your config path),
so Nucleus recognizes your droplet as a component. </span><span style="font-family: Arial, sans-serif;">Name
it <i>YourDropletName.properties </i>and write this:<o:p></o:p></span></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<br /></div>
<div style="margin: 0cm 0cm 0.0001pt;">
<span style="font-family: Arial, sans-serif;">
<u>$class=com.atgendecabr.droplet.YourCustomDropletName</u><span style="font-size: 14pt;"><o:p></o:p></span></span></div>
Jonathanhttp://www.blogger.com/profile/11174519393590215316noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-91637597502785762382015-03-04T10:48:00.004-03:002015-06-25T10:14:50.276-03:00ATG Web Commerce History<div style="text-align: justify;">
O ATG, or Art Technology Group, began as a independent enterprise specialized in e-commerce applications. It was founded by Jeet Singh and Joseph Chung in 1991.<br />
<br /></div>
<div style="text-align: justify;">
<br />
<a name='more'></a><br /></div>
<div style="text-align: justify;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaHHJ4i1k4ySgNy8uP9BsmzlKG0X0LR0QPLF_B562F-6S6yXJ88l-6YV1HotMbWvCvN9fw7DcezmrpcomEUwcb2v_z-MN2fPicL2NU7An2_by3Que9dSzopOYyRmcCM8gCjZFcuP80qD7J/s1600/Sem+T%C3%ADtulo-1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="" border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaHHJ4i1k4ySgNy8uP9BsmzlKG0X0LR0QPLF_B562F-6S6yXJ88l-6YV1HotMbWvCvN9fw7DcezmrpcomEUwcb2v_z-MN2fPicL2NU7An2_by3Que9dSzopOYyRmcCM8gCjZFcuP80qD7J/s1600/Sem+T%C3%ADtulo-1.jpg" title="Créditos Imagem Wikipedia" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Joseph Chung & Jeet Singh</td></tr>
</tbody></table>
<br />
<br /></div>
<div style="text-align: justify;">
<div style="text-align: right;">
<br /></div>
</div>
<div style="text-align: justify;">
In the following years ATG acquired e incorporated many enterprises e tecnologies to their e-commerce platform. Among them:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Primus Knowledge Group </b></div>
<div style="text-align: justify;">
Acquired in November, 1st, 2004, provides knowledge management softwares and CRM applications. Also offers communication, email management and wireless solutions.</div>
<div style="text-align: justify;">
<br />
<b>eStara</b><br />
Acquired in 2006, its a Click to Call, chat and call tracking services provider.<br />
<br />
<b>CleverSet</b><br />
Acquired in February, 6th, 2008, is especialized in online behavior pattern analysis of clients and users, and then recommend products e services.<br />
<br />
<b>InstantService</b><br />
Acquired in January, 12th, 2010, it's a chat, email management and knowledge database provider.<br />
<br />
ATG was bought by Oracle in January, 5th, 2011 with an estimated value of 1 billion dollars.<br />
<br />
<br />
<br />
<br />
References:<br />
<a href="http://en.wikipedia.org/wiki/Art_Technology_Group" target="_blank">Art Technology Group</a><br />
<a href="http://www.bloomberg.com/research/stocks/private/snapshot.asp?privcapId=33283" target="_blank">Primus Knowledge Group</a><br />
<a href="http://blog.tmcnet.com/blog/tom-keating/voip/atg-acquires-estara-a-clicktocall-voip-company.asp" target="_blank">eStara</a><br />
<a href="https://www.crunchbase.com/organization/cleverset" target="_blank">CleverSet</a><br />
<a href="https://www.crunchbase.com/organization/instantservic" target="_blank">InstantService</a></div>
Jonathanhttp://www.blogger.com/profile/11174519393590215316noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-3839954892050788262015-03-04T09:32:00.000-03:002015-03-04T09:35:29.372-03:00Nucleus: Conhecendo a ferramenta. / Nucleus: Inside the tool.Nucleus: Conhecendo a ferramenta.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVF-2NMFY34TB9jGv1yNr3bnNuI4yxGI2oACli1wQ5Nq0BDXNAxOuGVtMmKXGuz-hKoibw_zrpIAYUZkmCn6Cf8nNT-qCqfSqqTnHLrlB7YZ1IzKKWsuIBDE0m8iOWCrUkVIgjLXd8esgT/s1600/classe+e+properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<br />
Neste breve artigo será apresentada uma explicação sobre o funcionamento e o ciclo de vida do nucleus, outros artigos mais específicos serão criados de modo a abordar determinadas funcionalidades do modelo.<br />
<br />
A ferramenta nucleus é uma parte muito importante do sistema ATG (Art technology Group ou Oracle commerce), com ela é possível criar componentes, inicializa-los e também passar parâmetros. O nucleus controla o ciclo de vida de todos os componentes da aplicação por meio de um arquivo de configuração que vamos entender como funciona abaixo.<br />
<br />
<a name='more'></a><br />
<br />
Os componentes, podemos chamar de componente a combinação de uma classe java (.java) e um arquivo de configuração(.properties), imagem abaixo: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVF-2NMFY34TB9jGv1yNr3bnNuI4yxGI2oACli1wQ5Nq0BDXNAxOuGVtMmKXGuz-hKoibw_zrpIAYUZkmCn6Cf8nNT-qCqfSqqTnHLrlB7YZ1IzKKWsuIBDE0m8iOWCrUkVIgjLXd8esgT/s1600/classe+e+properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVF-2NMFY34TB9jGv1yNr3bnNuI4yxGI2oACli1wQ5Nq0BDXNAxOuGVtMmKXGuz-hKoibw_zrpIAYUZkmCn6Cf8nNT-qCqfSqqTnHLrlB7YZ1IzKKWsuIBDE0m8iOWCrUkVIgjLXd8esgT/s1600/classe+e+properties.png" height="100" width="320" /></a></div>
<br />
<br />
O nucleus é um modelo para o desenvolvimento de aplicações baseadas em java beans. Por meio do um arquivo de configuração é possível criar e configurar um componente. O nucleus possui um arquivo de configuração onde é possível configurar toda a aplicação, este arquivo de configuração permite ao programador controlar a passagem de parâmetros, inicialização dos componentes e também para controlar o relacionamento entre os componentes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--iW4P7BIZGQ/VPbzxG-02OI/AAAAAAAABwg/B3TcyAUbCBY/s1600/properties.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/--iW4P7BIZGQ/VPbzxG-02OI/AAAAAAAABwg/B3TcyAUbCBY/s1600/properties.jpg" height="145" width="400" /></a></div>
<br />
O primeiro e mais importante parâmetro que deve ser declarado no arquivo de configuração é o <i>$class</i> onde é descrito o caminho para a classe que irá estender um componente existente ou o caminho para criar um novo componente, existem várias outras configurações que podem ser configuradas neste arquivo como por exemplo parâmetros e outros componentes que são necessários para que o novo componente criado possa realizar sua função.<br />
<br />
Para declarar um novo componente é necessário que este arquivo de configuração seja criado no local correto. Para ter certeza de que o arquivo está sendo criado corretamente você pode usar o dynamo para ver onde deve ficar o properties no sistema. Depois de criado também pelo dynamo é possível conferir se o novo componente está funcionando.<br />
<br />
A organização dos componentes é feita baseada em hierarquia, o nucleus provê uma assinatura para cada componente baseado na sua posição hierárquica. Vamos ver um exemplo de como essa hierarquia funciona. Por exemplo, vamos examinar o componente declarado:<br />
<br />
<div style="text-align: center;">
/services/logs/FileLogger</div>
<br />
Para entender melhor como funciona o esquema de hierarquia do exemplo acima vamos começar lendo a declaração da direita para a esquerda, lembrando os níveis hierárquicos são separados por “/”, sendo assim com essa declaração devemos entender que o componente “FileLogger” está contido na pasta ”logs” que por sua vez está contido na pasta “services” que está no diretório “root” do nucleus.<br />
Outra função do nucleus é controlar o ciclo de vida do componente. Durante o ciclo de vida do componente são necessários acessos a vários parâmetros e componentes, mas para que isso funcione é necessário que tantos os parâmetros quanto os componentes devem estar declarados na classe java e também possuírem métodos get e set.<br />
<br />
Este trabalho traz uma breve explicação do funcionamento do nucleus, artigos mais detalhados do seu funcionamento serão feitos a medida do possível. <br />
<br />
<br />
<br />
<b>English version:</b><br />
<br />
Nucleus: Inside the tool.<br />
<br />
On this short post you can find a simple explanation about nucleus life cycle. More functions will be explained on other papers.<br />
<br />
Nucleus is an important part of ATG (Art technology group or Oracle commerce), using nucleus you can create new components, initialize a component and set parameters. He controls all components life cycle by using a configuration file. Let’s see how it works.<br />
<br />
A component is a union of a java class (.java) and a property file (.properties).<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVF-2NMFY34TB9jGv1yNr3bnNuI4yxGI2oACli1wQ5Nq0BDXNAxOuGVtMmKXGuz-hKoibw_zrpIAYUZkmCn6Cf8nNT-qCqfSqqTnHLrlB7YZ1IzKKWsuIBDE0m8iOWCrUkVIgjLXd8esgT/s1600/classe+e+properties.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVF-2NMFY34TB9jGv1yNr3bnNuI4yxGI2oACli1wQ5Nq0BDXNAxOuGVtMmKXGuz-hKoibw_zrpIAYUZkmCn6Cf8nNT-qCqfSqqTnHLrlB7YZ1IzKKWsuIBDE0m8iOWCrUkVIgjLXd8esgT/s1600/classe+e+properties.png" height="100" width="320" /></a></div>
<br />
Nucleus is a development model used to control java beans components using a configuration file. This configuration file is responsible for all the component configurations, parameters, relationship and initialization. The programmer set all the configurations for this component on this file and put the code on a java class. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--iW4P7BIZGQ/VPbzxG-02OI/AAAAAAAABwg/B3TcyAUbCBY/s1600/properties.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/--iW4P7BIZGQ/VPbzxG-02OI/AAAAAAAABwg/B3TcyAUbCBY/s1600/properties.jpg" height="116" width="320" /></a></div>
<br />
<br />
The most important thing to declare is the parameter <i>$class</i> on this line you have to put your java class path, this java class can implement a new functionality or extend an older one. There are many other possible configurations that you can declare on this file, but is a subject to other paper.<br />
<br />
The place that you create the configuration file is very important to ATG reads on his boot, if you put the file in the wrong place the component will not work properly. Before you create a new component you can look at dynamo where the component location is and then create the file on the right place. After using the dynamo again you can check if it’s work.<br />
<br />
The component organization depends of the hierarchy of the application each component have you right place to be created, let’s see an example:<br />
<br />
<div style="text-align: center;">
/services/logs/FileLogger</div>
<br />
To better understand how the hierarchy of the above example works we'll begin by reading the declaration from right to left. The hierarchical levels are separated by "/", so FileLogger it’s inside the “log” folder, who is inside “service” folder which is inside “root” context of nucleus.<br />
<br />
Another of nucleus functions is to manage components life cycle. During the life cycle of a component many of the parameters and other components that can be used to help de functionality of all these components have to be declared on the configuration file, otherwise it cannot work properly.<br />
<br />
This post tries to make a simple explanation about nucleus functionality. Other functions will be further discussed here in the future.Ederaldohttp://www.blogger.com/profile/05158428258498574418noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-41761392772423340132015-03-03T09:39:00.001-03:002015-03-03T09:39:39.701-03:00Nosso ObjetivoJá notou como é difícil encontrar artigos e tutoriais sobre nossos amados ATG e Endeca?<br />
Pois foi pensando exatamente nisso que decidimos criar este blog, através do qual transmitiremos todo o conhecimento adquirido, além de vários tutoriais e boas práticas.<br />
<br />
Contamos com a ajuda e sugestões de vocês nos nossos comentários. :)Jonathanhttp://www.blogger.com/profile/11174519393590215316noreply@blogger.com0tag:blogger.com,1999:blog-8245673728237982350.post-17999901012761590902015-03-02T22:00:00.000-03:002015-03-04T10:57:17.875-03:00Endeca 11.1.0 Installation and Configuration<span style="font-family: Arial,Helvetica,sans-serif;">Before starting, it is a good practice to set a hostname to the machine and configuring it in the /etc/hosts machine. In this example the hostname is defined as ‘endeca’.<br /><br />You need to download the installers at http://edelivery.oracle.com. In the box ‘Select a Product Pack’ chose Oracle Endeca and in platform choose Linux x86 , to systems of 32 bits or Linux x86-64 to systems of 64 bits. Click in ‘Go’. Select ‘Oracle Commerce (11.1.0), Linux’ and make the download of the following installers:<br /><br />Oracle Commerce MDEX Engine 6.5.1 for Linux<br />Oracle Commerce Content Acquisition System 11.1 for Linux<br />Oracle Commerce Experience Manager Tools and Frameworks 11.1 for Linux<br />Oracle Commerce Guided Search Platform Services 11.1 for Linux</span><br />
<br />
<br />
<br />
<a name='more'></a><br /><br />
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;">MDEX 6.5.1</span></h3>
<div style="text-align: left;">
<span style="font-family: Arial,Helvetica,sans-serif;"> Unzip the MDEX 6.5.1 installer.</span></div>
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">chmod a+x ./OCmdex6.5.1-Linux64_829811.sh</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">./OCmdex6.5.1-Linux64_829811.sh --target /apps</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;"> cd /apps/endeca/MDEX/6.5.1/</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">. mdex_setup_sh.ini</span></li>
</ul>
<br />
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;">Platform Services 11.1.0</span></h3>
<span style="font-family: Arial,Helvetica,sans-serif;">Unzip the Platform Services installer</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">chmod a+x ./OCplatformservices11.1.0-Linux64.bin</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">./OCplatformservices11.1.0-Linux64.bin –target /apps</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">In this tutorial we will use the default ports:</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Endeca HTTP Service: 8888</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Shutdown Port: 8090</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Install EAC Agent: Y</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">MDEX Install dir: /apps/endeca/MDEX/6.5.1</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Install reference implementations: Y</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">cd /apps/endeca/PlatformServices/workspace/setup</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">. installer_sh.ini</span></li>
</ul>
<span style="font-family: Arial,Helvetica,sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;">Tools and Frameworks 11.1.0</span></h3>
<h2>
<span style="font-family: Arial,Helvetica,sans-serif;"></span></h2>
<span style="font-family: Arial,Helvetica,sans-serif;">Unzip the Tools And Frameworks installer</span><br />
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">./cd/Disk1/install/runInstaller.sh</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Press Y to continue</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Click in ‘Next’</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Click in ‘I accept the License Terms and Export Restrictions’</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Choose Complete Installation and press ‘Next’</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Choose the name and the full path of installation. In this case:</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">/apps/endeca/ToolsAndFrameworks</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Type the password and click in ‘Next’</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Click em Install.</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Wait the end of the installation and click in ‘OK’ and ‘Exit’. Click in ‘Yes’. </span></li>
</ul>
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;"> </span></h3>
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;">CAS 11.1.0</span></h3>
<span style="font-family: Arial,Helvetica,sans-serif;">Unzip the installer of the CAS 11.1.0</span><br />
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">chmod a+x ./OCcas11.1.0-Linux64.sh</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">.OCcas11.1.0-Linux64.sh --target /apps</span></li>
</ul>
<span style="font-family: Arial,Helvetica,sans-serif;">We will use the default ports in this tutorial:</span><br />
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">CAS Service Port: 8500</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Shutdown Port: 8506</span></li>
</ul>
<span style="font-family: Arial,Helvetica,sans-serif;">This two following variables need to be configured in .bash_profile:</span><br />
<ul>
<li><span style="font-family: Arial,Helvetica,sans-serif;">ENDECA_TOOLS_ROOT: /apps/endeca/ToolsAndFrameworks/11.1.0</span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">ENDECA_TOOLS_CONF: /apps/endeca/ToolsAndFrameworks/11.1.0/server/workspace </span></li>
<li><span style="font-family: Arial,Helvetica,sans-serif;">Server Name: endeca (configured before in the /etc/hosts file)</span></li>
</ul>
<span style="font-family: Arial,Helvetica,sans-serif;"><br />Initializing the services:</span><br />
<h4>
<span style="font-family: Arial,Helvetica,sans-serif;">Platform Services 11.1.0</span></h4>
<h4>
<span style="font-family: Arial,Helvetica,sans-serif;"></span></h4>
<span style="font-family: Arial,Helvetica,sans-serif;">cd /apps/endeca/PlatformServices/11.1.0/tools/server/bin<br />./startup.sh</span><br />
<h4>
<span style="font-family: Arial,Helvetica,sans-serif;">CAS 11.1.0 </span></h4>
<h4>
<span style="font-family: Arial,Helvetica,sans-serif;"></span></h4>
<span style="font-family: Arial,Helvetica,sans-serif;">cd /apps/endeca/CAS/11.1.0/bin<br />nohup ./cas-service.sh &</span><br />
<h4>
<span style="font-family: Arial,Helvetica,sans-serif;">Tools And Frameworks 11.1.0</span></h4>
<h3>
<span style="font-family: Arial,Helvetica,sans-serif;"></span></h3>
<span style="font-family: Arial,Helvetica,sans-serif;">cd /apps/endeca/ToolsAndFrameworks/11.1.0/server/bin<br />./startup.sh</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"><br />To test if Workbench is running, acces http://endeca:8006.</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;">Login with the user admin and with the password set in the Tools And Frameworks installation. If the options 'Data Sources' appears, the CAS is installed with success.</span><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">It is a good practice to define the Endeca environment variables in the .bash_profile:<br /><br />export ENDECA_ROOT=/apps/endeca/PlatformServices/11.1.0;<br />export ENDECA_CONF=/apps/endeca/PlatformServices/workspace;<br />export ENDECA_TOOLS_ROOT=/apps/endeca/ToolsAndFrameworks/11.1.0;<br />export ENDECA_TOOLS_CONF=/apps/endeca/ToolsAndFrameworks/11.1.0/server/workspace;<br />export ENDECA_MDEX_ROOT=/apps/endeca/MDEX/6.5.1;</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">References</span><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">MDEX 6.5.1 Documentation: <a href="http://docs.oracle.com/cd/E55324_01/index.html">http://docs.oracle.com/cd/E55324_01/index.html</a><br />Platform Services 11.1.0 Documentation: <a href="http://docs.oracle.com/cd/E55327_01/index.html">http://docs.oracle.com/cd/E55327_01/index.html</a><br />Tools and Frameworks 11.1.0 Documentation: <a href="http://docs.oracle.com/cd/E55326_02/index.html">http://docs.oracle.com/cd/E55326_02/index.html</a><br />CAS 11.1.0 Documentation: <a href="http://docs.oracle.com/cd/E55325_01/index.html">http://docs.oracle.com/cd/E55325_01/index.html</a></span>Anonymoushttp://www.blogger.com/profile/03134808069610368544noreply@blogger.com1