cxtms 1.9.13
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 +384 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4784 -0
- package/dist/cli.js.map +1 -0
- package/dist/extractUtils.d.ts +11 -0
- package/dist/extractUtils.d.ts.map +1 -0
- package/dist/extractUtils.js +19 -0
- package/dist/extractUtils.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +129 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/schemaLoader.d.ts +17 -0
- package/dist/utils/schemaLoader.d.ts.map +1 -0
- package/dist/utils/schemaLoader.js +134 -0
- package/dist/utils/schemaLoader.js.map +1 -0
- package/dist/validator.d.ts +72 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +432 -0
- package/dist/validator.js.map +1 -0
- package/dist/workflowValidator.d.ts +103 -0
- package/dist/workflowValidator.d.ts.map +1 -0
- package/dist/workflowValidator.js +753 -0
- package/dist/workflowValidator.js.map +1 -0
- package/package.json +51 -0
- package/schemas/actions/all.json +27 -0
- package/schemas/actions/clipboard.json +46 -0
- package/schemas/actions/confirm.json +21 -0
- package/schemas/actions/consoleLog.json +16 -0
- package/schemas/actions/dialog.json +25 -0
- package/schemas/actions/fileDownload.json +16 -0
- package/schemas/actions/forEach.json +31 -0
- package/schemas/actions/if.json +12 -0
- package/schemas/actions/mutation.json +25 -0
- package/schemas/actions/navigate.json +18 -0
- package/schemas/actions/navigateBack.json +22 -0
- package/schemas/actions/navigateBackOrClose.json +21 -0
- package/schemas/actions/notification.json +19 -0
- package/schemas/actions/openBarcodeScanner.json +104 -0
- package/schemas/actions/query.json +32 -0
- package/schemas/actions/refresh.json +13 -0
- package/schemas/actions/resetDirtyState.json +22 -0
- package/schemas/actions/setFields.json +21 -0
- package/schemas/actions/setStore.json +13 -0
- package/schemas/actions/validateForm.json +15 -0
- package/schemas/actions/workflow.json +24 -0
- package/schemas/components/README.md +147 -0
- package/schemas/components/appComponent.json +58 -0
- package/schemas/components/barcodeScanner.json +69 -0
- package/schemas/components/button.json +123 -0
- package/schemas/components/calendar.json +489 -0
- package/schemas/components/card.json +176 -0
- package/schemas/components/collection.json +54 -0
- package/schemas/components/dataGrid.json +119 -0
- package/schemas/components/datasource.json +151 -0
- package/schemas/components/dropdown.json +57 -0
- package/schemas/components/field-collection.json +618 -0
- package/schemas/components/field.json +265 -0
- package/schemas/components/form.json +234 -0
- package/schemas/components/index.json +71 -0
- package/schemas/components/layout.json +69 -0
- package/schemas/components/module.json +167 -0
- package/schemas/components/navDropdown.json +36 -0
- package/schemas/components/navbar.json +78 -0
- package/schemas/components/navbarItem.json +28 -0
- package/schemas/components/navbarLink.json +36 -0
- package/schemas/components/row.json +31 -0
- package/schemas/components/slot.json +30 -0
- package/schemas/components/tab.json +34 -0
- package/schemas/components/tabs.json +35 -0
- package/schemas/components/timeline.json +172 -0
- package/schemas/components/timelineGrid.json +328 -0
- package/schemas/fields/README.md +66 -0
- package/schemas/fields/attachment.json +156 -0
- package/schemas/fields/autocomplete-googleplaces.json +130 -0
- package/schemas/fields/checkbox.json +82 -0
- package/schemas/fields/date.json +88 -0
- package/schemas/fields/datetime.json +75 -0
- package/schemas/fields/email.json +75 -0
- package/schemas/fields/index.json +53 -0
- package/schemas/fields/number.json +91 -0
- package/schemas/fields/password.json +70 -0
- package/schemas/fields/radio.json +94 -0
- package/schemas/fields/rangedatetime.json +56 -0
- package/schemas/fields/select-async.json +334 -0
- package/schemas/fields/select.json +115 -0
- package/schemas/fields/tel.json +79 -0
- package/schemas/fields/text.json +86 -0
- package/schemas/fields/textarea.json +95 -0
- package/schemas/fields/time.json +91 -0
- package/schemas/fields/url.json +74 -0
- package/schemas/schema.graphql +12248 -0
- package/schemas/schemas.json +610 -0
- package/schemas/workflows/activity.json +96 -0
- package/schemas/workflows/common/condition.json +48 -0
- package/schemas/workflows/common/expression.json +76 -0
- package/schemas/workflows/common/mapping.json +173 -0
- package/schemas/workflows/common/step.json +38 -0
- package/schemas/workflows/flow/aggregation.json +44 -0
- package/schemas/workflows/flow/entity.json +129 -0
- package/schemas/workflows/flow/state.json +105 -0
- package/schemas/workflows/flow/transition.json +143 -0
- package/schemas/workflows/input.json +122 -0
- package/schemas/workflows/output.json +61 -0
- package/schemas/workflows/schedule.json +26 -0
- package/schemas/workflows/tasks/accounting-transaction.json +95 -0
- package/schemas/workflows/tasks/action-event.json +65 -0
- package/schemas/workflows/tasks/all.json +152 -0
- package/schemas/workflows/tasks/appmodule.json +56 -0
- package/schemas/workflows/tasks/attachment.json +97 -0
- package/schemas/workflows/tasks/authentication.json +86 -0
- package/schemas/workflows/tasks/caching.json +68 -0
- package/schemas/workflows/tasks/charge.json +92 -0
- package/schemas/workflows/tasks/commodity.json +92 -0
- package/schemas/workflows/tasks/contact-address.json +72 -0
- package/schemas/workflows/tasks/contact-payment-method.json +72 -0
- package/schemas/workflows/tasks/contact.json +82 -0
- package/schemas/workflows/tasks/csv.json +81 -0
- package/schemas/workflows/tasks/document-render.json +105 -0
- package/schemas/workflows/tasks/document-send.json +84 -0
- package/schemas/workflows/tasks/edi.json +157 -0
- package/schemas/workflows/tasks/email-send.json +110 -0
- package/schemas/workflows/tasks/error.json +72 -0
- package/schemas/workflows/tasks/export.json +90 -0
- package/schemas/workflows/tasks/filetransfer.json +102 -0
- package/schemas/workflows/tasks/flow-transition.json +68 -0
- package/schemas/workflows/tasks/foreach.json +69 -0
- package/schemas/workflows/tasks/generic.json +47 -0
- package/schemas/workflows/tasks/graphql.json +78 -0
- package/schemas/workflows/tasks/httpRequest.json +161 -0
- package/schemas/workflows/tasks/import.json +64 -0
- package/schemas/workflows/tasks/inventory.json +67 -0
- package/schemas/workflows/tasks/job.json +88 -0
- package/schemas/workflows/tasks/log.json +73 -0
- package/schemas/workflows/tasks/map.json +58 -0
- package/schemas/workflows/tasks/movement.json +54 -0
- package/schemas/workflows/tasks/note.json +59 -0
- package/schemas/workflows/tasks/number.json +65 -0
- package/schemas/workflows/tasks/order-tracking-event.json +109 -0
- package/schemas/workflows/tasks/order.json +139 -0
- package/schemas/workflows/tasks/payment.json +85 -0
- package/schemas/workflows/tasks/pdf-document.json +60 -0
- package/schemas/workflows/tasks/postal-codes.json +92 -0
- package/schemas/workflows/tasks/resolve-timezone.json +65 -0
- package/schemas/workflows/tasks/setVariable.json +76 -0
- package/schemas/workflows/tasks/switch.json +75 -0
- package/schemas/workflows/tasks/template.json +73 -0
- package/schemas/workflows/tasks/tracking-event.json +137 -0
- package/schemas/workflows/tasks/transmission.json +185 -0
- package/schemas/workflows/tasks/unzip-file.json +68 -0
- package/schemas/workflows/tasks/user.json +70 -0
- package/schemas/workflows/tasks/validation.json +99 -0
- package/schemas/workflows/tasks/while.json +53 -0
- package/schemas/workflows/tasks/workflow-execute.json +82 -0
- package/schemas/workflows/trigger.json +90 -0
- package/schemas/workflows/variable.json +46 -0
- package/schemas/workflows/workflow.json +335 -0
- package/scripts/postinstall.js +291 -0
- package/scripts/setup-vscode.js +80 -0
- package/skills/cxtms-developer/SKILL.md +118 -0
- package/skills/cxtms-developer/ref-cli-auth.md +120 -0
- package/skills/cxtms-developer/ref-entity-accounting.md +180 -0
- package/skills/cxtms-developer/ref-entity-commodity.md +239 -0
- package/skills/cxtms-developer/ref-entity-contact.md +163 -0
- package/skills/cxtms-developer/ref-entity-geography.md +154 -0
- package/skills/cxtms-developer/ref-entity-job.md +77 -0
- package/skills/cxtms-developer/ref-entity-notification.md +85 -0
- package/skills/cxtms-developer/ref-entity-order-sub.md +160 -0
- package/skills/cxtms-developer/ref-entity-order.md +183 -0
- package/skills/cxtms-developer/ref-entity-organization.md +41 -0
- package/skills/cxtms-developer/ref-entity-rate.md +182 -0
- package/skills/cxtms-developer/ref-entity-shared.md +176 -0
- package/skills/cxtms-developer/ref-entity-warehouse.md +115 -0
- package/skills/cxtms-developer/ref-graphql-query.md +309 -0
- package/skills/cxtms-module-builder/SKILL.md +477 -0
- package/skills/cxtms-module-builder/ref-components-data.md +293 -0
- package/skills/cxtms-module-builder/ref-components-display.md +411 -0
- package/skills/cxtms-module-builder/ref-components-forms.md +369 -0
- package/skills/cxtms-module-builder/ref-components-interactive.md +317 -0
- package/skills/cxtms-module-builder/ref-components-layout.md +390 -0
- package/skills/cxtms-module-builder/ref-components-specialized.md +477 -0
- package/skills/cxtms-workflow-builder/SKILL.md +438 -0
- package/skills/cxtms-workflow-builder/ref-accounting.md +66 -0
- package/skills/cxtms-workflow-builder/ref-communication.md +169 -0
- package/skills/cxtms-workflow-builder/ref-entity.md +342 -0
- package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +128 -0
- package/skills/cxtms-workflow-builder/ref-expressions-template.md +161 -0
- package/skills/cxtms-workflow-builder/ref-filetransfer.md +80 -0
- package/skills/cxtms-workflow-builder/ref-flow.md +210 -0
- package/skills/cxtms-workflow-builder/ref-other.md +157 -0
- package/skills/cxtms-workflow-builder/ref-query.md +105 -0
- package/skills/cxtms-workflow-builder/ref-utilities.md +417 -0
- package/templates/module-configuration.yaml +44 -0
- package/templates/module-form.yaml +152 -0
- package/templates/module-grid.yaml +229 -0
- package/templates/module-select.yaml +139 -0
- package/templates/module.yaml +84 -0
- package/templates/workflow-api-tracking.yaml +189 -0
- package/templates/workflow-basic.yaml +76 -0
- package/templates/workflow-document.yaml +155 -0
- package/templates/workflow-entity-trigger.yaml +90 -0
- package/templates/workflow-ftp-edi.yaml +158 -0
- package/templates/workflow-ftp-tracking.yaml +161 -0
- package/templates/workflow-mcp-tool.yaml +112 -0
- package/templates/workflow-public-api.yaml +135 -0
- package/templates/workflow-scheduled-execute.yaml +75 -0
- package/templates/workflow-scheduled.yaml +125 -0
- package/templates/workflow-utility.yaml +96 -0
- package/templates/workflow-webhook.yaml +128 -0
- package/templates/workflow.yaml +140 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# {{displayName}} Module
|
|
2
|
+
# Generated by cxtms create module --template grid
|
|
3
|
+
|
|
4
|
+
module:
|
|
5
|
+
name: "{{displayNameNoSpaces}}"
|
|
6
|
+
appModuleId: "{{uuid}}"
|
|
7
|
+
displayName:
|
|
8
|
+
en-US: "{{displayName}}"
|
|
9
|
+
description:
|
|
10
|
+
en-US: "{{displayName}} module"
|
|
11
|
+
application: System
|
|
12
|
+
filePath: "{{fileName}}"
|
|
13
|
+
|
|
14
|
+
components:
|
|
15
|
+
- name: {{displayNameNoSpaces}}/List
|
|
16
|
+
displayName:
|
|
17
|
+
en-US: "{{displayName}}"
|
|
18
|
+
platforms:
|
|
19
|
+
- web
|
|
20
|
+
props:
|
|
21
|
+
toolbar:
|
|
22
|
+
- name: create{{displayNameNoSpaces}}Btn
|
|
23
|
+
component: button
|
|
24
|
+
props:
|
|
25
|
+
label:
|
|
26
|
+
en-US: "Create {{displayName}}"
|
|
27
|
+
icon: plus
|
|
28
|
+
options:
|
|
29
|
+
variant: primary
|
|
30
|
+
onClick:
|
|
31
|
+
- navigate: {{name}}/create
|
|
32
|
+
layout:
|
|
33
|
+
component: layout
|
|
34
|
+
name: list
|
|
35
|
+
props:
|
|
36
|
+
title:
|
|
37
|
+
en-US: "{{displayName}}"
|
|
38
|
+
icon: list
|
|
39
|
+
permission: "{{displayNameNoSpaces}}/Read"
|
|
40
|
+
children:
|
|
41
|
+
- component: dataGrid
|
|
42
|
+
name: {{name}}Grid
|
|
43
|
+
props:
|
|
44
|
+
refreshHandler: "{{name}}"
|
|
45
|
+
dotsMenu:
|
|
46
|
+
items:
|
|
47
|
+
- label:
|
|
48
|
+
en-US: Edit
|
|
49
|
+
onClick:
|
|
50
|
+
- navigate: "{{name}}/\{{ id }}"
|
|
51
|
+
- label:
|
|
52
|
+
en-US: Delete
|
|
53
|
+
onClick:
|
|
54
|
+
- confirm:
|
|
55
|
+
title:
|
|
56
|
+
en-US: "Delete {{displayName}}"
|
|
57
|
+
message:
|
|
58
|
+
en-US: "Are you sure you want to delete this {{displayName}}?"
|
|
59
|
+
- mutation:
|
|
60
|
+
command: >-
|
|
61
|
+
mutation Delete{{displayNameNoSpaces}}Mutation($input: Delete{{displayNameNoSpaces}}Input!) {
|
|
62
|
+
delete{{displayNameNoSpaces}}(input: $input) {
|
|
63
|
+
deleteResult { rowsAffected }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
variables:
|
|
67
|
+
input:
|
|
68
|
+
organizationId: '\{{number organizationId }}'
|
|
69
|
+
id: '\{{number id }}'
|
|
70
|
+
- notification:
|
|
71
|
+
message:
|
|
72
|
+
en-US: "{{displayName}} deleted successfully"
|
|
73
|
+
type: success
|
|
74
|
+
- refresh: "{{name}}"
|
|
75
|
+
views:
|
|
76
|
+
- name: all
|
|
77
|
+
displayName:
|
|
78
|
+
en-US: "All"
|
|
79
|
+
columns:
|
|
80
|
+
- name: id
|
|
81
|
+
isHidden: true
|
|
82
|
+
- name: name
|
|
83
|
+
label:
|
|
84
|
+
en-US: "Name"
|
|
85
|
+
- name: status
|
|
86
|
+
label:
|
|
87
|
+
en-US: "Status"
|
|
88
|
+
showAs:
|
|
89
|
+
component: Badges/StatusesBadge
|
|
90
|
+
- name: created
|
|
91
|
+
label:
|
|
92
|
+
en-US: "Created"
|
|
93
|
+
showAs:
|
|
94
|
+
component: text
|
|
95
|
+
props:
|
|
96
|
+
value: '\{{ format created L }}'
|
|
97
|
+
- name: lastModified
|
|
98
|
+
label:
|
|
99
|
+
en-US: "Last Modified"
|
|
100
|
+
showAs:
|
|
101
|
+
component: text
|
|
102
|
+
props:
|
|
103
|
+
value: '\{{ format lastModified L }}'
|
|
104
|
+
orderBy:
|
|
105
|
+
- name: created
|
|
106
|
+
direction: DESC
|
|
107
|
+
- name: active
|
|
108
|
+
displayName:
|
|
109
|
+
en-US: "Active"
|
|
110
|
+
columns:
|
|
111
|
+
- name: id
|
|
112
|
+
isHidden: true
|
|
113
|
+
- name: name
|
|
114
|
+
label:
|
|
115
|
+
en-US: "Name"
|
|
116
|
+
- name: created
|
|
117
|
+
label:
|
|
118
|
+
en-US: "Created"
|
|
119
|
+
showAs:
|
|
120
|
+
component: text
|
|
121
|
+
props:
|
|
122
|
+
value: '\{{ format created L }}'
|
|
123
|
+
- name: lastModified
|
|
124
|
+
label:
|
|
125
|
+
en-US: "Last Modified"
|
|
126
|
+
showAs:
|
|
127
|
+
component: text
|
|
128
|
+
props:
|
|
129
|
+
value: '\{{ format lastModified L }}'
|
|
130
|
+
filter: "status:Active"
|
|
131
|
+
orderBy:
|
|
132
|
+
- name: created
|
|
133
|
+
direction: DESC
|
|
134
|
+
- name: archived
|
|
135
|
+
displayName:
|
|
136
|
+
en-US: "Archived"
|
|
137
|
+
columns:
|
|
138
|
+
- name: id
|
|
139
|
+
isHidden: true
|
|
140
|
+
- name: name
|
|
141
|
+
label:
|
|
142
|
+
en-US: "Name"
|
|
143
|
+
- name: created
|
|
144
|
+
label:
|
|
145
|
+
en-US: "Created"
|
|
146
|
+
showAs:
|
|
147
|
+
component: text
|
|
148
|
+
props:
|
|
149
|
+
value: '\{{ format created L }}'
|
|
150
|
+
filter: "status:Archived"
|
|
151
|
+
orderBy:
|
|
152
|
+
- name: created
|
|
153
|
+
direction: DESC
|
|
154
|
+
options:
|
|
155
|
+
query: {{name}}
|
|
156
|
+
rootEntityName: "{{displayNameNoSpaces}}"
|
|
157
|
+
entityKeys:
|
|
158
|
+
- id
|
|
159
|
+
navigationType: navigate
|
|
160
|
+
enableDynamicGrid: true
|
|
161
|
+
enableViews: true
|
|
162
|
+
enableSearch: true
|
|
163
|
+
enablePagination: true
|
|
164
|
+
enableColumns: true
|
|
165
|
+
enableFilter: true
|
|
166
|
+
defaultView: all
|
|
167
|
+
onRowClick:
|
|
168
|
+
- navigate: "{{name}}/\{{ id }}"
|
|
169
|
+
toolbar:
|
|
170
|
+
- component: dropdown
|
|
171
|
+
props:
|
|
172
|
+
label:
|
|
173
|
+
en-US: Actions
|
|
174
|
+
name: actions{{displayNameNoSpaces}}
|
|
175
|
+
icon: activity
|
|
176
|
+
options:
|
|
177
|
+
variant: secondary
|
|
178
|
+
items:
|
|
179
|
+
- label:
|
|
180
|
+
en-US: "Export {{displayName}}"
|
|
181
|
+
onClick:
|
|
182
|
+
- notification:
|
|
183
|
+
message:
|
|
184
|
+
en-US: "Exporting. It may take a couple of minutes."
|
|
185
|
+
type: success
|
|
186
|
+
|
|
187
|
+
routes:
|
|
188
|
+
- name: list
|
|
189
|
+
path: /{{name}}
|
|
190
|
+
component: {{displayNameNoSpaces}}/List
|
|
191
|
+
props:
|
|
192
|
+
title:
|
|
193
|
+
en-US: "{{displayName}}"
|
|
194
|
+
|
|
195
|
+
entities:
|
|
196
|
+
- name: {{displayNameNoSpaces}}
|
|
197
|
+
entityKind: Other
|
|
198
|
+
displayName:
|
|
199
|
+
en-US: "{{displayName}}"
|
|
200
|
+
fields:
|
|
201
|
+
- name: name
|
|
202
|
+
displayName:
|
|
203
|
+
en-US: "Name"
|
|
204
|
+
fieldType: text
|
|
205
|
+
- name: status
|
|
206
|
+
displayName:
|
|
207
|
+
en-US: "Status"
|
|
208
|
+
fieldType: text
|
|
209
|
+
- name: description
|
|
210
|
+
displayName:
|
|
211
|
+
en-US: "Description"
|
|
212
|
+
fieldType: text
|
|
213
|
+
|
|
214
|
+
permissions:
|
|
215
|
+
- name: "{{displayNameNoSpaces}}/Read"
|
|
216
|
+
displayName:
|
|
217
|
+
en-US: "Read {{displayName}}"
|
|
218
|
+
roles:
|
|
219
|
+
- Admin
|
|
220
|
+
- name: "{{displayNameNoSpaces}}/Create"
|
|
221
|
+
displayName:
|
|
222
|
+
en-US: "Create {{displayName}}"
|
|
223
|
+
roles:
|
|
224
|
+
- Admin
|
|
225
|
+
- name: "{{displayNameNoSpaces}}/Delete"
|
|
226
|
+
displayName:
|
|
227
|
+
en-US: "Delete {{displayName}}"
|
|
228
|
+
roles:
|
|
229
|
+
- Admin
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# {{displayName}} Select Module
|
|
2
|
+
# Generated by cxtms create module --template select
|
|
3
|
+
|
|
4
|
+
module:
|
|
5
|
+
name: "{{displayNameNoSpaces}}"
|
|
6
|
+
appModuleId: "{{uuid}}"
|
|
7
|
+
displayName:
|
|
8
|
+
en-US: "{{displayName}}"
|
|
9
|
+
description:
|
|
10
|
+
en-US: "{{displayName}} async select component"
|
|
11
|
+
application: System
|
|
12
|
+
filePath: "{{fileName}}"
|
|
13
|
+
|
|
14
|
+
components:
|
|
15
|
+
- name: {{displayNameNoSpaces}}/Select
|
|
16
|
+
displayName:
|
|
17
|
+
en-US: "Select {{displayName}}"
|
|
18
|
+
platforms:
|
|
19
|
+
- web
|
|
20
|
+
- mobile
|
|
21
|
+
props:
|
|
22
|
+
layout:
|
|
23
|
+
component: field
|
|
24
|
+
name: {{name}}Id
|
|
25
|
+
inputs:
|
|
26
|
+
props:
|
|
27
|
+
type: select-async
|
|
28
|
+
dropDownToolbar:
|
|
29
|
+
- component: button
|
|
30
|
+
name: create{{displayNameNoSpaces}}Btn
|
|
31
|
+
props:
|
|
32
|
+
permission: "{{displayNameNoSpaces}}/Create"
|
|
33
|
+
label:
|
|
34
|
+
en-US: "Create {{displayName}}"
|
|
35
|
+
icon: plus
|
|
36
|
+
options:
|
|
37
|
+
className: "create-entity-select-btn btn btn-sm w-100"
|
|
38
|
+
variant: primary
|
|
39
|
+
onClick:
|
|
40
|
+
- dialog:
|
|
41
|
+
component: {{displayNameNoSpaces}}/Create{{displayNameNoSpaces}}
|
|
42
|
+
props:
|
|
43
|
+
title: "Create New {{displayName}}"
|
|
44
|
+
onClose:
|
|
45
|
+
- selectValue: "\{{ result.{{name}}Id }}"
|
|
46
|
+
label:
|
|
47
|
+
en-US: "{{displayName}}"
|
|
48
|
+
options:
|
|
49
|
+
valueFieldName: "{{name}}Id"
|
|
50
|
+
itemLabelTemplate: "\{{name}}"
|
|
51
|
+
itemValueTemplate: "\{{{{name}}Id}}"
|
|
52
|
+
navigateActionPermission: "{{displayNameNoSpaces}}/Update"
|
|
53
|
+
searchQuery:
|
|
54
|
+
name: get{{displayNameNoSpaces}}s
|
|
55
|
+
path: {{name}}s.items
|
|
56
|
+
params:
|
|
57
|
+
search: "\{{ string search }}"
|
|
58
|
+
take: "\{{ number pageSize }}"
|
|
59
|
+
skip: "\{{ number skip }}"
|
|
60
|
+
filter: "\{{ string filter }}"
|
|
61
|
+
valueQuery:
|
|
62
|
+
name: get{{displayNameNoSpaces}}
|
|
63
|
+
path: {{name}}
|
|
64
|
+
params:
|
|
65
|
+
{{name}}Id: "\{{{{name}}Id}}"
|
|
66
|
+
allowSearch: true
|
|
67
|
+
allowClear: true
|
|
68
|
+
queries:
|
|
69
|
+
- name: get{{displayNameNoSpaces}}s
|
|
70
|
+
query:
|
|
71
|
+
command: >-
|
|
72
|
+
query($organizationId: Int!, $filter: String!, $search: String!, $take: Int!, $skip: Int!) {
|
|
73
|
+
{{name}}s(organizationId: $organizationId, filter: $filter, search: $search, take: $take, skip: $skip) {
|
|
74
|
+
items {
|
|
75
|
+
{{name}}Id
|
|
76
|
+
name
|
|
77
|
+
}
|
|
78
|
+
totalCount
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
variables:
|
|
82
|
+
organizationId: '\{{number organizationId }}'
|
|
83
|
+
search: '\{{string search }}'
|
|
84
|
+
take: '\{{number pageSize }}'
|
|
85
|
+
skip: '\{{number skip }}'
|
|
86
|
+
filter: '\{{ string filter }}'
|
|
87
|
+
- name: get{{displayNameNoSpaces}}
|
|
88
|
+
query:
|
|
89
|
+
command: >-
|
|
90
|
+
query($organizationId: Int!, ${{name}}Id: Int!) {
|
|
91
|
+
{{name}}(organizationId: $organizationId, {{name}}Id: ${{name}}Id) {
|
|
92
|
+
{{name}}Id
|
|
93
|
+
name
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
variables:
|
|
97
|
+
{{name}}Id: '\{{number {{name}}Id }}'
|
|
98
|
+
onEditClick:
|
|
99
|
+
- dialog:
|
|
100
|
+
props:
|
|
101
|
+
organizationId: "\{{ organizationId }}"
|
|
102
|
+
{{name}}Id: "\{{ {{name}}Id }}"
|
|
103
|
+
title:
|
|
104
|
+
en-US: "Update {{displayName}}"
|
|
105
|
+
onClose:
|
|
106
|
+
component:
|
|
107
|
+
layout:
|
|
108
|
+
component: layout
|
|
109
|
+
children:
|
|
110
|
+
- component: {{displayNameNoSpaces}}/Update{{displayNameNoSpaces}}
|
|
111
|
+
children:
|
|
112
|
+
|
|
113
|
+
entities:
|
|
114
|
+
- name: {{displayNameNoSpaces}}
|
|
115
|
+
entityKind: Other
|
|
116
|
+
displayName:
|
|
117
|
+
en-US: "{{displayName}}"
|
|
118
|
+
fields:
|
|
119
|
+
- name: name
|
|
120
|
+
displayName:
|
|
121
|
+
en-US: "Name"
|
|
122
|
+
fieldType: text
|
|
123
|
+
|
|
124
|
+
permissions:
|
|
125
|
+
- name: "{{displayNameNoSpaces}}/Read"
|
|
126
|
+
displayName:
|
|
127
|
+
en-US: "Read {{displayName}}"
|
|
128
|
+
roles:
|
|
129
|
+
- Admin
|
|
130
|
+
- name: "{{displayNameNoSpaces}}/Create"
|
|
131
|
+
displayName:
|
|
132
|
+
en-US: "Create {{displayName}}"
|
|
133
|
+
roles:
|
|
134
|
+
- Admin
|
|
135
|
+
- name: "{{displayNameNoSpaces}}/Update"
|
|
136
|
+
displayName:
|
|
137
|
+
en-US: "Update {{displayName}}"
|
|
138
|
+
roles:
|
|
139
|
+
- Admin
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# {{displayName}} Module
|
|
2
|
+
# Generated by cxtms create module
|
|
3
|
+
|
|
4
|
+
module:
|
|
5
|
+
name: "{{name}}"
|
|
6
|
+
appModuleId: "{{uuid}}"
|
|
7
|
+
displayName: "{{displayName}}"
|
|
8
|
+
description: "{{displayName}} module"
|
|
9
|
+
icon: "folder"
|
|
10
|
+
version: "1.0"
|
|
11
|
+
application: System
|
|
12
|
+
filePath: "{{fileName}}"
|
|
13
|
+
|
|
14
|
+
entities:
|
|
15
|
+
- name: {{name}}
|
|
16
|
+
displayName: "{{displayName}}"
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
- name: "{{displayNameNoSpaces}}/View"
|
|
20
|
+
displayName: "View {{displayName}}"
|
|
21
|
+
- name: "{{displayNameNoSpaces}}/Edit"
|
|
22
|
+
displayName: "Edit {{displayName}}"
|
|
23
|
+
|
|
24
|
+
routes:
|
|
25
|
+
- name: "list"
|
|
26
|
+
path: "/{{name}}"
|
|
27
|
+
component: list
|
|
28
|
+
- name: "detail"
|
|
29
|
+
path: "/{{name}}/:id"
|
|
30
|
+
component: detail
|
|
31
|
+
|
|
32
|
+
components:
|
|
33
|
+
- type: layout
|
|
34
|
+
name: list
|
|
35
|
+
title: "{{displayName}} List"
|
|
36
|
+
children:
|
|
37
|
+
- type: dataGrid
|
|
38
|
+
name: {{name}}Grid
|
|
39
|
+
props:
|
|
40
|
+
entityName: "{{name}}"
|
|
41
|
+
columns:
|
|
42
|
+
- field: "name"
|
|
43
|
+
headerName: "Name"
|
|
44
|
+
flex: 1
|
|
45
|
+
- field: "createdAt"
|
|
46
|
+
headerName: "Created"
|
|
47
|
+
type: "date"
|
|
48
|
+
actions:
|
|
49
|
+
onRowClick:
|
|
50
|
+
- type: navigate
|
|
51
|
+
props:
|
|
52
|
+
route: "detail"
|
|
53
|
+
params:
|
|
54
|
+
id: "{{row.id}}"
|
|
55
|
+
|
|
56
|
+
- type: layout
|
|
57
|
+
name: detail
|
|
58
|
+
title: "{{displayName}} Detail"
|
|
59
|
+
children:
|
|
60
|
+
- type: form
|
|
61
|
+
name: {{name}}Form
|
|
62
|
+
props:
|
|
63
|
+
entityName: "{{name}}"
|
|
64
|
+
fields:
|
|
65
|
+
- type: text
|
|
66
|
+
name: name
|
|
67
|
+
props:
|
|
68
|
+
label: "Name"
|
|
69
|
+
required: true
|
|
70
|
+
- type: textarea
|
|
71
|
+
name: description
|
|
72
|
+
props:
|
|
73
|
+
label: "Description"
|
|
74
|
+
rows: 3
|
|
75
|
+
actions:
|
|
76
|
+
onSubmit:
|
|
77
|
+
- type: mutation
|
|
78
|
+
props:
|
|
79
|
+
operation: "update{{displayNameNoSpaces}}"
|
|
80
|
+
input: "{{form}}"
|
|
81
|
+
- type: notification
|
|
82
|
+
props:
|
|
83
|
+
message: "{{displayName}} saved successfully"
|
|
84
|
+
severity: "success"
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# {{displayName}} Workflow
|
|
2
|
+
# Generated by cxtms create workflow --template api-tracking
|
|
3
|
+
|
|
4
|
+
workflow:
|
|
5
|
+
workflowId: "{{uuid}}"
|
|
6
|
+
name: "{{displayName}}"
|
|
7
|
+
description: "{{displayName}} - Fetch tracking events from carrier API and import"
|
|
8
|
+
version: "1.0"
|
|
9
|
+
executionMode: Async
|
|
10
|
+
logLevel: Information
|
|
11
|
+
isActive: true
|
|
12
|
+
enableAudit: true
|
|
13
|
+
filePath: "{{fileName}}"
|
|
14
|
+
runAs: workflowAgent
|
|
15
|
+
concurrency:
|
|
16
|
+
waitTime: 0
|
|
17
|
+
tags:
|
|
18
|
+
- "generated"
|
|
19
|
+
- "api"
|
|
20
|
+
- "tracking"
|
|
21
|
+
|
|
22
|
+
variables:
|
|
23
|
+
- name: apiConfig
|
|
24
|
+
fromConfig:
|
|
25
|
+
configName: "apps.myApp.carrierApiConfig"
|
|
26
|
+
- name: pageSize
|
|
27
|
+
value: 50
|
|
28
|
+
- name: offset
|
|
29
|
+
value: 0
|
|
30
|
+
- name: hasMorePages
|
|
31
|
+
value: true
|
|
32
|
+
|
|
33
|
+
schedules:
|
|
34
|
+
- cron: "*/30 * * * *"
|
|
35
|
+
displayName: "{{displayName}} - Every 30 minutes"
|
|
36
|
+
|
|
37
|
+
activities:
|
|
38
|
+
# Activity 1: Query orders that need tracking updates
|
|
39
|
+
- name: FetchOrders
|
|
40
|
+
conditions: "[apiConfig?.enabled?] = true"
|
|
41
|
+
events:
|
|
42
|
+
onActivityStarted:
|
|
43
|
+
- task: "Utilities/Log@1"
|
|
44
|
+
name: LogActivityStarted
|
|
45
|
+
inputs:
|
|
46
|
+
message: "Activity FetchOrders started"
|
|
47
|
+
level: Information
|
|
48
|
+
onActivityCompleted:
|
|
49
|
+
- task: "Utilities/Log@1"
|
|
50
|
+
name: LogActivityCompleted
|
|
51
|
+
inputs:
|
|
52
|
+
message: "Activity FetchOrders completed"
|
|
53
|
+
level: Information
|
|
54
|
+
onActivityFailed:
|
|
55
|
+
- task: "Utilities/Log@1"
|
|
56
|
+
name: LogActivityFailed
|
|
57
|
+
inputs:
|
|
58
|
+
message: "Activity FetchOrders failed: {{exception.message}}"
|
|
59
|
+
level: Error
|
|
60
|
+
steps:
|
|
61
|
+
- task: "while"
|
|
62
|
+
name: PageLoop
|
|
63
|
+
conditions:
|
|
64
|
+
- expression: "[hasMorePages] = true"
|
|
65
|
+
maxIterations: 100
|
|
66
|
+
steps:
|
|
67
|
+
- task: "Query/GraphQL@1"
|
|
68
|
+
name: GetOrders
|
|
69
|
+
inputs:
|
|
70
|
+
query: |
|
|
71
|
+
query($organizationId: Int!, $first: Int!, $offset: Int!, $filter: String!) {
|
|
72
|
+
orders(organizationId: $organizationId, first: $first, offset: $offset, filter: $filter) {
|
|
73
|
+
totalCount
|
|
74
|
+
items {
|
|
75
|
+
orderId
|
|
76
|
+
trackingNumber
|
|
77
|
+
status
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
variables:
|
|
82
|
+
organizationId: "\{{int organizationId}}"
|
|
83
|
+
first: "\{{pageSize}}"
|
|
84
|
+
offset: "\{{offset}}"
|
|
85
|
+
filter: "orderType:ParcelShipment AND status:Active"
|
|
86
|
+
outputs:
|
|
87
|
+
- name: result
|
|
88
|
+
mapping: "orders?"
|
|
89
|
+
|
|
90
|
+
- task: "foreach"
|
|
91
|
+
name: ProcessOrders
|
|
92
|
+
collection: "FetchOrders?.PageLoop?.GetOrders?.result?.items?"
|
|
93
|
+
item: "order"
|
|
94
|
+
continueOnError: true
|
|
95
|
+
steps:
|
|
96
|
+
# Call carrier tracking API
|
|
97
|
+
- task: "Utilities/HttpRequest@1"
|
|
98
|
+
name: CallTrackingApi
|
|
99
|
+
inputs:
|
|
100
|
+
url: "\{{apiConfig?.baseUrl?}}/tracking/v1/track"
|
|
101
|
+
method: POST
|
|
102
|
+
contentType: "application/json"
|
|
103
|
+
headers:
|
|
104
|
+
- name: "Authorization"
|
|
105
|
+
value: "Bearer \{{apiConfig?.apiKey?}}"
|
|
106
|
+
- name: "X-Api-Key"
|
|
107
|
+
value: "\{{apiConfig?.apiKey?}}"
|
|
108
|
+
body:
|
|
109
|
+
trackingNumber: "\{{order.trackingNumber}}"
|
|
110
|
+
continueOnError: true
|
|
111
|
+
outputs:
|
|
112
|
+
- name: response
|
|
113
|
+
mapping: "response?.body?"
|
|
114
|
+
|
|
115
|
+
# Import tracking events — mapping inline
|
|
116
|
+
- task: "Order/Import@1"
|
|
117
|
+
name: ImportTrackingEvents
|
|
118
|
+
conditions: "isNullOrEmpty([FetchOrders?.CallTrackingApi?.response?]) = false"
|
|
119
|
+
inputs:
|
|
120
|
+
orders:
|
|
121
|
+
- trackingNumber: "\{{order.trackingNumber}}"
|
|
122
|
+
orderType: "ParcelShipment"
|
|
123
|
+
trackingEvents:
|
|
124
|
+
foreach: "FetchOrders?.CallTrackingApi?.response?.events?"
|
|
125
|
+
item: "event"
|
|
126
|
+
mapping:
|
|
127
|
+
eventDate: "\{{event.eventDate}}"
|
|
128
|
+
location: "\{{event.location}}"
|
|
129
|
+
description: "\{{event.description}}"
|
|
130
|
+
includeInTracking: true
|
|
131
|
+
sendEmail: false
|
|
132
|
+
isInactive: false
|
|
133
|
+
customValues:
|
|
134
|
+
carrierId: "\{{apiConfig?.carrierId?}}"
|
|
135
|
+
carrierEventCode: "\{{event.statusCode}}"
|
|
136
|
+
carrierDescription: "\{{event.description}}"
|
|
137
|
+
eventType: "\{{event.eventType}}"
|
|
138
|
+
options:
|
|
139
|
+
orderMatchByFields:
|
|
140
|
+
- "trackingNumber"
|
|
141
|
+
trackingEventMatchByFields:
|
|
142
|
+
- "eventDate"
|
|
143
|
+
- "customValues.eventType"
|
|
144
|
+
- "customValues.carrierId"
|
|
145
|
+
skipIfExists: true
|
|
146
|
+
matchByEventDefinition:
|
|
147
|
+
- "customValues.carrierId"
|
|
148
|
+
- "customValues.carrierEventCode"
|
|
149
|
+
createEventDefinitions: true
|
|
150
|
+
eventDefinitionDefaults:
|
|
151
|
+
eventName: "Unknown"
|
|
152
|
+
includeInTracking: true
|
|
153
|
+
|
|
154
|
+
- task: "Utilities/SetVariable@1"
|
|
155
|
+
name: UpdatePagination
|
|
156
|
+
inputs:
|
|
157
|
+
variables:
|
|
158
|
+
- name: offset
|
|
159
|
+
value:
|
|
160
|
+
expression: "[offset] + [pageSize]"
|
|
161
|
+
- name: hasMorePages
|
|
162
|
+
value:
|
|
163
|
+
expression: "[offset] < [FetchOrders?.PageLoop?.GetOrders?.result?.totalCount?]"
|
|
164
|
+
|
|
165
|
+
- task: "Utilities/Log@1"
|
|
166
|
+
name: LogComplete
|
|
167
|
+
inputs:
|
|
168
|
+
message: "{{displayName}} completed"
|
|
169
|
+
level: Information
|
|
170
|
+
|
|
171
|
+
events:
|
|
172
|
+
onWorkflowStarted:
|
|
173
|
+
- task: "Utilities/Log@1"
|
|
174
|
+
name: LogWorkflowStarted
|
|
175
|
+
inputs:
|
|
176
|
+
message: "{{displayName}} workflow started"
|
|
177
|
+
level: Information
|
|
178
|
+
onWorkflowCompleted:
|
|
179
|
+
- task: "Utilities/Log@1"
|
|
180
|
+
name: LogWorkflowCompleted
|
|
181
|
+
inputs:
|
|
182
|
+
message: "{{displayName}} workflow completed successfully"
|
|
183
|
+
level: Information
|
|
184
|
+
onWorkflowFailed:
|
|
185
|
+
- task: "Utilities/Log@1"
|
|
186
|
+
name: LogWorkflowFailed
|
|
187
|
+
inputs:
|
|
188
|
+
message: "{{displayName}} workflow failed: {{exception.message}}"
|
|
189
|
+
level: Error
|