Best Practice - Do's and Don'ts

Best Practice - Do's and Don'ts

This article should help you when to use what when creating a business application using Teamsware.

Please let us know in the comment section below if you have other/different best practices you would like to share with us. We really appreciate every kind of contribution.

Solution Management

DO...

·       Create Site Collections for staging
It is highly recommended to build the solution in a dev/test environment before deploying it into production. You don't have to use a different tenant for this, but a dedicated site collection is sufficient. The Teamsware Solution Studio offers the possibility to easily roll out complete solutions from dev to test to production step by step and update them later with ease.

·       Create only one solution per site.
If needed create sub-sites for connected solutions.

·       Disable alternative languages on source and target sites, because we can only package and publish the base language and it leads to confusion

·       Add existing lists to your solution to get them enhanced and/or packaged
If you create a solution in a site where lists already exist and you want to extend them with Teamsware functionality or just package and roll them out, you can easily make them part of your solution. In the Dossier/List creation wizard select the option 'Use an existing list from SharePoint site'. This will add it as a solution element. Only lists and libraries listed in the Solution Studio will be packaged.

·       Create packages from time to time
A solution package is like a version of your solution. Create a package if you did a major change at least. You can start from a package version to create another solution or if you or someone else accidentally deletes your site or site collection there is a chance to recreate it based on your latest package. Without a package there is nothing for us to restore since it is all stored in your site.
Don't forget to give it a helpful description that you know what you've added or changed later on.

·       Update your solution (features) and deployments from time to time
Teamsware is releasing Solution Studio updates twice a month. Find all the 
Release Notes Solution Studio Online here. An update can include Solution Studio improvements or feature updates. Solution Studio is updated automatically, but if there are updates for the features you've used in your solution, there will be an update option in the lower left corner below the solution elements. If you click on update, this will only update the features used in the current site, but not the deployments. To bring the feature updates to your deployments as well, create a new package version after your Solution Studio is up-to-date, and update the deployments with the latest package.

·       Package Quick Launch navigation links
To package quick launch navigation links go to your SharePoint site and configure the left navigation to your needs. Then go back to your solution in Solution Studio -> Other Assets -> Navigation and select the navigation links you want to get packaged and deployed. If there are different links in the target site, they will remain, as there are not links deleted during deployment.

·       Use lookup fields if the user is to make customizations/extensions independently
If you want to give the user the possibility to extend a drop down list manually after deployment, choose a lookup column and a corresponding lookup list which allows them to add their own values.

·       Use choice fields for fixed values only
For a selection of fixed values e.g. to be used in your process like a status or phase use choice fields. They are packaged and therefore you can always rely on their existence.

·       Need a CAML query e.g. in a Teamsware GetFirstValueForQuery function? (What's CAML?)
Using the Teamsware Expression Language you have those powerful functions in the context objects in the right panel to query a list.

One parameter is the CAML query, but there is no Query Builder like on other places. Of course you could install one of the available CAML Query Builder tools out there, but there is a much easier way by using the built-in Query Builder in the Scheduled Actions wizard.
In Solution Studio click on the list/library you want to query and navigate to 'Things in background' -> 'Scheduled Actions' and add a Scheduled Action. In this wizard click on the Filter icon to open up the query builder.

Configure the desired filter and click 'Save'. This will write the appropriate CAML query into the filter field. From there you can copy the CAML and cancel the Scheduled Action wizard again.
For the query to be used in an expression function like GetFirstValueForQuery you have to crop it to have the <Where>...</Where> part only and remove the ProviderType property (which is only used in the query builder case)

·       Use the promise pattern
How to execute an asynchronous function in Teamsware actions or any other expression configuration?

·       Use icons on tabs and actions to improve user guidance and usability

·       Share your solutions with others (How to share a solution?)
Each solution has a solution owner who created it initially. In it's default state the solution is only visible to it's owner on their Solution Studio dashboard (
https://solutions.Teamsware.com). To make sure the solution can be edited if you are on holiday or you leave the company, create a generic dev Solution Studio user to share with or simply share it with your deputy. Another option would be to create each solution with this generic dev account and share it from there with yourself. Make sure the email address you share the solution with has a Teamsware Solution Studio account and is owner on your SharePoint site to make changes.
Once you have accepted a shared solution by clicking on the corresponding link in the sharing email, you will find the solution in your "Shared Solutions" section.


DON'T...

·       Do not use hard-coded URLs or IDs
e.g. If you have to add a list URL or ID somewhere use out-of-the-box or Teamsware Placeholders (e.g. [[@Web.ServerRelativeUrl]] or [[@Form.ListId]]) to make it dynamic.
Or if you have deployed items in a list (list content activated for package & publish) you want reference/get it in an Expression use one of the 
Teamsware Query Functions in combination with a custom unique column value since the ID is most likely not the same in another site after deployment.
Always keep in mind that those things will change when you deploy a solution to another place and it won't work anymore if they are hard-coded.

·       Do not use spaces or special characters when creating columns or lists
The initial name will be used as internal name which cannot be changed later on. When adding business logic using the Teamsware Expression Language the internal names are used. If you've used spaces or special characters these expressions are not easy to write and it's not very legible.
You can change the display name later if you click on edit again.

 

Features

Forms

·       DO...

·       Use Regex to validate form inputs (What is Regex?)
In a Teamsware Validation Expression you can use Regex to validate form inputs
Field Validation Examples using Regex

·       Show/hide something on a form based on a group membership
Using a Teamsware Form (classic or modern) there is a visible expression configuration on each control, not just on fields. In the Teamsware Expression Builder there is a powerful function in the Context Objects -> User section that can be used to check if a user is in a specific SharePoint Group (AD Groups cannot be supported). The result of this function can be used to show/hide a control on a form.


·       Cascading lookups
https://www.Teamsware.com/hubfs/docs/o365/webframe.html#LookupFiltering.html

·       Visualize the current process status or phase using an image in a rich text control

·       Hide fields on NewFor/EditForm when they are calculated in the background

·       Rich Forms: Signature field -> Handwriting

·       Rich Forms (classic): After export/import from NewForm to an EditForm, add the toolbar again, as there are additional placeholders (ct, version, author, editor) on an EditForm, which are empty if they are not loaded

 

Actions

·       DO...

·       Create your custom action type if you need an action which does not exist over and over again instead of using an execute script action
Custom Action setup (create your own action type)

·       Indicate to the user what actions are being executed using show message actions in between

·       Use console.log(); or debugger; in Execute Code Expressions in Teamsware Expression Builder to check variable values during development

 

List View Search

·       DO...

·       Disable the out-of-the-box full text search box of views when using a Teamsware List View Search
It does not make sense to have two different search boxes. Therefore edit the list view webpart and uncheck the "Display search box" option in the Miscellaneous section

·       Pass default values as URL parameters
If you want to open a list view having LVS automatically populated with a filter value, there is an option to pass them using the following format: s[InputName]=[Value]
To execute this filter immediately add s_runImmediate=true to the URL.
https://www.Teamsware.com/hubfs/docs/o365/webframe.html#RuntimeMode.html

 

Collaboration

·       DO...

·       check out our Learning and Community section for help

·       post your improvement Ideas and vote ideas from others to give it a higher priority in our development backlog

·       follow places you are interested in (e.g. Release Notes Solution Studio Online)

·       if you have configuration questions ask them in the Community or book our expert services

·       DON'T...

·       use our support (support@Teamsware.eufor configuration questions. Ask them in the discussions. only submit a ticket for installation issues or bugs


    • Related Articles

    • Action: Send email

      SenSend email action with extended configuration allows dynamically sending emails from your SharePoint site to any email address. Example of Send email action configuration on the current site For more information about Action Builder read Action ...
    • Provisioning of Language settings

      The SharePoint multilingual feature allows users to create and manage multilingual sites, enabling viewing content to be shown in different languages based on a user’s preferred language settings. In the site language settings you can enable your ...
    • Send internal email action retirement

      Send internal email action retirement Microsoft announced the retirement SharePoint SendEmail API, known as SP.Utilities.Utility.SendEmail, which is utilized to send internal SharePoint emails. It is getting retired on October 31, 2025. This means ...
    • Action: Send Mail in Rich Forms and Action Links

      Send Mail action allows dynamically sending emails from your SharePoint site to any email address. Example: * Configurations are available for actions that use the Microsoft Graph Send Mail API. Note: In order to use the Send Mail action in Rich ...
    • Field Validation Examples using Regex

      The SharePoint out-of-the-box field validation is very limited and you can't use regex to validate the value entered in the form. Using teamsware rich forms as add-in but as well in solution studio you can configure a validation on each form field ...