<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Portal – Extensibility</title><link>https://developer.oleeo.io/docs/extensibility/</link><description>Recent content in Extensibility on Developer Portal</description><generator>Hugo -- gohugo.io</generator><atom:link href="https://developer.oleeo.io/docs/extensibility/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: Additional Attributes</title><link>https://developer.oleeo.io/docs/extensibility/additional_attrs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://developer.oleeo.io/docs/extensibility/additional_attrs/</guid><description>
&lt;div class="docblock-wrapper">
&lt;div class="docblock-text">
&lt;div class="floater">
&lt;p>The ATS has a concept called &lt;strong>layout lists&lt;/strong> which are predefined table
definitions containing arbitrary columns of data attributes linked to the resource in question.&lt;/p>
&lt;p>Most resource representations can be expanded by supplying a &lt;code>layout&lt;/code> query parameter which should be the ID of an existing layout appropriate to the resource. The extra data will be present under the &lt;code>layout_data&lt;/code> key in the returned representation. It will be an array of objects containing the value
&lt;strong>in the order defined in the layout.&lt;/strong> The order, column titles, and other
meta-data for the requested layout need to be requested seperately via the
&lt;code>layout listing&lt;/code> endpoint. If &lt;code>value_raw&lt;/code> is present this is the Oleeo internal
ID for the value.&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="docblock-example">
&lt;div class="floater">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>GET https://api.tal.net/api/v1/applications?layout&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">123&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;id&amp;#34;&lt;/span>: 47,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;layout_data&amp;#34;&lt;/span>: &lt;span style="color:#f92672">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;value&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Edinburgh&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;value_raw&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1234&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;value&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;1997&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">]&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>,
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Docs: Data Paths</title><link>https://developer.oleeo.io/docs/extensibility/datapaths/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://developer.oleeo.io/docs/extensibility/datapaths/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Data Paths are strings that can be included in system config locations - like mail merge placeholders in emails, or column entries in layout listings which the ATS can evaluate at run-time to a value from the database specific to the current context (i.e the current application or another object, or relative to some other feature, like the current user).&lt;/p>
&lt;p>You will likely come across data paths when querying layout listings and form configurations, amongst other areas. They are particularly useful in forms to control conditional visibility of form items based on the value entered in previous fields.&lt;/p>
&lt;p>The syntax allows relationships to be followed through related objects. You can follow from an application to the user that made the application and eventually through to the target property on the (possibly distantly) related object.&lt;/p>
&lt;p>The final value may be a direct property of an object (equivalent to what is stored in the database), or it could be the return of a method (function called on that object).&lt;/p>
&lt;p>For example, in the context of an application, the path &lt;code>application.user.firstname&lt;/code> will be evaluated to the firstname of the user who made the current application.&lt;/p>
&lt;h2 id="example-getting-form-data">Example: Getting Form Data&lt;/h2>
&lt;p>To get to item values on a Formable class (Such as Application or Opportunity) you follow the formdata relationship e.g.&lt;/p>
&lt;pre>&lt;code>application.formdata
application.opportunity.formdata
&lt;/code>&lt;/pre>
&lt;p>The formdata relationship requires three indexes to uniquely identify an individual data element.&lt;/p>
&lt;ul>
&lt;li>Item ID&lt;/li>
&lt;li>Section instance&lt;/li>
&lt;li>Form instance (If fewer are given then the first instance is assumed.)&lt;/li>
&lt;/ul>
&lt;p>For example:&lt;/p>
&lt;pre>&lt;code>application.formdata.21:2:1
&lt;/code>&lt;/pre>
&lt;p>This will return the value stored in the second section instance of item ID 21, for the application in question.&lt;/p></description></item><item><title>Docs: Searching &amp; Filtering</title><link>https://developer.oleeo.io/docs/extensibility/searching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://developer.oleeo.io/docs/extensibility/searching/</guid><description>
&lt;h2 id="predefined-searches">Predefined searches&lt;/h2>
&lt;p>Complicated searches with grouped search terms and a rich set of operators can
be configured in the main ATS application and used in calls to GET collections
by their ID. These are supplied via the &lt;code>saved_search&lt;/code> or &lt;code>config_search&lt;/code> query
parameters (saved_search refers to searches set up by normal users,
config_search refers to searches configured generally and available to all
users).&lt;/p>
&lt;p>&lt;code>GET /api/v1/applications?saved_search=123&lt;/code>&lt;/p>
&lt;p>&lt;code>GET /api/v1/applications?config_search=123&lt;/code>&lt;/p>
&lt;h2 id="predefined-selections">Predefined selections&lt;/h2>
&lt;p>The ATS application has a concept called &amp;lsquo;selections&amp;rsquo; which are explicit subsets
of the resource in question that can be named and manipulated. The &lt;code>selection&lt;/code>
query parameter can be used in calls to GET collections to only return members
of that selection.&lt;/p>
&lt;p>&lt;code>GET /api/v1/applications?selection=123&lt;/code>&lt;/p>
&lt;h2 id="ad-hoc-searching">Ad-hoc searching&lt;/h2>
&lt;p>The &lt;code>search&lt;/code> query parameter can be used to search for a specific subset of
a collection, this is a URI escaped string representing a search condition in
the form of:&lt;/p>
&lt;pre>search=&amp;lt;key>&amp;lt;operator>&amp;lt;value>&lt;/pre>
&lt;p>The &lt;code>key&lt;/code> is either a &lt;a href="https://tools.ietf.org/html/rfc6901">JSON pointer&lt;/a> or one
of our &lt;a href="FIXME">datapaths&lt;/a>. A JSON pointer can be used to address attribute(s) of
the resource representation to search on, whereas a &amp;lsquo;datapath&amp;rsquo; can be used to
refer to any arbitrary value than can be linked to from the resource in
question. Although much more flexible than the JSON pointer the disadvantages
of datapaths are that they are not as discoverable and may have to include
arbitrary IDs.&lt;/p>
&lt;p>Multiple instances of the search parameter, including a mixture of JSON pointer
and datapath styles can be supplied, these are ANDed together.&lt;/p>
&lt;p>In JSON pointer syntax elements of lists can only be addressed with &lt;code>*&lt;/code> (any)
or our custom syntax &lt;code>&amp;lt;label&amp;gt;&lt;/code> available labels are detailed in the response
schema.&lt;/p>
&lt;p>The &lt;code>value&lt;/code> is either a plain string or a comma seperated list of strings
enclosed in curly braces. Lists can only be used with the &lt;code>=&lt;/code> and &lt;code>!=&lt;/code> operators
and provides IN, NOT IN style semantics.&lt;/p>
&lt;p>The &lt;code>operator&lt;/code> can be:&lt;/p>
&lt;ul>
&lt;li>&lt;code>=&lt;/code>, &lt;code>!=&lt;/code> Exact match, non-match&lt;/li>
&lt;li>&lt;code>=~&lt;/code>, &lt;code>!~&lt;/code> Case insenstive sub string match&lt;/li>
&lt;li>&lt;code>&amp;lt;&lt;/code>, &lt;code>&amp;gt;&lt;/code>, &lt;code>&amp;gt;=&lt;/code>, &lt;code>&amp;lt;=&lt;/code> Order comparisons&lt;/li>
&lt;/ul>
&lt;h3 id="examples">Examples&lt;/h3>
&lt;p>Getting applications:&lt;/p>
&lt;p>&lt;code>GET /api/v1/applications?search=...&lt;/code>&lt;/p>
&lt;ul>
&lt;li>&lt;code>/user/id=123&lt;/code> - Applications with user ID 123&lt;/li>
&lt;li>&lt;code>application.user=123&lt;/code> - Same as above but with a datapath&lt;/li>
&lt;li>&lt;code>/user/id={123,456}&lt;/code> - Applications with user ID 123 or 124&lt;/li>
&lt;li>&lt;code>/user/firstname=~bob&lt;/code> - The application user&amp;rsquo;s firstname contains &amp;lsquo;bob&amp;rsquo;&lt;/li>
&lt;li>&lt;code>/process_state/state=~interview&lt;/code> - The current process state of the
application&amp;rsquo;s title contains &amp;lsquo;interview&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;p>Getting candidates:&lt;/p>
&lt;p>&lt;code>GET /api/v1/candidates?search=...&lt;/code>&lt;/p>
&lt;ul>
&lt;li>&lt;code>/Address/*/AddressLine=~High Street&lt;/code> - Candidates with any address that
contains &amp;lsquo;High Street&amp;rsquo;&lt;/li>
&lt;li>&lt;code>/Email/[personal]/Address=~gmail.com&lt;/code> - Candidates with an email address
labelled &amp;lsquo;personal&amp;rsquo; that contains &amp;lsquo;gmail.com&amp;rsquo;&lt;/li>
&lt;/ul>
&lt;h2 id="filtering">Filtering&lt;/h2>
&lt;p>The &lt;code>filter&lt;/code> query parameter can be supplied to filter the collection by
a string. Attributes marked &amp;lsquo;filterable&amp;rsquo; in the resource description are
considered, these are usually all the text and date attributes.&lt;/p>
&lt;p>For example: &lt;code>GET /api/v1/users?filter=Oxford&lt;/code> will return all candidates with
the string &amp;lsquo;Oxford&amp;rsquo; in any of the filterable attributes - addresess, education
etc.&lt;/p></description></item></channel></rss>