orbit-code-ai 0.1.0

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.
@@ -0,0 +1,207 @@
1
+ # Message Flow / Subflow XML Reference (Authoritative)
2
+
3
+ Load this file before creating or editing any `.msgflow` or `.subflow` file. For node xmi:type prefixes not in the core table below, also load `node_types_extended.md`.
4
+
5
+ ## Message Flow (.msgflow) XML Format
6
+
7
+ Message flows use a specific XML format based on EMF (Eclipse Modeling Framework):
8
+ - Root element is always `<ecore:EPackage>` with required xmlns declarations
9
+ - Each node type used MUST have a corresponding xmlns declaration in the root element
10
+ - Built-in nodes: `ComIbmCompute.msgnode`, `ComIbmFilter.msgnode`, `ComIbmSOAPRequest.msgnode`, etc.
11
+ - Framework subflow xmlns: path with "/" replaced by "_" for prefix, original path as value
12
+ Example: `xmlns:Qiwa_Framework_Lib_MQ_Input_Node.subflow="Qiwa/Framework/Lib/MQ_Input_Node.subflow"`
13
+ - nsURI: file path with "/" separators. nsPrefix: same path with "/" replaced by "_"
14
+ - Connections use `<connections xmi:type="eflow:FCMConnection">` with source/target terminal names
15
+ - Subflow node terminals: InTerminal.Input / OutTerminal.Output (capital I and O)
16
+ - Built-in node terminals: InTerminal.in / OutTerminal.out (lowercase)
17
+ - .subflow files get `useDefaults="true" udpSupport="true"` on eClassifiers and have FCMSource/FCMSink terminals
18
+ - .msgflow files do NOT have FCMSource/FCMSink
19
+
20
+ ### 6 Strict XML Rules for .msgflow/.subflow
21
+
22
+ 1. **Root element** must declare all required namespaces: xmlns:ecore, xmlns:xmi, xmlns:eflow, xmlns:utility — plus xmlns for EVERY node type used.
23
+ 2. **nsURI and nsPrefix** must match the namespace prefix used for each node type.
24
+ 3. **eClassifiers** must list the exact class name for every node type.
25
+ 4. **Node definitions**: Each node uses the namespace prefix of its node type:
26
+ - Compute: computeExpression="esql://routine/com.qiwa.esb.<pkg>#<Module>.Main"
27
+ - Filter: filterExpression="esql://routine/..."
28
+ - Framework subflows: xmi:type="<xmlns_prefix>:FCMComposite_1"
29
+ - Local subflows: xmi:type="com_qiwa_esb_<service>_<Name>.subflow:FCMComposite_1"
30
+ 5. **Connections**: source/target terminal names must exactly match the node type's declared terminals.
31
+ 6. **Terminal names must be exact**:
32
+ - Built-in nodes: InTerminal.in / OutTerminal.out (lowercase)
33
+ - Subflow nodes: InTerminal.Input / OutTerminal.Output (capital I and O)
34
+ - Filter: OutTerminal.true, OutTerminal.false, OutTerminal.unknown, OutTerminal.failure
35
+
36
+ ## ACE Built-in Node xmi:type Reference (Core — Most Common)
37
+
38
+ **CRITICAL:** Before adding ANY node, verify its exact xmi:type namespace prefix from this list. The format is always `<prefix>:FCMComposite_1` in the xmi:type attribute of the `<nodes>` element. For async variants, TCPIP, FTE, JMS, Email, legacy ERP, MQTT, ODM, App Connect connectors — load `node_types_extended.md`.
39
+
40
+ | Node Name | xmi:type namespace prefix |
41
+ |---|---|
42
+ | Subflow Input (FCMSource) | eflow:FCMSource |
43
+ | Subflow Output (FCMSink) | eflow:FCMSink |
44
+ | HTTP Input | ComIbmWSInput.msgnode |
45
+ | HTTP Reply | ComIbmWSReply.msgnode |
46
+ | HTTP Request | ComIbmWSRequest.msgnode |
47
+ | HTTP Header | ComIbmHTTPHeader.msgnode |
48
+ | MQ Input | ComIbmMQInput.msgnode |
49
+ | MQ Output | ComIbmMQOutput.msgnode |
50
+ | MQ Reply | ComIbmMQReply.msgnode |
51
+ | MQ Get | ComIbmMQGet.msgnode |
52
+ | Compute | ComIbmCompute.msgnode |
53
+ | Filter | ComIbmFilter.msgnode |
54
+ | Java Compute | ComIbmJavaCompute.msgnode |
55
+ | Mapping (MSL) | ComIbmMSLMapping.msgnode |
56
+ | JSONata Mapping | ComIbmJSONataMapping.msgnode |
57
+ | XSL Transform | ComIbmXslMqsi.msgnode |
58
+ | Reset Content Descriptor | ComIbmResetContentDescriptor.msgnode |
59
+ | Route | ComIbmRoute.msgnode |
60
+ | Route To Label | ComIbmRouteToLabel.msgnode |
61
+ | Label | ComIbmLabel.msgnode |
62
+ | Flow Order | ComIbmFlowOrder.msgnode |
63
+ | Sequence | ComIbmSequence.msgnode |
64
+ | Pass Through | ComIbmPassthru.msgnode |
65
+ | Throw | ComIbmThrow.msgnode |
66
+ | Try Catch | ComIbmTryCatch.msgnode |
67
+ | Trace | ComIbmTrace.msgnode |
68
+ | Validate | ComIbmValidate.msgnode |
69
+ | Log | ComIbmLog.msgnode |
70
+ | Callable Input | ComIbmCallableFlowInput.msgnode |
71
+ | Callable Reply | ComIbmCallableFlowReply.msgnode |
72
+ | Callable Flow Invoke | ComIbmCallableFlowInvoke.msgnode |
73
+ | Aggregate Control | ComIbmAggregateControl.msgnode |
74
+ | Aggregate Reply | ComIbmAggregateReply.msgnode |
75
+ | Aggregate Request | ComIbmAggregateRequest.msgnode |
76
+ | Collector | ComIbmCollector.msgnode |
77
+ | Timeout Control | ComIbmTimeoutControl.msgnode |
78
+ | Timeout Notification | ComIbmTimeoutNotification.msgnode |
79
+ | Scheduler | ComIbmScheduler.msgnode |
80
+ | Database Input | ComIbmDatabaseInput.msgnode |
81
+ | Database | ComIbmDatabase.msgnode |
82
+ | Database Retrieve | ComIbmDatabaseRetrieve.msgnode |
83
+ | File Input | ComIbmFileInput.msgnode |
84
+ | File Output | ComIbmFileOutput.msgnode |
85
+ | Kafka Consumer | ComIbmKafkaMsgConsumer.msgnode |
86
+ | Kafka Producer | ComIbmKafkaMsgProducer.msgnode |
87
+ | REST Request | ComIbmRESTRequest.msgnode |
88
+ | SOAP Input | ComIbmSOAPInput.msgnode |
89
+ | SOAP Reply | ComIbmSOAPReply.msgnode |
90
+ | SOAP Request | ComIbmSOAPRequest.msgnode |
91
+
92
+ ## Available Framework Subflows
93
+
94
+ Always use these instead of building raw nodes:
95
+
96
+ | Subflow | Purpose | Typical Properties |
97
+ |---|---|---|
98
+ | Qiwa.Framework.Lib:MQ_Input_Node | Standard MQ input with error handling | LOG_ENABLED, PROPERTIES_ENABLED, queueName, messageDomainProperty, PropertiesGroup, PropertyFilename |
99
+ | Qiwa.Framework.Lib:MQ_Output_Node | Standard MQ output | queueName |
100
+ | Qiwa.Framework.Lib:LogError | Structured error logging | (none) |
101
+ | Qiwa.Framework.Lib:Rest_Input_Node | HTTP REST gateway entry | ServiceCallCorrIDOffset, Service_URL, waitInterval |
102
+ | Qiwa.Framework.Lib:SOAP_Input_Node | SOAP gateway entry | (service-specific) |
103
+ | Qiwa.Framework.Lib:Create_Response | Standard response builder | (service-specific) |
104
+ | Qiwa.Framework.Lib:Validate_Request | Request schema validation | (service-specific) |
105
+ | Qiwa.Framework.Lib:MWBusinessErrorResponse | Business error response handler | LOG_ENABLED, OUT_QUEUE |
106
+
107
+ **Framework rule:** Always check the framework index before writing any ESQL or creating any flow node. If a framework subflow or function already does what is needed, use it — never reimplement it. Standard MQ input/output and error handling MUST use framework subflows.
108
+
109
+ ## Gateway Flow Pattern
110
+
111
+ Every REST service has a Gateway flow (GW_<FlowName>.msgflow). This is always a simple two-node flow:
112
+ 1. **Rest_Input_Node** (framework subflow) — with Service_URL and waitInterval properties
113
+ 2. **LogError** (framework subflow) — for error handling
114
+
115
+ **Connection:** Rest_Input_Node `OutTerminal.Output` → LogError `InTerminal.Input` (ONE connection only).
116
+
117
+ **CRITICAL RULES for Gateway flows:**
118
+ - Both nodes are framework SUBFLOWS, so terminals use CAPITAL letters: `OutTerminal.Output`, `InTerminal.Input`
119
+ - Do NOT use `OutTerminal.failure` or `OutTerminal.catch` — those are built-in node terminals, not subflow terminals
120
+ - There is only ONE connection between Rest_Input_Node and LogError
121
+ - colorGraphic16 uses `platform:/plugin/<AppName>/icons/full/obj16/GW_<FlowName>.gif`
122
+ - colorGraphic32 uses `platform:/plugin/<AppName>/icons/full/obj30/GW_<FlowName>.gif`
123
+
124
+ **Complete correct Gateway flow XML example (GW_DateCalcTest.msgflow):**
125
+ ```xml
126
+ <?xml version="1.0" encoding="UTF-8"?>
127
+ <ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
128
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
129
+ xmlns:eflow="http://www.ibm.com/wbi/2005/eflow"
130
+ xmlns:utility="http://www.ibm.com/wbi/2005/eflow_utility"
131
+ xmlns:Qiwa_Framework_Lib_LogError.subflow="Qiwa/Framework/Lib/LogError.subflow"
132
+ xmlns:Qiwa_Framework_Lib_Rest_Input_Node.subflow="Qiwa/Framework/Lib/Rest_Input_Node.subflow"
133
+ nsURI="com/qiwa/esb/<servicename>/GW_<FlowName>.msgflow"
134
+ nsPrefix="com_qiwa_esb_<servicename>_GW_<FlowName>.msgflow">
135
+ <eClassifiers xmi:type="eflow:FCMComposite" name="FCMComposite_1">
136
+ <eSuperTypes href="http://www.ibm.com/wbi/2005/eflow#//FCMBlock"/>
137
+ <translation xmi:type="utility:TranslatableString" key="GW_<FlowName>"
138
+ bundleName="com/qiwa/esb/<servicename>/GW_<FlowName>" pluginId="<AppName>"/>
139
+ <colorGraphic16 xmi:type="utility:GIFFileGraphic" resourceName=
140
+ "platform:/plugin/<AppName>/icons/full/obj16/GW_<FlowName>.gif"/>
141
+ <colorGraphic32 xmi:type="utility:GIFFileGraphic" resourceName=
142
+ "platform:/plugin/<AppName>/icons/full/obj30/GW_<FlowName>.gif"/>
143
+ <composition>
144
+ <nodes xmi:type="Qiwa_Framework_Lib_Rest_Input_Node.subflow:FCMComposite_1"
145
+ xmi:id="FCMComposite_1_1" location="100,100" Service_URL="/<endpoint>">
146
+ <translation xmi:type="utility:ConstantString" string="Rest Input Node"/>
147
+ </nodes>
148
+ <nodes xmi:type="Qiwa_Framework_Lib_LogError.subflow:FCMComposite_1" xmi:id=
149
+ "FCMComposite_1_2" location="300,200">
150
+ <translation xmi:type="utility:ConstantString" string="LogError"/>
151
+ </nodes>
152
+ <connections xmi:type="eflow:FCMConnection" xmi:id="FCMConnection_2"
153
+ targetNode="FCMComposite_1_2" sourceNode="FCMComposite_1_1"
154
+ sourceTerminalName="OutTerminal.Output" targetTerminalName=
155
+ "InTerminal.Input"/>
156
+ </composition>
157
+ <propertyOrganizer/>
158
+ <stickyBoard/>
159
+ </eClassifiers>
160
+ </ecore:EPackage>
161
+ ```
162
+
163
+ **Key points in the example above:**
164
+ - xmlns prefix uses `_` separator: `Qiwa_Framework_Lib_LogError.subflow`
165
+ - xmlns value uses `/` separator: `Qiwa/Framework/Lib/LogError.subflow`
166
+ - Connection uses `OutTerminal.Output` (capital O) because Rest_Input_Node is a subflow
167
+ - Connection uses `InTerminal.Input` (capital I) because LogError is a subflow
168
+ - Only ONE connection between the two nodes
169
+ - colorGraphic paths use `platform:/plugin/<AppName>/...`
170
+
171
+ ## Main Flow Pattern
172
+ Main processing flows use:
173
+ 1. MQ_Input_Node (framework) as entry point — reads from request queue
174
+ 2. Application subflows for business logic (validation, transformation, backend calls)
175
+ 3. Compute/Filter nodes for ESQL transformations
176
+ 4. MQ_Output_Node (framework) as success exit — writes to response queue
177
+ 5. MWBusinessErrorResponse (framework) as error exit
178
+
179
+ ## Standard Message Structure (Always Required)
180
+
181
+ ```xml
182
+ <Root>
183
+ <Header>
184
+ <TransactionId/>
185
+ <ChannelId/>
186
+ <ChannelUserInfo>
187
+ <UserName/>
188
+ <UserPassword/> <!-- always mask in audit -->
189
+ </ChannelUserInfo>
190
+ <ServiceCode/>
191
+ <SessionId/>
192
+ <RequestTime/>
193
+ <ResponseStatus>
194
+ <Code/>
195
+ <Status/> <!-- Success | Error -->
196
+ <EnglishMsg/>
197
+ </ResponseStatus>
198
+ </Header>
199
+ <Body/>
200
+ </Root>
201
+ ```
202
+
203
+ ## Key Constants (from CommonUtils.esql)
204
+ - Success code: `'00000000'`
205
+ - Technical error: `'99999999'`
206
+ - DB error: `'E0199998'`
207
+ - Namespace: `Qiwa.Framework.Lib`
@@ -0,0 +1,211 @@
1
+ # ACE Node xmi:type Reference — Extended (Rare & Connector Nodes)
2
+
3
+ **Load this file** when working with async patterns, legacy ERP integrations, TCPIP/FTE, MQTT, App Connect connectors, or any node not found in the core table in the system prompt.
4
+
5
+ ---
6
+
7
+ ## Rarely-Used Built-in Nodes
8
+
9
+ | Node Name | xmi:type namespace prefix |
10
+ |---|---|
11
+ | HTTP Async Request | ComIbmHTTPAsyncRequest.msgnode |
12
+ | HTTP Async Response | ComIbmHTTPAsyncResponse.msgnode |
13
+ | MQ Header | ComIbmMQHeader.msgnode |
14
+ | Publication | ComIbmPublication.msgnode |
15
+ | .NET Compute | ComIbmDotNetCompute.msgnode |
16
+ | .NET Input | ComIbmDotNetInput.msgnode |
17
+ | Resequence | ComIbmReSequence.msgnode |
18
+ | Group Scatter | ComIbmGroupScatter.msgnode |
19
+ | Group Gather | ComIbmGroupGather.msgnode |
20
+ | Group Complete | ComIbmGroupComplete.msgnode |
21
+ | Callable Flow Async Invoke | ComIbmCallableFlowAsyncInvoke.msgnode |
22
+ | Callable Flow Async Response | ComIbmCallableFlowAsyncResponse.msgnode |
23
+ | Security PEP | ComIbmSecurityPEP.msgnode |
24
+ | SOAP Async Request | ComIbmSOAPAsyncRequest.msgnode |
25
+ | SOAP Async Response | ComIbmSOAPAsyncResponse.msgnode |
26
+ | SOAP Envelope | ComIbmSOAPEnvelope.msgnode |
27
+ | SOAP Extract | ComIbmSOAPExtract.msgnode |
28
+ | REST Async Request | ComIbmRESTAsyncRequest.msgnode |
29
+ | REST Async Response | ComIbmRESTAsyncResponse.msgnode |
30
+ | App Connect REST Request | ComIbmAppConnectRESTRequest.msgnode |
31
+ | Database Route | ComIbmDatabaseRoute.msgnode |
32
+ | Change Data Capture | ComIbmChangeDataCapture.msgnode |
33
+ | File Read | ComIbmFileRead.msgnode |
34
+ | File Exists | ComIbmFileExists.msgnode |
35
+ | File Iterator | ComIbmFileIterator.msgnode |
36
+ | Email Input | ComIbmEmailInput.msgnode |
37
+ | Email Output | ComIbmEmailOutput.msgnode |
38
+ | JMS Input | ComIbmJMSClientInput.msgnode |
39
+ | JMS Output | ComIbmJMSClientOutput.msgnode |
40
+ | JMS Reply | ComIbmJMSClientReply.msgnode |
41
+ | JMS Receive | ComIbmJMSClientReceive.msgnode |
42
+ | JMS Header | ComIbmJMSHeader.msgnode |
43
+ | Kafka Read | ComIbmKafkaMsgRead.msgnode |
44
+ | TCPIP Client Input | ComIbmTCPIPClientInput.msgnode |
45
+ | TCPIP Client Output | ComIbmTCPIPClientOutput.msgnode |
46
+ | TCPIP Client Receive | ComIbmTCPIPClientReceive.msgnode |
47
+ | TCPIP Server Input | ComIbmTCPIPServerInput.msgnode |
48
+ | TCPIP Server Output | ComIbmTCPIPServerOutput.msgnode |
49
+ | TCPIP Server Receive | ComIbmTCPIPServerReceive.msgnode |
50
+ | FTE Input | ComIbmFTEInput.msgnode |
51
+ | FTE Output | ComIbmFTEOutput.msgnode |
52
+ | ODM Rules | ComIbmODMRules.msgnode |
53
+ | CICS Request | ComIbmCICSIPICRequest.msgnode |
54
+ | IMS Request | ComIbmIMSRequest.msgnode |
55
+ | CORBA Request | ComIbmCORBARequest.msgnode |
56
+ | SAP Input | ComIbmSAPInput.msgnode |
57
+ | SAP Request | ComIbmSAPRequest.msgnode |
58
+ | SAP Reply | ComIbmSAPReply.msgnode |
59
+ | JDEdwards Input | ComIbmJDEdwardsInput.msgnode |
60
+ | JDEdwards Request | ComIbmJDEdwardsRequest.msgnode |
61
+ | PeopleSoft Input | ComIbmPeopleSoftInput.msgnode |
62
+ | PeopleSoft Request | ComIbmPeopleSoftRequest.msgnode |
63
+ | Siebel Input | ComIbmSiebelInput.msgnode |
64
+ | Siebel Request | ComIbmSiebelRequest.msgnode |
65
+ | CD Input | ComIbmCDInput.msgnode |
66
+ | CD Output | ComIbmCDOutput.msgnode |
67
+ | Registry Lookup | SRRetrieveEntity.msgnode |
68
+ | Endpoint Lookup | SRRetrieveITService.msgnode |
69
+ | MQTT Subscribe | com_ibm_connector_mqtt_ComIbmEventInput.msgnode (connectorName="MQTT") |
70
+ | MQTT Publish | com_ibm_connector_mqtt_ComIbmOutput.msgnode (connectorName="MQTT") |
71
+ | Loop Back Request | com_ibm_connector_loopback_ComIbmRequest.msgnode (connectorName="iib-loopback-connector") |
72
+ | Salesforce Request (no discovery) | com_ibm_connector_salesforce_ComIbmRequest.msgnode (connectorName="iib-salesforce-connector") |
73
+
74
+ ---
75
+
76
+ ## Application Connector Nodes
77
+
78
+ **Pattern:** `ComIbmApplicationConnectorRequest_<type>.msgnode` or `ComIbmApplicationConnectorInput_<type>.msgnode` plus `applicationConnectorType="<type>"`.
79
+
80
+ | Connector | type value |
81
+ |---|---|
82
+ | Amazon CloudWatch | amazoncloudwatch |
83
+ | Amazon DynamoDB | amazondynamodb |
84
+ | Amazon EC2 | amazonec2 |
85
+ | Amazon EventBridge | amazoneventbridge |
86
+ | Amazon Kinesis | amazonkinesis |
87
+ | Amazon Lambda | amazonlambda |
88
+ | Amazon RDS | amazonrds |
89
+ | Amazon S3 | amazons3 |
90
+ | Amazon SES | amazonses |
91
+ | Amazon SNS | amazonsns |
92
+ | Amazon SQS | amazonsqs |
93
+ | Apache Pulsar | apachepulsar |
94
+ | Asana | asana |
95
+ | Astra DB | astradb |
96
+ | Azure Blob Storage | azureblobstorage |
97
+ | Azure Cosmos DB | azurecosmosdb |
98
+ | Azure DevOps | azuredevops |
99
+ | Azure Event Hubs | azureeventhub |
100
+ | Azure OpenAI | azureopenai |
101
+ | Azure Service Bus | azureservicebus |
102
+ | Azure Entra ID (AD) | azuread |
103
+ | BambooHR | bamboohr |
104
+ | Box | box |
105
+ | Businessmap | businessmap |
106
+ | Calendly | calendly |
107
+ | ClickSend | clicksend |
108
+ | CMIS | cmis |
109
+ | Confluence | confluence |
110
+ | Couchbase | couchbase |
111
+ | Coupa | coupa |
112
+ | Crystal Ball | crystalball |
113
+ | Databricks | databricks |
114
+ | DocuSign | docusign |
115
+ | Dropbox | dropbox |
116
+ | Eventbrite | eventbrite |
117
+ | Expensify | expensify |
118
+ | Factorial HR | factorialhr |
119
+ | Freshservice | freshservice |
120
+ | Front | front |
121
+ | GitHub | github |
122
+ | GitLab | gitlab |
123
+ | Gmail | gmail |
124
+ | Google Analytics 4 | googleanalytics4 |
125
+ | Google Calendar | googlecalendar |
126
+ | Google Chat | googlechat |
127
+ | Google BigQuery | googlebigquery |
128
+ | Google Cloud PubSub | googlepubsub |
129
+ | Google Cloud Storage | googlecloudstorage |
130
+ | Google Contacts | googlecontacts |
131
+ | Google Drive | googledrive |
132
+ | Google Gemini | googlegemini |
133
+ | Google Groups | googlegroups |
134
+ | Google Sheets | googlesheet |
135
+ | Google Tasks | googletasks |
136
+ | Google Translate | googletranslate |
137
+ | Greenhouse | greenhouse |
138
+ | HubSpot CRM | hubspotcrm |
139
+ | HubSpot Marketing | hubspotmarketing |
140
+ | Hunter | hunter |
141
+ | IBM Aspera | ibmaspera |
142
+ | IBM Cloud Object Storage S3 | ibmcoss3 |
143
+ | IBM Cloudant | cloudantdb |
144
+ | IBM EWM | ibmewm |
145
+ | IBM FileNet | filenet |
146
+ | IBM Food Trust | ift |
147
+ | IBM Maximo | maximo |
148
+ | IBM OpenPages | ibmopenpages |
149
+ | IBM Planning Analytics | planninganalytics |
150
+ | IBM Sterling IV | ibmsterlingiv |
151
+ | IBM Targetprocess | apptiotargetprocess |
152
+ | IBM Watson Discovery | watsondiscovery |
153
+ | IBM watsonx.ai | ibmwatsonxai |
154
+ | IBM zOS Connect | zosconnect |
155
+ | Infobip | infobip |
156
+ | Insightly | insightly |
157
+ | Jenkins | jenkins |
158
+ | Jira | jira |
159
+ | LDAP | ldap |
160
+ | Magento | magento |
161
+ | Mailchimp | mailchimp |
162
+ | Marketo | marketo |
163
+ | Microsoft Active Directory | msad |
164
+ | Microsoft Dynamics 365 Finance | msdynamicsfando |
165
+ | Microsoft Dynamics 365 Sales | msdynamicscrmrest |
166
+ | Microsoft Excel Online | msexcel |
167
+ | Microsoft Exchange | msexchange |
168
+ | Microsoft OneDrive | msonedrive |
169
+ | Microsoft OneNote | msonenote |
170
+ | Microsoft Power BI | mspowerbi |
171
+ | Microsoft SharePoint | mssharepoint |
172
+ | Microsoft Teams | msteams |
173
+ | Microsoft To Do | mstodo |
174
+ | Microsoft Viva Engage | yammer |
175
+ | Milvus | milvus |
176
+ | monday.com | mondaydotcom |
177
+ | Oracle E-Business Suite | oracleebs |
178
+ | Oracle HCM | oraclehcm |
179
+ | Pinecone | pineconedb |
180
+ | Redis | rediscache |
181
+ | Salesforce | salesforce |
182
+ | Salesforce Account Engagement | salesforceae |
183
+ | Salesforce Commerce Cloud | sfcommerceclouddata |
184
+ | Salesforce Marketing Cloud | salesforcemc |
185
+ | SAP OData | sapodata |
186
+ | SAP Ariba | sapariba |
187
+ | SAP S4 HANA | saps4hana |
188
+ | SAP SuccessFactors | sapsuccessfactors |
189
+ | ServiceNow | servicenow |
190
+ | Shopify | shopify |
191
+ | Slack | slack |
192
+ | Snowflake | snowflake |
193
+ | Splunk | splunk |
194
+ | Square | square |
195
+ | SurveyMonkey | surveymonkey |
196
+ | The Weather Company | ibmtwc |
197
+ | Toggl Track | toggltrack |
198
+ | Trello | trello |
199
+ | Twilio | twilio |
200
+ | UKG (Kronos) | kronos |
201
+ | Vespa | vespa |
202
+ | WordPress | wordpress |
203
+ | Workday | workday |
204
+ | Wrike | wrike |
205
+ | Wufoo | wufoo |
206
+ | Yapily | yapily |
207
+ | Zendesk Service | zendeskservice |
208
+ | Zoho Books | zohobooks |
209
+ | Zoho CRM | zohocrm |
210
+ | Zoho Inventory | zohoinventory |
211
+ | Zoho Recruit | zohorecruit |
@@ -0,0 +1,212 @@
1
+ # Template: File Input/Output Flow
2
+
3
+ Use this template when building a flow triggered by a file drop, or that writes output to the file system (batch processing, file-based integrations).
4
+
5
+ ---
6
+
7
+ ## Files to Create
8
+
9
+ ```
10
+ MyServiceApp/
11
+ ├── .project
12
+ ├── ProcessMyFile.msgflow
13
+ ├── ProcessMyFile_Compute.esql
14
+ ├── ProcessMyFile_MapOutput.esql
15
+ └── MyFile.xsd ← optional: schema for validation
16
+ ```
17
+
18
+ ---
19
+
20
+ ## Message Flow Structure (ProcessMyFile.msgflow)
21
+
22
+ ### File Input → Backend → File Output
23
+
24
+ ```
25
+ [File_Input_Node] ← reads file from directory
26
+ ↓ out
27
+ [PropertyReader] ← ApplicationLabel="BS_MyService", PropertiesFileName="MYSERVICE-PROPERTIES.xml"
28
+ ↓ out
29
+ [LogAudit] ← flowStart=TRUE
30
+ ↓ out
31
+ [ProcessMyFile_Compute] ← parse/validate file content, prepare backend call
32
+ ↓ out
33
+ [HTTPRequestAdapter] ← optional: call backend (if needed)
34
+ ↓ out
35
+ [HTTPResponseAdapter] ← optional
36
+ ↓ out
37
+ [ProcessMyFile_MapOutput] ← format output data
38
+ ↓ out
39
+ [LogOutgoingAudit] ← flowStart=FALSE
40
+ ↓ out
41
+ [File_Output_Node] ← write result file
42
+
43
+ All failure terminals → [ErrorHandler] → [LogError] → [MQ_Dead_Output_Node]
44
+ ```
45
+
46
+ ### File Input → MQ Output (trigger pattern)
47
+
48
+ ```
49
+ [File_Input_Node]
50
+ ↓ out
51
+ [PropertyReader]
52
+ ↓ out
53
+ [LogAudit]
54
+ ↓ out
55
+ [ProcessMyFile_Compute] ← convert file to ESB message format
56
+ ↓ out
57
+ [LogOutgoingAudit]
58
+ ↓ out
59
+ [MQ_Output_Node] ← push to MQ for downstream processing
60
+ ```
61
+
62
+ ---
63
+
64
+ ## ProcessMyFile_Compute.esql
65
+
66
+ ```esql
67
+ BROKER SCHEMA Qiwa.BS_MyService
68
+
69
+ CREATE COMPUTE MODULE ProcessMyFile_Compute
70
+ CREATE FUNCTION Main() RETURNS BOOLEAN
71
+ BEGIN
72
+ CALL CopyMessageHeaders();
73
+ CALL CopyEntireMessage();
74
+
75
+ -- File content arrives in InputRoot.MRM (if using MRM domain)
76
+ -- or InputRoot.XMLNSC (if XML file with XMLNSC domain)
77
+ -- or InputRoot.BLOB.BLOB (raw binary)
78
+
79
+ -- Example: parse a delimited file record
80
+ DECLARE recordCount INT CARDINALITY(InputRoot.MRM.Record[]);
81
+ DECLARE i INT 1;
82
+
83
+ WHILE i <= recordCount DO
84
+ -- Process each record
85
+ DECLARE customerId CHARACTER InputRoot.MRM.Record[i].CustomerId;
86
+ -- ... your logic
87
+ SET i = i + 1;
88
+ END WHILE;
89
+
90
+ RETURN TRUE;
91
+ END;
92
+ END MODULE;
93
+ ```
94
+
95
+ ---
96
+
97
+ ## ProcessMyFile_MapOutput.esql
98
+
99
+ ```esql
100
+ BROKER SCHEMA Qiwa.BS_MyService
101
+
102
+ CREATE COMPUTE MODULE ProcessMyFile_MapOutput
103
+ CREATE FUNCTION Main() RETURNS BOOLEAN
104
+ BEGIN
105
+ CALL CopyMessageHeaders();
106
+
107
+ -- Build output file content
108
+ -- For XML output:
109
+ SET OutputRoot.XMLNSC.OutputFile.ProcessedDate = CURRENT_TIMESTAMP;
110
+ SET OutputRoot.XMLNSC.OutputFile.RecordCount = Environment.ProcessedCount;
111
+ -- ... map output fields
112
+
113
+ -- For File_Output_Node: set target filename
114
+ SET OutputRoot.ComIbmFileHeader.Filename =
115
+ 'output_' || CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyyMMddHHmmss') || '.xml';
116
+
117
+ RETURN TRUE;
118
+ END;
119
+ END MODULE;
120
+ ```
121
+
122
+ ---
123
+
124
+ ## File_Input_Node Configuration
125
+
126
+ Set at the node level in the message flow:
127
+
128
+ | Property | Example Value | Notes |
129
+ |---|---|---|
130
+ | `Directory` | `/data/input/myservice` | Input directory to watch |
131
+ | `Filename` | `*.xml` or `*.csv` | File pattern to pick up |
132
+ | `FileSuffix` | `.xml` | Alternative to Filename pattern |
133
+ | `Delete` | `YES` | Delete file after pickup |
134
+ | `RecordDefinition` | (MRM message set) | For structured/delimited files |
135
+
136
+ ---
137
+
138
+ ## File_Output_Node Configuration
139
+
140
+ | Property | Example Value | Notes |
141
+ |---|---|---|
142
+ | `Directory` | `/data/output/myservice` | Output directory |
143
+ | `Filename` | Set dynamically in ESQL | Or fixed filename |
144
+ | `WriteMode` | `WRITE` | WRITE (overwrite) or APPEND |
145
+
146
+ ---
147
+
148
+ ## MYSERVICE-PROPERTIES.xml (File variant)
149
+
150
+ ```xml
151
+ <?xml version="1.0" encoding="UTF-8"?>
152
+ <properties refresh-policy="automatic">
153
+
154
+ <group name="BS_MyService.ProcessMyFile">
155
+
156
+ <group name="Logging">
157
+ <property name="LogEnabled" value="TRUE" />
158
+ <property name="AuditEnabled" value="TRUE" />
159
+ <property name="MaskingEnabled" value="FALSE" />
160
+ <property name="key1" value="FILE.NAME" />
161
+ <property name="value1" value="*.ComIbmFileHeader.Filename" />
162
+ </group>
163
+
164
+ <group name="Retry">
165
+ <property name="RetryEnabled" value="TRUE" />
166
+ <property name="maxRetryCount" value="3" />
167
+ <property name="minWaitDurationSec" value="300" />
168
+ </group>
169
+
170
+ <group name="SchemaValidation">
171
+ <property name="ValidationEnabled" value="FALSE" />
172
+ </group>
173
+
174
+ <group name="Priority">
175
+ <property name="Priority" value="4" />
176
+ </group>
177
+
178
+ </group>
179
+
180
+ </properties>
181
+ ```
182
+
183
+ ---
184
+
185
+ ## FileCopy.subflow
186
+
187
+ For simple file routing/archival within a flow:
188
+
189
+ ```
190
+ [File_Input_Node]
191
+
192
+ [FileCopy] ← copy to archive directory before processing
193
+
194
+ [ProcessMyFile_Compute]
195
+
196
+ [File_Output_Node]
197
+ ```
198
+
199
+ ---
200
+
201
+ ## Checklist for New File Flow
202
+
203
+ - [ ] Create `.msgflow` with `File_Input_Node` as entry point
204
+ - [ ] Set input directory, filename pattern, and delete flag on `File_Input_Node`
205
+ - [ ] Create Compute ESQL for file parsing/processing logic
206
+ - [ ] Create MapOutput ESQL for output formatting
207
+ - [ ] Add properties group to properties XML file
208
+ - [ ] Wire ALL failure terminals to `ErrorHandler` → `LogError` → `MQ_Dead_Output_Node`
209
+ - [ ] Set `ApplicationLabel` and `PropertiesFileName` on `PropertyReader` node
210
+ - [ ] Set output filename dynamically in `MapOutput` ESQL
211
+ - [ ] Consider `FileCopy` for archiving input before processing
212
+ - [ ] If schema validation needed: set `ValidationEnabled=TRUE` and provide XSD