Getting started
Configuration wizard
HTML templates
JavaScript framework
Additional resources
- Video: Introducing Plumsail Org Chart
- Data caching
- SharePoint Server 2019/SE (On-Premises) resources
- Installation for SharePoint 2019 / SE
- Quick configuration
- How to add Org Chart to Microsoft Teams tabs
- Generate organization structure report
- Layout
- Filtration
- JavaScript custom code
- General settings
- Display assistants
- Display dotted-line managers for Org Chart
- Display vacancies
- Customize box HTML template and CSS styles
- HTML templating syntax
- Change Org Chart skin
- Create org chart with two root managers
- Order employees boxes using custom field
- How Org Chart pulls data from AD On-Premises
- Drill down to current user by default
- Drill down to specific box using URL parameter
- Include and use fields from additional list
- Use advanced Org Chart navigation
- How to open Org Chart in full-screen mode on load
- Support of search in a list with more than 5000 items
- Exclude disabled users in On-Premises
- Configuring profiles sync in On-Premises
- Make sure that SharePoint has enough data
- Exporting properties to a directory service
General
- Version history
- Licensing details
- Data protection and security
- Custom code security measures
- Billing and subscription management
Printing & Reports
- Printing organizational structure
- Generate multi-page PDF report
- Export to CSV and analyze in Excel
- Custom styles for printed Org Chart
Microsoft Teams
Display different types of employees
Filter and order boxes
- Create and manage filtered views
- Order employees boxes using a custom field
- Group employees boxes using a custom field
Customize boxes and styles
- Format boxes conditionally
- Customize box HTML template and CSS styles
- Display awards and conditionally format Org Chart
- Create an Org Chart with two root managers
- Change Org Chart theme
- Localize Org Chart
Show specific user on load
- Drill down to specific box using URL parameter
- Drill down to current user by default
- Drill down to manager of user from URL by default
Manage web part size and scale
- Open Org Chart in full-screen mode on load
- Make Org Chart use full page width
- Automatically scale boxes to fit visible area
Other examples
- How to customize Org Chart
- How to use advanced Org Chart navigation
- Use tenant properties to disable Org Chart features
- Include and use fields from additional list in Org Chart
- Support of search in a list with more than 5000 items for Org Chart
- Show Org Chart based on a list data source for anonymous users
- How to check if a user has Tenant Administrator permissions
HTML templating syntax description (SharePoint Server 2019/SE)
Introduction
We use Handlebars templating engine to render boxes, tooltips and search results. You can specify custom HTML templates using Handlebars syntax to change look and feel of the Org Chart.
Find a detailed description of Handlebars syntax on the official site. In this instruction, we covered only frequently used blocks and our custom blocks, developed for the Org Chart especially.
Handlebars template look like regular HTML, with embedded handlebars expressions.
{{Department}}
A handlebars expression is a {{, some contents, followed by a }}. In the example above you see {{Department}} expression. It allows rendering of the value of the field with internal name “Department”.
Example of the template
This is an example of the box template. To understand the meaning of different blocks read description below.
<div class="pl-item-photo">
{{#if PictureURL}}
{{#detailsTooltipLink}}
{{safeImage PictureURL}}
{{/detailsTooltipLink}}
{{/if}}
</div>
<div class="pl-item-fields">
<div class="field-container header-field">
{{#detailsTooltipLink}}
{{PreferredName}}
{{/detailsTooltipLink}}
</div>
<div class="field-container">{{Title}}</div>
<div class="field-container">{{Department}}</div>
</div>
The if block helper
You can use the if helper to conditionally render a block. If its argument returns false, undefined, null, empty string or empty array (a “false” value), Handlebars will not render the block.
<div>
{{#if PictureURL}}
<img src="{{PictureURL}}" alt="" />
{{/if}}
</div>
If you need to build if/else behavior you can add else block like this:
<div>
{{#if PictureURL}}
<img src="{{PictureURL}}" alt="" />
{{else}}
No picture
{{/if}}
</div>
The unless block helper
You can use the unless helper as the inverse of the if helper.
Its block will be rendered if the expression returns a false value.
{{#unless PictureURL}}<h3>WARNING: Picture not found!</h3>{{/unless}}
Displaying of raw HTML content
Handlebars template engine escapes HTML tags by default. In the case you want to add to the box template a property which contains the ones, you should enclose it in triple braces.
{{{AboutMe}}}
For example, you want to display the “About me” property from SharePoint user profiles on the tooltip. If you just add it to the tooltip template, you will get an alike result with escaped HTML tags.
In this case, you need to enclose the AboutMe token into triple braces.
As a result, the mark-up of the content will be properly processed:
Additional block helpers
We added two new helpers into Handlebars framework.
The safeImage block allows inserting of an img tag into HTML markup which will handle broken pictures and hide them.
This is how you can use it:
{{safeImage PictureURL}}
Where PictureURL is an internal name of a field with URL.
The detailsTooltipLink block allows wrapping of some HTML content with a tag which will show details tooltip once you click on it.
We use this block in the box template.
{{#detailsTooltipLink}}
{{PreferredName}}
{{/detailsTooltipLink}}
Where PreferredName could be an internal name of a field.
You also can add other HTML content inside this block:
{{#detailsTooltipLink}}
Some HTML content
{{/detailsTooltipLink}}
Structure of the context object
Handlebars template receives context object, the object which represents data to render. This context object is used to resolve values in the template. The context object is a plain object with multiple fields from a data source:
{
FieldInternalName1: "FieldValue1",
FieldInternalName2: "FieldValue2",
...
FieldInternalNameN: "FieldValueN",
}
Thus, you can access the value of the field with internal name FieldInternalName1 using such Handlebars expression:
{{FieldInternalName1}}