@bonsae/node-red-salesforce 0.4.0 → 0.5.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.
@@ -34,6 +34,9 @@
34
34
  <tbody>
35
35
  <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
36
36
  <tr><td>Abfrage</td><td>query</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
37
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
38
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
39
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
37
40
  </tbody>
38
41
  </table>
39
42
  </div>
@@ -70,11 +73,11 @@
70
73
  <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
71
74
  <tr><td>Operation</td><td>operation</td><td></td><td>Ja</td><td><code>"create"</code></td><td></td></tr>
72
75
  <tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
73
- <tr><td></td><td>record</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
76
+ <tr><td>Datensatz</td><td>record</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
74
77
  <tr><td>Externes ID-Feld</td><td>externalIdField</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
75
- <tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
76
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
77
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
78
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
79
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
80
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
78
81
  </tbody>
79
82
  </table>
80
83
  </div>
@@ -109,15 +112,16 @@
109
112
  <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
110
113
  <tr><td>Operation</td><td>operation</td><td></td><td>Ja</td><td><code>"insert"</code></td><td></td></tr>
111
114
  <tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
115
+ <tr><td>SOQL-Abfrage</td><td>query</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
112
116
  <tr><td>Externes ID-Feld</td><td>externalIdField</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
113
- <tr><td></td><td>assignmentRuleId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
114
- <tr><td></td><td>columnDelimiter</td><td></td><td>Ja</td><td><code>"COMMA"</code></td><td></td></tr>
115
- <tr><td></td><td>lineEnding</td><td></td><td>Ja</td><td><code>"LF"</code></td><td></td></tr>
116
- <tr><td></td><td>pollInterval</td><td>number [min: 1000]</td><td>Ja</td><td><code>5000</code></td><td></td></tr>
117
- <tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Ja</td><td><code>60000</code></td><td></td></tr>
118
- <tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
119
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>true</code></td><td></td></tr>
120
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
117
+ <tr><td>Zuweisungsregel-ID</td><td>assignmentRuleId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
118
+ <tr><td>Spaltentrennzeichen</td><td>columnDelimiter</td><td></td><td>Ja</td><td><code>"COMMA"</code></td><td></td></tr>
119
+ <tr><td>Zeilenende</td><td>lineEnding</td><td></td><td>Ja</td><td><code>"LF"</code></td><td></td></tr>
120
+ <tr><td>Abfrageintervall (ms)</td><td>pollInterval</td><td>number [min: 1000]</td><td>Ja</td><td><code>5000</code></td><td></td></tr>
121
+ <tr><td>Abfrage-Timeout (ms)</td><td>pollTimeout</td><td>number [min: 5000]</td><td>Ja</td><td><code>60000</code></td><td></td></tr>
122
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
123
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
124
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
121
125
  </tbody>
122
126
  </table>
123
127
  </div>
@@ -127,7 +131,17 @@
127
131
  <table width="100%" style="min-width:500px">
128
132
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
129
133
  <tbody>
130
- <tr><td>Datensatz-Array oder SOQL-Abfrage</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
134
+ <tr><td>Datensatz-Array, CSV-String, lesbarer Stream (Aufnahme) oder Auslöser (Abfrage)</td><td>payload</td><td></td><td>Ja</td><td>Records array, CSV string, readable stream (ingest) or SOQL string (query)</td></tr>
135
+ </tbody>
136
+ </table>
137
+ </div>
138
+
139
+ <h3>Ausgang</h3>
140
+ <div style="overflow-x:auto">
141
+ <table width="100%" style="min-width:500px">
142
+ <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
143
+ <tbody>
144
+ <tr><td>Abfrage: einzelner Datensatz. Aufnahme: { successfulResults, failedResults, unprocessedRecords }</td><td>payload</td><td></td><td>Ja</td><td>Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }</td></tr>
131
145
  </tbody>
132
146
  </table>
133
147
  </div>
@@ -141,9 +155,9 @@
141
155
  <tbody>
142
156
  <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
143
157
  <tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
144
- <tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
145
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
146
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
158
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
159
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
160
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
147
161
  </tbody>
148
162
  </table>
149
163
  </div>
@@ -153,7 +167,7 @@
153
167
  <table width="100%" style="min-width:500px">
154
168
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
155
169
  <tbody>
156
- <tr><td>Eingabe-Payload</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
170
+ <tr><td>SObject-API-Name (überschreibt die Konfiguration, falls angegeben)</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
157
171
  </tbody>
158
172
  </table>
159
173
  </div>
@@ -163,7 +177,7 @@
163
177
  <table width="100%" style="min-width:500px">
164
178
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
165
179
  <tbody>
166
- <tr><td>SObject-Metadaten</td><td>payload</td><td>object</td><td>Ja</td><td></td></tr>
180
+ <tr><td>SObject-Beschreibungsergebnis mit Feldern, untergeordneten Beziehungen und Datensatztypinformationen</td><td>payload</td><td>object</td><td>Ja</td><td></td></tr>
167
181
  </tbody>
168
182
  </table>
169
183
  </div>
@@ -180,8 +194,9 @@
180
194
  <tr><td>Abonnieren ab</td><td>subscribeType</td><td></td><td>Ja</td><td><code>"LATEST"</code></td><td></td></tr>
181
195
  <tr><td>Replay-ID</td><td>replayId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
182
196
  <tr><td>Batchgröße</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Ja</td><td><code>100</code></td><td></td></tr>
183
- <tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
184
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
197
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
198
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
199
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
185
200
  </tbody>
186
201
  </table>
187
202
  </div>
@@ -199,19 +214,61 @@
199
214
  </table>
200
215
  </div>
201
216
  </script>
202
- <script type="text/html" data-help-name="salesforce-apex">
203
- <p>Ruft einen Salesforce Apex REST-Endpunkt auf.</p>
217
+ <script type="text/html" data-help-name="salesforce-apex-invocation">
218
+ <p>Ruft vorhandene Apex-REST-Endpunkte oder Invocable Actions in einer Salesforce-Org auf.</p>
204
219
  <h3>Eigenschaften</h3>
205
220
  <div style="overflow-x:auto">
206
221
  <table width="100%" style="min-width:500px">
207
222
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
208
223
  <tbody>
209
224
  <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
225
+ <tr><td>Typ</td><td>apexType</td><td></td><td>Ja</td><td><code>"rest"</code></td><td></td></tr>
210
226
  <tr><td>Methode</td><td>method</td><td></td><td>Ja</td><td><code>"POST"</code></td><td></td></tr>
211
- <tr><td>Pfad</td><td>path</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
212
- <tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
213
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
214
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
227
+ <tr><td>Endpunkt</td><td>path</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
228
+ <tr><td>Aktion</td><td>actionName</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
229
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
230
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
231
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
232
+ </tbody>
233
+ </table>
234
+ </div>
235
+
236
+ <h3>Eingang</h3>
237
+ <div style="overflow-x:auto">
238
+ <table width="100%" style="min-width:500px">
239
+ <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
240
+ <tbody>
241
+ <tr><td>Anfragekörper für POST/PUT/PATCH, oder ignoriert für GET/DELETE</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
242
+ </tbody>
243
+ </table>
244
+ </div>
245
+
246
+ <h3>Ausgang</h3>
247
+ <div style="overflow-x:auto">
248
+ <table width="100%" style="min-width:500px">
249
+ <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
250
+ <tbody>
251
+ <tr><td>Apex-Endpunkt-Antwort</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
252
+ </tbody>
253
+ </table>
254
+ </div>
255
+ </script>
256
+ <script type="text/html" data-help-name="salesforce-apex-code">
257
+ <p>Stellt benutzerdefinierten Apex-Code in einer Salesforce-Org bereit und fuehrt ihn aus. Unterstuetzt Invocable- und REST-Typen.</p>
258
+ <h3>Eigenschaften</h3>
259
+ <div style="overflow-x:auto">
260
+ <table width="100%" style="min-width:500px">
261
+ <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
262
+ <tbody>
263
+ <tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
264
+ <tr><td>Typ</td><td>apexType</td><td></td><td>Ja</td><td><code>"invocable"</code></td><td></td></tr>
265
+ <tr><td>Klassenname</td><td>className</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
266
+ <tr><td>URL-Zuordnung</td><td>urlMapping</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
267
+ <tr><td>HTTP-Methode</td><td>httpMethod</td><td></td><td>Ja</td><td><code>"HttpPost"</code></td><td></td></tr>
268
+ <tr><td>Apex-Code</td><td>code</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
269
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
270
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
271
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
215
272
  </tbody>
216
273
  </table>
217
274
  </div>
@@ -221,7 +278,7 @@
221
278
  <table width="100%" style="min-width:500px">
222
279
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
223
280
  <tbody>
224
- <tr><td>Anfragekörper</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
281
+ <tr><td>Eingabedaten, die als JSON-String an die Apex-Methode übergeben werden</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
225
282
  </tbody>
226
283
  </table>
227
284
  </div>
@@ -231,7 +288,7 @@
231
288
  <table width="100%" style="min-width:500px">
232
289
  <thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
233
290
  <tbody>
234
- <tr><td>Apex-Antwort</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
291
+ <tr><td>Apex-Ausführungsantwort</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
235
292
  </tbody>
236
293
  </table>
237
294
  </div>
@@ -1,10 +1,45 @@
1
1
  {
2
- "salesforce-apex": {
2
+ "salesforce-apex-code": {
3
3
  "configs": {
4
4
  "name": "Name",
5
5
  "connection": "Verbindung",
6
+ "apexType": "Typ",
7
+ "className": "Klassenname",
8
+ "urlMapping": "URL-Zuordnung",
9
+ "httpMethod": "HTTP-Methode",
10
+ "code": "Apex-Code"
11
+ },
12
+ "toggles": {
13
+ "validateInput": "Eingabe validieren",
14
+ "validateOutput": "Ausgabe validieren",
15
+ "errorPort": "Fehler-Port",
16
+ "completePort": "Abschluss-Port",
17
+ "statusPort": "Status-Port"
18
+ },
19
+ "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
20
+ "label": "Apex Code",
21
+ "description": "Stellt benutzerdefinierten Apex-Code in einer Salesforce-Org bereit und fuehrt ihn aus. Unterstuetzt Invocable- und REST-Typen.",
22
+ "inputLabels": "Eingabe",
23
+ "outputLabels": [
24
+ "Antwort"
25
+ ],
26
+ "input": {
27
+ "payload": "Eingabedaten, die als JSON-String an die Apex-Methode übergeben werden"
28
+ },
29
+ "outputs": [
30
+ {
31
+ "payload": "Apex-Ausführungsantwort"
32
+ }
33
+ ]
34
+ },
35
+ "salesforce-apex-invocation": {
36
+ "configs": {
37
+ "name": "Name",
38
+ "connection": "Verbindung",
39
+ "apexType": "Typ",
6
40
  "method": "Methode",
7
- "path": "Pfad"
41
+ "path": "Endpunkt",
42
+ "actionName": "Aktion"
8
43
  },
9
44
  "toggles": {
10
45
  "validateInput": "Eingabe validieren",
@@ -14,18 +49,18 @@
14
49
  "statusPort": "Status-Port"
15
50
  },
16
51
  "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
17
- "label": "Apex",
18
- "description": "Ruft einen Salesforce Apex REST-Endpunkt auf.",
52
+ "label": "Apex Invocation",
53
+ "description": "Ruft vorhandene Apex-REST-Endpunkte oder Invocable Actions in einer Salesforce-Org auf.",
19
54
  "inputLabels": "Anfrage",
20
55
  "outputLabels": [
21
56
  "Antwort"
22
57
  ],
23
58
  "input": {
24
- "payload": "Anfragekörper"
59
+ "payload": "Anfragekörper für POST/PUT/PATCH, oder ignoriert für GET/DELETE"
25
60
  },
26
61
  "outputs": [
27
62
  {
28
- "payload": "Apex-Antwort"
63
+ "payload": "Apex-Endpunkt-Antwort"
29
64
  }
30
65
  ]
31
66
  },
@@ -35,7 +70,13 @@
35
70
  "connection": "Verbindung",
36
71
  "operation": "Operation",
37
72
  "sObjectType": "SObject-Typ",
38
- "externalIdField": "Externes ID-Feld"
73
+ "query": "SOQL-Abfrage",
74
+ "externalIdField": "Externes ID-Feld",
75
+ "assignmentRuleId": "Zuweisungsregel-ID",
76
+ "columnDelimiter": "Spaltentrennzeichen",
77
+ "lineEnding": "Zeilenende",
78
+ "pollInterval": "Abfrageintervall (ms)",
79
+ "pollTimeout": "Abfrage-Timeout (ms)"
39
80
  },
40
81
  "toggles": {
41
82
  "validateInput": "Eingabe validieren",
@@ -53,11 +94,11 @@
53
94
  "Job Abgeschlossen"
54
95
  ],
55
96
  "input": {
56
- "payload": "Datensatz-Array oder SOQL-Abfrage"
97
+ "payload": "Datensatz-Array, CSV-String, lesbarer Stream (Aufnahme) oder Auslöser (Abfrage)"
57
98
  },
58
99
  "outputs": [
59
100
  {
60
- "payload": "Massenoperationsergebnisse"
101
+ "payload": "Abfrage: einzelner Datensatz. Aufnahme: { successfulResults, failedResults, unprocessedRecords }"
61
102
  }
62
103
  ]
63
104
  },
@@ -106,11 +147,11 @@
106
147
  "SObject-Metadaten"
107
148
  ],
108
149
  "input": {
109
- "payload": "Eingabe-Payload"
150
+ "payload": "SObject-API-Name (überschreibt die Konfiguration, falls angegeben)"
110
151
  },
111
152
  "outputs": [
112
153
  {
113
- "payload": "SObject-Metadaten"
154
+ "payload": "SObject-Beschreibungsergebnis mit Feldern, untergeordneten Beziehungen und Datensatztypinformationen"
114
155
  }
115
156
  ]
116
157
  },
@@ -120,7 +161,8 @@
120
161
  "connection": "Verbindung",
121
162
  "operation": "Operation",
122
163
  "sObjectType": "SObject-Typ",
123
- "externalIdField": "Externes ID-Feld"
164
+ "externalIdField": "Externes ID-Feld",
165
+ "record": "Datensatz"
124
166
  },
125
167
  "toggles": {
126
168
  "validateInput": "Eingabe validieren",
@@ -34,6 +34,9 @@
34
34
  <tbody>
35
35
  <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
36
36
  <tr><td>Query</td><td>query</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
37
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
38
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
39
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
37
40
  </tbody>
38
41
  </table>
39
42
  </div>
@@ -70,11 +73,11 @@
70
73
  <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
71
74
  <tr><td>Operation</td><td>operation</td><td></td><td>Yes</td><td><code>"create"</code></td><td></td></tr>
72
75
  <tr><td>SObject Type</td><td>sObjectType</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
73
- <tr><td></td><td>record</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
76
+ <tr><td>Record</td><td>record</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
74
77
  <tr><td>External ID Field</td><td>externalIdField</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
75
- <tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
76
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
77
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
78
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
79
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
80
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
78
81
  </tbody>
79
82
  </table>
80
83
  </div>
@@ -100,7 +103,7 @@
100
103
  </div>
101
104
  </script>
102
105
  <script type="text/html" data-help-name="salesforce-bulk">
103
- <p>Performs bulk operations using the Salesforce Bulk API 2.0 for large data volumes.</p>
106
+ <p>Performs bulk operations using the Salesforce Bulk API 2.0 for large data volumes. Accepts arrays, CSV strings, or readable streams for ingest. SOQL strings for query.</p>
104
107
  <h3>Properties</h3>
105
108
  <div style="overflow-x:auto">
106
109
  <table width="100%" style="min-width:500px">
@@ -109,15 +112,16 @@
109
112
  <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
110
113
  <tr><td>Operation</td><td>operation</td><td></td><td>Yes</td><td><code>"insert"</code></td><td></td></tr>
111
114
  <tr><td>SObject Type</td><td>sObjectType</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
115
+ <tr><td>SOQL Query</td><td>query</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
112
116
  <tr><td>External ID Field</td><td>externalIdField</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
113
- <tr><td></td><td>assignmentRuleId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
114
- <tr><td></td><td>columnDelimiter</td><td></td><td>Yes</td><td><code>"COMMA"</code></td><td></td></tr>
115
- <tr><td></td><td>lineEnding</td><td></td><td>Yes</td><td><code>"LF"</code></td><td></td></tr>
116
- <tr><td></td><td>pollInterval</td><td>number [min: 1000]</td><td>Yes</td><td><code>5000</code></td><td></td></tr>
117
- <tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Yes</td><td><code>60000</code></td><td></td></tr>
118
- <tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
119
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>true</code></td><td></td></tr>
120
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
117
+ <tr><td>Assignment Rule ID</td><td>assignmentRuleId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
118
+ <tr><td>Column Delimiter</td><td>columnDelimiter</td><td></td><td>Yes</td><td><code>"COMMA"</code></td><td></td></tr>
119
+ <tr><td>Line Ending</td><td>lineEnding</td><td></td><td>Yes</td><td><code>"LF"</code></td><td></td></tr>
120
+ <tr><td>Poll Interval (ms)</td><td>pollInterval</td><td>number [min: 1000]</td><td>Yes</td><td><code>5000</code></td><td></td></tr>
121
+ <tr><td>Poll Timeout (ms)</td><td>pollTimeout</td><td>number [min: 5000]</td><td>Yes</td><td><code>60000</code></td><td></td></tr>
122
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
123
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
124
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
121
125
  </tbody>
122
126
  </table>
123
127
  </div>
@@ -127,7 +131,17 @@
127
131
  <table width="100%" style="min-width:500px">
128
132
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
129
133
  <tbody>
130
- <tr><td>Records array or SOQL query</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
134
+ <tr><td>Records array, CSV string, readable stream (ingest) or trigger (query)</td><td>payload</td><td></td><td>Yes</td><td>Records array, CSV string, readable stream (ingest) or SOQL string (query)</td></tr>
135
+ </tbody>
136
+ </table>
137
+ </div>
138
+
139
+ <h3>Output</h3>
140
+ <div style="overflow-x:auto">
141
+ <table width="100%" style="min-width:500px">
142
+ <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
143
+ <tbody>
144
+ <tr><td>Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }</td><td>payload</td><td></td><td>Yes</td><td>Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }</td></tr>
131
145
  </tbody>
132
146
  </table>
133
147
  </div>
@@ -141,9 +155,9 @@
141
155
  <tbody>
142
156
  <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
143
157
  <tr><td>SObject Type</td><td>sObjectType</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
144
- <tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
145
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
146
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
158
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
159
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
160
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
147
161
  </tbody>
148
162
  </table>
149
163
  </div>
@@ -153,7 +167,7 @@
153
167
  <table width="100%" style="min-width:500px">
154
168
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
155
169
  <tbody>
156
- <tr><td>Input payload</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
170
+ <tr><td>SObject API name (overrides config if provided)</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
157
171
  </tbody>
158
172
  </table>
159
173
  </div>
@@ -163,7 +177,7 @@
163
177
  <table width="100%" style="min-width:500px">
164
178
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
165
179
  <tbody>
166
- <tr><td>SObject describe metadata</td><td>payload</td><td>object</td><td>Yes</td><td></td></tr>
180
+ <tr><td>SObject describe result with fields, child relationships, and record type info</td><td>payload</td><td>object</td><td>Yes</td><td></td></tr>
167
181
  </tbody>
168
182
  </table>
169
183
  </div>
@@ -180,8 +194,9 @@
180
194
  <tr><td>Subscribe From</td><td>subscribeType</td><td></td><td>Yes</td><td><code>"LATEST"</code></td><td></td></tr>
181
195
  <tr><td>Replay ID</td><td>replayId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
182
196
  <tr><td>Batch Size</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Yes</td><td><code>100</code></td><td></td></tr>
183
- <tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
184
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
197
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
198
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
199
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
185
200
  </tbody>
186
201
  </table>
187
202
  </div>
@@ -199,19 +214,61 @@
199
214
  </table>
200
215
  </div>
201
216
  </script>
202
- <script type="text/html" data-help-name="salesforce-apex">
203
- <p>Invokes a Salesforce Apex REST endpoint.</p>
217
+ <script type="text/html" data-help-name="salesforce-apex-invocation">
218
+ <p>Calls existing Apex REST endpoints or Invocable Actions on a Salesforce org.</p>
204
219
  <h3>Properties</h3>
205
220
  <div style="overflow-x:auto">
206
221
  <table width="100%" style="min-width:500px">
207
222
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th>Default</th><th style="width:35%">Description</th></tr></thead>
208
223
  <tbody>
209
224
  <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
225
+ <tr><td>Type</td><td>apexType</td><td></td><td>Yes</td><td><code>"rest"</code></td><td></td></tr>
210
226
  <tr><td>Method</td><td>method</td><td></td><td>Yes</td><td><code>"POST"</code></td><td></td></tr>
211
- <tr><td>Path</td><td>path</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
212
- <tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
213
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
214
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
227
+ <tr><td>Endpoint</td><td>path</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
228
+ <tr><td>Action</td><td>actionName</td><td>string</td><td>Yes</td><td><code>""</code></td><td></td></tr>
229
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
230
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
231
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
232
+ </tbody>
233
+ </table>
234
+ </div>
235
+
236
+ <h3>Input</h3>
237
+ <div style="overflow-x:auto">
238
+ <table width="100%" style="min-width:500px">
239
+ <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
240
+ <tbody>
241
+ <tr><td>Request body for POST/PUT/PATCH, or ignored for GET/DELETE</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
242
+ </tbody>
243
+ </table>
244
+ </div>
245
+
246
+ <h3>Output</h3>
247
+ <div style="overflow-x:auto">
248
+ <table width="100%" style="min-width:500px">
249
+ <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
250
+ <tbody>
251
+ <tr><td>Apex endpoint response</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
252
+ </tbody>
253
+ </table>
254
+ </div>
255
+ </script>
256
+ <script type="text/html" data-help-name="salesforce-apex-code">
257
+ <p>Deploys and executes custom Apex code on a Salesforce org. Supports Invocable and REST types.</p>
258
+ <h3>Properties</h3>
259
+ <div style="overflow-x:auto">
260
+ <table width="100%" style="min-width:500px">
261
+ <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th>Default</th><th style="width:35%">Description</th></tr></thead>
262
+ <tbody>
263
+ <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
264
+ <tr><td>Type</td><td>apexType</td><td></td><td>Yes</td><td><code>"invocable"</code></td><td></td></tr>
265
+ <tr><td>Class Name</td><td>className</td><td>string</td><td>Yes</td><td><code>""</code></td><td></td></tr>
266
+ <tr><td>URL Mapping</td><td>urlMapping</td><td>string</td><td>Yes</td><td><code>""</code></td><td></td></tr>
267
+ <tr><td>HTTP Method</td><td>httpMethod</td><td></td><td>Yes</td><td><code>"HttpPost"</code></td><td></td></tr>
268
+ <tr><td>Apex Code</td><td>code</td><td>string</td><td>Yes</td><td><code>""</code></td><td></td></tr>
269
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
270
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
271
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
215
272
  </tbody>
216
273
  </table>
217
274
  </div>
@@ -221,7 +278,7 @@
221
278
  <table width="100%" style="min-width:500px">
222
279
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
223
280
  <tbody>
224
- <tr><td>Request body</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
281
+ <tr><td>Input data passed to the Apex method as a JSON string</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
225
282
  </tbody>
226
283
  </table>
227
284
  </div>
@@ -231,7 +288,7 @@
231
288
  <table width="100%" style="min-width:500px">
232
289
  <thead><tr><th>Label</th><th>Property</th><th>Type</th><th>Required</th><th style="width:35%">Description</th></tr></thead>
233
290
  <tbody>
234
- <tr><td>Apex response</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
291
+ <tr><td>Apex execution response</td><td>payload</td><td></td><td>Yes</td><td></td></tr>
235
292
  </tbody>
236
293
  </table>
237
294
  </div>