...
Also see this tutorial to learn how to create an app in PIPEFORCE.
...
Typically, all properties (resources) of an app reside in the property store and having a property path with a prefix like this:
...
The path always starts with prefix global/app
, followed by the name of the app <NAME>
, whereas <NAME>
must be a fully qualified, unique name as described below.
Qualified app naming
In order to avoid a naming clash with other apps from other users which could probably have the same naming as your app, as best practise, you should give the app always a name which follows the reversed domain name package conventions from the Java package specification, which works like this:
...
Info |
---|
The internet domain names of your app prefixes must be valid ones if you want your apps to become trusted in the marketplace. |
App folders
Inside of an app path, there is a certain "folder" structure at top app level which defines the main resource types of an app. The typical folder structure looks like this (the folders could vary, depending on your setup):
...
Code Block |
---|
global/app/myApp/object/<NAME>/<VERSION>/schema
|
Whereas <NAME>
is the name of the object.
...
Code Block |
---|
object/person/v1/schema
|
The schema property typically contains as value a JSON schema, which describes this object. For the person object, the schema could, for example, look like this:
Code Block |
---|
{
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"type": "number"
},
"gender": {
"type": "string",
"enum": ["male", "female", "neutral"]
}
}
}
|
See the JSON schema specification for a description how to define JSON schema documents: https://json-schema.org/
...
Code Block |
---|
global/app/myApp/object/<NAME>/<VERSION>/instance/<UUID>
|
Whereas <NAME>
is the name of the object.
...
Code Block |
---|
global/app/myApp/object/person/v1/instance/fa471958-fdb7-4bf6-a0a3-c5e8c782893e
|
Each instance property will contain as value the data of the object instance which matches the object schema, for example:
Code Block |
---|
{
"firstName": "Homer",
"lastName": "Simpson",
"age": 48,
"gender": "male"
}
|
/pipeline
This folder contains all pipeline configurations for the given app. A pipeline can be seen as the business logic part of an application.
...
Code Block |
---|
global/app/myApp/pipeline/informHR
global/app/myApp/pipeline/addToSAP
global/app/myApp/pipeline/addToActiveDirectory
|
Such a pipeline configuration could look like this:
Code Block |
---|
pipeline:
- mail.send:
to: hr@company.de
subject: "A new employee was addded!"
|
/setup
This optional folder can contain pipelines. These pipelines will be executed in case the app will be installed using the app.install
command.
...
Code Block |
---|
global/app/myApp/workflow/approveNewEmployee |
App development
In its simple case you can manage all properties of an app in the property store with the property.*
commands and the CLI using pi pipeline
or using the online workbench.
But if you want to develop complex apps with forms, pipelines or workflows inside, we recommend you to use a local development & customization workspace. This workspace contains the properties of such an app stored as files inside a local folder. Any file created inside this folder can then easily be uploaded to the property store with a single command line call using the CLI. For example:
Code Block |
---|
pi publish
|
This CLI command scans your local folder and uploads only those resources which have been changed since the last upload or have been created since then. See here how to setup the CLI and how to create a local worskspace: Local Low-Code Workspace