@optimajet/workflow-designer-angular
Version:
Angular Designer for Workflow Engine
157 lines (118 loc) • 6.96 kB
Markdown
# WorkflowEngine Designer for Angular Package
## Introduction
WorkflowEngine Designer for Angular is a library developed to facilitate the use of this component. It provides a convenient way to interact and create the Workflow Designer on your web page using Angular.
## Prerequisites
To run the example below, you should create the WorkflowEngine backend capable of handling requests from the Workflow Designer.
## Get Started
##### 1. Create a new project
```shell
ng new workflow-designer-angular-sample
cd workflow-designer-angular-sample
```
##### 2. Install the package
```shell
npm install /workflow-designer-angular
```
##### 3. Create Angular component
The content of `app.component.ts` looks like this:
```typescript
import { Component } from '@angular/core';
import { WorkflowDesignerComponent } from '@optimajet/workflow-designer-angular';
export class AppComponent {
schemeCode = '<YOUR_SCHEME_CODE_VALUE>';
processId = '';
designerConfig = {
apiurl: '<YOUR_API_URL_VALUE>',
templatefolder: '/templates/',
widthDiff: 0,
heightDiff: 0
};
}
```
This code imports the WorkflowDesigner component for use in the markup code, and also sets the necessary parameters for passing them to the WorkflowDesigner component, namely:
- `schemeCode` - is the code for the Workflow diagram to be displayed in the Workflow Designer.
- `processId` - is the identifier of the WorkflowEngine process.
- `designerConfig` - are the direct settings for the Designer indicating all the necessary parameters, namely: the HTTP address of the WorkflowAPI for interacting with the server side of the application (`apiurl`), the difference between the total page width and the width available for the WorkflowDesigner (`widthDiff`), and the difference between the total page height and the height available for the WorkflowDesigner (`heightDiff`) to display the WorkflowDesigner window. For a more detailed list of the parameters, see the **Designer** section of the documentation page about the WorkflowEngine.
> **NOTE:** Be careful with the case of the characters when specifying the parameters. For example: `apiUrl` and `apiurl` are two completely different values.
If you want to display the Workflow scheme in the Workflow Designer interface, set the required value to the `schemecode` variable, and assign the empty string to the `processId`. In case you want to display the Workflow process, assign the empty string to the `schemecode`, and the required value to the `processId` variable of the WorkflowEngine process identifier.
Then, paste the following code into the `src/app/app.component.html` file:
```html
<workflow-designer
[schemeCode]="schemeCode"
[processId]="processId"
[designerConfig]="designerConfig"
></workflow-designer>
```
Here the WorkflowDesigner is drawn and its parameters, specified in the `src/app/app.component.ts` file, are initialized.
And finally, all that remains is to edit the `src/app/app.module.ts` file as follows:
```typescript
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { WorkflowDesignerModule } from '@optimajet/workflow-designer-angular';
export class AppModule { }
```
Here you just need to add the `WorkflowDesignerModule` initialization, and join it to the parameters of the application module.
## How to Call WorkflowDesigner Functions inside Angular Component
The ` /workflow-designer-angular` component is a wrapper over the usual WorkflowDesigner. Some of the most commonly used methods are wrapped in the ` /workflow-designer-angular` component for convenience. To use them, do the following:
1. Import the `ViewChild` from ` /core` into your component, create a class variable using the ` ` decorator (e.g.`this.workflowDesigner`) of the `WorkflowDesignerComponent` type, and set the value `undefined` to it; in the `WorkflowDesigner` component, assign the value of the variable you created to the `ref` parameter:
```javascript
import { Component, ViewChild } from '@angular/core';
import { WorkflowDesignerComponent } from '@optimajet/workflow-designer-angular';
export class AppComponent {
workflowDesignerParameters = {
schemeCode: '<YOUR_SCHEME_CODE_VALUE>',
processId: '',
designerConfig: {
name: 'wfdesigner',
apiurl: '<YOUR_API_URL_VALUE>',
widthDiff: 0,
heightDiff: 0
}
};
workflowDesigner?: WorkflowDesignerComponent = undefined;
yourWorkflowFunction() {
// Your code here...
}
}
```
2. Now you can use the methods of the `WorkflowDesigner` component directly in your component:
```javascript
yourWorkflowFunction() {
this.workflowDesigner.methodName();
}
```
A complete list of the methods available for use from the `WorkflowDesigner` component is given below:
| Method Name | Description |
| ------------------------------------ | ------------------------------------------------------------ |
| clearScheme() | Clears the designer, equivalent of creating empty scheme design |
| getDesignerErrors() | Get Workflow Designer Errors<br/>**Returns** Errors in Workflow Designer |
| save(successCallback, errorCallback) | Save Workflow scheme<br/>**successCallback** Function which will be executed if save was successful<br/>**errorCallback** Function which will be executed if save operation failed |
| downloadScheme() | Download XML file with Workflow Scheme description |
| upload(uploadType, callback) | Upload BPMN or XML file.<br>**uploadType** Upload type, can be 'scheme' or 'bpmn'<br/>**callback** Function that will be executed after uploading file |
| isSchemeExist() | Check for scheme existence by the scheme code from props. <br>**Returns** {boolean} If scheme exists true, otherwise, false |
| isProcessExist() | Check for process existence by scheme code and process id given in props. <br>**Returns** {boolean} If process exists true, otherwise, false |
| refresh() | Refresh data in WorkflowDesigner |
In case you want some methods that are not presented in this table, use the WorkflowDesigner and call its methods directly without wrappers, for example:
```js
this.workflowDesigner.innerDesigner.methodName();
```