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.
Files changed (215) hide show
  1. package/README.md +384 -0
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +4784 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/extractUtils.d.ts +11 -0
  7. package/dist/extractUtils.d.ts.map +1 -0
  8. package/dist/extractUtils.js +19 -0
  9. package/dist/extractUtils.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +11 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/types.d.ts +129 -0
  15. package/dist/types.d.ts.map +1 -0
  16. package/dist/types.js +6 -0
  17. package/dist/types.js.map +1 -0
  18. package/dist/utils/schemaLoader.d.ts +17 -0
  19. package/dist/utils/schemaLoader.d.ts.map +1 -0
  20. package/dist/utils/schemaLoader.js +134 -0
  21. package/dist/utils/schemaLoader.js.map +1 -0
  22. package/dist/validator.d.ts +72 -0
  23. package/dist/validator.d.ts.map +1 -0
  24. package/dist/validator.js +432 -0
  25. package/dist/validator.js.map +1 -0
  26. package/dist/workflowValidator.d.ts +103 -0
  27. package/dist/workflowValidator.d.ts.map +1 -0
  28. package/dist/workflowValidator.js +753 -0
  29. package/dist/workflowValidator.js.map +1 -0
  30. package/package.json +51 -0
  31. package/schemas/actions/all.json +27 -0
  32. package/schemas/actions/clipboard.json +46 -0
  33. package/schemas/actions/confirm.json +21 -0
  34. package/schemas/actions/consoleLog.json +16 -0
  35. package/schemas/actions/dialog.json +25 -0
  36. package/schemas/actions/fileDownload.json +16 -0
  37. package/schemas/actions/forEach.json +31 -0
  38. package/schemas/actions/if.json +12 -0
  39. package/schemas/actions/mutation.json +25 -0
  40. package/schemas/actions/navigate.json +18 -0
  41. package/schemas/actions/navigateBack.json +22 -0
  42. package/schemas/actions/navigateBackOrClose.json +21 -0
  43. package/schemas/actions/notification.json +19 -0
  44. package/schemas/actions/openBarcodeScanner.json +104 -0
  45. package/schemas/actions/query.json +32 -0
  46. package/schemas/actions/refresh.json +13 -0
  47. package/schemas/actions/resetDirtyState.json +22 -0
  48. package/schemas/actions/setFields.json +21 -0
  49. package/schemas/actions/setStore.json +13 -0
  50. package/schemas/actions/validateForm.json +15 -0
  51. package/schemas/actions/workflow.json +24 -0
  52. package/schemas/components/README.md +147 -0
  53. package/schemas/components/appComponent.json +58 -0
  54. package/schemas/components/barcodeScanner.json +69 -0
  55. package/schemas/components/button.json +123 -0
  56. package/schemas/components/calendar.json +489 -0
  57. package/schemas/components/card.json +176 -0
  58. package/schemas/components/collection.json +54 -0
  59. package/schemas/components/dataGrid.json +119 -0
  60. package/schemas/components/datasource.json +151 -0
  61. package/schemas/components/dropdown.json +57 -0
  62. package/schemas/components/field-collection.json +618 -0
  63. package/schemas/components/field.json +265 -0
  64. package/schemas/components/form.json +234 -0
  65. package/schemas/components/index.json +71 -0
  66. package/schemas/components/layout.json +69 -0
  67. package/schemas/components/module.json +167 -0
  68. package/schemas/components/navDropdown.json +36 -0
  69. package/schemas/components/navbar.json +78 -0
  70. package/schemas/components/navbarItem.json +28 -0
  71. package/schemas/components/navbarLink.json +36 -0
  72. package/schemas/components/row.json +31 -0
  73. package/schemas/components/slot.json +30 -0
  74. package/schemas/components/tab.json +34 -0
  75. package/schemas/components/tabs.json +35 -0
  76. package/schemas/components/timeline.json +172 -0
  77. package/schemas/components/timelineGrid.json +328 -0
  78. package/schemas/fields/README.md +66 -0
  79. package/schemas/fields/attachment.json +156 -0
  80. package/schemas/fields/autocomplete-googleplaces.json +130 -0
  81. package/schemas/fields/checkbox.json +82 -0
  82. package/schemas/fields/date.json +88 -0
  83. package/schemas/fields/datetime.json +75 -0
  84. package/schemas/fields/email.json +75 -0
  85. package/schemas/fields/index.json +53 -0
  86. package/schemas/fields/number.json +91 -0
  87. package/schemas/fields/password.json +70 -0
  88. package/schemas/fields/radio.json +94 -0
  89. package/schemas/fields/rangedatetime.json +56 -0
  90. package/schemas/fields/select-async.json +334 -0
  91. package/schemas/fields/select.json +115 -0
  92. package/schemas/fields/tel.json +79 -0
  93. package/schemas/fields/text.json +86 -0
  94. package/schemas/fields/textarea.json +95 -0
  95. package/schemas/fields/time.json +91 -0
  96. package/schemas/fields/url.json +74 -0
  97. package/schemas/schema.graphql +12248 -0
  98. package/schemas/schemas.json +610 -0
  99. package/schemas/workflows/activity.json +96 -0
  100. package/schemas/workflows/common/condition.json +48 -0
  101. package/schemas/workflows/common/expression.json +76 -0
  102. package/schemas/workflows/common/mapping.json +173 -0
  103. package/schemas/workflows/common/step.json +38 -0
  104. package/schemas/workflows/flow/aggregation.json +44 -0
  105. package/schemas/workflows/flow/entity.json +129 -0
  106. package/schemas/workflows/flow/state.json +105 -0
  107. package/schemas/workflows/flow/transition.json +143 -0
  108. package/schemas/workflows/input.json +122 -0
  109. package/schemas/workflows/output.json +61 -0
  110. package/schemas/workflows/schedule.json +26 -0
  111. package/schemas/workflows/tasks/accounting-transaction.json +95 -0
  112. package/schemas/workflows/tasks/action-event.json +65 -0
  113. package/schemas/workflows/tasks/all.json +152 -0
  114. package/schemas/workflows/tasks/appmodule.json +56 -0
  115. package/schemas/workflows/tasks/attachment.json +97 -0
  116. package/schemas/workflows/tasks/authentication.json +86 -0
  117. package/schemas/workflows/tasks/caching.json +68 -0
  118. package/schemas/workflows/tasks/charge.json +92 -0
  119. package/schemas/workflows/tasks/commodity.json +92 -0
  120. package/schemas/workflows/tasks/contact-address.json +72 -0
  121. package/schemas/workflows/tasks/contact-payment-method.json +72 -0
  122. package/schemas/workflows/tasks/contact.json +82 -0
  123. package/schemas/workflows/tasks/csv.json +81 -0
  124. package/schemas/workflows/tasks/document-render.json +105 -0
  125. package/schemas/workflows/tasks/document-send.json +84 -0
  126. package/schemas/workflows/tasks/edi.json +157 -0
  127. package/schemas/workflows/tasks/email-send.json +110 -0
  128. package/schemas/workflows/tasks/error.json +72 -0
  129. package/schemas/workflows/tasks/export.json +90 -0
  130. package/schemas/workflows/tasks/filetransfer.json +102 -0
  131. package/schemas/workflows/tasks/flow-transition.json +68 -0
  132. package/schemas/workflows/tasks/foreach.json +69 -0
  133. package/schemas/workflows/tasks/generic.json +47 -0
  134. package/schemas/workflows/tasks/graphql.json +78 -0
  135. package/schemas/workflows/tasks/httpRequest.json +161 -0
  136. package/schemas/workflows/tasks/import.json +64 -0
  137. package/schemas/workflows/tasks/inventory.json +67 -0
  138. package/schemas/workflows/tasks/job.json +88 -0
  139. package/schemas/workflows/tasks/log.json +73 -0
  140. package/schemas/workflows/tasks/map.json +58 -0
  141. package/schemas/workflows/tasks/movement.json +54 -0
  142. package/schemas/workflows/tasks/note.json +59 -0
  143. package/schemas/workflows/tasks/number.json +65 -0
  144. package/schemas/workflows/tasks/order-tracking-event.json +109 -0
  145. package/schemas/workflows/tasks/order.json +139 -0
  146. package/schemas/workflows/tasks/payment.json +85 -0
  147. package/schemas/workflows/tasks/pdf-document.json +60 -0
  148. package/schemas/workflows/tasks/postal-codes.json +92 -0
  149. package/schemas/workflows/tasks/resolve-timezone.json +65 -0
  150. package/schemas/workflows/tasks/setVariable.json +76 -0
  151. package/schemas/workflows/tasks/switch.json +75 -0
  152. package/schemas/workflows/tasks/template.json +73 -0
  153. package/schemas/workflows/tasks/tracking-event.json +137 -0
  154. package/schemas/workflows/tasks/transmission.json +185 -0
  155. package/schemas/workflows/tasks/unzip-file.json +68 -0
  156. package/schemas/workflows/tasks/user.json +70 -0
  157. package/schemas/workflows/tasks/validation.json +99 -0
  158. package/schemas/workflows/tasks/while.json +53 -0
  159. package/schemas/workflows/tasks/workflow-execute.json +82 -0
  160. package/schemas/workflows/trigger.json +90 -0
  161. package/schemas/workflows/variable.json +46 -0
  162. package/schemas/workflows/workflow.json +335 -0
  163. package/scripts/postinstall.js +291 -0
  164. package/scripts/setup-vscode.js +80 -0
  165. package/skills/cxtms-developer/SKILL.md +118 -0
  166. package/skills/cxtms-developer/ref-cli-auth.md +120 -0
  167. package/skills/cxtms-developer/ref-entity-accounting.md +180 -0
  168. package/skills/cxtms-developer/ref-entity-commodity.md +239 -0
  169. package/skills/cxtms-developer/ref-entity-contact.md +163 -0
  170. package/skills/cxtms-developer/ref-entity-geography.md +154 -0
  171. package/skills/cxtms-developer/ref-entity-job.md +77 -0
  172. package/skills/cxtms-developer/ref-entity-notification.md +85 -0
  173. package/skills/cxtms-developer/ref-entity-order-sub.md +160 -0
  174. package/skills/cxtms-developer/ref-entity-order.md +183 -0
  175. package/skills/cxtms-developer/ref-entity-organization.md +41 -0
  176. package/skills/cxtms-developer/ref-entity-rate.md +182 -0
  177. package/skills/cxtms-developer/ref-entity-shared.md +176 -0
  178. package/skills/cxtms-developer/ref-entity-warehouse.md +115 -0
  179. package/skills/cxtms-developer/ref-graphql-query.md +309 -0
  180. package/skills/cxtms-module-builder/SKILL.md +477 -0
  181. package/skills/cxtms-module-builder/ref-components-data.md +293 -0
  182. package/skills/cxtms-module-builder/ref-components-display.md +411 -0
  183. package/skills/cxtms-module-builder/ref-components-forms.md +369 -0
  184. package/skills/cxtms-module-builder/ref-components-interactive.md +317 -0
  185. package/skills/cxtms-module-builder/ref-components-layout.md +390 -0
  186. package/skills/cxtms-module-builder/ref-components-specialized.md +477 -0
  187. package/skills/cxtms-workflow-builder/SKILL.md +438 -0
  188. package/skills/cxtms-workflow-builder/ref-accounting.md +66 -0
  189. package/skills/cxtms-workflow-builder/ref-communication.md +169 -0
  190. package/skills/cxtms-workflow-builder/ref-entity.md +342 -0
  191. package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +128 -0
  192. package/skills/cxtms-workflow-builder/ref-expressions-template.md +161 -0
  193. package/skills/cxtms-workflow-builder/ref-filetransfer.md +80 -0
  194. package/skills/cxtms-workflow-builder/ref-flow.md +210 -0
  195. package/skills/cxtms-workflow-builder/ref-other.md +157 -0
  196. package/skills/cxtms-workflow-builder/ref-query.md +105 -0
  197. package/skills/cxtms-workflow-builder/ref-utilities.md +417 -0
  198. package/templates/module-configuration.yaml +44 -0
  199. package/templates/module-form.yaml +152 -0
  200. package/templates/module-grid.yaml +229 -0
  201. package/templates/module-select.yaml +139 -0
  202. package/templates/module.yaml +84 -0
  203. package/templates/workflow-api-tracking.yaml +189 -0
  204. package/templates/workflow-basic.yaml +76 -0
  205. package/templates/workflow-document.yaml +155 -0
  206. package/templates/workflow-entity-trigger.yaml +90 -0
  207. package/templates/workflow-ftp-edi.yaml +158 -0
  208. package/templates/workflow-ftp-tracking.yaml +161 -0
  209. package/templates/workflow-mcp-tool.yaml +112 -0
  210. package/templates/workflow-public-api.yaml +135 -0
  211. package/templates/workflow-scheduled-execute.yaml +75 -0
  212. package/templates/workflow-scheduled.yaml +125 -0
  213. package/templates/workflow-utility.yaml +96 -0
  214. package/templates/workflow-webhook.yaml +128 -0
  215. 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