BUILDING SOLID LIQUID SKILLS - TEMPLATE AND CDS TAGS
TEMPLATE TAGS
Template tags control the output of a template in various ways, and allow the combination of multiple templates into a single output.
FETCHXML
It allows users to query data from CDS currently cached* within portal.
{% fetchxml accomplishments %}
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="mshied_accomplishments">
<attribute name="mshied_accomplishmentsid" />
<attribute name="mshied_name" />
<attribute name="mshied_student" />
<attribute name="mshied_accomplishmenttype" />
<attribute name="mshied_description" />
<order attribute="mshied_name" descending="false" />
<filter type="and">
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="mshied_student" operator="eq" value="{{user.id}}" />
</filter>
</entity>
</fetch>
{% endfetchxml %}
In order to access the query results, use the results object then the entities collection. (Entities = Records).
Once a collection is retrieved, you can use it within a for loop. (Please disregard HTML included in the sample).
<table class="table table-striped"> <thead> <tr> <th>Accomplishment</th> <th>Type</th> </tr> </thead> {% for accomplishment in accomplishments_results %} <tr> <td>{{ accomplishment.mshied_name }}</td> <td>{{ accomplishment.mshied_accomplishmenttype.label }}</td> </tr> {% endfor %} </table>
OUTPUT
INCLUDE
Adds the contents of another template into another, by name. The include tag accepts parameters using the following notation. e.g. {% include 'My Template' a:x, b:y %}
{% include 'FetchXML Course History' studentid:user.id %}
<table class="table table-striped">
<thead>
<tr>
<th>Course</th>
<th>Grade</th>
</tr>
</thead>
{% for course_history in course_history_results %}
<tr>
<td>{{ course_history.mshied_name }}</td>
<td>{{ course_history.mshied_lettergrade }}</td>
</tr>
{% endfor %}
</table>
INCLUDE (WITH TEMPLATE THAT USES JOINS)
Here is the body of the web template named ‘FetchXML Scholarship‘.
{% fetchxml scholarship %}
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="mshied_scholarshipapplicant">
<attribute name="mshied_scholarshipapplicantid" />
<attribute name="mshied_applicationstatecode" />
<attribute name="mshied_scholarship" />
<attribute name="mshied_submissiondate" />
<attribute name="mshied_offermadedate" />
<attribute name="mshied_offerdeadlinedate" />
<attribute name="mshied_offeraccepteddate" />
<filter type="and">
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="mshied_applicant" operator="eq" value="{{studentid}}" />
</filter>
<link-entity name="mshied_scholarship" from="mshied_scholarshipid" to="mshied_scholarship" link-type="inner" alias="scholarship">
<attribute name="mshied_amount" />
<attribute name="mshied_name" />
</link-entity>
</entity>
</fetch>
{% endfetchxml %}
{% assign scholarship_results = scholarship.results.entities %}
Note that the resultset uses different notation to access query attributes surfaced through query join.
{% include 'FetchXML Scholarship' studentid:user.id %}
<table class="table table-striped">
<thead>
<tr>
<th>Scholarship Name</th>
<th>Submitted On</th>
<th>Potential Amount</th>
</tr>
</thead>
{% for scholarship in scholarship_results %}
<tr>
<td>{{ scholarship['scholarship.mshied_name'] }}</td>
<td>{{ scholarship.mshied_submissiondate | date: 'MMMM dd, yyyy' }}</td>
<td>$ {{ scholarship['scholarship.mshied_amount'] | round:2 }}</td>
</tr>
{% endfor %}
</table>
CDS TAGS
Power Apps entity tags are used to load and display Power Apps data, or use other Power Apps portals framework services. These tags are Power Apps-specific extensions to the Liquid language.
EDITABLE
Renders a given Power Apps portals CMS object as editable on the portal, for users with content editing permission for that object. Editable objects include page, snippets, and weblinks.
Here is a sample of the Editable tag code referencing the “Sample Snippet“.
<h5>Editable - Sample Snippet</h5> {% editable snippets 'Sample Snippet' type: 'html' %}
OUTPUT
ENTITY LIST
Entity List can be referenced by name or id. For complete OOB Entity List features use the entity_list web template. e.g. {% include 'entity_list' key: page.adx_entitylist.id %}
{% entitylist name:'University List' %}
{% entityview %}
<div class="col-md-12">
Loaded entity view with {{ entityview.total_records }} total records.
</div>
{% assign accounts = entityview.records %}
<table class="table table-striped">
<thead>
<tr>
<th>Institution Name</th>
</tr>
</thead>
{% for account in accounts %}
<tr><td>{{ account.name }}</td></tr>
{% endfor %}
</table>
{% endentityview %}
{% endentitylist %}
OUTPUT
ENTITY VIEW
Entity view can be used to reference an existing CDS entity view. Also note the use of Batch command in this example.
{% entityview logical_name:'contact', name:"Active Contacts" %}
<div class="col-md-12">
Loaded entity view with {{ entityview.total_records }} total records.
</div>
{% assign batches = entityview.records | batch: 4 %}
{% for batch in batches %}
<div class="col-md-4">
<ul class="nav nav-pills nav-stacked">
{% for contact in batch %}
<li class="{% cycle 'active', '', '', ''%}"><a href="#">{{ contact.fullname }}</a></li>
{% endfor %}
</ul>
</div>
{% endfor %}
{% endentityview %}
ENTITY FORM
<h5>Entity Form</h5> {% entityform name: 'Sample Account Form' %}