Create your own activity
Concept
In zervicepoint you can have your own PowerShell or C# functions executed in the workflow or in the webform.
There are four types of functions that are written:
System | Type | Comment |
---|---|---|
Form | Web Service | Function used for the purpose of looking up data dynamically in the form with javascript. |
Form | Data Source (DropDown) | Used to dynamically populate a DropDown, Checkbox |
Form | Data Source (Table) | Used for zervicepoint tables - Must return a PSObject |
Workflow | Activity | Must return a hashtable - any Key in the hashtable that matches the name of an assign variable in the process, will be stored in the running workflow and can be used as input/output to another activity/form. |
This is done by two zervicepoint components:
- ProvisioningSystem - This service will run and inventory which available functions you can use in your service.
- ClientWebService/ProvisioningSystemInventory - ClientWebService will run functions for the webform. ProvisioningSystemInventory will inventory them.
Providers
These are the providers available for your processes. Providers are functions in PowerShell scripts that are inventoried by the ZervicePoint Windows services.
Data sources
These are the data sources available for your forms and dynamic drop-down lists. Data sources are functions in PowerShell scripts that are inventoried by the ZervicePoint Windows services.
Quickstart
In order to create our own activity, we will need to create the following on the provisioningsystem server.
- A PowerShell Module
- A plugin xml file (pluginname.provisioningsystem.provider.xml)
Create a zervicepoint plugin in PowerShell
Start PowerShell (run as admin)
Create the following folder structure
C:\Plugin
C:\Plugin\ZPDocs\Activites
C:\Plugin\ZPDocs\Activites\Activity.ZPDocs
To quickly create the structure above you can run the following powershell commands
New-Item -ItemType Directory -Path 'C:\Plugin\ZPDocs\Activities\Activity.ZPDocs'
Create PowerShell Module Manifest
New-ModuleManifest -Path C:\Plugin\ZPDocs\Activities\Activity.ZPDocs\Activity.ZPDocs.psd1 `
-RootModule "Activity.ZPDocs.psm1" `
-FileList @("Activity.ZPDocs.psd1","Activity.ZPDocs.psm1") `
-PowerShellVersion 3.0
Write function to PowerShell Module
Copy the function and insert it into the .psm1 file
$psm1 = @"
function Get-DayOfWeek {
@{
DayOfWeek = (Get-Date).DayOfWeek.ToString()
}
}
"@
$psm1 | Out-File 'C:\Plugin\ZPDocs\Activities\Activity.ZPDocs\Activity.ZPDocs.psm1' -Encoding UTF8
Create a plugin xml
The provisioningsystem provider xml contain metadata for the plugin, name, scriptpath. It is also possible to extend this file with custom keys that can contain configuration related to the plugin. URLs etc
There are initial two important metadata configurations you will need to update when creating your own plugin.
Enter a name for your plugin. (This name must be unique)
<provider name="Learn zervicepoint">
Update scriptpath. (It should point to the location where the activity modules for your plugin are located)
<add key="scriptpath" value="C:\Plugin\ZPDocs\Activities\" />
Copy and paste the following code in a powershell prompt to create a plugin XML file.
$pluginxml = @"
<?xml version="1.0" encoding="utf-8"?>
<providers>
<provider name="Learn zervicepoint">
<assembly type="Zipper.ZervicePoint.ProvisioningSystem.PowerShellProvider.PowerShellEngine" assemblyFile="C:\Program Files\Zipper\ZervicePoint\ProvisioningSystem\Providers\PowerShell\Zipper.ZervicePoint.ProvisioningSystem.PowerShellProvider.dll" />
<configuration>
<add key="scriptpath" value="C:\Plugin\ZPDocs\Activities\" />
</configuration>
</provider>
</providers>
"@
$pluginxml | Out-File 'C:\Program Files\Zipper\ZervicePoint\ProvisioningSystem\ZPDocs.provisioningsystem.providers.xml' -Encoding UTF8
Trigger Inventory
To inventory new activties, you can choose one of the following methods.
Restart-Service -Name ProvisioningSystem
Search for function in Providers page (AdminWeb). If not found - add instructions on how to troubleshoot.
Now that the activity is inventoried, you can use it in your workflow.