@simitgroup/simpleapp-generator 1.1.15 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/buildinschemas/index.d.ts +0 -1
- package/dist/buildinschemas/index.d.ts.map +1 -1
- package/dist/buildinschemas/index.js +2 -3
- package/dist/buildinschemas/index.js.map +1 -1
- package/dist/framework.js +2 -2
- package/dist/framework.js.map +1 -1
- package/dist/processors/bpmnbuilder.d.ts.map +1 -1
- package/dist/processors/bpmnbuilder.js +56 -42
- package/dist/processors/bpmnbuilder.js.map +1 -1
- package/docs/bpmn.md +187 -0
- package/docs/images/samplebpmn.jpg +0 -0
- package/package.json +1 -1
- package/src/buildinschemas/index.ts +1 -1
- package/src/framework.ts +2 -2
- package/src/processors/bpmnbuilder.ts +60 -42
- package/templates/basic/nest/controller.ts.eta +2 -1
- package/templates/basic/nest/service.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/commons/user.context.ts.eta +31 -6
- package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +59 -43
- package/templates/nest/src/simpleapp/generate/workflow/workflow.delegate.ts.eta +80 -43
- package/templates/nest/src/simpleapp/generate/workflow/workflow.service.ts.eta +131 -11
- package/templates/nest/src/simpleapp/generate/workflow/workflow.type.ts.eta +39 -0
- package/templates/nest/src/simpleapp/generate/workflow/workflow.userservice.ts.eta +77 -0
- package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +5 -4
- package/templates/nest/src/simpleapp/workflows/{delegates/simpleapp.delegate.ts._eta → listeners/simpleapp.listener.ts._eta} +1 -1
- package/templates/nuxt/components/event/{EventDecision.vue.eta → EventDecision.vue._eta} +1 -1
- package/templates/nuxt/components/event/{EventDocumentViewer.vue.eta → EventDocumentViewer.vue._eta} +6 -0
- package/templates/nuxt/components/event/{EventNotification.vue.eta → EventNotification.vue._eta} +1 -1
- package/templates/nuxt/plugins/20.simpleapp-userstore.ts.eta +4 -2
- package/templates/nuxt/simpleapp/generate/commons/documents.ts.eta +1 -2
- package/templates/nuxt/types/others.ts.eta +1 -2
- package/templates/project/jsonschemas/user.json._eta +72 -0
- package/templates/project/workflows/bpmn/suspendcustomer.bpmn._eta +38 -19
- package/templates/project/workflows/forms/index.ts._eta +2 -0
- package/templates/project/workflows/forms/simpleapprove.jsonschema.ts._eta +8 -0
- package/templates/workflow/next/listener.ts.eta +76 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/templates/workflow/next/delegate.ts.eta +0 -31
- /package/templates/nest/src/simpleapp/services/{user.service.ts.eta → user.service.ts.etax} +0 -0
- /package/templates/nuxt/pages/[xorg]/user/{[id].vue.eta → [id].vue._eta} +0 -0
- /package/templates/nuxt/pages/[xorg]/user/{index.vue.eta → index.vue._eta} +0 -0
- /package/templates/nuxt/pages/[xorg]/{user.vue.eta → user.vue._eta} +0 -0
- /package/templates/{project/workflows/forms/index.ts.eta → nuxt/simpleapp/workflows/forms/index.ts._eta} +0 -0
- /package/templates/{project/workflows/forms/simpleapprove.jsonschema.ts.eta → nuxt/simpleapp/workflows/forms/simpleapprove.jsonschema.ts._eta} +0 -0
package/README.md
CHANGED
|
@@ -20,14 +20,19 @@ SimpleApp generator is a typescript code generator for convert jsonschemas becom
|
|
|
20
20
|
e. openapi interface [x]
|
|
21
21
|
f. pdf document []
|
|
22
22
|
g. document uploads[]
|
|
23
|
-
|
|
23
|
+
8. BPMN workflow integration
|
|
24
|
+
a. streamline business flow with BPMN
|
|
25
|
+
b. implement philosophy of bpmn documentation is source code
|
|
26
|
+
c. fill in minimal source code in generated listener to run whole bpmn process
|
|
27
|
+
d. build in integrate between both frontend and backend
|
|
28
|
+
e. declare workflow in jsonschema
|
|
24
29
|
|
|
25
30
|
# Documentation
|
|
26
31
|
1. [jsonschemas](./docs/jsonschema.md)
|
|
27
32
|
2. [backend walk through](./docs/backend.md)
|
|
28
33
|
3. [frontend walk through](./docs/frontend.md)
|
|
29
34
|
4. [End to End test](./docs/test.md)
|
|
30
|
-
|
|
35
|
+
5. [BPMN walk through](./docs/bpmn.md)
|
|
31
36
|
|
|
32
37
|
# Quick start
|
|
33
38
|
1. Simpleapp implement database transaction, and require mongodb cluster, below setup 3 nodes
|
|
@@ -2,7 +2,6 @@ export { tenant } from './tenant';
|
|
|
2
2
|
export { organization } from './organization';
|
|
3
3
|
export { branch } from './branch';
|
|
4
4
|
export { permission } from './permission';
|
|
5
|
-
export { user } from './user';
|
|
6
5
|
export { autoincreament } from './autoincreament';
|
|
7
6
|
export { docnoformat } from './docnoformat';
|
|
8
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/buildinschemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/buildinschemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.docnoformat = exports.autoincreament = exports.
|
|
3
|
+
exports.docnoformat = exports.autoincreament = exports.permission = exports.branch = exports.organization = exports.tenant = void 0;
|
|
4
4
|
var tenant_1 = require("./tenant");
|
|
5
5
|
Object.defineProperty(exports, "tenant", { enumerable: true, get: function () { return tenant_1.tenant; } });
|
|
6
6
|
var organization_1 = require("./organization");
|
|
@@ -9,8 +9,7 @@ var branch_1 = require("./branch");
|
|
|
9
9
|
Object.defineProperty(exports, "branch", { enumerable: true, get: function () { return branch_1.branch; } });
|
|
10
10
|
var permission_1 = require("./permission");
|
|
11
11
|
Object.defineProperty(exports, "permission", { enumerable: true, get: function () { return permission_1.permission; } });
|
|
12
|
-
|
|
13
|
-
Object.defineProperty(exports, "user", { enumerable: true, get: function () { return user_1.user; } });
|
|
12
|
+
// export {user} from './user'
|
|
14
13
|
var autoincreament_1 = require("./autoincreament");
|
|
15
14
|
Object.defineProperty(exports, "autoincreament", { enumerable: true, get: function () { return autoincreament_1.autoincreament; } });
|
|
16
15
|
var docnoformat_1 = require("./docnoformat");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/buildinschemas/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAAvB,gGAAA,MAAM,OAAA;AACd,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,mCAA+B;AAAvB,gGAAA,MAAM,OAAA;AACd,2CAAuC;AAA/B,wGAAA,UAAU,OAAA;AAClB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/buildinschemas/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAAvB,gGAAA,MAAM,OAAA;AACd,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,mCAA+B;AAAvB,gGAAA,MAAM,OAAA;AACd,2CAAuC;AAA/B,wGAAA,UAAU,OAAA;AAClB,8BAA8B;AAC9B,mDAA+C;AAAvC,gHAAA,cAAc,OAAA;AACtB,6CAAyC;AAAjC,0GAAA,WAAW,OAAA"}
|
package/dist/framework.js
CHANGED
|
@@ -40,7 +40,7 @@ let config = {
|
|
|
40
40
|
"backendFolder": "./backend",
|
|
41
41
|
"groupFolder": "./groups",
|
|
42
42
|
"backendPort": "8000",
|
|
43
|
-
"mongoConnectStr": 'mongodb://
|
|
43
|
+
"mongoConnectStr": 'mongodb://127.0.0.1:27017/simpleapp',
|
|
44
44
|
"mongoDbName": 'simpleapp',
|
|
45
45
|
"frontendFolder": "./frontend",
|
|
46
46
|
"frontendPort": "8080",
|
|
@@ -98,7 +98,7 @@ const prepareNest = (callback) => {
|
|
|
98
98
|
const targetfolder = config.backendFolder;
|
|
99
99
|
log.info(`creating backend project ${targetfolder}`);
|
|
100
100
|
if (!fs_1.default.existsSync(`${targetfolder}/.env`)) {
|
|
101
|
-
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save @nestjs/event-emitter bpmn-server moment @casl/ability jsonpath yaml lodash @types/lodash nest-keycloak-connect keycloak-connect bpmn-client @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`, async (error, stdout, stderr) => {
|
|
101
|
+
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save @nestjs/event-emitter dayjs bpmn-server@2.0.6-alpha2 moment @casl/ability jsonpath yaml lodash @types/lodash nest-keycloak-connect keycloak-connect bpmn-client @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`, async (error, stdout, stderr) => {
|
|
102
102
|
// log.info(`dependency installed`)
|
|
103
103
|
if (!error) {
|
|
104
104
|
// fs.mkdirSync(`${targetfolder}/public_html`,{recursive:true})
|
package/dist/framework.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA0E;AAC1E,iDAAwC;AACxC,oDAAsB;AACtB,iCAAwC;AACxC,sDAAuC;AACvC,6BAA0B;AAC1B,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAE1C,IAAI,MAAM,GAAG;IACT,kBAAkB,EAAC,eAAe;IAClC,YAAY,EAAC,EAAE;IACf,eAAe,EAAC,WAAW;IAC3B,aAAa,EAAC,UAAU;IACxB,aAAa,EAAC,MAAM;IACpB,iBAAiB,EAAC,
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bpmnbuilder.d.ts","sourceRoot":"","sources":["../../src/processors/bpmnbuilder.ts"],"names":[],"mappings":"AASA,eAAO,MAAO,iBAAiB,yBAAyB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"bpmnbuilder.d.ts","sourceRoot":"","sources":["../../src/processors/bpmnbuilder.ts"],"names":[],"mappings":"AASA,eAAO,MAAO,iBAAiB,yBAAyB,MAAM,EAAE,sBAgJ7D,CAAA"}
|
|
@@ -31,13 +31,12 @@ const tslog_1 = require("tslog");
|
|
|
31
31
|
const libs_1 = require("./../libs");
|
|
32
32
|
const fs_1 = require("fs");
|
|
33
33
|
const bpmn_moddle_1 = __importDefault(require("bpmn-moddle"));
|
|
34
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
35
34
|
const constants = __importStar(require("../constant"));
|
|
36
35
|
const camunda_moodle_1 = require("../resource/camunda-moodle");
|
|
37
36
|
const log = new tslog_1.Logger();
|
|
38
37
|
const { Eta } = require('eta');
|
|
39
38
|
const generateWorkflows = async (configs, genFor) => {
|
|
40
|
-
const
|
|
39
|
+
const invalidElementId = /[ `!@#$%^&*()+\-=\[\]{};':"\\|,.<>\/?~]/;
|
|
41
40
|
const moddle = new bpmn_moddle_1.default({ moddleOptions: camunda_moodle_1.moddleOptions });
|
|
42
41
|
const frontendFolder = configs.frontendFolder;
|
|
43
42
|
const backendFolder = configs.backendFolder;
|
|
@@ -48,7 +47,7 @@ const generateWorkflows = async (configs, genFor) => {
|
|
|
48
47
|
let workflows = [];
|
|
49
48
|
if (genFor.includes('nest')) {
|
|
50
49
|
(0, fs_1.mkdirSync)(`${backendFolder}/src/simpleapp/workflows/bpmn`, { recursive: true });
|
|
51
|
-
(0, fs_1.mkdirSync)(`${backendFolder}/src/simpleapp/workflows/
|
|
50
|
+
(0, fs_1.mkdirSync)(`${backendFolder}/src/simpleapp/workflows/listeners`, { recursive: true });
|
|
52
51
|
}
|
|
53
52
|
if (genFor.includes('nuxt')) {
|
|
54
53
|
(0, fs_1.mkdirSync)(`${frontendFolder}/simpleapp/workflows/bpmn`, { recursive: true });
|
|
@@ -64,60 +63,75 @@ const generateWorkflows = async (configs, genFor) => {
|
|
|
64
63
|
const processName = bpmnfile.split('.')[0];
|
|
65
64
|
const xmlstring = (0, fs_1.readFileSync)(`${bpmnfilepath}`, 'utf-8');
|
|
66
65
|
const xmlobj = await moddle.fromXML(xmlstring);
|
|
67
|
-
const
|
|
68
|
-
let
|
|
69
|
-
for (let i = 0; i <
|
|
70
|
-
const e =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
console.log("Element user task type", e.$type, ", id:", e.id, setting);
|
|
89
|
-
break;
|
|
90
|
-
case 'bpmn:ServiceTask':
|
|
91
|
-
console.log("Element service type", e.$type, ", id:", e.id);
|
|
92
|
-
if (!invalidDelegate.test(e.delegateExpression)) {
|
|
93
|
-
delegates.push(e.delegateExpression);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
log.error(`bpmn File : ${bpmnfile} -> ServiceTask(${e.name}/${e.id}) defined invalid symbol in delegate Expression: "${e.delegateExpression}"`);
|
|
97
|
-
throw "quite";
|
|
98
|
-
}
|
|
99
|
-
break;
|
|
66
|
+
const flowElements = xmlobj.rootElement.rootElements[0].flowElements;
|
|
67
|
+
let elements = [];
|
|
68
|
+
for (let i = 0; i < flowElements.length; i++) {
|
|
69
|
+
const e = flowElements[i];
|
|
70
|
+
console.log("-------element = ", e);
|
|
71
|
+
if (['bpmn:UserTask', 'bpmn:ServiceTask'].includes(e.$type)) {
|
|
72
|
+
if (invalidElementId.test(e.id)) {
|
|
73
|
+
log.error(`bpmn File : ${bpmnfile} -> Task(${e.name} defined invalid symbol in id:"${e.id}"`);
|
|
74
|
+
throw "quite";
|
|
75
|
+
}
|
|
76
|
+
const setting = {
|
|
77
|
+
type: e.$type,
|
|
78
|
+
id: e.id,
|
|
79
|
+
name: e.name,
|
|
80
|
+
documentation: (e.documentation[0] && e.documentation[0].text ? e.documentation[0].text : '').replace("\n", "\n *")
|
|
81
|
+
};
|
|
82
|
+
elements.push(setting);
|
|
100
83
|
}
|
|
84
|
+
// switch(e.$type){
|
|
85
|
+
// case 'bpmn:UserTask':
|
|
86
|
+
// const usertasksetting = e.get('extensionElements')
|
|
87
|
+
// // if(setting && setting.values){
|
|
88
|
+
// // for(let j=0;j<setting.values.length;j++){
|
|
89
|
+
// // const s = setting.values[j]
|
|
90
|
+
// // if(s.$type=='camunda:taskListener'){
|
|
91
|
+
// // if(!invalidDelegate.test(s.delegateExpression)){
|
|
92
|
+
// // delegates.push(s.delegateExpression)
|
|
93
|
+
// // }else{
|
|
94
|
+
// // log.error(`bpmn File : ${bpmnfile} -> UserTask(${s.name}/${s.id}) defined invalid symbol in delegate Expression: "${s.delegateExpression}"`);
|
|
95
|
+
// // throw "quite"
|
|
96
|
+
// // }
|
|
97
|
+
// // }
|
|
98
|
+
// // }
|
|
99
|
+
// // }
|
|
100
|
+
// console.log("Element user task type", e.$type, ", id:",e.id)
|
|
101
|
+
// break;
|
|
102
|
+
// case 'bpmn:ServiceTask':
|
|
103
|
+
// console.log("Element service type", e.$type, ", id:",e.id)
|
|
104
|
+
// const servicetasksetting = e.get('extensionElements')
|
|
105
|
+
// elements.push(servicetasksetting)
|
|
106
|
+
// // if(!invalidDelegate.test(e.delegateExpression)){
|
|
107
|
+
// // delegates.push(e.delegateExpression)
|
|
108
|
+
// // }else{
|
|
109
|
+
// // log.error(`bpmn File : ${bpmnfile} -> ServiceTask(${e.name}/${e.id}) defined invalid symbol in delegate Expression: "${e.delegateExpression}"`);
|
|
110
|
+
// // throw "quite"
|
|
111
|
+
// // }
|
|
112
|
+
// break;
|
|
113
|
+
// }
|
|
101
114
|
}
|
|
102
|
-
delegates =
|
|
115
|
+
// delegates = _.uniq(delegates)
|
|
103
116
|
const variables = {
|
|
117
|
+
name: processName,
|
|
104
118
|
processName: (0, libs_1.capitalizeFirstLetter)(processName),
|
|
105
|
-
|
|
119
|
+
elements: elements
|
|
106
120
|
};
|
|
107
121
|
// console.log("sample--------sample",xmlobj.rootElement.rootElements[0].name, )
|
|
108
122
|
//copy workflow definition file to frontend and backend
|
|
109
123
|
if (genFor.includes('nest')) {
|
|
110
124
|
(0, fs_1.copyFileSync)(`${bpmnfilepath}`, `${backendFolder}/src/simpleapp/workflows/bpmn/${bpmnfile}`);
|
|
111
|
-
const
|
|
125
|
+
const targetlistener = `${backendFolder}/src/simpleapp/workflows/listeners/${processName}.listener.ts`;
|
|
112
126
|
const eta = new Eta({
|
|
113
127
|
views: '/',
|
|
114
128
|
functionHeader: getCodeGenHelper()
|
|
115
129
|
});
|
|
116
|
-
if (!(0, fs_1.existsSync)(
|
|
130
|
+
if (!(0, fs_1.existsSync)(targetlistener) || (0, fs_1.readFileSync)(targetlistener, 'utf-8').includes('--remove-this-line-to-prevent-override--')) {
|
|
117
131
|
// //write something
|
|
118
|
-
const templatepath = `${generateTemplatefolder}/next/
|
|
132
|
+
const templatepath = `${generateTemplatefolder}/next/listener.ts.eta`;
|
|
119
133
|
const filecontent = eta.render(templatepath, variables);
|
|
120
|
-
(0, fs_1.writeFileSync)(
|
|
134
|
+
(0, fs_1.writeFileSync)(targetlistener, filecontent);
|
|
121
135
|
}
|
|
122
136
|
}
|
|
123
137
|
if (genFor.includes('nuxt')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bpmnbuilder.js","sourceRoot":"","sources":["../../src/processors/bpmnbuilder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAwC;AACxC,oCAAkD;AAClD,2BAAqG;AACrG,8DAAqC;
|
|
1
|
+
{"version":3,"file":"bpmnbuilder.js","sourceRoot":"","sources":["../../src/processors/bpmnbuilder.ts"],"names":[],"mappings":"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"}
|
package/docs/bpmn.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# BPMN Walk Through
|
|
2
|
+
BPMN allow us design complex computer readable business workflow diagram. Beside standard CRUD api, SimpleApp Generator allow flexible workflow by design `bpmn` document and optionally bind to specific `jsonschema` as easy access entry point.
|
|
3
|
+
|
|
4
|
+
At the moment, SimpleApp Generator using [bpmn-server](https://github.com/bpmnServer/bpmn-server) to process bpmn document, and map the business event to specific `document listener` in run time.
|
|
5
|
+
|
|
6
|
+
[bpmn-server](https://github.com/bpmnServer/bpmn-server) is young and may change frequently in future and cause some break of compatibility, but it look promising and allow very tight integration with our backend (nestjs). There is [BPMN Compatibility](#bpmn-compatibility) table
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# Prepare your vscode ide
|
|
10
|
+
We recomend you to install vscode extension `Camunda Modeler` from `Miranium`.
|
|
11
|
+
|
|
12
|
+
# Using BPMN in SimpleApp Project
|
|
13
|
+
Use BPMN in SimpleApp Generator involve below steps:
|
|
14
|
+
1. Write definitions and generate codes
|
|
15
|
+
2. Modify generated source code
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Write definitions and generate codes
|
|
19
|
+
1. Ensure config.json declare bpmn folder,
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
... # others props
|
|
23
|
+
"bpmnFolder": "./workflows/bpmn", # empty will not generate workflow codes
|
|
24
|
+
... # others props
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
2. Create a sample business process definitions file: `project1/workflows/bpmn/suspendcustomer.bpmn`
|
|
29
|
+

|
|
30
|
+
3. (optional) Define alternate api entry point `additionalApis` at existing jsonschema to start the bpmn process.
|
|
31
|
+
```json
|
|
32
|
+
# example customer.json
|
|
33
|
+
{
|
|
34
|
+
"type": "object",
|
|
35
|
+
"x-simpleapp-config": {
|
|
36
|
+
"documentType": "cust",
|
|
37
|
+
"documentName": "customer",
|
|
38
|
+
"uniqueKey": "customerNo",
|
|
39
|
+
"documentTitle": "customerName",
|
|
40
|
+
"generateDocumentNumber": true,
|
|
41
|
+
"isolationType": "org",
|
|
42
|
+
"pageType": "crud",
|
|
43
|
+
"additionalApis":[
|
|
44
|
+
{
|
|
45
|
+
"action":"suspend",
|
|
46
|
+
"entryPoint":":id/suspend",
|
|
47
|
+
"requiredRole":["Customer_update"],
|
|
48
|
+
"method":"patch",
|
|
49
|
+
"workflowSetting":{
|
|
50
|
+
"bpmn":"suspendcustomer"
|
|
51
|
+
},
|
|
52
|
+
"description":"Suspend specific customer (set active=false)"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"properties": {
|
|
57
|
+
"_id": { "type": "string" },
|
|
58
|
+
"created": { "type": "string" },
|
|
59
|
+
"updated": { "type": "string" },
|
|
60
|
+
"createdBy": { "type": "string" },
|
|
61
|
+
"updatedBy": { "type": "string" },
|
|
62
|
+
"tenantId": { "type": "integer", "default": 1 },
|
|
63
|
+
"orgId": { "type": "integer", "default": 1 },
|
|
64
|
+
"branchId": { "type": "integer", "default": 1 },
|
|
65
|
+
"customerNo": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"format": "documentno",
|
|
68
|
+
"examples": ["S0001"]
|
|
69
|
+
},
|
|
70
|
+
"customerName": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"examples": ["Customer 1"],
|
|
73
|
+
"minLength": 3
|
|
74
|
+
},
|
|
75
|
+
"customerStatus": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": ["unknown", "potential", "suspended", "existing"],
|
|
78
|
+
"examples": ["unknown"]
|
|
79
|
+
},
|
|
80
|
+
"email": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"oneOf": [{ "format": "email" }, { "enum": [""] }]
|
|
83
|
+
},
|
|
84
|
+
"tel": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"oneOf": [{ "format": "tel" }, { "enum": [""] }]
|
|
87
|
+
},
|
|
88
|
+
"active": { "type": "boolean", "default": true, "examples": [true] },
|
|
89
|
+
"description": { "type": "string", "format": "text" },
|
|
90
|
+
"docNoFormat": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"x-foreignkey": "docnoformat",
|
|
93
|
+
"properties": {
|
|
94
|
+
"_id": { "type": "string" },
|
|
95
|
+
"label": { "type": "string" }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
4. Generate (or regenerate) backend codes:
|
|
103
|
+
```bash
|
|
104
|
+
sh build.sh updatebackend
|
|
105
|
+
# observe generated code at below path:
|
|
106
|
+
# backend/src/simpleapp/services/cust.service.ts
|
|
107
|
+
# backend/src/simpleapp/workflows/bpmn/suspendcustomer.bpmn.ts
|
|
108
|
+
# backend/src/simpleapp/workflows/listeners/suspendcustomer.listener.ts
|
|
109
|
+
```
|
|
110
|
+
5. restart backend service
|
|
111
|
+
6. regenerate frontend codes (ensure backend regenerated and service restart):
|
|
112
|
+
```sh
|
|
113
|
+
sh build.sh updatefrontend
|
|
114
|
+
```
|
|
115
|
+
7. restart frontend service
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## Modify generated source code
|
|
120
|
+
After source code generated, it add files into frontend and backend:
|
|
121
|
+
### Generated backend workflow files
|
|
122
|
+
1. `./src/simpleapp/workflows/bpmn/suspendcustomer.bpmn`: backend will use the bpmn to spawn workflow process
|
|
123
|
+
2. `./src/simpleapp/workflows/listeners/suspendcustomer.listener.ts`: this file will provide sample code of listen common `usertask` and `servicetask`.
|
|
124
|
+
3. `./src/simpleapp/services/cust.service.ts`: If `customer.json` added additionalApis, after regenerate backend `customer.service.ts` auto created new rest api `runSuspend`, which will route the execution to generate new workflow process `suspendcustomer`.
|
|
125
|
+
|
|
126
|
+
### Generated frontend workflow files
|
|
127
|
+
1. `./simpleapp/workflows/bpmn/suspendcustomer.bpmn`: keep here for reference, frontend can render bpmn ui with this file
|
|
128
|
+
2. `./simpleapp/generate/clients/CustomerClient.ts`: added api entry point `runSuspend`.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Understand Listener Codes
|
|
132
|
+
`./src/simpleapp/workflows/listeners/suspendcustomer.listener.ts` provide sample listener code of below task:
|
|
133
|
+
|
|
134
|
+
#### User Task
|
|
135
|
+
Sample code listen on user task `wait` & `invoke` event. you can add more (support `start,wait,invoke,end,assign`)
|
|
136
|
+
1. `start`: task begin, seldom use
|
|
137
|
+
2. `wait`: workflow suspend and waiting user input. You may send notification to users base on `props:UserTaskData`. To trigger workflow continue we shall call api `workflow/invoke-task/:taskId`
|
|
138
|
+
3. `invoked`: during user invoked process, you will obtain input data from actor. The workflow will go to `end` then move to next task
|
|
139
|
+
4. `end`: when current task completed, before move to next process (seldom use)
|
|
140
|
+
5. `assign`: during trigger when current task properties like assignee, candidateUsers, duedata changed. workflow status remain unchange.
|
|
141
|
+
#### Service Task
|
|
142
|
+
Sample code listen on `start` only, it support `start` and `end`. Event characteristic for `start` & `end` same with User task
|
|
143
|
+
|
|
144
|
+
### Modify Listener Codes
|
|
145
|
+
|
|
146
|
+
1. Remove `* --remove-this-line-to-prevent-override--` from top comment in `./src/simpleapp/workflows/listeners/suspendcustomer.listener.ts`
|
|
147
|
+
2. Put in suspend customer source code by modify the file.
|
|
148
|
+
```ts
|
|
149
|
+
//plenty of import here
|
|
150
|
+
@Injectable()
|
|
151
|
+
export class SuspendcustomerListenerService extends SimpleAppListenerService {
|
|
152
|
+
logger = new Logger();
|
|
153
|
+
constructor() {
|
|
154
|
+
super();
|
|
155
|
+
}
|
|
156
|
+
@OnEvent('suspendcustomer.hello1.start')
|
|
157
|
+
async watch_hello1_start(props: ServiceTaskData) {
|
|
158
|
+
console.log('Running listener suspendcustomer.hello1.start', props);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
to
|
|
163
|
+
```ts
|
|
164
|
+
//plenty of import here
|
|
165
|
+
import { CustomerService } from 'src/simpleapp/services/cust.service'; //import customer service class
|
|
166
|
+
@Injectable()
|
|
167
|
+
export class SuspendcustomerListenerService extends SimpleAppListenerService {
|
|
168
|
+
logger = new Logger();
|
|
169
|
+
constructor(private custService:CustomerService) { //inject custService object
|
|
170
|
+
super();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@OnEvent('suspendcustomer.hello1.start')
|
|
174
|
+
async watch_hello1_start(props: ServiceTaskData) {
|
|
175
|
+
const appuser = this.prepareAppUser(props.data) //obtain user info, and perform data isolation
|
|
176
|
+
const id = props.data._id
|
|
177
|
+
//find existing record and suspend it
|
|
178
|
+
const newdata = await this.custService.findById(appuser,id)
|
|
179
|
+
newdata.active=false
|
|
180
|
+
await this.custService.findIdThenUpdate(appuser,props.data._id,newdata) //save into database
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
# BPMN Compatibility
|
|
186
|
+
| type |status|description|
|
|
187
|
+
|------|------|-----------|
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -2,6 +2,6 @@ export {tenant} from './tenant'
|
|
|
2
2
|
export {organization} from './organization'
|
|
3
3
|
export {branch} from './branch'
|
|
4
4
|
export {permission} from './permission'
|
|
5
|
-
export {user} from './user'
|
|
5
|
+
// export {user} from './user'
|
|
6
6
|
export {autoincreament} from './autoincreament'
|
|
7
7
|
export {docnoformat} from './docnoformat'
|
package/src/framework.ts
CHANGED
|
@@ -12,7 +12,7 @@ let config = {
|
|
|
12
12
|
"backendFolder":"./backend",
|
|
13
13
|
"groupFolder":"./groups",
|
|
14
14
|
"backendPort":"8000",
|
|
15
|
-
"mongoConnectStr":'mongodb://
|
|
15
|
+
"mongoConnectStr":'mongodb://127.0.0.1:27017/simpleapp',
|
|
16
16
|
"mongoDbName":'simpleapp',
|
|
17
17
|
"frontendFolder":"./frontend",
|
|
18
18
|
"frontendPort":"8080",
|
|
@@ -70,7 +70,7 @@ export const prepareNest = (callback:Function)=>{
|
|
|
70
70
|
if(!fs.existsSync(`${targetfolder}/.env`)){
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
exec(`cd ${targetfolder};pnpm install --save @nestjs/event-emitter bpmn-server moment @casl/ability jsonpath yaml lodash @types/lodash nest-keycloak-connect keycloak-connect bpmn-client @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`,async (error, stdout, stderr)=>{
|
|
73
|
+
exec(`cd ${targetfolder};pnpm install --save @nestjs/event-emitter dayjs bpmn-server@2.0.6-alpha2 moment @casl/ability jsonpath yaml lodash @types/lodash nest-keycloak-connect keycloak-connect bpmn-client @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats ajv-errors @nestjs/config`,async (error, stdout, stderr)=>{
|
|
74
74
|
// log.info(`dependency installed`)
|
|
75
75
|
if(!error){
|
|
76
76
|
// fs.mkdirSync(`${targetfolder}/public_html`,{recursive:true})
|