TreeINFO Forms Documentation

Introduction

The subject of the documentation is to describe and explain the functionalities, elements of the TreeINFO Forms. The document content is intended for administrators who will use and manage the documented application. The aim of the documentation is to simplify the work with the application and it is better understanding. Basic administrative procedures will be explained.

If this documentation doesn't answer your questions, please send us Email to treeinfo@aricoma.com.

Join TreeINFO community at Stack Overflow TreeINFO Team. If you need access, contact treeinfo@aricoma.com.


Release

Build 1.13.25003.19002 Hotfix 24.3.2025
  • Fixed Association of new fields and forms – Fixed functionality for associating new field and form objects through the TreeINFO application.
  • Fixed Attachments display fix on subsites – Author and creation date were not displayed correctly on subsites.
  • Fixed Task Form Customization – When clicking on an item in the task list, the item form now reliably opens every time.

Note See all the latest features, enhancements, updates and more in Changelog here.


About

TreeINFO Forms application is central element of customization that allows you to create custom forms for SharePoint documents / lists, modify SharePoint columns and can be integrated with workflows.


Installation

This chapter describes adding TreeInfo FullControl application to individual sites or subsites.

SharePoint Online

To add WFEngine.Online application to site in the SharePoint Online click on the cogwheel button symbolizing settings and select option Site contents.

After selecting the option Site contents click on the button add an app to add application to site

Click on the option From Your Organization found on the side menu. Clicking this option will display the list of applications of our organization. Click the button TreeINFO FullControl

After clicking the button TreeINFO FullControl a popup window will appear asking if you trust this application and if you want to give this application full authorization on the given site. Click the button Trust It

Next you will be redirected to the page Site contents where we can see the addition of our selected application to the site. We are informed about this addition through the notice We're adding your app.

After a while the notice will disappear and the application will gain an icon

For correct and fully functional addition of application to the site we need to open the application. We should see the main page divided into two sections. In the section Changing the major version we can find an option Upgrade component. Open this option

In the newly opened window in the top right corner we can see that the application does not have installed any version. To finish the installation of the application click the button Install or Update.

You will be informed about the installation progress through the progression bar

You can confirm that the installation was a success by checking the top right corner. The current installed version will be shown. The application is now ready for use.


How to access

Access slightly differs for SharePoint Online and SharePoint On-Premises.

SharePoint Online

Navigate to settings menu accessible through gear icon, select Site contents and select TreeINFO FullControl.

SharePoint On-Premises

Navigate to settings menu accessible through gear icon, select Site contents and select TreeINFO FullControl.


TreeINFO Forms

The TreeINFO Forms application is divided into several parts, which are accessible after opening from the Site contents.

The tab Columns allows you to make adjustments at the level of single columns, the Forms tab is used to set up individual forms, Views allow you to customize libraries views, Variables offer connections to external resources and Settings offer other options.

The individual parts are described further in the documentation.


Columns

In Columns section it is possible to modify the behavior of standard SharePoint site columns. You can:

  • Create new field – creates brand new column and appends the field modification.
  • Associate existing field – appends a behavior modification to an already existing field.
  • Update all – update configuration of all modified fields. Applicable for core function updates.

Buttons Create new field and Associate new field lead to edit page.

The left part is dedicated to basic information about the column. When associating an existing field, some of those information are prefilled from column definition.

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

Custom column can be associated for the whole site collection or only for a list. In Name and Type section is drop down selection of applicable TreeInfo column based on associated column.

Custom column modification is done only in the text editor of the code in JSON format. Individual options for each column are described in further chapters.

In Editor, you can also view code in find, fullscreen a specific phrase or letter or automatically format code through buttons situated in the bottom right corner of the edit window, as shown on the picture bellow.

In the right part you can edit the column code and:

  • Delete – not only deletes the column definition but also the column within SharePoint
  • Unregister – removes associated modification on the column, column is kept in SharePoint
  • Update – updates modifications of a column, after execution the changes are reflected in form
  • Ok – updates modifications and closes the editor
  • Cancel – does not save changes and closes the editor

Currently TreeINFO Forms application supports following custom columns:


Forms

In the Forms tab we can modify behavior of forms on SharePoint web. Through the following buttons we can:

  • Associate new form – allows to add form definition to already existing SharePoint Content Type (from the web in which the App was added to)
  • Update all – update configuration of all existing forms (not always mandatory but appropriate after deployment of a new App version)

After selecting the option Associate new form a page with following options (left side of the screen) will be shown:

  • Web selection and selection of existing content type in said web for which the form will be defined
  • Show (through Show fields) SharePoint field defined in content type including their internal names and types (appropriate especially in form definition where we work with column internal names).
  • Allow or keep nonactive options of custom script or form appearance
  • Define if the form modification script will be compressed or not (lowers the volume of data that is transferred by viewing the form). It is appropriate to turn off the compression for tuning the script in browser

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

It is possible to connect new form definition to content type or abandon form definition without saving through the buttons Associate and Cancel.

By entering through the list of already defined forms the user does not have the option to change the web neither can he change the content type with which is the form associated. The other options of the left side of the screen are still active. In addition, the following buttons are displayed on the bottom right corner:

  • Designer – opens form editor designer
  • Unregister – removes association of form from content type
  • Update – update of the form definition
  • Update with push changes – update of the form definition (similar to Update) and copies into child forms
  • Ok – updates form (same as "Update") and returns back to the list of forms
  • Cancel – cancel changes

The Designer offers the possibility to manage form definition in UI. User can drag and drop fields and build form with a preview. Each field has options where it is possible to set required or read only. There is a possibility to use script editor and other options from the ribbon button.

The form definition can also be created or edited from the tabs in the input screen when opening a form:

RawEditor – through the text edit in JSON you can define basic properties of the form:

  • configuration of the documents preview
  • configuration of the metadata print
  • definition of display for groups of metadata, either as sections or tabs
  • definition of related javascripts etc.

In Raw Editor it is also possible to define fields/metadata of an item or more precisely groups of metadata which are supposed to be displayed on a form

For each group it is possible to define:

  • Name
  • if the group should be displayed in a default state minimalized or maximized
  • which metadata (through the internal names of SharePoint columns) should be displayed

For individual field it is possible to define:

  • if they are read only
  • if they are hidden
  • validation logic

Custom script – through JavaScript text edit it is possible to expand the behavior of a form component and some fields. Edit or addition of a custom script is recommended to be consulted with the supplier.

Custom style – it is possible to define visual aspects of a form through CSS

Edit window allows for automatic formatting of content and also for the option to display on a whole page. Also shows potential error in code next to the number of the line

Additional information about form definitions (E.g. examples of definition) can be found further here.


Views

Visual and functional configuration of library. Views are designed to enhance standard SharePoint library/list view. You can add custom view or you can add custom buttons to ribbon with custom scripts.

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

You can apply same custom script definition as in forms. The most used functionality is the use of ribbon buttons, described here.

New Document link configuration

The following options allow the reconfiguration of New Document link in view. Default link configuration is situated in the root of NewDocumentLink attribute, alternative in AlternativeNewDocumentLinks attribute. (e.g. If different button for root file is required)

Configuration example:

{
  "NewDocumentLink":
  {
    "Title": "Add document"
  },
  "AlternativeNewDocumentLinks":
  [
    {
      "Title": "New folder",
      "IsInRootFolder": true,
      "ContentTypeId": "0x012000C894D9EEFB9C9A1188428943D58A3177",
      "DragAndDrop": "",
      "TargetPagePath": "Forms",
      "OpenInPopup": false
    },
    {
      "Title": "Nový spis",
      "Level": 1,
      "ContentTypeId": "0x012000C894D9EEFB9C9A1188428943D58A3177",
      "DragAndDrop": "",
      "TargetPagePath": "Forms",
      "OpenInPopup": false
    }
  ]
}
  • Title "Title": "New File"
    The text that contains the link
  • DragAndDrop "DragAndDrop":""
    Text of drag and drop part of the link

    The gray part of the new document link

  • ContentTypeId "ContentTypeId": "0x012000C894D9EEFB9C9A1188428943D58A3177"
    Content type ID for new item

    Content type configuration for new Item. ID site content type can be used.

  • OpenInPopup "OpenInPopup": false
    Open in popup window

    If set to false, the form will open in the same window as redirect instead of popup window. Default is set to true.

  • TargetPage "TargetPage": "Upload.aspx"
    The name of the page with the form. Default value is "Upload.aspx"
  • TargetPagePath "TargetPagePath": "Forms"
    The path to the page with the form. The default form is used from _layouts folder.
  • IsInRootFolder "IsInRootFolder": true
    Use only in root Folder

    If set to true, definition is applied only in root folder. Used only in "AlternativeNewDocumentLinks"

  • Level "Level": true
    The level of the folder in relation to the whole directory structure

    If set the current folder level will be used. Only used in "AlternativeNewDocumentLinks"


Variables

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

In the Variables tab it is possible to simply adjust user defined strings available through SharePoint environment in so called PropertyBag.

The strings are saved as a pair of name and value through the button Add entry. Individual strings can be then edited or deleted.

When a variable is created two additional columns are generated, JSON and JS. These contain variable name that can be used in JSON or in custom script of forms or views

Variables are generaly used to connect to a database, to another SharePoint site within a farm or to define unique variables for the form modification.

You can setup administration account in TreeINFO for SharePoint using Variables:add key SystemUserName and value name of user with site collection administrator permission, then add password for admin account key SystemUserPassword. This is safe operation – Password is encrypted. This settings is necessary for adding attachment or for execution of some custom scripts.


Settings

Settings tab offers enhance functionalities to forms and workflows.

Component installation and license – If newer version of the application was installed or to validate license information, go to page Component installation and license.

Tasks, emails and popups – Settings for tasks, email and popup menu, reusable via Replace tokens also in Workflow Engine Designer. Click for more

Configuration lists – TreeINFO Forms application stores all internal configuration in hidden SharePoint lists and libraries. Use View to unhide configuration lists and libraries or Hide to hide configuration. Note Do not modify values directly in configuration lists and libraries – configuration may be lost or corrupted.

WFE – Manage WFE workflows, enables viewing workflow XML configuration from Workflow Engine Designer.

Archivation – Archive templates definitions. Click for more

Search form templates for Search App Part – HTML Search form definitions. Click for more

Print templates definitions – Item metadata print templates definitions. Click for more

Counters – You can view all generated counters used on site collection. You can change counters value manually. Counters are used by column type Counted Column.

Import / Export – You can use this feature to transfer or backup application configuration. Only imports and exports of the selected components are supported.

This feature was updated in Q1 2023 release (more information in changelog section). Configuration elements that contained HTML code are not encoded in base64 anymore but are enclosed in CDATA xml element. Small deviations in export files when exporting through UI or REST service were also unified. New export version is more readable for better comparison. Old import files are backwards compatible with import/export feature.


Tasks, emails and popups

You can define replace tokens to use in the forms or in the workflow process. There are few options to choose from – text template, task template, mail template and view template. It is possible to associate it with different languages.

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

Text template is used for simple text. You can use it in Workflow Engine – for example as an outcome name, where you only put it in replace token form {TiSp:outcomeTemplate}. If defined for multiple languages, outcome will be displayed in users language.

Task template is designed to be used in Workflow Engine activity Assign task in property Task template. It simplifies edit of task title and body, replace tokens are supported. {Item:s_invoiceType} | {Item:s_invoiceNumber} to approve

With mail template you can edit the mail body which is sent to user from Workflow Engine Assign task activity in property Mail template. You can use html and CSS:

<style type="text/CSS">
    .message {
        font-family: "Calibri",sans-serif;
    }
    .message p {
        margin: 4pt 15pt;
    }
    .block {
        border-top: 2pt solid #789bbb;
        border-bottom: 2pt solid #789bbb;
        padding: 0.4cm 0cm 0.4cm 0cm;
    }
    .head {
        text-align: right;
        font-style: italic;
        padding: 0cm 0.2cm 0.1cm 0.1cm;
        font-size: large;
    }
</style>
<div class="message">
    <div class="head">
        New task notification
    </div>
    <div class="block">
        <p>A new task was assigned to you: {{Task.Title}}</p>
        <p>{{Task.Body}}</p>
        <p>All your task can be found at: <a href="{{Web.Url}}">{{Web.Title}}</a>.</p>
        <p>Direct link to task <a href="{{Task.Url}}">here</a>.</p>
    </div>
</div>

CSS can also be defined within the text template and then applied to mail template:

{{Template:EmailTemplateStyles}}
<div class="message">
  <div class="head">
    New task notification
  </div>
  <div class="block">
    <p>A new task was assigned to you: {{Task.Title}}</p>
    <p>{{Task.Body}}>/p>
    <p>All your task can be found at: <a href="{{Web.Url}}">{{Web.Title}}</a>.</p>
    <p>Direct link to task >a href="{{Task.Url}}">here</a>.</p>
  </div>
</div>

Archive process template / notification

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

Copy/move items from source to destination list according to defined template rules.

Queries all "Source" items (standard caml query) and copies each item into "Destination" list – destination list or folder may be automatically created.

Supported via triggered custom script.

Archivation template example

{
  "DeleteSource": false,
  "CopyRoleAssignments": true,
  "IncludeResultMetadata": true,
  "Logging":{
    "ListUrl": "{SiteUrl}/Lists/ArchiveLog"
  },
  "Source":
  {
    "ListUrl":{
      "Expression":"{SiteUrl}/MyProcess"
    },
    "CamlQuery":{
      "Expression":"<eq><fieldref name='ID'><value type='Counter'>146</value></fieldref></eq>"
    },
    "RowLimit": 5
  },
  "Destination":
  {
    "ListUrl": {
      "Expression": "{SiteUrl}/Archive/{List:Name}-{Item:Modified.Year}-{Item:Modified.Month}"
    },
    "ListTitle":{
      "Expression": "{List:Title} {Item:Modified.Year}-{Item:Modified.Month}"
    },
    "FolderPath":{
      "Expression": "{Path}"
    }
  }
}

Archive configuration (attributes)

  • DeleteSource "DeleteSource": false
    Deletes source item after copy to destination list (move operation)
  • CopyRoleAssignments "CopyRoleAssignments": true
    Copy source item permissions from source to destination item
  • IncludeResultMetadata "IncludeResultMetadata": true
    Result of archive process contains copied metadata if true.
  • CopyCommonFields
    "CopyCommonFields": [
        "Editor",
        "Modified"
    ]
    Use to copy system fields.
  • CopyFolderContents "CopyCommonFields": true
    If true copies content of folder.
  • Source
    "Source":
    {
      "ListUrl":{}
      "Expression":"{SiteUrl}/MyProcess"
    }
    Source list url, you can use {SiteUrl} and {WebUrl} tokens in Expression.
  • Destination
    Uses or creates destination list "ListUrl" and folder, supports external site destination.
    "Destination":
    {
      "ListUrl": {
        "Expression": "{SiteUrl}/Archive/{List:Name}-{Item:Modified.Year}-{Item:Modified.Month}"
      },
      "ListTitle":{
        "Expression": "{List:Title} {Item:Modified.Year}-{Item:Modified.Month}"
      },
      "FolderPath":{
        "Expression": "{Path}"
      },
      "ExternalSite": "http://sp2013dev.local.int/sites/tisa"
    }
    • Expression
      You can use tokens to generate destination list/folder {SiteUrl}, {WebUrl} source {List:Title} or {List:Name}, source item {Item:Modified.Year/Month/Day} for date items or any field string value {Item:FieldName}, {Path} folder of source item
    • DisableOverWrite
      Renames the destination file if it already exists with the same name.
    • ExternalSite
      External site url

Archivation notifications

You can use notification support to get mail information about items to be archived or archived

{
  "DeleteSource": false,
  "IncludeResultMetadata": true,
  "DisableArchive": false,
  "Logging":{
    "ListUrl": "{SiteUrl}/Lists/ArchiveLog"
  },
  "Notification":{
    "EmailTemplate": "MojeNotifikace",
    "UseSummaryEmail": true
  },
  "Source":
  {
    "ListUrl":{
      "Expression":"{SiteUrl}/MyProcess"
    },
    "CamlQuery":{
      "Expression":"<gt><fieldref name='ID'><value type='Counter'>170</value></fieldref></gt>"
    },
    "RowLimit": 5
  },
  "Destination":
  {
    "ListUrl": {
      "Expression": "{SiteUrl}/Archive/{List:Name}-{Item:Modified.Year}-{Item:Modified.Month}"
    },
    "ListTitle":{
      "Expression": "{List:Title} {Item:Modified.Year}-{Item:Modified.Month}"
    },
    "FolderPath":{
      "Expression": "{Path}"
    }
  }
}
  • DisableArchive "DisableArchive": false
    If true – disables copying items from source to destination, you can get only information about archive process.
  • Notification

    Generate "EmailTemplate" based mail information about items to be archived or archived

    "Notification":{
      "EmailTemplate": "MonthlyInvoiceArchive",
      "UseSummaryEmail": true
    }
    
    • EmailTemplate
      Mail template name defined in Settings Tasks and emails "TextTemplates".
    • UseSummaryEmail "UseSummaryEmail": true
      If mail template generates custom token based report use true.


Print templates definitions

Prevent content to be overwritten via import – prevents content to be overwritten by import or by agenda update.

Print templates supports commands like:

  • Get Global Variable value
  • Get Web, List, Item and field properties
  • Get Field value
  • template processing supports(conditions, loops, etc)

Commands are in SGML format prefixed by $.

Basic configuration

HTML template:

<style type="text/CSS">
  h1 {
    text-align: left;
    font-size: 200%;
    padding:5px 5px 5px 18px;
    color:#000;
    margin: 0;
  }
  .templateContent table{
    font-family: Arial, Helvetica, sans-serif;
    width:100%;
    border-collapse: collapse;
  }
  .templateContent table td{
    border-top: 1px solid black;
    border-width:1px;
    padding:10px;
  }
	.columnName {
	font-weight:bold;
  }
</style>
<h1>Contract</h1>
<table class="table templateContent" style="margin-top:20px;">
  <tr>
    <td class="columnName"><$Resource::Contract_Name /></td>
    <td><$FieldValue::Contract_Name /></td>
  </tr>
  <tr>
    <td class="columnName"><$Resource::Contract_RevisionScheduled /></td>
    <td><$FieldValue::Contract_RevisionScheduled Format="dd. MM. yyyy"/></td>
  </tr>
    <tr>
    <td class="columnName"><$Resource::Contract_Solver /></td>
    <td><$FieldValue::Contract_Solver /></td>
  </tr>
    <tr>
    <td  class="columnName" style="vertical-align: top;" ><$Resource::Contract_ChangeLog /></td>
    <td><$FieldValue::Contract_ChangeLog Format="Html" /></td>
  </tr>
</table>

Configuration:

  • Disabled "Disabled": true,
    Disables current template. This template is not visible in the templates menu.
  • Groups "Groups":["SP_Group_Name","Second_SP_Group_Name"]
    Specific SharePoint groups can be added. The current print template will be exclusively visible to users of these designated groups.
  • Lists "Lists":["/sites/agenda_name/library_name", "/sites/agenda_name/Lists/list_name"]
    Specific sharepoint library or list can be added. The current print template will only be visible within the designated libraries or lists.
  • ContentTypes "ContentTypes": ["content_type_name", "content_type_name_two"]
    Specific content type can be added. The current print template will only be visible on items that have the designated content type.
{
  "Disabled":true,
  "Groups":[
  "SP_Group_Name"
  ],
  "Lists":[
  "/sites/agenda_name/library_name"
  ],
  "ContentTypes":[
    "Contracts"
  ]

Example

Print of selected column from SQL table with date formatting:

<hr>
<$FieldValue::Title />
<hr />
<style type="text/css">
  table td { padding: 6px;}
</style>



<$ExternalLookupSource
   Name="source1"
   Type="MSSQL"
   Configuration="|{"TargetObject": "[TestOrders_Wf_Tasks]", "ConnectionString": "$GlobalVariable::DBConnectionString"}"
   Sort="[Id] DESC"/>

<$If Value1="{Source::source1}" Value2="0" Operator="Greater" DataType="Number">
  <table>
    <$ExternalLookupIterator Source="source1" >
      <tr>
        <td><$Value Name="Title" /></td>
        <td><$Value Name="Status" /></td>
        <td><$Value Name="Priority" /></td>
        <td><$Value Format="M. d. yyyy" Name="StartDate" DataType="DateTime"/></td>
      <tr/>
      </$ExternalLookupIterator>
  </table>
</$If>
  • ExternalLookup
    Print template supports every function of external lookup
  • Value
    gets values from specified database table in sql
    • Name
      Internal name of the column we wish to print
    • DataType
      specifies expected data type of selected column. Can be Integer, Decimal or DateTime.
    • Format
      Can be used only in combination with 'DataType="DateTime"'. Can be used to format date.

Event receivers

Used to set up scripts based on events

Adding receiver

Ext_CountedColumn_AddReceiver "Lists/ATtest"
Ext_CountedColumn_AddReceiver "TestDocLib"

Removing receiver

Ext_CountedColumn_RemoveReceiver "Lists/ATtest"
Ext_CountedColumn_RemoveReceiver "TestDocLib"

Configuration

  • CountedColumn
    function Ext_CountedColumn_AddReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::CountedColumn_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    function Ext_CountedColumn_RemoveReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::CountedColumn_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    If an item is saved or if an item is added in a counted column a configurated action will take place
  • ItemCopyData
    function Ext_CountedColumn_AddReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::CountedColumn_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    function Ext_CountedColumn_RemoveReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::CountedColumn_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    If an item is saved or if an item is added data will be copied acording to configuration
  • ContentTypeOrder
    function Ext_ContentTypeOrder_AddReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::ContentTypeOrder_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    function Ext_ContentTypeOrder_RemoveReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::ContentTypeOrder_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    If an item is saved or if an item is added a content type will be added to configured items
  • ContentTypeIndex
    function Ext_ContentTypeIndex_AddReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::ContentTypeIndex_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    function Ext_ContentTypeIndex_RemoveReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::ContentTypeIndex_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    If an item is saved or if an item is added selects the order of content types as configured
  • AdvancedTable
    function Ext_AdvancedTable_AddReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::AdvancedTable_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    function Ext_AdvancedTable_RemoveReceiver([string]$listSiteRelativeUrl)
    {		
    	[TiSp.TiSaExtensions.Utility]::AdvancedTable_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
    }
    If an item is saved or if an item is added in a referencial table a configured action will be taken

Example

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
[System.Reflection.Assembly]::LoadWithPartialName("TiSp.TiSaExtensions") | Out-Null
$SiteUrl = "https://SiteURLsample.com"


function Ext_EnsureList([string]$listSiteRelativeUrl){
    $w = Get-SPWeb $SiteUrl
    $l = $w.GetList($w.ServerRelativeUrl.TrimEnd("/") + "/" + $listSiteRelativeUrl)	
    return $l
} 

function Ext_CountedColumn_AddReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::CountedColumn_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
}
function Ext_CountedColumn_RemoveReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::CountedColumn_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
}

function Ext_ItemCopyData_AddReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ItemCopyData_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
}
function Ext_ItemCopyData_RemoveReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ItemCopyData_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
}

function Ext_ContentTypeOrder_AddReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ContentTypeOrder_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
}
function Ext_ContentTypeOrder_RemoveReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ContentTypeOrder_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
}

function Ext_ContentTypeIndex_AddReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ContentTypeIndex_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
}
function Ext_ContentTypeIndex_RemoveReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::ContentTypeIndex_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
}

function Ext_AdvancedTable_AddReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::AdvancedTable_AddReceiver((Ext_EnsureList $listSiteRelativeUrl))
}
function Ext_AdvancedTable_RemoveReceiver([string]$listSiteRelativeUrl)
{		
	[TiSp.TiSaExtensions.Utility]::AdvancedTable_RemoveReceiver((Ext_EnsureList $listSiteRelativeUrl))
}

# remove receivers
Ext_CountedColumn_RemoveReceiver "Lists/ATtest"
Ext_CountedColumn_RemoveReceiver "TestDocLib"

# add receivers
Ext_CountedColumn_AddReceiver "Lists/ATtest"
Ext_CountedColumn_AddReceiver "TestDocLib"

Form definition

Main features

  • Form fields definition
  • Tabs and collapsable groups support
  • Multiple form columns
  • Field properties (mandatory, read only, validation)
  • Alternative forms (conditional)
  • Document preview split window
  • Metadata print HTML templates
  • Javascript support
  • Metadata based permissions support
  • Custom form ribbons
  • Filling service
  • Field context help

Basic configuration

The basic definition for all fields of the content type can be generated in the left part of the form using the Show fields button.

{
  "Groups": [
    {
      "HideGroupHeader": true,
      "Fields": [
        {
          "InternalName": "Title"
        },
        {
          "InternalName": "AnotherInternalNameField"
        }
      ]
    }
  ]
}
  • ShowValidationSummary "ShowValidationSummary": false
    Shows validation error summary

    Useful for large forms, user gets simple error overview even for fields outside of visible part of form.

  • HiddenCommands
    It is a hidden string to add commands in
  • DeleteOnCancel
    Clicking the cancel button will delete the whole item (rather for dynamic use)
  • Display
    changes the visual aspects of form
    • FullWidth
      stretches the form to the full width
  • FocusSelector "FocusSelector": false
    Set focus to specific HTML input element, defined by JQuery selector

    .tisa-form-rowSomeField input:first

  • DisplayGroupsAsTabs "DisplayGroupsAsTabs": false
    Groups displayed as tabs

    Fields are composed into groups by default displayed as collapsable section use DisplayGroupsAsTabs: true to render tabs instead of collapsable rows sections.

  • Redirect "ShowValidationSummary": false
    Enables redirection after saving the item. Either can redirect to a folder, or can redirect to a custom url, defined using replace tokens
    {
      "Redirect": {
        "OpenFolder": true,
        "CustomUrl": "{SiteUrl}{WebUrl}{NewItemRootFolder}{FileLeafRef}"
      }
    }

    To open a page from another page (in a dialog), the tisa.appparts interface can be used.

    1. adding links to ScriptEditor

    <a class="tisa-link" href="{WebUrl}/DocumentSetTest/Forms/Upload.aspx?ContentTypeId=0x01200038DC085D4741814D871172FE7C99B6C6" data-dialog="true"><img src="{SiteUrl}/SiteAssets/Contracts/Img/contract.png"><h3>Open in dialog</h3></a>
    <a class="tisa-link" href="{WebUrl}/DocumentSetTest/Forms/Upload.aspx?ContentTypeId=0x0120"><img src="{SiteUrl}/SiteAssets/Contracts/Img/contract.png"><h3>{TiSa:CreateFolder}</h3></a>

    2. adding scripts via ContentEditor

    <SiteServerRelativeUrl>/SiteAssets/TiSa/_Shared/tisa.appparts.html

    SaveAndReload
    Saves and refreshes the page instead of returning to the main page

  • DisplayWaitDialog "DisplayWaitDialog": false
    Shows wait dialog on item save, useful for long save operation
  • AutoFormatDateFields "AutoFormatDateFields": false
    Auto formatting date fields
  • CustomFormDefinitions "CustomFormDefinitions": [{},{},{}]
    Alternative forms definitions. View different forms based on user role, metadata value, use custom script to view alternative form.
    {
      "Groups": [
        {
          "Name": "Base definition group name",
          "Fields":[
            {
              "InternalName": "Title",
              "ReadOnly": true
            },
            {
              "InternalName": "InternalNamePole"
            }
          ]
        }
      ],
      "CustomFormDefinitions": [
        {
          "Name": "FormDefinition1",
          "Groups": [
            {
              "Name": "Group name for FormDefinition1",
              "Fields":[
                {
                  "InternalName": "Title",
                  "ReadOnly": true
                },
                {
                  "InternalName": "InternalNameFieldAA"
                }
              ]
            }
          ]
        },
        {
          "Name": "FormDefinition2",
          "Groups": [
            {
              "Name": "Group name for FormDefinition2",
              "Fields":[
                {
                  "InternalName": "Title"
                },
                {
                  "InternalName": "InternalNameFieldBB"
                }
              ]
            }
          ]
        }
      ]
    }

Collapsable groups/Tabs definition

Groups * "Groups": [{}, {}, {}]
List of groups / tabs
  • Id
    Group (tab) Id

    If not defined, autogenerated value.

  • Name
    Group (tab) name

    You can localize name using Resources property.

  • Collapsed "Collapsed": false
    To show collapsable group collapsed set true valid on form open. This way you set initial section state.
  • HideGroupHeader "HideGroupHeader": false
    Set true to hide group (tab) name.

    useful if there is only one group on form.

  • HideFieldNames "HideFieldNames": false
    Hides field display name (label)

    Use if group name is used as field label. Sometimes used for custom Ti4Sp table field with workflow history.

  • ColumnSpan "ColumnSpan": null
    Span cells on row. For "HideFieldNames": true we recommend value 2.
  • NameFromFirstFieldName "NameFromFirstFieldName": false
    Group (tab) name by first field in group display name.
  • NameFromFieldName "NameFromFieldName": false
    Group (tab) name by defined field display name.
  • CSSClass "CSSClass": "gCommonFields"
    Group (tab) CSS class used for HTML formatting.
  • CSSStyle "CSSStyle": "color:red; font-weight:bold; font-style:italic; text-decoration:underline"
    Group (tab) style attributes.
  • CSSClassHeader "CSSClassHeader": "gCommonFieldsHeader"
    Group name CSS class name.
  • CSSStyleHeader "CSSStyleHeader": "color:red; font-weight:bold; font-style:italic; text-decoration:underline"
    Group name style attributes.
  • Fields "Fields": [{}, {}, {}]
    List of fields in group
    {
      "Groups": [
        {
          "Name": "Group1 name",
          "HideColumnHeaders": true,
          "Columns": [
            {
              "Id": "c1"
            },
            {
              "Id": "c2"
            }
          ],
          "Fields":[
            {
              "InternalName": "Title",
              "ReadOnly":true
            },
            {
              "InternalName": "InternalNamePole",
              "Required": true
            },
            {
              "InternalName": "InternalName_PoleVeSloupci2",
              "TargetColumn": "c2"
            }
          ]
        }
      ]
    }
    

Standard field definition

  • InternalName "InternalName": "InternalNameSampleField"
    Internal (static) field name.

    Inserts field into specific group on form.

  • AllowBulkApproval "AllowBulkApproval": false
    If true, mark field for bulk approval.
  • Required "Required": false
    If true, field is mandatory.

    Form validation on save warns user if field is empty.

  • Hidden "Hidden": false
    If true, field is hidden.
  • ReadOnly "ReadOnly": false
    Read only field true, cannot be modified.
  • CSSClass "CSSClass": "fSampleField"
    Field CSS class name for style formatting.
  • Validation
    • Validator * "Validator": "regex"
      Validation type.
      • required – Mandatory field. The same as property "Required": true.
      • equal – Equals to defined value.
      • startswith – Entered value starts with defined text.
      • endswith – Entered value ends with defined text.
      • contains – Entered value contains defined text.
      • regex – Regular expression validator.
      • number – Entered value is number in defined ranged.
      • date – Entered value is date in defined ranged.
      {
        "InternalName": "DateOfTaxableSupplies",
        "Validation":{
          "Validator": "date",
          "ValidateOnlyChanges": true,
          "Expression": "{today}-7d|{today}+7d",
          "ErrorMessage":"Enter date in from {From} to {To} range"
        }
      }
    • Expression
      Sets the expression against which the value in the field is compared. It is possible to define a range for some validators.
      • date – Expression allows you to set both a beginning and an end, separated by |.
        Definition of scope:
        only the initial date: "{today}-7d"
        target number date: "|{today}+7d"
        initial and target date: "{today}-7d|{today}+7d"
        The value shall be given in ISO format.
        exact date in ISO format: '2020-12-01|2020-12-31'
        replace tokens "{today}|{today}+7d"
        offset (date can be added or subtracted) "{today}|{today}+7d+5h"
        replace tokens – {now}, {today}, {value}, {year}, {year-month}
        offset tokens: y – year, M – month, w – week, d – day, h – hour, m – minute, s – second
        Example:
        date 7 days back and 7 days forward from the current date: "{today}-7d|{today}+7d"
        cannot insert an earlier date than the one filled in and the maximum is the current date + week: "{value}|{today}+w"
        can only be entered in the specified range: "2020-12-01|2020-12-31"
      • number – Expression allows you to set both a beginning and an end, separated by |.
        Definition of scope:
        only the initial number: "10"
        target number only: "|20"
        initial and target number: "10|20"
      • regex – In Expression there is a regular expression with which the value is compared
      • startswith, endswith, contains, equals, contains – In Expression is the string against which the value is compared. The Validator can be set programmatically by a script so that the Expression value can be affected based on the state of the form.
      var ct = formContext.FindFieldControl("myField");
      var validator = TiSa.Forms.Utils.GetValidatorByType(ct.Validators,"equal");
      validator.SetDisabled(false);
      validator.SetExpression("Value123");
      validator.SetErrorMessage("Field does not have the correct value, expected value is Value123");
    • ErrorMessage * "ErrorMessage": "Value is not valid."
      Text of validation error message.
    • Disabled "Disabled": false
      Disable validation.

      Allows disable/enable validation in custom script. Using this property true/false you can set initial state.

    • ValidateOnlyChanges "ValidateOnlyChanges": false
      Set true to validate only on value changed.

      You can for example validate date against current date and validation cannot be used on later modification of item.

Empty row and special elements definition

  • EmptyElement "EmptyElement": false
    Emits empty element
  • Content
    • Fields
      Generates form fields
    • Html "Html": "HTML text to be embed in form"
      Static text
    • Folder
      Generate folder content as attachment field or to view the contents of a folder on form.
    {
      "EmptyElement" : true,
      "Content":{
        "Folder": {
          "FolderContent":{
            "Query": "<OrderBy><FieldRef Name=\"FSObjType\" /><FieldRef Name=\"Modified\" /></OrderBy>"
          },
          "IncludeFolders": true,
          "ViewFileIcon": true,
          "EnableOpen": true,
          "EnableView": true,
          "MaxItemsOnPage": 25,
          "DisplayAuthor": true,
          "DisplayCreated": true,
          "DisplayContentType": true,
          "DisplayFields": [
            "FileLeafRef",
            "Level",
            "DocumentName",
            "Department"
          ]
        }
      }
    }
    
  • DocumentLink "DocumentLink": false
    Generates document link.
  • "ContentTypeSelector": false "ContentTypeSelector": false
    Generates content type selector dropdown list.
  • HiddenField
    Renders special form fields, not editable or not visible in new form.
    {
      "HiddenField": "Author",
      "Title": "autor"
    }
    
    {
      "HiddenField": "Created",
      "Title": "created",
      "IncludeTime" : true
    }
    {
      "HiddenField": "_UIVersionString",
      "Title": "version"
    }
    
  • IncludeTime "IncludeTime": false
    Shows time part of date next to the date part. Valid for date with time fields
  • TasksTable
    Displays current active tasks on current item in a table
    • ShowWorkflow
      Displays the internal name of the workflow in a separate column
    
    {
        "Title":"Active tasks",
        "TasksTable":{
            "ShowWorkflow":true
        }
    }
    
    

Document preview

For document items, you can preview document content (browser support required).

Preview setup can be user based using property "UserLayout".


 {
  "UserLayout":{
    "DocumentPreview": true
  },
  "DocumentPreview":{
    "DelayDisplay": 5000,
    "DisplayGroups":[
      {
        "Extensions": ".pdf|.txt",
        "PreviewUrl": "{FilePath}"
      }
    ]
  }
}
  • DelayDisplay "DelayDisplay": 1000
    Specify delay before preview is generated (milliseconds).
  • DisplayStateInitial "DisplayStateInitial": 0
    Initial form view. 0 = form; 1 = document preview; 2 = split form and doc preview
  • SpinnerInitial "SpinnerInitial": 50
    Split in percent.
  • SpinnerMin "SpinnerMin": 10
    Minimal split in percent.
  • SpinnerMax "SpinnerMax": 90
    Maximal split in percent.
  • DisplayGroups "DisplayGroups": []
    Define groups of documents by extension.
    • Extensions *
      Format of the previewed file
      Supported formats:
      • .txt,.pdf,.docx – Usually used with PreviewUrl set to '{FilePath}'. Does not work correctly in combination with PreviewUrl se to 'direct'
      • .html,.png,.jpg,.gif,.mp4 etc. – For correct display the property PreviewUrl have to be set to 'direct'
    • PreviewUrl *
      document url, use tokens {FilePath}, direct. Alt use owa, owa_edit, wopi, wopi_edit, oos, oos_edit (if oos_edit is selected the document must be edited in dispForm otherwise save conflict will occur) OpenTextBrava for office docs.

      Depending on the type of OneDrive usage, the names must not contain the characters mentioned in the attached link:

      https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa?ui=en-us&rs=en-us&ad=us

    • ClickCommand* *
      Click event for open
  • UseAttachmentField "UseAttachmentField": AttachmentFieldInternalName
    Use attachment field for preview.

Ribbon buttons/commands

You can define custom ribbon commands for ribbon or form. Command can start workflow or custom form js actions etc.

"RibbonButtons":[
  {
    "Title":"Cancel",
    "ToolTipDescription":"Order cancel",
    "Icon":"{SiteCollectionUrl}/SiteAssets/cancel.png",
    "GroupTitle":"Workflows",
    "GroupId":"workflow",
    "EnabledFunction":"BtnCancelEnabled",
    "VisibleFunction":"BtnCancelVisible",
    "CommandFunction":"BtnCancelCommand"
  },
  {
    "Title":"Send",
    "ToolTipDescription":"Send to process",
    "Icon":"{SiteCollectionUrl}/SiteAssets/send.png",
    "GroupTitle":"Workflows",
    "GroupId":"workflow",
    "EnabledFunction":"BtnSendEnabled",
    "VisibleFunction":"BtnSendVisible",
    "CommandFunction":"BtnSendCommand"
  }
]
Button object attributes
  • Title
    Button name
  • ID
    Unique identification number of the button
  • GroupId
    Group ID. If not defined generated automatically. To display more buttons in single group you must define GroupId.
  • GroupTitle
    Title of group commands.
  • ToolTipTitle
    Header value of the bubble that appears when hovering over the button with cursor
  • ToolTipDescription
    Content of the bubble that appears when hovering over the button with cursor
  • Icon "Icon": _layouts/15/images/placeholder32x32.png
    Url path to the button icon.
  • Visible "Visible": true
    Button visibility.
  • CommandFunction
    JS function name to be executed when the button is clicked.
  • EnabledFunction
    JS function name, function returns true/false to enable/disable button. If the function is not defined the button will remain always active.
  • GroupSequence
    Group order for multiple group definitions.
Definition of the button press event and function of the activation/deactivation of the button:
function TiSaForm_Customize(cfg) {
  this.OnFormInit = function(form) {
    form.OnAction("BtnCancelCommand", function(completeCallback) {
      WFEngine.Manager.StartWorkflowOnItem("Storno", form.ItemId);
    });
  };
}

function BtnCancelCommand(obj, form) {
  if (confirm("Do you really want to cancel?"))
    form.ActionStart("BtnCancelCommand", true);
}

function BtnCancelEnabled(obj, form) {
  var s_author = form.FormContext.FieldsByName.s_author;
  var s_specialist = form.FormContext.FieldsByName.s_specialist;
  var isAuthor = s_author.GetValue() && s_author.GetValue().indexOf(_spPageContextInfo.userLoginName) >= 0;
  var isSpecialist = s_specialist.GetValue() && s_specialist.GetValue().indexOf(_spPageContextInfo.userLoginName) >= 0;

  if (!form.IsNewForm && isAuthor && form.FormData.s_status !== 'inApproval')
    return true;
  if (!form.IsNewForm && isSpecialist && form.FormData.s_status == 'returned')
    return true;
}

Metadata print

Enables ribbon button for printing. Print templates are defined in TreeINFO configuration here.

{
    "Print":{}
}

Copy / Clone

Copy current Item.

{
  "Copy": {
    "TargetList": "{WebUrl}/Orders",
    "ExceptFields":[
      "Title",
      "s_author",
      "s_approvalStart",
      "s_finalApprovalDate",
      "s_status",
      "s_approvalProcessHistory"
    ]
  }
}
  • TargetList
    Define list where copy will be saved.
  • ExceptFields
    Define fields that will not be copied.

Role assigements

This functionality allows to define permissions on form.

"Extensions":{
  "Permissions":{
    "CopyRoleAssigements":true,
    "Fields": [
      {
        "InternalName": "_x0055_sr1",
        "PermissionLevel":"Contributor"
      },
      {
        "InternalName": "_x0055_sr2",
        "PermissionLevel":"Reader"
      },
      {
        "InternalName": "UsrTable",
        "ColumnId":"Dodavatele",
        "PermissionLevel":"Reader"
      }
    ],
    "Principals": [
      {
        "PrincipalName": "sabris\test001",
        "PermissionLevel":"Reader"
      },
      {
        "PrincipalName": "{webproperty:test_DomainName}\test001",
        "PermissionLevel":"Reader"
      }
    ]
  }
  • Permissions *
    Adds permissions using event receiver "TasksPermissionsEventReciever" with appropriate name
    • CopyRoleAssigements
      Copy existing permissions
  • Fields *
    Fields list and corresponding permission. Use SharePoint Person or Group or TiSa AdvancedTable (ColumnId must be defined) columns.
    • InternalName *
      SharePoint internal field name where permission configuration is stored,
    • PermissionLevel
      Item permission level. You can use localized permission level, or enum SPRoleType value (see: Documentation)
    • ColumnId
      mandatory if users are stored in tisa AdvancedTable. Use column Id form Advanced table definition (where user names are stored)
  • Principals *
    Static user and AD group list, to set permission
    • PrincipalName
      Ad user or group name. You can use token: {webproperty:test_DomainName} , to get value from web properties value returned for key 'test_DomainName' will be replaced in text.
    • PermissionLevel
      Item permission level. You can use localized permission level, or enum SPRoleType value (see: Documentation)

Prevent Save Receiver

Special event receiver. Custom event receiver support only specific users can save form values (used for large lists where individual item rights can be set). Receiver compares Field1 and Field2 values if condition is true all users expect user defined in Principals element can save form.

"Extensions": {
  "PreventSaveReciever": {
    "Field1": "inv_PrevStatus",
    "Field2": "inv_NewStatus",
    "Operator": "Eq",
    "Principals": [
      {
        "PrincipalName": "{webproperty:DomainName}\\user1"
      },
      {
        "PrincipalName": "TDEV\\user2"
      }
    ]
  }

On-Premises supported receiver from TiSa.Extension package

  • PreventSaveReciever
    receiver config element
  • Field1 and Field2
    Internal names of fields for comparison
  • Operator
    Supported Eq or Neq. Field1 Equals to Field2, Field1 not equals to Field2

Filing service

Filing service allows to create document filled with metadata. Document can be created from template or uploaded.

{
  "FileSet":{
    "TemplateFileUrl": "/sites/efa/DocumentsFromTemplate_Templates/DefaultDocument.pdf",
    "AllowUpload": true
  }
}
  • TemplateFileUrl "TemplateFileUrl": true
    Relative document template url
  • AllowUpload
    Allows document upload.

Information – callout

Form can view icon to display information popup callout. Can be used for:

  • Field on form
  • Group
  • Form

Uses standard SharePoint Callout function. Configuration:

  • Static – static text
  • Dynamic – set callout using custom javascript function

Javascript functions allow you to set all callout component properties.This way you can use all callout features including custom callout action buttons. You can turn hide/display callouts using javascript according to form context or state.

  • CalloutEnabled
    true, displays callout icon, otherwise return of function CalloutEnabledFunction decides. If neither is defined icon is not visible. Property CalloutEnabled has higher preference.
  • CalloutTitle
    Static title, text displayed in callout header.
  • CalloutContent
    Static callout content, supports HTML formatting.
  • CalloutCSSClass
    CSS class for callout icon, default value tisa-callout-button-right. Supported classes:
    • tisa-callout-button-right – right aligned icon
    • tisa-callout-button-left – left aligned icon
    • any custom class
  • CalloutCSSStyle
    Inline CSS style for icon.
  • CalloutIcon
    Custom icon url, otherwise default icon is used
  • CalloutFunction
    Javascript function interface, sets callout properties if not static content is used. Function header:
    Function parameters:
    • form – form instance
    • cfg – associated element configuration (field / group)
    • calloutOptions – CalloutOptions object. For details visit documentation.
    function MY_HELP_FUNCTION(form,cfg,calloutOptions) {
    
        }
  • CalloutEnabledFunction
    Function enables/disables to display callout icon. Can be used instead of property CalloutEnabled. Example:
    function MY_HELP_ENABLED_FUNCTION(form, field) {
        return form.IsEditForm;
    }
Call configuration samples

Field callout:

{
  "Groups": [
    {
      "Fields": [
        {
          "InternalName": "Title",
          "CalloutEnabled": true,
          "CalloutContent": "Callout text eg help, you can use HTML",
          "CalloutTitle": "Help is cool"
        }
      ]
    }
  ]
}

Callout with js script:

{
  "Groups": [
    {
      "Fields": [
        {
          "InternalName": "Title",
          "CalloutEnabledFunction": "MY_HELP_ENABLED_FUNCTION",
          "CalloutFunction": "MY_HELP_FUNCTION"
        }
      ]
    }
  ]
}

Custom script:

function MY_HELP_FUNCTION(form, cfg, calloutOptions) {
  // different callouts for edit and display forms
  if (form.IsEditForm) {
    calloutOptions.title = "callout title on  EDIT form";
    calloutOptions.content = "Content by function on " + (new Date());
  } else {
    calloutOptions.title = "callout title on  DISP form";
    calloutOptions.content = "Content by function on " + (new Date());
  }
}
// to use this function set "CalloutEnabled": false
function MY_HELP_ENABLED_FUNCTION(form, field) {
  return form.IsEditForm; // displays callout on edit form only
}

Automatic redirection of edit/display form to Task Form

$SiteUrl = "<siteurl>"
$w = Get-SPWeb $SiteUrl
$taskCt = $w.ContentTypes | where ID -EQ "0x0108AA"
if($taskCt -ne $null)
{
   $listPages = $w.Lists.EnsureSitePagesLibrary()
   $taskCt.EditFormUrl = $listPages.RootFolder.ServerRelativeUrl + "/TiSa/TaskForm.aspx"
   $taskCt.DisplayFormUrl = $listPages.RootFolder.ServerRelativeUrl + "/TiSa/TaskForm.aspx"
   $taskCt.Update($true)
}

The script above redirects opening of a form to be always Task form even if opened as Edit/Display form

Registration in Online environment is done through TreeINFO user interface:
Settings -> Task forms -> Select WFTask -> Click Associate button

Form scripting

On the "Custom Script" tab, you can create a script to modify the appearance and behavior of the form. Form internally generates a series of events upon initialization and allows custom handlers to be added.

The basis for scripting is a function that receives the form configuration, to which we can add event-responsive functions.

This example shows simple form operations – alternate form definition for display form. You can see how to access form fields and change properties ReadOnly, visibility, get/set values, required.

function TiSaForm_Customize(cfg) {
  this.OnFormInit = function(form) {
    // display form can use alternate configuration
    if (form.IsDisplayForm)
      form.SetFormDefinition("DisplayForm");
  };

  this.OnFormInitComplete = function(form) {
    var formContext = form.FormContext;
    //sample acces form fields, initially all fields are readonl, yuo can change properties and values here.
    var cts_invoiceNumber = formContext.FindFieldControl("s_invoiceNumber");
    var cts_supplierLookup = formContext.FindFieldControl("s_supplierLookup");
    var cts_invoicePaymentDate = formContext.FindFieldControl("s_invoicePaymentDate");
    var cts_invoiceDueDate = formContext.FindFieldControl("s_invoiceDueDate");
    var cts_invoiceDUZP = formContext.FindFieldControl("s_invoiceDUZP");
    var cts_status = formContext.FindFieldControl("s_status");
    var cts_author = formContext.FindFieldControl("s_author");
    var cts_authorDepartment = formContext.FindFieldControl("s_authorDepartment");
    // change column settings according to the value
    if (cts_status.GetValue() == "new") {
      cts_invoiceNumber.SetReadOnly(false);
      cts_invoiceNumber.SetRequired(true);
      cts_supplierLookup.SetReadOnly(false);
      cts_invoicePaymentDate.SetReadOnly(false);
      cts_invoiceDueDate.SetReadOnly(false);
      cts_invoiceDueDate.SetRequired(true);
      cts_invoiceDUZP.SetReadOnly(false);
      cts_invoiceDUZP.SetRequired(true);
    }
    //setting current user to field
    if (form.IsNewForm) {
      cts_author.SetValue(_spPageContextInfo.userId);
      form.GetUserProperties(["Department"], function(r) {
        cts_authorDepartment.SetValue(r.Properties.Department);
      });
    }
    // if edit form is not displayed, hide column
    if (!form.IsEditForm) {
      cts_supplierLookup.SetHidden(true);
      cts_supplierLookup.SetRequired(false);
    }
  };
}

Events list

  • OnFileSetRegistered this.OnFileSetRegistered = function() {};
    Triggers when fileset is registered.
  • OnValidationError this.OnValidationError = function() {};
    Triggers on error in validation – used to make specified error message for example.
  • OnSubmittingForm this.OnSubmittingForm = function() {};
    Triggers while submitting form.
  • OnPreInit this.OnPreInit = function() {};
    Triggers while form is being created (can turn whole form as readonly for example).
  • OnFormPreInit this.OnFormPreInit = function() {};
    Triggers before form is created .
  • OnFormInit this.OnPreInit = function(form) {};
    Async requests before form loaded

    You can choose alternate form definition here.

  • OnFormInitComplete this.OnFormInitComplete = function(form) {};
    Event generated after form is render but before displaying the form.

    You can use it for additional field configuration.

  • OnOutcomeChanged this.OnOutcomeChanged = (form, outcome, data, fnComplete) {};
    Triggers when outcome is changed.
  • OnFormShow this.OnFormShow = function(form) {};
    Triggers when Form is loaded.
  • OnPrint this.OnPrint = function(form) {};
    Triggers when print button is pressed.
  • OnPrintShowDialog this.OnPrintShowDialog = function(form, preview, options, complete) {};
    Triggers when the dialog window for print form is displayed.
    
                                      this.OnPrintShowDialog = function(form, preview, options, complete) {
                                        form.IsUserInSpGroup("SP_TEST_GROUP", function(result) {
                                          if (result)
                                            complete();
                                          else
                                            alert("print template cannot be shown, you are not in SP_TEST_GROUP group.");
                                        }, null, 1);
                                      };
  • OnCopyField this.OnCopyField = function(form, fv, field, v) {};
    Triggers when copy function is used.
  • OnCopyComplete this.OnCopyComplete = function(form, fv) {};
    Triggers after the copy action is completed.
  • OnPreSaveItem this.OnCopyComplete = function(form) {};
    Triggers when save button is pressed – only synchronous actions can be used.

    Return false to not allow form save and close.

    
    this.OnPreSaveItem = function(form, isAction, action) {
      // isAction true, if saving is called through action form.ActionStart(....)
      // action object with ActionName and ActionParameter called through form.ActionStart(....) action
     
        if (!asyncPreSaveResult && isAction) {
          //form.FieldsByName.VypoctovePole = "XXXX";
          alert("Action " + action.ActionName + " with parameter " + action.ActionParameter was called);
        }
     
        if (!asyncPreSaveResult) {
          // if the saving is blocked, asynchronous query can be made
          form.IsUserInSpGroup("SP_TEST_GROUP", function(result) {
            // an alert is given based on the result
            if (result) {
              if (confirm("you are in  SP_TEST_GROUP group, Do you want to save??")) {
                asyncPreSaveResult = true;
                // saving is called once more, because asyncPreSaveResult = true is set
                form.FormContext.SubmitForm();
              }
            } else
              alert("You dont have the right to save the item, you are not in SP_TEST_GROUP group.");
          }, null, 0);
        }
     
        return asyncPreSaveResult; // blokuje ukládání pokud false    
     
      };
                                    }
  • OnTaskFormLoaded this.OnTaskFormLoaded = function(form, taskForm) {};
    When task form is loaded completely.
  • OnDelegateTask this.OnDelegateTask = function(form, delegateProps) {};
    Triggers when user selects delegation outcome.
  • OnTaskSaveItemOnly this.OnTaskSaveItemOnly = function(form) {};
    Triggers when user is on task form and clicks the save button (without selecting outcome.
  • OnTaskSubmit this.OnTaskSubmit = function(form) {};
    Triggers when task is completed.
  • CancelLoading form.CancelLoading()
    Cancels form loading

Asynchronous operations – Form support asynchronous form definition load. Based on setting of asynchronous operation SetFormDefinitionAsync() after form is loaded call SetFormDefinitionAsyncComplete(null)

Actions – You can call an action on the form that depends on the currently open item. If the item is in NewForm or EditForm, it is first saved and then redirected back when the action is complete. This is useful for e.g. starting a workflow.

function TiSaForm_Customize(cfg) {
  this.OnFormInit = function(form) {
    form.OnAction("TestAction", function(complete) {
      WFEngine.Manager.StartWorkflowOnItem("TestWF", form.ItemID, null, null, function(result) {
        if (result.Res == "err") {
          Tisa.Console.Error(result.ErrorMessage);
          return;
        }
        complete();
      });
    });
  };

  this.OnFormInitComplete = function(form) {
    if (form.IsNewForm) {
      form.AddButton("Buton Test", function() {
        form.ActionStart("TestAction", true);
      });
    }
  };
}

Form styling

On tab Custom style you can define additional styles for your form. You can set styles to custom CSS defined on field or you can set styles to fields or SharePoints classes.

.tisa-AdvancedTable .tableWithItems td > textarea.textInput {
  min-width:160px;
}
.tisa-AdvancedTable .tableWithItems td.externalLookup .searchBox {
  min-width: 150px;
}
.tisa-ExternalLookup .searchBox {
  width:400px;
  float:left;
}
.tisa-ExternalLookup{
  display:block;
}
.cColumn.cCalc{
  white-space: nowrap !important;
}
#documentLinkLi, #folderLinkLi, #itemLinkLi{
  display:none;
}
.tisa-form-rows_totalAmount, #s_totalAmount {
  color:#fff !important;
}
@media print
{
  #DeltaPageStatusBar,#sideNavBox,#DeltaFormDigest,#s4-titlerow,#notificationArea,#s4-ribbonrow,#ms-cui-topBar2,#ms-cui-ribbonTopBars,#suiteBar {
    display:none !important;
  }
  .ms-formtoolbar{
    display:none !important;
  }
  .ms-descriptiontext{
    display:none !important;
  }
  .hideForPrint {
    display:none !important;
  }
  .customFormat .tisa-AdvancedTable .tableWithItems tr{
    color: black;
  }
  @page {
    size: landscape;
    margin: 10px auto;
  }
}

Advanced Choice

Overwrites standard SharePoint choice field with extended functionality. Adds resources to choice options.

For correct functionality and to ensure that configured choices appear on the form, the choices must be named in the SharePoint column settings using the same names as in the "value" property.


Basic configuration

{
  "Choices": [
    {
      "Value": "new",
      "Title": "New Contract"
    },
    {
      "Value": "approved",
      "Title": "Aproved Contract"
    },
    {
      "Value": "denied",
      "Title": "Denied Contract"
    }
  ]
}

Properties

  • Value "Value": "ApproveLvl1"
    Item value
  • Title "Title": "Approve Lvl 1"
    Display text
  • IsDefault "IsDefault":true
    If set to true, then used as default value.

Examples

{
  "Choices": [
    {
      "Value": "new",
      "Title": "RESX.$O_new"
    },
    {
      "Value": "approving",
      "Title": "RESX.$O_approving"
    },
    {
      "Value": "approved",
      "Title": "RESX.$O_approved"
    },
    {
      "Value": "denied",
      "Title": "RESX.$O_denied"
    }
  ],
  "Resources":[
    {
      "LCID": 1029,
      "$O_new": "Nový",
      "$O_approving": "Ve schvalování",
      "$O_approved": "Schválený",
      "$O_denied": "Zamítnutý",
      "$O_cancelled": "Stornovaný"
    },
    {
      "LCID": 1033,
      "$O_new": "New",
      "$O_approving": "Approving",
      "$O_approved": "Approved",
      "$O_denied": "Denied"
    }
  ]
}

Advanced Table

TreeINFO field for displaying editable table on forms, each table cell contains HTML input element.

Component Info

  • Editable cells
  • CSS style support
  • Number formatting
  • Row Add and Remove support
  • Basic column math operations sum, average, min max values, count
  • Fixed table support

Note Applicable to SharePoint text field with "Multiple lines of text" and unlimited length.


Basic configuration

{
  "Table": {
    "MaxItemsOnPage": 10
  },
  "Columns": [
    {
      "Name": "Column 1",
      "HeaderStyle": "font-weight:bold;",
      "CellStyle": "font-weight:bold;",
      "InputStyle": "color:red;",
      "Calc": {
        "Operation": "sum",
        "CellStyle": "font-weight:bold;color:green"
      },
      "Number": {
        "aSep": " ",
        "aDec": ",",
        "mDec": 2,
        "aPad": true
      }
    },
    {
      "Name": "Column 2"
    },
    {
      "Name": "Column 3"
    }
  ]
}

Properties

Table element configuration

  • MaxItemsOnPage *
    Rows per page

    Mandatory, default value is 0, if not set no rows will display on the page.

  • ReadOnly "ReadOnly": false
    Read only table, filled by separate process (rest or web service). For example from workflow to store custom workflow history.
  • HidePager "HidePager": false
    Hide paging commands.
  • HidePagerForOnePage "HidePagerForOnePage": false
    Hide paging commands, if row count is less then Rows per page.
  • DisableCopyRow "DisableCopyRow": false
    Disable copy row.
  • TableStyle
    Style definition for table element.
  • CSSClass
    Custom class for table element.
  • FullWidth "FullWidth": false
    Set full width for table.
  • DisableAddRow "DisableAddRow": false
    Hide Add row command.
  • DisableDeleteRow "DisableDeleteRow": false
    Hide Delete row command.
  • EnableRowHeader "EnableRowHeader": false
    Enable only for fixed rows table and RowHeaders must be declared in Columns definition. Used for posting table. Details Fixed table.
  • Collapsed "Collapsed": false
    Table collapsed as default.
  • DisableCollapsedInView "DisableCollapsedInView": false
    Table expanded in view as default.
  • Reverse "Reverse":true
    Reverse table items ordering. The most recent items are on the top.
  • ReadOnlyEdit – boolean
    Makes the table editable. Can be also solved through script but not recommended.
  • EnableSelection – boolean
    Adds a button for selection of specific rows (for bulk actions).
  • HideHeader – boolean
    Hides the header row.
  • AlwaysTriggerChange – boolean
    After every change in table the content is saved and triggers an event that can be chained. If this attribute is set to false the default state will be to not trigger an event and has to be set manually on every table. If set to true then the default state is to trigger an event and has to be turn of manually if required on a specific table.
  • Search
    Fulltext search function for Advance Table. If the column is ExternalLookup or User type, the search is limited to the DisplayText.
    • "FilterExpression": "__searchFilter(ctx)" – can be used to narrow down search function
      • Config: object
      • StaticContext: object
      • Instance: object – execute search over specific instance
      • Columns: object – execute search over specific column(s)
      • ColumnsById: object – execute search over specific column(s) by their Ids
      • Container: jQuery
      • Items: array – execute search over specific items
      • Item: object – execute search over specific item
      • IsHidden: boolean – execute search over items that are / are not hidden
      • IsFilterHidden: boolean
      • RowIndex: integer
      • Cell: (string) -> string – execute search in a specific cell
      • SearchText: () -> string – execute search for predetermined text
    • Example 1: specific search string if (ctx.SearchText() == "*") { return false; // if the star symbol is used everything will be shown }
    • Example 2: search in specific column where the searched expression is {idSloupce}:{text} if (ctx.SearchText().indexOf(":") > 0) { var pp = ctx.SearchText().split(":"); var v = ctx.Cell(pp[0]); // value of column cell if (v.indexOf(pp[1]) === -1) return true; // if the column is not suitable it is hidden return false; // else it will be shown }

Configuration of the Columns element

Table columns declaration

  • Id "Id":"spplr"
    Column identity, used for calculations as column reference.
  • Name "Name":"Supplier"
    Column Name, header. You can use resources for name localization.
  • HeaderStyle "HeaderStyle":"font-weight:bold;"
    A definition of the appearance of a specific header.
  • CellStyle "CellStyle": "min-width:120px;font-weight:bold;color:green"
    Set CSS style.
  • HeaderCSSClass "CSSClass": "cHeader"
    Used to link a header to a specific CSS header style (CSS needs to be defined on form).
  • CSSClass "CSSClass": "cMiddle"
    Custom cell style – class.
  • Width "Width": "337px"
    Set cell style width.
  • InputStyle "InputStyle":"color:red;"
    CSS style of a input field.
  • DisableStoreValue "DisableStoreValue": true
    Used when specific cell is used as a result for calculations. If used the shown value will not be stored to a variable. Used in combination with expression.
  • Hidden "Hidden": false
    Hidden column.
  • ReadOnly "ReadOnly": false
    Read only column, filed by different process (script). User can enter values only in editable columns.
  • Required "Required":true
    Forces user to fill predefined cell.
  • RegexValidator "RegexValidator":"^[<>\\-\\+]{1}$"
    Checks whether the value of an input control matches a pattern defined by a regular expression.
  • ExpressionValidator
    Checks whether the value of an input control matches a pattern defined by an expression.
    "ExpressionValidator": {
        "Formula":"(('{Investment}' != '4#;X' && ctx.Value.length > 0) || '{Investment}' == '4#;X') && ctx.Value.length <= 7",
         "ErrorMessage": "The value is not correct"
    }
  • MultiLine "MultiLine": true
    Defines text over multiple lines. Breaks when line would exceed maximum cell width.
  • DisablePrint "DisablePrint": true
    Used in print forms. When used the specific print form will not be printed on a print template.
  • DisableHtmlEncode "DisableHtmlEncode":true
    Ensures that payloads containing special characters such as < > , & " ' are also processed correctly.
  • DisableSearch "DisableSearch": true – Used in combination with the Search function, omits selected column from search
  • Restrictable "Restrictable":true
    Used to restrict which user can and cannot see the value of a specific cell/column.
  • Token "Token": true
    Adds prefix to a value of defined cell/column (token|value).
  • Html "Html": true
    Preserves HTML code in a column/cell.
  • HtmlReplaceEntities "HtmlReplaceEntities": true
    Html encoding: <br> replaces \n for <br /> and *text* for <b>text</b>
  • Calc: "Calc": none
    Column operations (results in special footer row).

    Operation

    • sum
      Sum of cell values in column.
    • min
      Min cell value in column.
    • max
      Max cell value in column.
    • avg
      Calculate Average value.
  • RowHeaders
    Define cell values to whole row.
    "Columns": [  
      {
        "Name":"",
        "RowHeaders": [
          {
            "Name": "Váha [%]",
            "DefaultCellValues": [
              "20",
              "20",
              "20",
              "20",
              "20"
            ]
          }
        ]
      }    
    ]
    
  • Number
    Enables only number input, calc operations can be perform.
    "Number": {
      "aSep": " ",
      "aDec": ",",
      "mDec": 2,
      "aPad": true
    }
  • DateTime
    Enables date field, date picker is supported.
    "DateTime": {
      "Format": "Date",
      "Picker":true
    }
    
    • ParseMasks
      Expected input.
    • Format
      The format of the result date.
    • Picker
      If set to true by clicking in the date cells a date picker windows will appear to click and choose a date instead of writing it.
  • Boolean "Boolean": true
    Enables checkbox in table cell.
  • ExternalLookup
    Enables use of External lookup field.
  • ICALC
    type of column – used for calculations
    • Operation
      type of calculation Used
      • Sum
        Add together.
      • Min
        Minimal value.
      • Max
        Maximum value.
      • Avg
        Average value.
      • Count
        Number of values.
    • Number
      Format configuration
      • aDec: rsi.DecimalSeparator,
        the symbol that is used to separate decimal numbers in default either a do tor a comma.
      • aSep: rsi.ThousandSeparator,
        the symbol used to separate thousands in default a space.
      • dGroup: rsi.DigitGrouping,
        the amount of numbers in which they group by in default they group by thousands (e.g. 2 000 000 in default but can be changed to 200 0000).
      • mDec: 2,
        the amount of number to show after the decimal seperator (does not round the number only trims the number in visual representation but does not cut of the rest of the number in the background).
      • aPad: false,
        if set to false it hides the value beyond the decimal seperator (does not round the number only trims the number in visual representation but does not cut of the rest of the number in the background).
      • vMax: Number.MAX_VALUE,
        the maximal number that can be entered.
      • vMin: -Number.MAX_VALUE
        the minimal number that can be entered.
    • RegexValidation
      Regular expression according to the rules of expression.
    • ExpressionValidation
      Java script validation.
    • CellStyle
      CSS style of the cell.
    • Round
      The amount of numbers the result should be rounded to. If not set then the number is not rounded.
    • CopyTo
      The result can be copied to defined target field.
  • User
    Enables user field input.
    "User":{
    }
    
    • AllowMultipleValues – boolean
      Allows multiple users to be selected in a single cell/field.
    • PrincipalAccountType
      If not set the default setting is to accept groups and users but through this attribute you can allow to only be able to enter either groups or users.
  • URL – Turns value of the column into link. First row of the column is used for the link itself. The second is used for Placeholder value
    • Placeholder – can be set for default placeholder value. This value will be overwritten if the second row of the column is filled.
  • AllowEditOnDisplayForm – boolean
    Option to add comment on display form. A column will be added for a reply.
  • AllowReply
    true/false; enables the edit of the reply field.
  • ForceCallHandler
  • true/false
  • UpdateRelatedField
    Used to update related fields. Can be also used to start a workflow process.
  • GeneratedColumn
  • ManageMetadata
    • SspID – the unique value used to identify a specific service.
    • TermSetId – unique value used to identify – for it to connect to.
    • AllowMultipleValues – allows to use multiple values in a single instance.
  • Attachment – Uses similar properties as Attachment Column type equivalent but the number of properties is cut down to:
    • CustomFolderFormat
    • FolderDateFormat
    • LibraryUrl
    • CopyRoles
    • RootFolder
    • ExternalPath
    • CustomFunction
    {
      "Id":"att",
      "Name":"Add attachment",
      "Attachment":{
        "LibraryUrl": "{WebUrl}/{ListName}_orders",
        "CustomFolderFormat": "{date:yyyy}_{date:MM}/{item:s_Number}"
      }
    }
    
  • Rating
    Enables Rating settings.
  • UserQuery
    Used to fill data automatically based on user input (for example user searches for other users and user query fill their name ID and position in selected cells based on this search).
  • Reference
    used to refer to external data and to show it on form. For more see in examples.
  • ReferenceQuery
  • Expression
    • ExpressionReadOnly – Adds read only attribute to specified cell/column based on a defined condition.
    • Context – fields that can be used to create expressions.
      • Config
      • StaticContext
      • Instance
      • Columns
      • ColumnsById
      • Items
      • Item
      • CurrentItem
      • FormContext
      • Column
      • RowIndex
      • ColumnIndex
      • Resources
      • Cell
  • AdvancedTableConfiguration
  • DefaultCellValues "DefaultCellValues":"1"
    Default cell value for add new row.
  • DataList "DataList": ["<",">","-","+"]
  • UpdateDefaultValue "UpdateDefaultValue":true"
  • ColumnOrder "ColumnOrder": 5
    Different column order in view and in json source. Useful when new column is need with no change to existing form or workflow code.
  • Sort "Sort": "asc"
    Enables column sorting.

Other properties

  • CustomFunction "CustomFunction": true
    If set to true a custom function will be expected that can expand the basic behavior of a field.

Events

Events are actions that trigger defined behavior. They are defined on form. For proper functioning, it is necessary to add "CustomFunction": true to Advanced table definition.

{
  "Table": {
    "MaxItemsOnPage": 15
  },
  "Columns": [
    {
      "Id":"supplier",
      "Name":"Supplier",
      "Required":true
    },
    {
      "Name":"Total value",
      "Required":true,
      "Number": {
        "aSep": " ",
        "aDec": ",",
        "mDec": 2,
        "aPad": true
      }
    },
    {
      "Name":"Comment",
      "Required":true,
      "MultiLine": true,
      "MaxTextLen":255
    }
  ],
  "CustomFunction": true
}
Function AdvancedTableCustomFunction_InternalFieldName(inst) {
Var _OnCellValueChanged = function(v, Control, ctx) {
}
Inst.OnCellValueChanged.push(_OnCellValueChanged);
}
  • OnCellValueChange ((v: any, control: AdvancedTableControl, ctx: any) => void)[]=[]
    Triggers when a value in a cell is changed.
  • OnCellValueChanging Function[]=[];
    Triggers while a cell is being changed (e.g. can be used to change typed value while it is being typed).
  • OnValueChanged Function[]=[];
    Triggers after the table is changed (not specific cell but for example a row being added).
  • OnInvalidateFunction[]=[];
    Triggers when the table is rendered.
  • OnRowRender((row:ItTableRowInfo, rowElement: JQuery) => void)[]=[]
    Triggers during render of a row.
  • OnClickRowFunction[]=[];
    Triggers when user clicks on a row.
  • OnAddRowFunction[]=[];
    Triggers on adding a row.
  • OnRemoveRowFunction[]=[];
    Triggers on removing a row.
  • OnPreRender Function[]=[];
    Triggers before rendering a table (e.g. change of a column based on input data).
  • OnInitFunction[]=[];
    Triggers when initializing table (before the data is filled), dynamic setting of a cell.
  • OnInitAsync (()=>Boolean)[]=[];
    Triggers when for the table to be filled an asynchronous query is needed.
  • OnInitComplete Function[]=[];
    Triggers after the table has been initialized, dynamic setting of a cell.
  • OnItemsParsing ((sValue: string) => string)[]=[];
    During parse of JSON, possible modification of entry data.
  • OnItemsParsed Function[]=[];
    After parse of JSON, possible modification of entry data.
  • OnEditableRow Function[]=[];
    Triggers only if the row is editable (recommended to rather use OnRowRender).
  • OnPrepareColumn Function[]=[];
    Triggers before rendering a column (not recommended to use).
  • OnPreRenderCell Function[]=[];
    Triggers before rendering a cell (Change to readonly, change of contents, preset of a value).
  • OnPreSave ((rows: IRow[]) => IRow[])[]=[];
    Triggers before saving data (modification of saved data).
  • OnRenderCell Function[]=[];
    Triggers after render of a cell (change of cell through JQuery).
  • OnRenderCellHeader Function[]=[];
    Triggers after render of header row cell.
  • OnEditableCell Function[]=[];
    Triggers before rendering of a editable cell.
  • OnValueSetting Function[]=[];
    Modification of a value that is saved in a json field.
  • OnCalcUpdated ((calcCell: JQuery, columnConfiguration: Configuration.IColumn, computedValue: number) => void)[]=[]
    Triggers after calculation is completed.

Examples

Fixed table configuration

Useful for various posting tables, where exact row count is done by external process. For example: form definition javascript can generate all row and column values:

{
  "Table": {
    "DisableDeleteRow": true,
    "DisableAddRow": true,
    "MaxItemsOnPage": 10,
    "EnableRowHeader": true,
    "HidePager": true
  },
  "Columns": [
    {
      "Name":"",
      "CellStyle":"font-weight:bold;padding:4px",
      "RowHeaders": [
        {
          "Name": "Basic commitment",
          "DefaultCellValues": [
            "0",
            "0",
            "0"
          ]
        },
        {
          "Name": "Restraint",
          "DefaultCellValues": [
            "0",
            "0",
            "0"
          ]
        }
      ]
    },
    {
      "Name":"Invoiced amount",
      "Number": {
        "aSep": " ",
        "aDec": ",",
        "mDec": 2,
        "aPad": true
      },
      "Calc":{
        "Operation": "sum",
        "CellStyle": "font-weight:bold;color:green"
      }
    },
    {
      "Name":"Amount of reimbursement",
      "Number": {
        "aSep": " ",
        "aDec": ",",
        "mDec": 2,
        "aPad": true
      },
      "Calc":{
        "Operation": "sum",
        "CellStyle": "font-weight:bold;color:green"
      }
    },
    {
      "Name":"Outstanding",
      "Number": {
        "aSep": " ",
        "aDec": ",",
        "mDec": 2,
        "aPad": true
      },
      "Calc":{
        "Operation": "sum",
        "CellStyle": "font-weight:bold;color:green"
      }
    }
  ]
}

You must declare for Table mandatory "EnableRowHeader": true and for Columns RowHeaders and RowHeaders Name viewed in first column, then you can define default values DefaultCellValues. Other column formatting is standard.

Workflow history table

{
  "Table": {
    "MaxItemsOnPage": 15,
    "ReadOnly": true
  },
  "Columns": [
    {
      "Name": "Date",
      "DateTime": {
        "Format": "DateAndTime"
      },
      "Sort": "asc"
    },
    {
      "Name":"Employee",
      "CellStyle":"font-weight:bold;",
      "User":{
      }
    },
    {
      "Name":"Action"
    },
    {
      "Name": "Note"
    }
  ]
}

External lookup field

{
  "Table": {
    "MaxItemsOnPage": 15
  },
  "Columns": [
    {
      "Id":"lookup",
      "Name":"Supplier lookup",
      "ExternalLookup": {
        "DataSourceType": "MSSQL",
        "DataSourceConfiguration": {
          "TargetObject": "Suppliers_view",
          "ConnectionString": "$GlobalVariable::ConnectionString"
        },
        "IndexValue": {
          "Expression": "{ID}"
        },
        "TextValue": {
          "Expression": "{s_supplierName} – {s_supplierTaxIdentNumber}"
        },
        "DisplayValue": {
          "Expression": "{s_supplierName}"
        },
        "SearchElements": [
          "s_supplierName",
          "s_supplierTaxIdentNumber"
        ],
        "CopyElements":[
          {
            "TargetElement": "spplr",
            "Expression": "{s_supplierName}"
          },
          {
            "TargetElement": "spplrnum",
            "Expression": "{s_supplierTaxIdentNumber}"
          }
        ],
        "Condition": {
          "Expression":"[s_active]=1"
        },
        "SearchLimit": 1000,
        "RenderMode": "AutoComplete",
        "ClientCache": 30
      }
    },
    {
      "Id":"spplr",
      "Name":"Supplier",
      "Required":true
    },
    {
      "Id":"spplrnum",
      "Name":"Tax Number",
      "Required":true
    },
    {
      "Id":"cmnt",
      "Name":"Commnet",
      "MultiLine": true,
      "MaxTextLen":255
    }
  ]
}

Reference table

You can use table to reference other SharePoint items.

  • CopyElements – used to copy values from selected referenced to chosen cell/variable.
  • Properties – used to define what kind of variable data we want to get out of the referred item outside of basic reference values (name, saved path).
  • TargetElementfield in which will the requested data be saved in.
  • Formula – Json/script/function for evaluation. Can use replace tokens.
  • TrimValue – Deletes unwanted symbols of requested data before copying.
  • TriggerChange – Triggers OnChange event on target field.
  • ReadOnly – locks target field after copying data into it.
  • Merge – In the case that multiple references are inserted into one field, merges them into one, in case of Advanced table merges multiple rows.
  • DisableResetValue – Deleting the reference will not change the value of the target field.
  • DisableUpdateValue – If an item is opened target field will not update its value, only updates if new reference is adExded.
  • DialogMode – defines the way the results are shown
    • Dialog – default value, reference will be opened in a dialog window
    • NewWindow – reference will be opened in a new browser tab
    • NewTab – same function as NewWindow
    • Redirect – the reference will be opened in current tab
  • Sort – can be used to sort pick table
    • Asc – sorted in ascending order
    • Desc – sorted in descending order

Definition of related order on invoice form:

{
  "Table": {
    "MaxItemsOnPage": 10,
    "EnableSelection": true,
    "SaveSelected": true,
    "SaveDeleted": true
  },
  "Extensions":{
    "Reference":{
      "EnableFolderReference":true,
      "Sources": [
        {
          "ExternalSite": "$GlobalVariable::OrderUrl",
          "FolderUrl": "{WebUrl}/Orders",
          "EnableCopyPermissions": true,
          "BackwardReference":{
            "TargetElement": "ord_relatedInvoice",
            "CopyElements":[
              {
                "SourceField": "s_invoiceBarcode",
                "ColumnId": "id_invoiceBarcode"
              },
              {
                "SourceField": "s_invoiceNumberSAP",
                "ColumnId": "id_invoiceNumberSAP"
              }
            ]
          }
        }
      ],
      "Metadata":{
        "EnableColumns": true,
        "SearchBy": "ord_Number|ord_supplierIdentificationNumber|ord_SupplierName",
        "SearchType": "Contains",
        "Columns" : [
          {
            "InternalName": "ord_Number",
            "Header": "Číslo objednávky"
          },
          {
            "InternalName": "ord_supplierIdentificationNumber",
            "Header": "IČ dodavatele"
          },
          {
            "InternalName": "ord_SupplierName",
            "Header": "Název dodavatele"
          },
          {
            "InternalName": "Created",
            "Header": "Datum vytvoření"
          }
        ]
      }
    }
  },
  "Columns": [
    {
      "Name": "Číslo objednávky",
      "CSSClass": "c_referenceName",
      "Reference": {
        "CopyElements": [  
          {
            "TargetElement":"s_orderNumber",
            "Formula":"'{reference:ord_Number}'",
            "ReadOnly": true
          }
        ]
      }
    }
  ]
}

Definition of related invoices on order form:

{
  "Table": {
    "MaxItemsOnPage": 10,
    "Reverse": true,
    "ReadOnly": true
  },
  "Extensions":{
    "Reference":{
      "Sources": [
        {
          "ExternalSite": "$GlobalVariable::InvoiceUrl",
          "FolderUrl": "{WebUrl}/InboundInvoices"
        }
      ]
    }
  },
  "Columns": [
    {
      "Name": "Reference",
      "Reference": {
      }
    },
    {
      "Id": "id_invoiceBarcode",
      "Name": "Čárový kód"
    },
    {
      "Id": "id_invoiceNumberSAP",
      "Name": "Číslo faktury SAP"
    }
  ]
}

Attachment

Component Info

  • Attachment type field
  • File attachments for lists and document libraries
  • Upload of one or more attachments
  • Detailed table view of attachments (configurable)
  • If document library is not present, automatically creates one

NoteApplicable to text SharePoint "Multiple lines of text" field with unlimited length.

NoteDeleting attachment on item does not delete document in library.

NoteIn order to create a new document library for attachments user must have necessary permissions, it is recommended to use "SystemUserName" account. Further information can be found in Variables section.


Default configuration

{
  "ViewFileIcon": true,
  "EnableItemSelection": true,
  "EnableEdit": true,
  "EnableDownload": true,
  "EnableOpen": true,
  "EnableAppendAndRemove": true,
  "MaxItemsOnPage": 10,
  "DisplayAuthor": false,
  "DisplayCreated": false,
  "CopyRoles": false,
  "FolderDateFormat": "yyyy_MM",
  "LibraryUrl": "{WebUrl}/{ListName}_Attachment"
}

Properties

  • ViewFileIcon
    View/Hide document type icon column.
  • EnableItemSelection true/false
    View/Hide selection checkbox column.

    Used for bulk document deletion.

  • SaveSelected true/false
    Enables processing of selected items (to Workflow).
  • SaveDeleted true/false
    Enables processing of deleted items (to Workflow).
  • EnableEdit true/false
    View/Hide column containing link to edit form.
  • EnableView true/false
    View/Hide column containing link to display form.
  • EnableEditFileName true/false
    Enables the name of the file to be clicked and opened in a new tab in a edit form.
  • EnableDownload true/false
    View/hide column containing a download button.
  • EnableOpen true/false
    View/Hide column containing link to display form that opens in a new tab.
  • EnableLinkDownload true/false
    Enables the name of the file to be clicked and downloads the file.
  • EnableAppendAndRemove true/false
    View/Hide add and remove document commands.
  • MaxItemsOnPage "MaxItemsOnPage": 10,
    Maximum rows per page.
  • CustomFolderFormat "CustomFolderFormat": {item:FieldName1}-{item:FieldName2}
    Token based folder name generation rule. Tokens enclosed in curly brackets will be replaced by current field value.

    CustomFolderFormat takes precedence over FolderDateFormat.

  • FolderDateFormat "FolderDateFormat": 2015_02
    Date based folder name generation rule.

    Current day. yyyy year, MM month, dd – day. Other formatting characters not recommended.

  • LibraryUrl "LibraryUrl": {WebUrl}/{ListName}_Attachments
    Document library relative URL for attachments.

    Creates library if not exists.

    • {WebUrl} Example: /support/Economy/
      Current web url.
    • {ListName} Example: Invoices
      Current list name, you can combine it with text like {ListName}_Attachments generates name like: 'Invoices_Attachments'.
  • CopyRoles true/false
    If the item with Attachment field has unique permissions then the same permissions will be transferred to the uploaded attachment as well.
  • RootFolder
    if not set the documents will be stored in a general folder. If set then the documents will be stored in a specified folder path.
  • ExternalPath
    "CustomFolderFormat": "[['{list:ServerRelativeUrl}'.split('/').pop()]]\\{date:yyyy}",
    "ExternalPath": "\\\\prg-dc.dhl.com\\GCFS\\EMEA\\007673_CZ_DSC_DMS\\{WebName}",
    If not set the documents will be stored in a general folder. If set then the documents will be stored in a specified external folder path
  • DisplayFields "DisplayFields":["s_ObeliskID"]
    Display columns from attachment library on item form.

    Can only display fields that exist in the attachments library. If archivation process is being used these fields have to exist in both archive attachment library and regular attachment library for succesful transfer of these fields

  • DisplayContentType true/falseDoes the same as DisplayFields but is outdated therefore it is recommended to rather use DisplayFields.
  • DisplayAuthor true/false
    Displays document "Created By" column.
  • DisplayCreated true/false
    Displays document "Created" column.
  • DisplayMode "DisplayMode": "Float"
    Alters the display format of the table. When set to "float", attachments are shown floating – not in a table. When not set, attachments are displayed within a table.
  • DisableMultipleUpload true/false
    Default state is false. If set to true only one attachment at a time can be uploaded
  • Accept "Accept": ".jpg, .bmp, .pdf"
    If set, only specified types of documents can be uploaded
  • ForceEditFormAfterUpload "ForceEditFormAfterUpload": true/false
    Default value is false. If set to true, immediately after uploading a file an edit form is opened that has to be filled validly. After saving the file the dialog window will be closed and the attachment saved. If the user stornos the form, uploaded file will be deleted. Setting this property to true automatically forbids user from uploading multiple attachments at once.
  • AllowOverwrite "AllowOverwrite": true/false
    Default value is false. If set to true, files with the same name are overwritten by the new uploaded file. If overwrite would happen, the user is asked to confirm first
  • DeleteFileWhenItemDeleted "DeleteFileWhenItemDeleted": true/false
    Default value is false. If set to true and an attachment is deleted through delete button in attachment table, the file itself is deleted from Sharepoint. Doesnt work for external sources.
  • CustomFunction "CustomFunction": true
    Enables using custom script.
  • SortColumn "SortColumn": "s_invoiceIssueDate desc"
    Sort column in table with dir (asc/desc).

Examples

{
  "ViewFileIcon": true,
  "EnableItemSelection": true,
  "SaveSelected": true,
  "EnableEdit": false,
  "EnableOpen": true,
  "EnableDownload": true,
  "EnableEditFileName": true,
  "EnableAppendAndRemove": true,
  "MaxItemsOnPage": 10,
  "SortColumn": "ord_invoiceIssueDate desc",
  "FolderDateFormat": "yyyy-MM",
  "CustomFolderFormat": "{date:yyyy}_{date:MM}/{item:ord_Barcode}",
  "LibraryUrl": "{WebUrl}/{ListName}_Attachments",
  "DisplayFields":[
    "ord_invoiceNumber",
    "ord_invoicePaymentDate",
    "ord_invoiceIssueDate",
    "ord_invoiceDueDate",
    "ord_statusInvoice",
    "ord_invoiceWhithoutVAT"
  ]
}

Counted column

Component Info

  • Number generator
  • Independent number series
  • Currently up to 2nd level parent folder metadata copy
  • Can be used as standalone field, or can be combined with event receivers

Number of generated fields is not limited, fields can be independent or dependent according to their settings.


Basic configuration

{
  "Counters":[
    {
      "Name": "Counter0",
      "Variable": "Counter_Global"
    },
    {
      "Name": "Counter1",
      "Variable": "Counter_{ListUrl}"
    },
    {
      "Name": "Counter2",
      "Variable": "Counter_{FolderUrl}",
      "Mode": "Letter"
    }
  ],
  "Expression": "F_{folder:Area}{InvoiceID}_{date:yyyy-MM}-{$Counter0}_{$Counter1}_{$Counter2}",
  "AlwaysUpdate": false
}

Properties

  • Counters
    Counters list, see Counter.

    If no counter value is present then counter value is not incremented. You can use this feature to copy metadata from parent folder or another field from current item.

  • Expression *Expression, evaluated as generated value. Static text as well as special tokens (based on current item state) can be used to generate value.
    • {$CounterName} Example: 5d7439ed-d336-493a-bd4a-0e82d5e39cb7
      Returns list ID , You can use this token to generate unique values for list.
    • {date:mask} Example: 2015-01-03
      Current date and time. You can use "mask" as formatting string (E.g. yyyy-MM-dd HH:mm:ss.fff).
    • {folder:FieldInternalName}v Example: AGtec Corp

      Parent folder field [FieldInternalName] value.

    • {parentfolder:FieldInternalName} Example: Invoice

      Parent folder of second level field [FieldInternalName] value.

    • {folderproperty:key} Example: Folder property bag value
      Returns folder properties value.
    • {listproperty:key} Example: List property bag value
      Returns list properties value.
    • {webproperty:key} Example: Web property bag value
      Returns web property bag value.
    • {FieldInternalName} Example: BC00132
      Returns current item field [FieldInternalName] value.
    • {$CurrentUserId} Example: 1
      Returns current user ID.
    • {$ItemContentTypeName} Example: ContractCT
      Returns content type name.
    • {$ItemContentTypeId} Example: 0x010124
      Returns content type ID.
    • {$FieldName} Example: GenericsDocumentID
      Returns field internal name.
    • {$FieldTitle} Example: ID
      Returns field display name.
    • [[...]] Example: [['{pole1}'.substring(3)]] [[{pole1} + 121 – {pole2} / 2]]
      Using ECMA script expression.
  • DuplicityExpression
    Same funcionality as Expression. If duplicity is found, the expresion set in this field will be used instead. If not set and duplicity is found the original file will be overwritten.
    • ### Example: 001
      Counter used to count the number of duplicities. If multiple used the counters will count in union therefore more then one instance in the expression is redundant.
    • FolderName/ Example: Duplicity/{value}_###
      DuplicityExpression allows to save duplicities in a seperate folder in target library
  • AlwaysUpdate "AlwaysUpdate": false
    If set true new value is generated for each item update event. If counters are included, then counter values are incremented.
  • DisableInEdit "DisableInEdit": false
    if set to true the counted column will be evaluated only in new form. If not set in new form then User have to manually fill this field.
  • ConditionalExpressions "ConditionalExpressions": []
    List of conditional expressions, see chapter ConditionalExpression.
    Conditional expressions allows to set values based on conditions. If no valid condition found, default value is used.
  • DisableEvaluateOnClient "DisableEvaluateOnClient": false
    If set true new value is not evaluated on client, only event receivers can generate new values.
  • IncrementOnLoad "IncrementOnLoad": false
    If set true new value is evaluated on client when opened.
  • Template
    Transformation configuration.
  • DisableReceiver "DisableReceiver": false
    If set to true event receiver cannot change value, new value is generated only on client form.
    Sometimes used in document filling services, where you can avoid document renaming.
  • OnDemand "OnDemand": false
    If set true new value is not generated automatically, user must use dedicated button. Setting is valid for event receiver, no value is generated. If generation of new value by receiver is necessary for OnDemand true set field value to "-1", it will be overwritten by new receiver generated value. Button text can be changed by resource named GetValueDefault.
    Example of localized button text:
    {
      "Resources":[
        {
          "LCID": 1029,
          "$O_GetValueDefault": "Tlačítko česky"
        },
        {
          "LCID": 1033,
          "$O_GetValueDefault": "Button text"
        }
      ]
    }
    
  • SyncElement
    Synchronizes generated value to the next text field.
    {
      "SyncElement":{
        "TargetElement": "Title",
        "Expression":"{value}",
        "ReadOnly": false,
        "Hidden": false
      }
    }
    
    • TargetElement *
      Internal name of the field in which will be the generated value synchronized. Possible to add multiple fields that will be separated by separation symbol(comma, space, semicolon).
      • FileLeafRef – token that can be placed inside target field. Stands for the name of a file
    • Expression *
      Expression that will be inserted into the synchronized field. It is possible to return the generated value through {value} token.
    • DuplicityExpression *Only functional in On-Premises versions of TiSa
      Expression that checks for duplicity values. If duplicity value is detected the value of Expression will be replaced by DuplicityExpression. The symbol "#" can be used as a token for duplicity counter. Default value is {value}_#.
    • ReadOnly
      The field will be set to read only after the evaluation process is finished.
    • Hidden
      The field will be hidden after the evaluation process is finished.

Counter

Field can use any number of counters. Each counter can have different rules and generate different values.

{
  "Name": "CounterName",
  "Variable": "VariableName",
  "InitialValue": 0,
  "Padding": 0,
  "PaddingCharacter": 0,
  "Mode": "Default"
}
  • Name *
    Counter name. Unique counter identification used in evaluated expression by token {$CounterName}.
  • Variable *
    Counter variable name. You can use tokens as variable name, this way you can set range of counter values (list, folder, web, dates).
    • {WebUrl} Example: /sites/sitecollection/site/samplelist
      Web unique counter based on web url.
    • {ListId} Example: 5d7439ed-d336-493a-bd4a-0e82d5e39cb7
      List Id unique counter.
    • {ListUrl} Example: /sites/sitecollection/site/samplelist
      List Url unique counter.
    • {FieldId} Example: 94f0ca85-a046-469b-9937-5c0805b91d02
      Field ID unique counter.
    • {FieldName} Example: GenericsDocumentID
      Field name unique counter.
    • {FolderUrl} Example: /sites/sitecollection/site/samplelist/invoices/incoming/Inv-2015-01
      Folder unique counter.
    • {FolderPath} Example: /faktury/přijaté/F-2015-01
      Relative Folder url counter, unique only on list structure, but can be shared by different lists.
    • {FolderName} Example: F-2015-01
      Parent Folder name counter, unique values for items inside folder can be shared independent on list, only folder name matters.
    • {RootFolderName} Example: F-2015-01
      Returns list name (part of root folder url).
    • {ItemContentTypeName} Example: InvoiceCT
      Returns Content type name , unique counter for content type.
    • {ItemContentTypeId} Example: 0x010100D5C2F139516B419D801AC6C18942554D
      Returns Content type ID , unique counter for content type.
    • {CurrentUserId} Example: 1
      Returns current user ID, user specific counter.
    • {item:FieldInternalName} Example: Firemní
      Return field value from current item.
    • {folder:FieldInternalName} Example: Business
      Returns parent folder field value, unique counter for specific field value.
    • {parentfolder:FieldInternalName} Example: Faktury
      Returns parent folder parent (2 levels up folder) field value, unique counter for specific field value.
    • {folderproperty:key} Example: Folder property bag value
      Counter name based on folder property bag properties.
    • {listproperty:key} Example: List property bag value
      Counter name based on list property bag properties.
    • {webproperty:key} Example: Web property bag value
      Counter name based on web property bag properties.
    • {Year} Example: 2015
      Counter name based on current year. Every year counter starts from beginning.
    • {Month} Example: 01
      Counter name based on current month. Every month counter starts from beginning.
    • {Day} Example: 01
      Counter name based on current day. Every day counter starts from beginning.

      If no token used, counter is created as global counter and can be used on site collection.
      Counter is created on first use. Actual counter values can be modified by TreeINFO administration.
      You can combine all tokens if not found empty value is returned.

  • InitialValue "InitialValue": 0
    Initial counter value. Then increments by +1, first value is set with +1. For example if InitialValue is 1000, then first generated counter value is 1001.
  • Padding "Padding": 0
    You can set padding of generated value. For example number can be left padded by zeroes: 0000365, or any other character PaddingCharacter.
  • PaddingCharacter "PaddingCharacter": "0"
    Character used for left padding.
  • Mode "Mode": "Default"
    Counter value format.
    • Default Example: 1234
      Returns Numerical counter value.
    • Roman Example: MCCXXXIV
      Returns Roman numerals. Max value is 3999, if greater then numerical value is returned.
    • Hex Example: ffaa5a
      Returns hexadecimal counter value.
    • Letter Example: AC
      Returns character based on counter value.

ConditionalExpression

Conditional Expression contains both condition and expression. If condition is valid then expression is used to generate value.

{
    "Condition": "'{$ItemContentTypeId}'.indexOf('0x01005A59D5904610154686BD40C6FF1FC263') == 0",
    "Expression": "ITEM: {listproperty:vti_listtitle} F{$Counter0} [[{$Counter0}/2]]"
}
  • Condition *
    Condition if true then use expression.
  • Expression *
    Settings in property Expression description.

Examples

Simple list counter

Result is: F000356

{
  "Counters":[
    {
      "Name": "Counter0",
      "Variable": "Counter_{ListUrl}",
      "Padding": 6
    }
  ],
  "Expression": "F{$Counter0}"
}

Complicated rule uses 3 counters to generate rather complex value. First is global counter, second list range increment counter and the last is folder based counter.

Result is: 2_F334455-dt:2015-02-[[43]]-[[--MXIX]]-[[Q]]_F1_F1_DS1

{
  "Counters":[
    {
      "Name": "Counter0",
      "Variable": "Counter_Global"
    },
    {
      "Name": "Counter1",
      "Variable": "Counter_{ListUrl}",
      "InitialValue": 1000,
      "Padding": 6,
      "PaddingCharacter": "-",
      "Mode": "Roman"
    },
    {
      "Name": "Counter2",
      "Variable": "Counter_{FolderUrl}",
      "Mode": "Letter"
    }
  ],
  "Expression": "{folder:ID}_F{InvoiceID}-dt:{date:yyyy-MM}-[[{$Counter0}]]-[[{$Counter1}]]-[[{$Counter2}]]_{folder:FileLeafRef}_{folder:Title}_{parentfolder:Title}"
}

Example where counter is dependent on department and user, each year begins from 1.

{
  "Counters":[
    {
      "Name": "CounterCJP",
      "Variable": "Counter_CJP_[['{item:Department}'.split(';').pop()]]_{Year}",
      "InitialValue": 0,
      "Padding": 2
    }
  ],
  "Expression": "{$CounterCJP}/[['{Department}'.split(';').pop()]]/[['{FinalProcessor}'.split('- ').pop()]]/box/{date:yyyy}",
  "OnDemand": true
}

External Lookup

Field for query purposes

Component Info

  • Search field
  • Dynamic lookup
  • Metadata copying from selected item to desired fields
  • Connection to external sources

The field works with the key+value pair but will only display value.


Basic configuration

{
  "DataSourceType": "STATIC",
  "DataSourceConfiguration": {
  },
  "DataSourceObject":[
    {
      "ID": 1,
      "Text": "Volba 1"
    },
    {
      "ID": 2,
      "Text": "Volba 2"
    },
    {
      "ID": 3,
      "Text": "Volba 3"
    }
  ],
  "IndexValue": {
    "Expression":"{ID}"
  },
  "TextValue":{
    "Expression":"{Text}"
  },
  "SearchLimit": 1000,
  "RenderMode": "DropDown"
}

Properties

Render modes

  • AutoComplete
    After user inputs at least one symbol, query will be executed and display corresponding results.
  • DropDown
    After user open form query will be executed and fills menu according to defined conditions.
  • ItemSelector
    Displays as a text field in which text will be inserted for query purposes. After the query is completed a drop down menu will be displayed to select from.
  • DataTable
    Similar to ItemSelector but instead of drop down menu uses data list for more accurate selection of required value.

Query resources

  • MSSQL
    Query is executed over MSSQL database. Query can be executed on table, view or procedure.
  • SP
    Query is executed over SharePoint list.
  • WS
    Query is executed over web service.
  • STATIC
    Static data resource defined in the field configuration.
  • Lookup
    SharePoint lookup support.
  • LDAP
    LDAP query.
  • DataSourceType
    Define the source type. According to source determines the provider through which gains data for External Lookup.
    • MSSQL
      After user inputs at least one symbol, query will be executed and display corresponding values.
    • SP
      Menu will be filled according to defined conditions after user opens the form.
    • WS
      Menu will be filled according to defined conditions after user opens the form.
    • XMLRequest
      Similar to WS but implemented on client (without cache).
    • STATIC
      Menu will be filled according to defined conditions after user opens the form.
    • Lookup
      Can be connected with SharePoint Lookup multivalue, display CheckBoxList (DropDown configuration required) or Autocomplete.
    • LDAP
      Query over Active Directory or other LDAP directory.
  • DataSourceConfiguration
    Defines specific properties according to the data source Type.
    • MSSQL
      {
        "TargetObject": "SampleStorageProcedure",
        "ConnectionString": "$GlobalVariable::DBConnectionString",
        "IsProcedure": true
      }
      • TargetObject
        The name of the table or view in database.
      • ConnectionString
        Connection string to MSSQL database. It is recommended to put this string into a variable.
      • IsProcedure "IsProcedure": false
        If the value is set as true then the procedure is called through EXEC.
    • SP
      {
        "SourceList": "/sites/sampleweb/Lists/SampleSPList",
        "Scope": "RecursiveAll",
        "Cache": "0:0:30"
      }
      
      {
        "SourceList": "{SiteUrl}/SubWeb/Lists/SampleSPList",
        "ExternalSite": "http://sp2016dev.local.int/sites/someSite"
      }
      
      {
        "SourceList": "{WebUrl}/Lists/SampleSPList"
      }
      
      • SourceList "SourceList": /sites/sampleweb/Lists/SampleSPList
        Server relative path to list. It is possible to use replace tokens {WebAppUrl}, {WebUrl}, {SiteUrl} and {CurrentList}. If the list is situated in other site collection it is required to use the property "ExternalSite".
      • ExternalSite "ExternalSite": http://sp2016dev.local.int/sites/someSite
        Used if the list is situated in a different site collection. Defined by the URL of the site collection.
      • Scope "Scope": Default Type of query in a list. Modifies the resulting CAML query.
        • Default
          Query is only executed over items (default).
        • Recursive
          Query is executed over items and folders.
        • RecursiveAll
          Query is executed over items, folders and all subfolders.
      • Cache "Cache":0:0:30
        Time of expiration of cache query.
    • WS/XMLRequest
      {
        "Url": "http://zlinsp2013:1080/WebServices/QueryTest.asmx",
        "User": "domain\\user",
        "Password": "Heslo",
        "MethodName": "QuerySql",
        "ResultSetType": "JSON"
      }
      
      User and password verification of the user
      • Url "Url":http://zlinsp2013:1080/WebServices/QueryTest.asmx
        URL of the web service.
      • MethodName "MethodName": QuerySql
        Name of the method of the web service.
      • ResultSetType "ResultSetType": JSON
        Format of the returning value. If custom script is not used for processing of the result, always use JSON.
    • STATIC
      The source data are to be defined in the "DataSourceObject" property.
      {
        "UseClientScript": true,
        "AutoID": false,
        "UseResources": true
      }
      
      • UseClienScript "UseClientScript": false
        If set to true the query is executed in a browser. If the query is not for ever reason needed to be executed over server then it is recommended to always set to true.
      • AutoID "AutoID": false
        If set to true generates column AutoID automatically. If the UseResources property is enabled it is recommended to set up ID column manually.
      • UseResources "UseResources": false
        If set to true it is possible to apply translation in the form of "RESX.$option1" to data source. It is required to set in addition with this option the property "UseClientScript" to true.
    • LDAP
      {
        "Path": "OU=TESTOU,DC=local,DC=int",
        "LDAP": "1",
        "SearchScope": "OneLevel",
        "UserName": "****",
        "Password": "****",
        "Authentication": "FastBind"
      }
      
      • Path
        If not filled the current AD directory will be used.
      • LDAP "LDAP": 0
        If set to value "1" it is possible to search through LDAP. If not set or the value is set to "0" then it is possible to search users through principal context interface.
      • SearchScope "SearchScope": Subtree
        If not set the query done recursively. If it is needed to search only for subordinates it is possible to set the value to "OneLevel".
      • UserName
        Only set if access to LDAP directory is needed.
      • Password
        Only set if access to LDAP directory is needed.
      • Authentication
        Only set if access to LDAP directory is needed.
      • FormData
        Can be used to change the data source configuration.
    • Lookup
      "DataSourceType": "Lookup",
        "SearchLimit": 1000,
        "EmitEmptyItem": 1000,
        "_RenderMode": "DropDown",
        "RenderMode": "AutoComplete",
        "_LoadOnDemand": true,
        "AutoCompleteMinLength" : 2,
        "_FormData":[
          {
            "TargetElement":"ExternalLookup1",
            "Formula":"'{value}'.split('#;')[0]",
            "Current": true
          }
        ],
        "_Condition": {
          "Expression":"<BeginsWith><FieldRef Name='ExternalLookup1' /><Value Type='Text'>{ExternalLookup1}#;</Value></BeginsWith>"
        }
      }
  • DataSourceObject
    Used to define the data sources of the STATIC data source type. For other data source types this property is not valid.
    {
      "DataSourceObject":[
        {
          "ID": 1,
          "Text": "Volba 1"
        },
        {
          "ID": 2,
          "Text": "Volba 0"
        },
        {
          "ID": 3,
          "Text": "Volba 3"
        }
      ]
    }
    
  • RenderMode
    Options for search render mode and functions:
    • AutoComplete
      After filling at least one symbol the query will be executed and the drop down menu will be opened to select a value.
    • DropDown
      Displays as a drop down menu (DDL). The menu will be filled after the form is loaded and the asynchronous query is executed.
    • ItemSelector
      Displays as a text field with a button. After the text field is filled and the search button is pressed an asynchronous query is executed. The results will be displayed in the form of a drop down menu. After an item from the menu is selected the value will be filled to the field.
    • DataTable
      Displays the same as ItemSelector but after the query is executed a drop down menu is not displayed but a data list is rendered. This mode is suitable if there is high amount of items expected and the right item is needed to be select on the basis of information from multiple columns.
  • IndexValue
    Refers to key column. Can be composed of multiple columns, according to the evaluation rules of Expression. Unique value is required
    {
      "IndexValue": {
        "Expression":"{ID}"
      }
    }
    
  • TextValue
    References the value of column to display. Can be composed of multiple columns according to the evaluation rules of Expression. The value of this expression is displayed as a text in a drop down menu. If the property DisplayValue is not set this value will be used also to display in a list or a display form.
    {
      "TextValue": {
        "Expression":"{Cislo} – {Text}"
      }
    }
    
  • DisplayValue
    References the value of column to display. Can be composed of multiple columns according to the evaluation rules of Expression. The value of this expression is displayed as a text on a display form and view. If the property is not set, the value of the textValue expression will be used.
    {
      "DisplayValue": {
        "Expression":"{Text}"
      }
    }
    
  • SearchElements
    Nominal list of column, over which the query will be executed. If not set the query will be executed over all available columns that correspond to the query set and that correspond the view configuration.
    {
      "SearchElements": [
        "Cislo",
        "Text",
        "Sloupec1",
        "Sloupec1"
      ]
    }
    
  • CopyElements
    Defines a field list in which data will be copied from selected folder.
    {
      "CopyElements": [
        {
          "TargetElement":"SomeField",
          "Expression":"Prefix: {Text}"
        },
        {
          "TargetElement":"SomeField",
          "Expression":"Prefix: {Text}",
          "TrimValue": true,
          "Formula": "'{value}'.split('#')[0]",
          "TriggerChange": true
        }
      ]
    }
    • TargetElement
      Internal name of the field, in which will be the copied data be transferred to.
    • Expression
      References the column value to display. Can be composed of multiple columns according to the rules of evaluation of Expression.
    • TrimValue
      Trims empty symbols from the beginning and the end of the value (if they exist) before the value is copied.
    • Formula
      Template of transformation for the value that will be copied to the field. For example if the value is a pair then the expression can be set as "'{value}'.split('#')[0]". The template is evaluated through javascript function "eval()". Variable "{value}" can be added.
    • TriggerChange
      Triggers a change in the field. Useful if some other field/variable is dependent on this field.
  • Sort
    Explicit configuration for sorting of values. If not set the data will be sorted alphabetically by values in the TextValue field.
    {
      "Sort": {
        "Expression": "Text ASC"
      }
    }
    
    In case of usage with SP list a whole query is used.
    {
      "Sort": {
        "Expression": "Text ASC"
      }
    }
    
  • HideSelectorAfterSelect "HideSelectorAfterSelect": true
    This property automatically hides the data table after selecting an item. Valid for DataTable render mode.
  • SearchLimit
    Maximum amount of returned records from one query. The maximum possible amount is 500 000.
  • DistinctResult
    If duplicate results are expected from returned values (e.g. fields like IndexValue and TextValue) this property set to true to ensure unique results.
  • ReadOnlyInEdit "ReadOnlyInEdit": true
    If set to true then external lookup will be used only in new form and not in edit form later.
  • LoadOnDemand
    Dropdown menu loads empty and does not fill unless says otherwise (waiting for other lookups for example).
  • EmitEmptyValues
    This property is used in combination with drop down menu. If set true an empty result will be generated on top of the drop down menu as a first value which serves as a value reset option.
  • RemoveEmptyItems "RemoveEmptyItems": true
    If set to true then If source data contains empty values then they will be emitted from the resulting external lookup field.
  • SearchOnBlur
    This property is used in combination with ItemSelector and DataTable render modes. This property automatically fills the field with topmost value of the result table if the user fills the field only halfway and clicks outside of the text field.
  • AutoCompleteMinLength "AutoCompleteMinLength": true
    Used in combination with the AutoComplete mode. Sets the minimal amount of symbols needed for the autocomplete to start suggesting results.
  • DisableResetValue "DisableResetValue": true
    Should the value be reset by any means, by setting this property to true, it will not reset. In case of DropDown mode if a new value is not found or selected then the original will not be deleted until a new value is selected. In case of ItemSelector and DataTable modes if the reset button is pressed the original value of the field will not be deleted. For CopyElements all the dependent field defined will keep the original value.
  • ResetOrignValue "ResetOrignValue": true
    Should the value be reset, by setting this property to true, the original value will be used instead of an empty string. In case of CopyElements this will even reset the dependent fields.
  • DisableEffect "DisableEffect": true
    If this property is set to true the short flash of the indicator light when a dependent value in CopyElements is set will be disabled.
  • CustomFunction "CustomFunction": true
    If set to true a custom function will be expected that can expand the basic behavior of a field.
  • ClientCache
    The size of cache in minutes.
  • DependencyLookups
    Named list of fields (their internal names) of the ExternalLookup type, in which a refresh should be executed. If the dependent lookup is in the DropDown mode the menu will be refreshed (DDL).
    {
      "DependencyLookups": [
        "SampleLookup1",
        "SampleLookup2"
      ]
    }
  • Condition
    Conditions for executing query. Different for every type of source.
    • SP data
      <And><Contains><FieldRef Name='Title' /><Value Type='Text'>a</Value></Contains><Eq><FieldRef Name='MojeVolba' /><Value Type='Text'>{MojeVolba}</Value></Eq></And>
                                              
      For SP data source use standard SharePoint caml query.
    • MSSQL
      "Condition": {
        "Expression":"@FirmaKod = {cp_AppCompanyCode}, @IgnorovatFirmu = 1, @SearchLimit = {cp_SearchLimit}, @SearchQuery = {cp_SearchQuery}"
      }
      Example of usage of sql procedures with parameters. Similarly "WHERE" condition can be set (WHERE text will be set automatically). In the braces above are the names of the form fields that will be replaced by value.
    • WS/XMLRequest
      "Condition": {
        "Expression":"\"mena\":\"{_mena}\",xx: \"{_xx}\", \"searchText\":\"{int_SearchText}\", \"limit\":\"{int_SearchLimit}\""
      }
      Expression contains json as a text string with parameters. Method call is Method(string mena, string xx, string limit, string searchText). Token {int_SearchText} contains the searched text and {int_SearchLimit} contains the maximum amount of results. All parameters are in text.
  • FormData
    Support of data transformation that are sent to generate a query that will ensure for example the usage of current form data (instead of saved data). If this property is not set then all currently available form data will be sent.
    {
      "FormData": [
        {
          "TargetElement":"SomeField1"
        },
        {
          "TargetElement":"SomeField2",
          "Current": true
        },
        {
          "TargetElement":"SomeField3",
          "Formula":"'{value}' + 'aa'",
          "Current": true
        }
      ]
    }
    • TargetElement
      Internal name of the field from which will the data be taken.
    • Formula
      Template of transformation for the value that will be copied to the field. For example if the value is a pair then the expression can be set as "'{value}'.split('#')[0]". The template is evaluated through javascript function "eval()". Variable "{value}" can be added.
    • Current
      If set to true then current value will be used instead of data obtained when the form was open for query purposes.

    If additional more adjustments to the entry data is needed then can be achieved through (Formula) template then it is possible to use JS API and through CustomFunction prepare the data according to the current need.

  • DataTableElements
    This property is used in combination with DataTable mode. Configuration defines the columns to display in the data table.
    {
      "DataTableElements": [
        {
          "ColumnTitle":"Id",
          "Expression":"{PARTNER_OWID}"
        },
        {
          "ColumnTitle":"Název",
          "Expression":"{PARTNER_NAZEV}"
        },
        {
          "ColumnTitle":"Adresa",
          "Expression":"{ADRESA1} {ADRESA3} {ADRESA2} {ADRESA4}"
        },
        {
          "ColumnTitle":"Stát",
          "Expression":"{ZEME_KOD}"
        }
      ]
    }
    • ColumnTitle
      The name of the column that will be displayed in the data table.
    • Expression
      References the column value to display. Can be composed of multiple columns according to the rules of evaluation of Expression.

Events

  • OnValueChanging
    Triggered while the value is in the middle of changing.
  • OnValueChnaged
    Triggered after the value is changed.
  • OnSearchItems
    Triggers on returning values from a source, can be used to filter the search results before displaying them to a user.
  • OnSearchString
    Triggers on lookups that have a field that can be manually filled (so not on for example drop down menu) after executing lookup. Entered values can be altered and used.
  • OnGetFormData
    Triggers when form data is executed.
  • OnGetFormDataItem
    Addition to OnGetFormData – can additionally add settings.
  • OnTestTargetValue
    Triggers on copy. Can be used to tell if all the copied data should actually be copied or not based on set conditions.
  • OnUpdatingTargetValue
    Triggers on copy. The copied data can be changed based on the way this event is set up.
  • OnUpdateTargetValue
    Triggers after the copy is finished.
  • OnResetingTargetValue
    Triggers while the value in a lookup field is being deleted by the reset button.
  • OnResetTargetValue
    Triggers after the value in a lookup field is deleted by the reset button.
  • OnUpdatingTargetReadOnly
    Triggers while a read only field is trying to be updated. Can be used to decide if the field should remain ReadOnly or if the value should be updated based on the retrieving values.
  • OnResetingTargetReadOnly
    Triggers while a read only field is trying to be Reset. Can be used to decide if the field should remain ReadOnly or if the value should be reset based on set conditions.
  • OnSearchCompleting
    Triggers in the end of a search action that is in the moment that the data is received.
  • OnSearchComplete
    Triggers in the end of a search action that is in the moment that the data is filled in the search field.
  • OnRenderAutoCompleteItem
    Reserved for autocomplete mode. Triggers with autocomplete. Can be used to filter or configure the autocomplete function a bit more precisely.
  • OnPreRender
    Triggers before the field is rendered.
  • OnInit
    Triggers during initialization.
  • OnInitComplete
    Triggers after the initialization is completed.

Examples

Static connection

{
  "DataSourceType": "STATIC",
  "DataSourceConfiguration": {
  },
  "DataSourceObject":[
    {
      "ID": 1,
      "Text": "Volba 1"
    },
    {
      "ID": 2,
      "Text": "Volba 0"
    },
    {
      "ID": 3,
      "Text": "Volba 3"
    }
  ],
  "IndexValue": {
    "Expression":"{ID}"
  },
  "TextValue":{
    "Expression":"{Text}"
  },
  "SearchLimit": 1000,
  "RenderMode": "DropDown"
}

MSSQL connection – procedure

{
  "_Decription": "Pokud je hodnota není nastavena, tak lze volat ",
  "DataSourceType": "MSSQL",
  "DataSourceConfiguration": {
    "IsProcedure": true,
    "TargetObject": "SearchInAK",
    "ConnectionString": "$GlobalVariable::EfaConnectionString"
  },
  "IndexValue": {
    "Expression":"{PARTNER_OWID}"
  },
  "TextValue":{
    "Expression":"{PARTNER_OWID} {PARTNER_IC} {PARTNER_NAZEV}"
  },
  "DisplayValue":{
    "Expression":"{PARTNER_IC}"
  },
  "SearchElements":[
  ],
  "DataTableElements": [
    {
      "ColumnTitle":"Id",
      "Expression":"{PARTNER_OWID}"
    },
    {
      "ColumnTitle":"Název",
      "Expression":"{PARTNER_NAZEV}"
    },
    {
      "ColumnTitle":"Adresa",
      "Expression":"{ADRESA1} {ADRESA3} {ADRESA2} {ADRESA4}"
    },
    {
      "ColumnTitle":"Stát",
      "Expression":"{ZEME_KOD}"
    }
  ],
  "CopyElements": [
    {
      "TargetElement":"CustomerName",
      "Expression":"{PARTNER_NAZEV}",
      "ReadOnly": true
    },
    {
      "TargetElement":"CustomerOWID",
      "Expression":"{PARTNER_OWID}",
      "ReadOnly": true
    }
  ],
  "Condition": {
    "Expression":"@FirmaKod = {cp_AppCompanyCode}, @IgnorovatFirmu = 1, @SearchLimit = {cp_SearchLimit}, @SearchQuery = {cp_SearchQuery}"
  },
  "CustomFunction":true,
  "SearchLimit": 10000,
  "DisableItemData": true,
  "RenderMode": "DataTable"
}

Query for matrix according to current list – custom parameter

{                            
  "DataSourceType": "SP",
  "DataSourceConfiguration": {
    "SourceList": "{WebUrl}/CompaniesConfig"
  },
  "IndexValue": {
    "Expression":"{ID}"
  },
  "TextValue":{
    "Expression":"{Title}"
  },
  "SearchElements":[
    "Title"
  ],
  "FormData":
  [
    {
      "CustomElement":"xListName",
      "Formula":"TiSa.Forms.CurrentForm.GetListName()"
    }
  ],
  "Condition": {
    "Expression":"<eq><fieldref name='_sList'><value type='Text'>{xListName}</value></fieldref></eq>"
  },
  "SearchLimit": 1000,
  "RenderMode": "DropDown"
}

Dependent lookup and example of SharePoint lookup

{                                                                                 
  "DataSourceType": "SP",
  "DataSourceConfiguration": {
    "SourceList":"{WebUrl}/Departments"
  },
  "IndexValue": {
    "Expression":"{ID}"
  },
  "TextValue":{
    "Expression":"{Title}"
  },
  "DisplayValue":{
    "Expression":"{Title}"
  },
  "SearchElements":[
    "Title"
  ],
  "SearchLimit": 1000,
  "RenderMode": "DropDown",
  "DependencyLookups": [
    "Vyhl2"
  ]
}
{                                                                                                           
  "DataSourceType": "Lookup",
  "SearchLimit": 1000,
  "RenderMode": "DropDown",
  "_RenderMode": "AutoComplete",
  "LoadOnDemand": true,
  "FormData":[
    {
      "TargetElement":"ExternalLookup1",
      "Formula":"'{value}'.split('#;')[0]",
      "Current": true
    }
  ],
  "Condition": {
    "Expression":"<beginswith><fieldref name='ExternalLookup1'><value type='Text'>{ExternalLookup1}#;</value></fieldref></beginswith>"
  }
}

Connection to ARES

{
  "HideSelectorAfterSelect": true, 
  "DataSourceType": "WS",
  "DataSourceConfiguration": {
    "Url": "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat",
    "Cache": "24:0:0",
    "RequestType": "REST",
    "MethodName": "POST",
    "ResultSetType": "JSON",
    "ResultSetItems": "ekonomickeSubjekty",
    "ResultSet":[
      {
        "Name": "Nazev",
        "Path": "obchodniJmeno"
      },
      {
        "Name": "ICO",
        "Path": "ico"
      }
    ]
  },
  "IndexValue": {
    "Expression":"{ID}"
  },
  "TextValue":{
    "Expression":"{Nazev}"
  },
  "DisplayValue":{
    "Expression":"{Nazev}"
  },
  "DataTableElements": [
    {
      "ColumnTitle":"Dodavatel",
      "Expression":"{Nazev}"
    },
    {
      "ColumnTitle":"IČO",
      "Expression":"{ICO}"
    }
  ],
  "CopyElements": [
    {
      "TargetElement": "s_supplierName",
      "Expression": "{Nazev}"
    },
    {
      "TargetElement": "s_supplierIdentificationNumber",
      "Expression": "{ICO}"
    }
  ],
  "SearchLimit": 1000,
  "RenderMode": "DataTable",
  "CustomFunction": true
}

Additionally, this function needs to be implemented on the form.

function ExternalLookupCustomFunction_sCustomer(inst) {
  var _OnGetSearchString = function(s) {
    if (s.match(/\d+/)) return "{\"ico\":[\"" + s + "\"], \"pocet\": 200}";
    return "{\"obchodniJmeno\":\"" + s + "\", \"pocet\": 200}";
  };
  // attach events
  inst.OnGetSearchString.push(_OnGetSearchString);
}

AD/LDAP query

{                                                                                                           
  "DataSourceType": "LDAP",
  "DataSourceConfiguration": {
    "Path": "OU=TESTOU,DC=local,DC=int",
    "LDAP": "1",
    "_Container": "CN=System,DC=local,DC=int",
    "SearchScope": "OneLevel",
    "_UserName": "local\\Administrator",
    "_Password": "k4Gra6hw",
    "_Authentication": "FastBind"
  },
  "IndexValue": {
    "Expression":"{name}"
  },
  "TextValue":{
    "Expression":"{name} | {objectClass} | {distinguishedName}"
  },
  "Condition": {
    "Expression":"(name=O*)"
  },
  "SearchLimit": 1000,
  "RenderMode": "DropDown"
}

ISDS Box

Component Info

Without configuration the isds field will just show programed isds box. If we want user to somehow work with this field the following configuration is needed.


Basic configuration

{
  "EnableEdit": "NewEdit",
  "SendWorkflowName": "IsdsMessageSendWf"
}
  • EnableEdit
    • Never
      The user will not be able to edit this field in any step of the process.
    • NewEdit
      The user will be able to edit this field on new form and in edit form.

      DEFAULT VALUE

    • New
      The user will be able to edit this field on new form.
    • NewEditNoReply
      The user will be able to edit this field on new form, edit form and will have partial editability in reply.
    Can be replaced by form properties.
  • SendWorkflow
    If used sets the Isds_Status field as sent. Used to set up next workflow or other functions.
  • Box with table
    At first it an empty dropdown menu that in order to be filled a corresponding table has to be filled otherwise the „Show conditions“ button has to be clicked and the recipient has to be found through search function.
    • Add multiple recipients
      Multiple recipients can be added through this field. Must be defined in configuration where these recipients are stored.

Properties

  • Custom Function
    function IsdsBoxColumnCustomFunction_Schranka(inst) {
      var _OnInit = function() {
        console.log("inicializace kontrolky isds");
      };
      var _OnSaveAndSent = function(ctx) {
        console.log("klik na tlačítko");
        ctx.OnUpdatingFieldValue = function(ctx, fieldName, value, item) {
          console.log("aktualizace pole " + fieldName);
          return true; // false for disable set field value
        };
        ctx.OnStartingWorkflow = function(ctx, item, workflowName) {
          console.log("spouštím WF " + workflowName + " na položce " + item.get_id().toString());
          return true; // false for disable start workflow
        };
      };
      var _OnValueChanged = function(v) {
        console.log("hodnota byla změněna: " + v);
      };
      inst.OnInit.push(_OnInit);
      inst.OnSaveAndSent.push(_OnSaveAndSent);
      inst.OnValueChanged.push(_OnValueChanged);
    }
    used to make custom function according to the FUNCTION (link) rules
    Events:
    • OnInit
      Triggers during initialization process – used to change the configuration of the field.
    • OnSaveAndSent
      Triggers after clicking the sent button.
    • OnValueChanged
      Triggers after a value of the isds box is changed.
  • OpenCondition "OpenCondition": true

    The table that opens after clicking „Show conditions“ button is automatically opened if this property is set to true.


Examples

{
  "EnableEdit": "NewEdit",
  "SendWorkflow": "SendIsdsMessage",
  "SelectBoxFormat": "{id} – {name}, {address}",
  "DisplayFormat": "{id}",
  "OpenCondition": true
}

Ratings

Star classification with rating scale utilizing a star glyph.

No need to configure the array for basic functionality.

Possible to use in Advanced table.

In code, the rating is presented as a number and it is possible to work with this value.


Basic configuration

{
  "DefaultValue": 0,
  "TotalStars": 5,
  "MinRating": 0,
  "StarSize": 25,
  "UseFullStars": false,
  "DisableAfterRate": false,
  "ColorStart": "#fad3a0",
  "ColorEnd": "#f07800",
  "ColorEmpty": "#efefef"
}

Properties

  • ExternalScripts
    Defines path for external script.
  • ExternalStyles
    Defines path for external styles.
  • Resources
    Path to the recourse data.
  • CustomFunction "CustomFunction":true
    Enables the usage of a custom function.
  • CustomFunctionInView "CustomFunctionInView":true
    Enables usage of custom function in view.
  • DefaultValue "DefaultValue": 0
    Defines the default amount of stars for the specific cell.
  • TotalStars "TotalStars": 5
    Defines maximum amount of stars.
  • Minrating "MinRating": 0
    Defines the minimum amount of stars.
  • StarSize "StarSize": 25
    Defines the size of the stars.
  • UseFullStars "UseFullStars": false
    Defines if the stars rating is enabled in halves or in wholes.
  • DisableAfterRate "DisableAfterRate": false
    Locks the selected value after the first select.
  • ColorStart "ColorStart": "#fad3a0"
    Defines collor of the stars before rating.
  • ColorEnd "ColorEnd": "#f07800"
    Defines color of the stars after rating.
  • ColorEmpty "ColorEmpty": "#efefef"
    Defines the color of empty stars.

Examples

Usage in advanced table

{
  "Table": {
    "MaxItemsOnPage": 40,
    "TableStyle": "width:980px",
    "DisableAddRow": true,
    "DisableDeleteRow": true
  },
  "Columns": [
    {
      "Name":"Supplier",
      "CellStyle": "font-weight:bold;",
      "ReadOnly": true,
      "Html": true
    },
    {
      "Id": "rating",
      "Name":"Rating",
      "Rating": {
        "UseFullStars": true,
        "MinRating" : 1
      }
    },
    {
      "Name":"Comment",
      "Width": "45%",
      "MultiLine": true
    },
    {
      "Id": "user",
      "Name":"User",
      "User": {}
    }
  ]
}

Template column

Non-editable field, used only for data visualization and transformation.


Basic configuration

{
  "Expression": "{value}",
  "Formula": "'{value}'"
}

Properties

  • Expression
    Defines value, possible to add prefix, suffix or render HTML element according to the mask.
  • Formula *
    If the use of expression is not enough it is possible to use javascript expression for rendering. Expression is evaluated through the function eval().
  • AllowEdit
    Explicitly allows to edit a field in form edit.

Expression of the {RESX.$*****} type are automatically translated from resources. Expression of {*****}, {TiSp:*****} type are translated from text templates. Expression {value} serves to transfer the value from a field.


Examples

Examples of using resources

{
  "Expression": "{RESX.$Text} {value} {TiSp:Option1}",
  "AllowEdit": true,
  "Resources":[
    {
      "LCID":1029,
      "$Text": "cz-res:"
    },
    {
      "LCID":1033,
      "$Text": "en-res:"
    }
  ]
}

Transform url:

{
  "AllowEdit": true,
  "Expression": "{value}",
  "Formula": "'{expression}'.replace('#', ctx.GetCurrentItemUrl())"
}

Task View

Task View is a SharePoint webpart that can be added to a page. The main purpose of this webpart is to view tasks created with Workflow Engine that are assigned to the logged user. Tasks can display also metadata of the related item.

Webpart configuration includes:

  • Tasks list – selection of SharePoint list in which Workflow keeps tasks – standardized name WorkFlow Engine Tasks, possible to set list from another site.
  • Statuses – allows the definition of displayed tasks according to their state.
  • Columns (form task) – enables to display columns which are defined for Workflow Engine Task list. These columns are displayed in the section "My Tasks" from the left and their order cannot be changed.
  • Prefix for task columns – adds prefix to the My tasks table column in order to resolve a potential conflict with already existing columns on form – archaic setting, no longer needed in most cases
  • Columns (from related item) – enables to display columns from related item. The order in which they are displayed in the section "My Tasks" can be changed. You can order them using the arrow keys up and down button. Use internal name of column for definition, you also need to define column type, allow filter for column and allow autosaving filter are optional. It is possible to format the view of specific column.
  • Approval mode – allows the definition of displayed tasks fields by task respondent
    • All tasks – shows all tasks from defined task list.
    • My tasks – displays only task assigned to current user.
    • User defined users and groups – displays tasks of users defined in configuration field, possible to enter user group as well.
  • Properties – allows to define the behavior:
    • Show result info – if enabled, displays the statistics of requested query.
    • Show paging panel – activates/deactivates the option of task pagination. Requires to define the parameter "Maximum count of items on the page" when activated.
    • Show document link – displays the link to related item.
    • Show edit link – displays the link to the EditForm of related item.
    • Show view link – displays the link for DispForm of related item.
    • Show icon – displays the icon of the type of related item. Usable for document libraries.
    • View task in edit mode – if disabled DispForm is used when the task is opened.
    • View task on item form – Displays button that allows to open selected task in display form
    • Allow gradual approval – used in conjunction with Allow bulk approval. User has to select tasks and enter bulk approval. After finishing one task from the selected group the next one will open right after it. The Workflow has to be set for this kind of behavior to work properly.
    • Enable bulk approval – enables bulk approval, task will have checkboxes to choose task to complete. More settings within Assign task activity in Workflow Engine.
    • Approved selected without form – Allows the approval of selected group of tasks at once without having to open the task itself in a edit/display form. Workflow has to be set for this kind of behavior to work properly.
    • Disable Async Load metadata – if not ticked the general data about tasks is loaded first and then a second query is launched to get metadata of said tasks. If ticked only one query is executed that gets both general data and metadata before displaying
    • Use SystemUser for load metadata – uses System User for collection of metadata instead of signed user
    • SQL Tasks allowed – Displays sql tasks as well as onsite tasks.
    • Maximal count of search results – maximal amount of tasks that will be displayed per user.
    • Maximal count of items on the page – maximal amount of tasks on a page if the pagination function is enabled.
    • Default sorting column – choose from selected columns from task and from related item.
    • Direction – set sort order.
    • Window display mode
      • Dialogue – displays modal dialogue window with task to do – script for message capturing is required for proper functioning.
      • New window – displays task in a new web browser tab.
      • Redirect – redirects directly to the page with the task – script for message capturing is required for proper functioning.
    • Page refresh delay after closing the dialog – if the dialog window mode is selected, this value determines the page refresh delay after closing the dialog.
    • Filtering mode – the position of filters and which filters are enabled
      • None
      • FullText
      • Columns (bottom) – enables filter in search result tab at the bottom of the table.
      • Columns (up) – enables filter in search result tab at the top of the table.
      • Columns (bottom) + FT – enables filter in search result tab at the bottom of the table.
      • Columns (up) + FT – enables filter in search result tab at the top of the table.
    • Allow auto saving filter – enables to save used filter.
    • CSS – enable to link CSS file to apply additional formatting.

As part of the standard SharePoint webpart configuration, you can also use the standard webpart settings.



Log

SharePoint Online

With the SharePoint Online solution, logs are recorded to our in-house Azure database and are therefore inaccessible to users. Production logs are kept for a period of four months.

SharePoint On-Premises

Application logs can be set to both the file and the database or to both places at the same time. Logs are stored in one database, it cannot be distinguished, it is shared within the SharePoint farm.

The setup is done in the nlog.nlog file where the paths for log records are set.

Example of logs from the file system.

Example of database table dbo.Log.

Example of query results over the dbo.Log table.


FAQ

A FAQ is a list of frequently asked questions (FAQs) and answers on a particular topic.

More questions can be found in dedicated Stack Overflow TreeINFO Team. If you need access, contact treeinfo@aricoma.com.

Use CustomFunction in Advanced table. On form use custom script generated on OnPreRender so you can modify columns based on your unique conditions.
function AdvancedTableCustomFunction_Rq_Details(inst) {
  var _OnPreRender = function() {
    var form = TiSa.Forms.CurrentForm;
    var s_status = form.FieldsByName.Rq_All_StatusChoice.GetValue();
    var columns = inst.GetConfig().Columns;
    for (var i = 0; i < columns.length; i++) {
	//default
      var c = columns[i];
      if (c.Id === "comment" || (c.Id === "number" && (s_status == "New" || s_status == "Returned")))
        continue;
      c.ReadOnly = true;
      c.Required = false;
    }
    if (TiSa.Forms.CurrentForm.FormData.s_status == "Director") {
      var c = inst.GetColumn("garant");
      c.Required = true;
      c.ReadOnly = false;
    }
    if (TiSa.Forms.CurrentForm.FormData.s_status == "Garant") {
      var d = inst.GetColumn("garantAppr");
      d.ReadOnly = false;
    }
  };
  inst.OnPreRender.push(_OnPreRender);
}

The query limit is defined in central administration.

If there are more items in the list than that limit, you can only query through the indexed fields, plus these conditions must be at the top level of the query to be evaluated first. If the result of a query via indexed field is less than the set limit, the query can be refined using non-indexed fields.

Indexed fields can only be queried with the Eq, Neq, Lt, Leq, Gt, Geq, IsNull, IsNotNull condition. If Contains, StartsWith, In is used, the index is not applied. Only the And operator can be used to query over an indexed array, if Or is used then again the index is not applied. If the query has a condition on Created (anywhere) then it is prioritized first so the result must come out below the limit or the query will end with an error.

The solution is to set the indexes appropriately, there can be a maximum of 20, and modify the conditions appropriately. We solve this mainly in O365 where the fixed limit is 5000 and cannot be changed. In a static query there is usually a condition on the user or on the date (e.g. last 5000 by Created) and the fields are indexed.

No. The correct way to display item value in print form is <$FieldValue::SmlNumber />

Support

If this documentation doesn't answer your questions, please send us an email at treeinfo@aricoma.com.


Changelog

See the changes, fixes, improvements and updates released in the latest versions.

Build 1.13.25003.19002 Hotfix 24.3.2025
  • Fixed Association of new fields and forms – Fixed functionality for associating new field and form objects through the TreeINFO application.
  • Fixed Attachments display fix on subsites – Author and creation date were not displayed correctly on subsites.
  • Fixed Task Form Customization – When clicking on an item in the task list, the item form now reliably opens every time.
Build 1.12.2502.19004 27.2.2025
  • Added Archivation of large files – It is now possible to archive files up to a maximum size of 2 GB.
  • Added Archivation – The logging function was enhanced for more precise analysis of failed archivation attempts.
  • Added Search by Year and Month – A new option for searching by year and month has been added. The configuration is described in the documentation here.
  • Updated ISDS field – Increased query processing limit during field initialization to over 5 000 items.
  • Updated ISDS ZIP files – Updated the default ISDS field configuration to ensure proper handling of ZIP files.
  • Fixed ARES search – Updated ARES search to correctly recognize diacritics in search terms.
  • Fixed Print function in Search Web Part – Resolved an issue that caused an error when attempting to load the appropriate print template after clicking the print button in Search Web Part.
  • Fixed Image Upload in Online – When an image is uploaded to the library in the online environment, SharePoint automatically creates a Managed Metadata field, which became mandatory and therefore prevented the task from being completed for the given document.
  • Fixed Nested Advanced Table – Resolved an issue when transferring an Advanced Table containing a nested table with characters interpreted as separators.
  • Fixed Currency column in Task Web Part – Enabled filtering and searching using Currency type columns in the Task Web Part.
Build 1.12.2411.11001 On-Premises (11.11.2024)
  • UpdatedSearch – Userpicker – Optimization of UserPicker control behavior in the search form.
  • UpdatedAdvanced Table – TargetColumn Copying – A new feature allows the use of the "TargetColumn" property to copy data into additional columns when inserting a reference; previously, copying was only possible to a single field.
  • FixedAdvanced Table – Reference Search – Fixed an issue with searching in the reference dialog that only occurred when the search was targeted at a specific subfolder.
  • FixedAdvanced Table – Paged References – Fixed an issue where related information was not fetched for non-displayed references when the reference table was paginated.
  • FixedPrintForm – User Field on DispForm – Fixed an error that occurred on the display form when the printout attempted to display a user field.
  • FixedUserpicker Paste Recognition Issue – Resolved an issue where copied and pasted usernames were not properly detected and added in the userpicker field.
  • Fixed ISDS Box with OpenCondition Property – Fixed an issue where the ISDS box search field remained focused (allowing immediate typing) when used in combination with the OpenCondition property.
  • Fixed ISDS Box Copy – Fixed an issue where the ISDS box field was sometimes incorrectly populated when an item was created using the copy function.
  • Fixed ARES connection fix – Change encoding from ASCII to UTF8 to support special characters.

Build 1.12.2409.10001 Hotfix (10.9.2024)
  • Added Online Custom Scripting Verification – Implemented a status check to ensure that custom scripting is enabled on the site being updated.
  • Added Online Configuration Backup – Introduced functionality to automatically create a backup before installing a new version of TreeINFO Forms, ensuring configuration settings are preserved in case of loss during the update process.
  • Fixed Counted Column Overflow Fix – Resolved an issue where the Counted Column malfunctioned when the number of counters exceeded a specific limit.
  • Fixed Custom Formula in Search Template Export Bug – Fixed an issue that prevented the search export function from working when a custom formula was included in the search template configuration.
  • Fixed .aspx Configuration File Deletion During Installation Bug – Resolved an issue where TreeINFO Forms configuration files were deleted if the installation process failed due to custom scripting being disabled on the site.
  • Fixed Reference Metadata Copy Bug – Fixed an issue that caused metadata to be lost when creating a reference in a Reference Advanced table.
  • Fixed Missing Items in Reference Advanced Table Dialog Window – Fixed an issue where certain items were missing in the dialog window of a Reference Advanced Table when used with the FolderUrl property.
  • Fixed Missing Metadata for Hidden Items in Reference Advanced Table – Fixed an issue where metadata information was absent for items that were found but hidden in the Reference Advanced Table due to the page's maximum item limit being reached.
  • Fixed Outdated Data in Printform Bug – Fixed an issue where outdated data was displayed on a printform if opened from an edit form. This occurred when a user edited the form without saving and then attempted to use the print functionality.
  • Fixed Printform User Field Error – Resolved an issue that caused an error to occur when a user field was included on a printform.

Build 1.12.2406.25001 (25.06.2024)
  • Fixed New form preview aspx – Introduced a new form preview ASPX file that resolves issues caused by the latest Microsoft update.
  • Fixed Column configuration erasure bug fix – Resolved an issue where column configurations were erased after installing a new TiSa version. If the column configuration is erased, it will now be moved to the recycle bin.

Build 1.12.2406.19001 (19.06.2024)
  • Fixed TaskForm and DocumentPreview relative URL update – Updated the relative URLs for TaskForm (/sitepages/tisa/TaskFrom.aspx -> /tisa-sitepages/tisa/TaskFrom.aspx) and DocumentPreview (/sitepages/tisa/tisa.preview.aspx -> /tisa-sitepages/tisa/tisa.preview.aspx) in response to the latest Microsoft update, which prevents .aspx files from being added to the SitePages document library.

Build 1.12.2404.18001 (18.04.2024)
  • Updated Updated the maximum search results limit for ExternalLookup, Webpart search function, and Advanced table reference function. – Increased the maximum search result limit from 5,000 items to 500,000 items for ExternalLookup, Webpart search function, and Advanced table reference function.
  • Updated Updated ISDS box – non existent inbox – Updated the ISDS box field. If the provided inbox does not exist, it will be added as a recipient regardless.
  • Fixed ARES connection fix – Fixed a connectivity issue that was causing the ARES external function to malfunction.
  • Fixed TiSa/WFE workflow desync fix – Corrected an issue that led to workflow desynchronization between the WFE version and the TiSa version.

Build 1.12.2403.17001 Hotfix (17.03.2024)
  • Updated For On-Premises Only – IsUserInGroup/IsUserInGroups/IsUserInSpGroup/IsUserInSpGroups – Recursivity – Updated the IsUserInGroup function and its variants to support recursive searching for the specified group. This recursion can be disabled using the new parameter disableRecursive.

Build 1.12.2402.12002 Hotfix (12.02.2024)
  • Fixed Reference Advanced Table with over 5000 results bug fix – Fixed an issue that caused Reference Advanced Table to not work properly if the searched list/library had over 5000 items and if the search query had more then one column to search by.

Build 1.12.2401.30001 (08.02.2024)
  • Added Fulltext search function for Advanced Table – Added search function for Advanced table – can be customized for more accurate search or left as is for complete fulltext search over all collumns
  • Updated Search webpart, External lookup, Reference Advanced Table – search update Updated seach function for Search Webpart External Lookup column and Reference Advanced table column to function properly if the searched amount of items is over 5000
  • Updated Updated support of multiple items selection in view Updated support of multiple items selection in view for more advanced use (for example validation for specific number of selected items etc.)
  • Updated Updated Print Templates section in the TiSa documentation – Updated Print Templates section in the TiSa documentation to provide clearer instructions on proper configuration.
  • Fixed Upload button pop up window fix – Fixed an issue that caused pop up window to show up if the upload button was clicked instead of regular upload window in newer version of Sharepoint.
  • Fixed Print template content type filter on new form bug – Fixed an issue that caused print templates to be unable to be filtered by content types on new form
  • Fixed IsUserInGroup fix – Fixed an issue that caused IsUserInGroup to not function properly if used on a field with multiple values allowed
  • Fixed Online – Search Webpart SP2SQL fix -Fixed an issue that caused Search Webpart to not work properly if the search was done through SP2SQL in database
  • Fixed Reference Advance table jquery bug fix – Fixed an issue that caused reference item created through json to be incorrectly compared in the context of duplicities as a whole json string instead by individual values
  • Fixed Advanced table deletion bug fix -Fixed an issue that caused empty advanced table after deletion of its values to be represented by empty field instead of an empty string
  • Fixed Added missing ColorTheme property in xml form of workflow – Added missing ColorTheme property in xml form of workflow that specifies the color of individual bubbles in UI version of workflow
  • Fixed External Lookup CopyElements multiple user field bug – Fixed an issue thta caused External lookup CopyElements function to not work properly if more then one user/group was retrieved from an user field
Build 1.12.2310.27001 (08.11.2023)
  • Updated Attachment table Float DisplayMode with EnableView Updated EnableView configuration to work properly with DisplayMode Float

Build 1.12.2308.15002 (24.08.2023)
  • Added Attachment field Accept and DisableMultipleUpload properties – Added Accept (attachment field will only accept specified types of documents) and DisableMultipleUpload (forbids user from uploading more then one attachment at a time if set to true) properties to attachment field
  • Added Attachment field ForceEditFormAfterUpload, AllowOverwrite and DeleteFileWhenItemDeleted properties – Added ForceEditFormAfterUpload (Edit form will be opened of a just uploaded file), AllowOverwrite (Instead of creating a copy of a uploaded file if duplicity is found, overwrites the already existing file of the same name) and DeleteFileWhenItemDeleted (Deletes the file of the attachment from Sharepoint attachment library if deleted from form) properties to attachment field
  • Updated Active task update – Task table now shows results in different languages; Updated behaviour of opening and closing tasks through Active task table
  • Fixed Replace function bug – Fixed an issue that caused certain forbidden symbols to be incorrectly copied to destination file (symbol '%' still causes issues, if coppied the resulting file will contain '%25' instead of '%')
  • Fixed UpdateChildren bug – Fixed an issue that caused updatechildren function to not work correctly in combination with user fields
  • Fixed "DisplayMode": "Float" in combination with EnableView bug – Fixed an issue that caused EnableView to not work correctly if used in combination with "DisplayMode": "Float"
  • Fixed Validation during save log issue – Fixed an issue that caused errors that appeared during saving of an item to not appear in log if the error was of validation nature
  • Fixed Onchange with attachment bug – Fixed an issue that OnChange receiver to not work correctly if used in combination with attachment field

Build 1.12.2306.19004 (19.06.2023)
  • Updated Attachment field update – forbidden symbols – Rename function now correctly translates substitute symbols (for example %20 as a space symbol)
  • Updated Attachment field update – paging update – Attachment table now correctly shows the configured number of rows
  • Updated Attachment field update – file size update – Size column now dynamicaly changes depending on the file size (instead of showing 1024 kB it will now show 1MB)
  • Fixed Attachment field – GetValue() bug – GetValue() method now correctly shows checked or renamed rows
  • Fixed Attachment field – AutoNumeric.js library dependency – Added dependency on AutoNumeric.js library
  • Fixed Attachment field – Checkbox header row bug – Header row checkbox now correctly check itself if all rows are selected manualy

Build 1.12.2306.15002 (15.06.2023)
  • Added Errorcallback – Added ErrorCallback function that returns error message acording to predefined template
  • Fixed Advanced table User multiple bug – fixed an issue that caused only the first user to be filled in a user multiple column if the field was filled automatically
  • Fixed Secondary client secret bug – fixed an issue that caused secondary client secret to not work properly
  • Fixed ExternalLookup + Source – SP bug – fixed an issue that caused ExternalLookup function to not work correctly if two identical lists existed in different file path
  • Fixed Advanced table sum bug – fixed an issue that caused advanced table sum function to not work correctly if a new row was added or removed
  • Fixed AlwaysUpdate + conditional expression bug – fixed an issue that caused AlwaysUpdate property to not work properly if used in combination with ConditionalExpression
  • Fixed SQL task infinite load screen bug – fixed an issue that caused incorect message to appear if user opened an SQL task that was already deleted through link
  • Fixed SourceList URL bug – fixed an issue that caused for example folders that were created inside another folder to be placed in root instead inside said folder if created through custom button
  • Fixed Copy to different list error – fixed an issue that caused an error when using the copy function to copy data to different list

Build 3.11.2301.23001 ()
  • Added Allow selection + export button – search function – Updated search function. Selection can now be used in combination with export button to export only selected items.
  • Updated Instance status change receiver – The receiver for instance status change was made asynchronous. If the instance update crashes it will be automatically restarted through queue retry mechanism.
  • Fixed Column type User in combination with AllowMultipleValues property bug – Fixed an issue that caused an empty array to appear in a User column if the column was filled first and then erased when combined with AllowMultipleValues property. Fixing this issue may cause errors in certain Workflows.
  • Fixed GetTempFileName fucntion – Fixed an issue that caused the GetTempFileName function to not return unique file name.
  • Fixed Advanced Table checkboxlist bug – Fixed an issue that caused Advanced table to not show properly if used in combination with CheckboxList property.
  • Fixed EL multiple choice bug – Fixed an issue that caused multiple choice to not work properly if the data source did not have trimmed values.
  • Fixed DisplayGroupsAsTabs bug – Fixed an issue that caused the DisplayGroupsAsTabs property to not work properly if custom group Ids were used.
  • Fixed External path attachment bug – Fixed an issue that caused the preview of a document to not show properly if the source path of the attachment was of External type.
  • Fixed JS editor freeze – Fixed an issue that caused the JS editor to freeze on random while being used.
  • Fixed Difference in exported Tisa settings fix – Fixed an issue that caused difference in exported Treeinfo for Sharepoint application settings if exported by UI as oppose to by script.
  • Fixed Research function bug – Fixed an issue that caused the value to not reset if the value was empty.
  • Fixed EL value change bug – Fixed an issue that caused additional value to be added if the source contained only one value.
  • Fixed Secondary client secret authentication bug – Fixed an issue that caused online environment to not authorize through secondary client secret if the primary is non functional.
  • Fixed Tabs change bug – Fixed an issue that caused the content to not change if the user changed tabs on form.
  • Fixed Form designer export duplication – Fixed an issue that caused the export to be attempted twice if done through Form Designer resulting in an error.
  • Fixed Counted column receiver unique internal name bug – Fixed an issue that caused receiver to operate with first found value if there were multiple columns with the same internal name.
  • Fixed Counted column FileLeafRef rename bug – Fixed an issue that caused FileLeafRef function to not work properly resulting in incorrect renaming of a target file.
  • Fixed Counted column Expression value bug – Fixed an issue that caused Expression function in Counted column to only accept specific values and not expressions.
  • Fixed Random item addition bug – Fixed an issue that caused errors when adding a new item to data message.
  • Fixed Bulk select button in search results bug – Fixed an issue that caused the bulk select check box to stay checked even if all the result items were not checked.

Build 1.12.2211.29001 (29.11.2022)

  • Fixed JWT token registration bug – Fixed an issue in communication between Application and Sharepoint causing incorrect registration.

Build 1.12.2210.20002 (20.10.2022)

  • Fixed Advanced Table – Fixed an issue where if the advanced table was in a checkboxlist mode it would not function properly if the table was tied to a condition.

Build 1.12.2210.13001 (13.10.2022)

  • Added User edit notifications – Functionality allows to prevent overwriting of local data by releasing a new version of the application.
  • Added Integration of task functionalities into forms – Option to add "Load active tasks" button to display active tasks on form using designer.
  • Updated Option to sort items in tables – For tables it is now possible to select the direction of sorting values in columns.
  • Fixed Option to format date from SQL on print form – Ability to format data on print templates retrieved from SQL.

Release Q2 (2022)

  • Added Rating – New type of field for star classification.
  • Updated Export of filtered search data – Support for export partial filtering.
  • Updated Import / Export settings – Option Variable will no longer be a checked by default.
  • Updated Advanced table – Improvement of the checkboxlist and attachments modes with a new OnInvalidate event, so it will be possible to customized with script.
  • Fixed Archiving – Archive template fix – if a date was used in the expression, the format was returned in UTC, now it is returned as local.
  • Fixed Form action fix – When the user clicked back in the browser, the action could be performed again because the previous page was saved in the browser history. Now it is not saved.