Table of contents
App On-Premises deployment allows to install your solution package on target SharePoint On-Premises local environment.
Note: Supported SharePoint Versions:
- SharePoint Server 2019
- SharePoint Subscription Edition (SE)
This guide describes how to deploy your solution to a target SharePoint On-Premises environment (SharePoint Server 2019 and SharePoint Server Subscription Edition) using the App Deployment method.
Initial App Deployment
To deploy the solution on the target SharePoint On-Premises environment with App Deployment method you need to do the following steps:
1. Register an App: First of all you have to register an App in Solution Studio: Go to Solution Studio -> Publish tab -> Deployment Definitions. Click on the 'New App Registration' button.
Specify the App title and select the Package version you want to publish. Final title of the App will be in the format: '<App Title>-<Package Title>-<Version>'.
Click on the Next button to redirect to the Deployments step where you can select the deployment option:
Standard Deployment - is selected by default and it deploys all solution elements in the package to the target site
or Selective deployment - allows selecting specific solution elements to be included in the deployment. Read more about Selective Deployment option.
The Summary step provides an overview of the deployment details before final step. It includes: App Title, Package version and Deployment type and logs of what is included in the deployment.
2. Download the app: After the app has been successfully registered, you can download it using the “Download for SharePoint On-Premise” option.
You can access this download option in either of the following ways:
- Deployment Definitions List View:
Locate the relevant deployment definition in the list and select “Download for SharePoint On-Premise.”
- App Registration Details Panel:
Open the specific deployment definition. In the details panel, select “Download for SharePoint On-Premise.”
3. Installation:
Note: Before you start installation of the App on the SharePoint On-Premises local environment please ensure the following:
Permissions: The user account used during deployment must meet all of the following requirements:
- Site collection administrator permissions or have Full Control permissions on the target site.
- Have permissions to upload and deploy apps to the App Catalog.PowerShell 5.0 or 5.1 (Recommended)
Internet access:
The machine running the deployment must have access to:
- https://solutionmanager.skybow.com
- https://license.skybow.com
Download the <App Title>-<Package Title>-<Version>.zip file, unzip and extract files from the .zip file. The package provides a structured method for deploying SharePoint solutions to **SharePoint 2019 or SharePoint Subscription Edition (SE)** by executing the provisioning process on your local machine. Package contains:
BackgroundAutomationService - Artifacts for installing IIS web application and Windows services
Binaries - contains the required libraries for executing the provisioning scripts
provisioningconfig.json - Configuration file for deployment settings
package.pnp - SharePoint provisioning package
utils.ps1 - Utility functions used in the provisioning process
provisioningscript.ps1 - PowerShell script containing the provisioning logic
install.ps1 - Main installation script that initiates the deployment process
set-debugmode.ps1 - PowerShell script used to enable or disable the Debug Mode setting on a SharePoint site.
readme.txt
Deploy the solution: right-click on `install.ps1`, select **Run with PowerShell** option and follow the on-screen prompts to complete the deployment.
Enter site SharePoint On-Premise site URL you want to deploy the solution and local user credentials, which has full control on the target SharePoint On-Premise site.
During the first deployment process the system ask you to provide Background Automation Service URL. Background automation service allows to deploy background automation configurations (such as Scheduled or Triggered actions, or Background column calculations). Before deploying background features you must install the Background Automation Service on the server. If you don't have/need it you can leave the field empty to skip Background Automation configuration deployment. If Background Automation service URL is not specified, background features will not be published. Background Automation Service URL parameter is saved for whole site collection.
Also, you can set the Background Automation service URL parameter in provisionconfig.json file and save:
If some errors occur during the validation step (for example, modern page exists already on the site, etc.) you can manually fix them on the target site or you can go with Force option (overwrite all).
When provisioning is finished you can close the window.
- Alternatively way to start deployment - run deployment script clicking on 'skybow.Provisioning.Console.exe' in Binaries -> SP2019 folder.
Deployment logs you can find in the folder 'Logs' in the Server Installation Package folder.
Update Deployment
If you make some changes to your solution after the initial deployment, you have to create a new package and then select the Deployment definitions in the Publish tab in solution studio. Chose deployment definition and click on the Update button to open the wizard that guides you through updating a service.
Additionally, you can configure different deployment configurations for Initial and Update deployments when updating skybow App registration. This means every new deployment on this service will use configuration from Initial deployments, while every update will use the configuration from the Update deployments.
This will not automatically update any deployments. To update solution deployment you need download new App .zip file with new version of the package to the SharePoint On-Premises local environment and run install.ps1.
Limitations (what is not supported in SP2019/SE)
-
Fields:
- Location
- Image
- skybow Data Lookup - Microsoft Teams/Microsoft Graph Connector source is not supported in SP2019/SE Actions:
- Convert to PDF
- Send email
Note: during deployment Send email action will work as Send internal email. The following options: Attachments, Show before send, Save to sent items will not work on the deployment (deployed server environment).
- Move Document/Copy document/Copy folder
- Start Power Automate / Azure Function
- Add site to Favorite
- Create shared link
- Invite guest user
- Set folder color
More information about available/supported actions you can see in the table below.Icons for actions:
Note: Some icons that are available on SharePoint Online, are not supported in SharePoint 2019. During choosing the icon for the actions (List Actions, Automation actions) make sure it is supported in SharePoint 2019.Site navigation orientation option;
Translations of navigation and pages (Site Settings → Language Settings → 'Enable translation into multiple languages' option). Read more here
- "New" button to the library control with support for creating Microsoft Office files - not supported in SP2019, SE
- Folder colors in sublibrary on the Modern Forms.
Column formatting:
Different versions of SharePoint support different expression formats. SharePoint Online, SE supports only Excel-style expressions format and SharePoint 2019 support only AST(Abstract Syntax Tree) expression format. In a case column formatting was configured by using AST(Abstract Syntax Tree) will not work on the target SharePoint 2019 site. To avoid any unproper work on the deployment environment It is recommended to use on the source solution AST(Abstract Syntax Tree) expression format for the column formatting that is supported in SharePoint 2019.
Difference between Excel style expressions and Abstract Syntax Tree (AST) expressions:
SharePoint Online vs. SharePoint 2019:
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"attributes": {
"class": "=if(@currentField == 'Done', 'sp-field-severity--good', if(@currentField == 'In progress', 'sp-field-severity--low', if(@currentField == 'In review', 'sp-field-severity--warning', if(@currentField == 'Has issues', 'sp-field-severity--severeWarning', 'sp-field-severity--blocked')))) + ' ms-fontColor-neutralSecondary'"
},
"children": [
{
"elmType": "span",
"style": {
"display": "inline-block",
"padding": "0 4px"
},
"attributes": {
"iconName": "=if(@currentField == 'Done', 'CheckMark', if(@currentField == 'In progress', 'Forward', if(@currentField == 'In review', 'Error', if(@currentField == 'Has issues', 'Warning', 'ErrorBadge'))))"
}
},
{
"elmType": "span",
"txtContent": "@currentField"
}
]
}SharePoint 2019:
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
"elmType": "div",
"attributes": {
"class": {
"operator": "+",
"operands": [
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"Done"
]
},
"sp-field-severity--good",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"N/A"
]
},
"sp-field-severity--low",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"In Progress"
]
},
"sp-field-severity--warning",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"Not Started"
]
},
"sp-field-severity--severeWarning",
"sp-field-severity--blocked"
]
}
]
}
]
}
]
},
" ms-fontColor-neutralSecondary"
]
}
},
"children": [
{
"elmType": "span",
"style": {
"display": "inline-block",
"padding": "0 4px"
},
"attributes": {
"iconName": {
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"Green"
]
},
"CheckMark",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"N/A"
]
},
"Forward",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"Yellow"
]
},
"Error",
{
"operator": "?",
"operands": [
{
"operator": "==",
"operands": [
"@currentField",
"Red"
]
},
"Warning",
"ErrorBadge"
]
}
]
}
]
}
]
}
}
},
{
"elmType": "span",
"txtContent": "@currentField"
}
]
}Modern Pages:
Note: Some web parts are not supported in SharePoint 2019, SE, some web parts may not work properly after the deployment. (if web part is not supported in SharePoint On-premises local environment, after publishing these web parts can be broken/empty/work unproperly.):
- Event web part. Note: in SharePoint Online event web part support several options for the event list source, in SharePoint 2019 the source can be only Events list on the current site.
- Quick links - alternative you can use Automation actions instead.-
List Settings:
- Disable Quick Edit
- Disable Comments
- Opening Behavior -
Site Settings:
- Site Header
- Site Footer
- Search settings
- Sharing settings Expresions Builder (Placeholders)
- [[@User.IsMemberOfGroup('Type existing SharePoint group name', checkNestedAzureADGroups)]] - checkNestedAzureADGroups is ignored in SharePoint Server 2019 / SE. To check recursive nested AD domain groups the option 'Who can view the membership of the group' option is set to 'Group members' for the target SharePoint group.
- [[@User.IsMemberOfAADGroup]]
| Actions | Supported in SharePoint Online Solution Studio | Supporting in SharePoint Server 2019/SE | ||||
Modern Forms |
Page/List Actions |
SA/TA |
Modern |
Page/List Actions |
SA/TA |
|
| Control | ||||||
| Condition | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Loop: apply to each | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Scope | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Form | ||||||
| Close form | ✓ |
- |
- |
✓ |
- |
- |
| Execute script | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Expand/Collapse section | ✓ |
- |
- |
✓ |
- |
- |
| Redirect to tab | ✓ |
- |
- |
✓ |
- |
- |
| Refresh Rich Text controls | ✓ |
- |
- |
✓ |
- |
- |
| Save form | ✓ |
- |
- |
✓ |
- |
- |
| Set field value | ✓ |
- |
- |
✓ |
- |
- |
| HTTP | ||||||
| Send HTTP request | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Navigation | ||||||
| Open form | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Open web page | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Reload | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Notifications | ||||||
| Hide message | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Send email | ✓ |
✓ |
✓ |
✓* |
||
| Show a message | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Office file | ||||||
| Generate Word document | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Merge Word documents | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Convert to PDF | ✓ |
✓ |
✓ |
- |
- |
- |
| Insert image to PDF | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Insert Rich Text to PDF | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| QR Code | ||||||
| Generate QR Code | - |
- |
✓ |
- |
- |
✓ |
| Security | ||||||
| Add item permissions | - |
- | ✓ |
- |
- |
✓ |
| Break item permission inheritance | - |
- |
✓ |
- |
- |
✓ |
| Reset/Inherit item permissions | - |
- |
✓ |
- |
- |
✓ |
| SharePoint | ||||||
| Add list item | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Add domains to HTML field security | - |
- |
✓ |
- |
- |
✓ |
| Add members to SharePoint group | - |
- |
✓ |
- |
- |
✓ |
| Add site to favorite | ✓ |
✓ |
- |
- |
||
| Add users to site | - |
- |
✓ |
- |
||
| Copy document | ✓ |
✓ |
✓ |
- |
- |
- |
| Copy folder | ✓ |
✓ |
✓ |
- |
- |
- |
| Create new folder | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Create shared link | ✓ |
✓ |
✓ |
- |
||
| Delete item | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Extract zip file | - |
- |
✓ |
- |
- |
✓ |
| Get items | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Get image data | - |
- |
✓ |
- |
- |
✓ |
| Get user's SharePoint groups | - |
- |
✓ |
- |
- |
✓ |
| Get user profile | - |
- |
✓ |
- |
- |
✓ |
| Move document | ✓ |
✓ |
✓ |
- |
- |
- |
| Set folder color | ✓ |
✓ |
✓ |
- |
- |
- |
| Start Power Automate / Azure Function | ✓ |
✓ |
✓ |
- |
||
| Stop sharing item | - |
- |
✓ |
- |
- |
✓ |
| Store file | - |
- |
✓ |
- |
- |
✓ |
| Start workflow | ✓ |
✓ |
- |
✓ |
✓ |
- |
| Update item | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| Update sharing settings | - |
- |
✓ |
- |
- |
✓ |
| Upload document | ✓ |
✓ |
- |
✓ |
✓ |
✓ |
| Variable | ||||||
| Set variable | ✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| M365 Actions | ||||||
| Compliance | - |
- |
✓ |
- |
||
| Groups and users | - |
- |
✓ |
- |
||
| Planner | - |
- |
✓ |
- |
||
| Teams | - |
- |
✓ |
- |
||