@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.
@@ -1,10 +1,45 @@
1
1
  {
2
- "salesforce-apex": {
2
+ "salesforce-apex-code": {
3
3
  "configs": {
4
4
  "name": "Name",
5
5
  "connection": "Connection",
6
+ "apexType": "Type",
7
+ "className": "Class Name",
8
+ "urlMapping": "URL Mapping",
9
+ "httpMethod": "HTTP Method",
10
+ "code": "Apex Code"
11
+ },
12
+ "toggles": {
13
+ "validateInput": "Validate Input",
14
+ "validateOutput": "Validate Output",
15
+ "errorPort": "Error Port",
16
+ "completePort": "Complete Port",
17
+ "statusPort": "Status Port"
18
+ },
19
+ "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
20
+ "label": "Apex Code",
21
+ "description": "Deploys and executes custom Apex code on a Salesforce org. Supports Invocable and REST types.",
22
+ "inputLabels": "Input",
23
+ "outputLabels": [
24
+ "Response"
25
+ ],
26
+ "input": {
27
+ "payload": "Input data passed to the Apex method as a JSON string"
28
+ },
29
+ "outputs": [
30
+ {
31
+ "payload": "Apex execution response"
32
+ }
33
+ ]
34
+ },
35
+ "salesforce-apex-invocation": {
36
+ "configs": {
37
+ "name": "Name",
38
+ "connection": "Connection",
39
+ "apexType": "Type",
6
40
  "method": "Method",
7
- "path": "Path"
41
+ "path": "Endpoint",
42
+ "actionName": "Action"
8
43
  },
9
44
  "toggles": {
10
45
  "validateInput": "Validate Input",
@@ -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": "Invokes a Salesforce Apex REST endpoint.",
52
+ "label": "Apex Invocation",
53
+ "description": "Calls existing Apex REST endpoints or Invocable Actions on a Salesforce org.",
19
54
  "inputLabels": "Request",
20
55
  "outputLabels": [
21
56
  "Response"
22
57
  ],
23
58
  "input": {
24
- "payload": "Request body"
59
+ "payload": "Request body for POST/PUT/PATCH, or ignored for GET/DELETE"
25
60
  },
26
61
  "outputs": [
27
62
  {
28
- "payload": "Apex response"
63
+ "payload": "Apex endpoint response"
29
64
  }
30
65
  ]
31
66
  },
@@ -35,7 +70,13 @@
35
70
  "connection": "Connection",
36
71
  "operation": "Operation",
37
72
  "sObjectType": "SObject Type",
38
- "externalIdField": "External ID Field"
73
+ "query": "SOQL Query",
74
+ "externalIdField": "External ID Field",
75
+ "assignmentRuleId": "Assignment Rule ID",
76
+ "columnDelimiter": "Column Delimiter",
77
+ "lineEnding": "Line Ending",
78
+ "pollInterval": "Poll Interval (ms)",
79
+ "pollTimeout": "Poll Timeout (ms)"
39
80
  },
40
81
  "toggles": {
41
82
  "validateInput": "Validate Input",
@@ -46,18 +87,17 @@
46
87
  },
47
88
  "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
48
89
  "label": "Bulk",
49
- "description": "Performs bulk operations using the Salesforce Bulk API 2.0 for large data volumes.",
50
- "inputLabels": "Records or query",
90
+ "description": "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.",
91
+ "inputLabels": "Records, stream, or SOQL",
51
92
  "outputLabels": [
52
- "Record",
53
- "Job Created"
93
+ "Result"
54
94
  ],
55
95
  "input": {
56
- "payload": "Records array or SOQL query"
96
+ "payload": "Records array, CSV string, readable stream (ingest) or trigger (query)"
57
97
  },
58
98
  "outputs": [
59
99
  {
60
- "payload": "Bulk operation results"
100
+ "payload": "Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }"
61
101
  }
62
102
  ]
63
103
  },
@@ -106,11 +146,11 @@
106
146
  "SObject metadata"
107
147
  ],
108
148
  "input": {
109
- "payload": "Input payload"
149
+ "payload": "SObject API name (overrides config if provided)"
110
150
  },
111
151
  "outputs": [
112
152
  {
113
- "payload": "SObject describe metadata"
153
+ "payload": "SObject describe result with fields, child relationships, and record type info"
114
154
  }
115
155
  ]
116
156
  },
@@ -120,7 +160,8 @@
120
160
  "connection": "Connection",
121
161
  "operation": "Operation",
122
162
  "sObjectType": "SObject Type",
123
- "externalIdField": "External ID Field"
163
+ "externalIdField": "External ID Field",
164
+ "record": "Record"
124
165
  },
125
166
  "toggles": {
126
167
  "validateInput": "Validate Input",
@@ -32,8 +32,11 @@
32
32
  <table width="100%" style="min-width:500px">
33
33
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
34
34
  <tbody>
35
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
35
+ <tr><td>Conexión</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
36
36
  <tr><td>Consulta</td><td>query</td><td>TypedInput</td><td>Sí</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>Sí</td><td><code>false</code></td><td></td></tr>
38
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
39
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
37
40
  </tbody>
38
41
  </table>
39
42
  </div>
@@ -67,14 +70,14 @@
67
70
  <table width="100%" style="min-width:500px">
68
71
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
69
72
  <tbody>
70
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
73
+ <tr><td>Conexión</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
71
74
  <tr><td>Operación</td><td>operation</td><td></td><td>Sí</td><td><code>"create"</code></td><td></td></tr>
72
75
  <tr><td>Tipo de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Sí</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>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
76
+ <tr><td>Registro</td><td>record</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
74
77
  <tr><td>Campo de ID externo</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>Sí</td><td><code>false</code></td><td></td></tr>
76
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
77
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
78
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
79
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
80
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
78
81
  </tbody>
79
82
  </table>
80
83
  </div>
@@ -106,18 +109,19 @@
106
109
  <table width="100%" style="min-width:500px">
107
110
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
108
111
  <tbody>
109
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
112
+ <tr><td>Conexión</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
110
113
  <tr><td>Operación</td><td>operation</td><td></td><td>Sí</td><td><code>"insert"</code></td><td></td></tr>
111
114
  <tr><td>Tipo de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
115
+ <tr><td>Consulta SOQL</td><td>query</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
112
116
  <tr><td>Campo de ID externo</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>Sí</td><td><code>"COMMA"</code></td><td></td></tr>
115
- <tr><td></td><td>lineEnding</td><td></td><td>Sí</td><td><code>"LF"</code></td><td></td></tr>
116
- <tr><td></td><td>pollInterval</td><td>number [min: 1000]</td><td>Sí</td><td><code>5000</code></td><td></td></tr>
117
- <tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Sí</td><td><code>60000</code></td><td></td></tr>
118
- <tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
119
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>true</code></td><td></td></tr>
120
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
117
+ <tr><td>ID de regla de asignación</td><td>assignmentRuleId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
118
+ <tr><td>Delimitador de columna</td><td>columnDelimiter</td><td></td><td>Sí</td><td><code>"COMMA"</code></td><td></td></tr>
119
+ <tr><td>Fin de línea</td><td>lineEnding</td><td></td><td>Sí</td><td><code>"LF"</code></td><td></td></tr>
120
+ <tr><td>Intervalo de sondeo (ms)</td><td>pollInterval</td><td>number [min: 1000]</td><td>Sí</td><td><code>5000</code></td><td></td></tr>
121
+ <tr><td>Tiempo de espera de sondeo (ms)</td><td>pollTimeout</td><td>number [min: 5000]</td><td>Sí</td><td><code>60000</code></td><td></td></tr>
122
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
123
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
124
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</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>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
129
133
  <tbody>
130
- <tr><td>Arreglo de registros o consulta SOQL</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
134
+ <tr><td>Array de registros, cadena CSV, stream legible (ingesta) o disparador (consulta)</td><td>payload</td><td></td><td>Sí</td><td>Records array, CSV string, readable stream (ingest) or SOQL string (query)</td></tr>
135
+ </tbody>
136
+ </table>
137
+ </div>
138
+
139
+ <h3>Salida</h3>
140
+ <div style="overflow-x:auto">
141
+ <table width="100%" style="min-width:500px">
142
+ <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
143
+ <tbody>
144
+ <tr><td>Consulta: registro individual. Ingesta: { successfulResults, failedResults, unprocessedRecords }</td><td>payload</td><td></td><td>Sí</td><td>Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }</td></tr>
131
145
  </tbody>
132
146
  </table>
133
147
  </div>
@@ -139,11 +153,11 @@
139
153
  <table width="100%" style="min-width:500px">
140
154
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
141
155
  <tbody>
142
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
156
+ <tr><td>Conexion</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
143
157
  <tr><td>Tipo de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Sí</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>Sí</td><td><code>false</code></td><td></td></tr>
145
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
146
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
158
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
159
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
160
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</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>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
155
169
  <tbody>
156
- <tr><td>Carga útil de entrada</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
170
+ <tr><td>Nombre de API del SObject (sustituye la configuracion si se proporciona)</td><td>payload</td><td></td><td>Sí</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>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
165
179
  <tbody>
166
- <tr><td>Metadatos de descripción del SObject</td><td>payload</td><td>object</td><td>Sí</td><td></td></tr>
180
+ <tr><td>Resultado de descripcion del SObject con campos, relaciones secundarias e informacion de tipo de registro</td><td>payload</td><td>object</td><td>Sí</td><td></td></tr>
167
181
  </tbody>
168
182
  </table>
169
183
  </div>
@@ -175,13 +189,14 @@
175
189
  <table width="100%" style="min-width:500px">
176
190
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
177
191
  <tbody>
178
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
192
+ <tr><td>Conexión</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
179
193
  <tr><td>Canal</td><td>channelName</td><td>string</td><td>Sí</td><td><code>""</code></td><td></td></tr>
180
194
  <tr><td>Suscribirse desde</td><td>subscribeType</td><td></td><td>Sí</td><td><code>"LATEST"</code></td><td></td></tr>
181
195
  <tr><td>ID de reproducción</td><td>replayId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
182
196
  <tr><td>Tamaño del lote</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Sí</td><td><code>100</code></td><td></td></tr>
183
- <tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
184
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
197
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
198
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
199
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</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>Invoca un endpoint REST de Apex en Salesforce.</p>
217
+ <script type="text/html" data-help-name="salesforce-apex-invocation">
218
+ <p>Llama a endpoints REST Apex existentes o Invocable Actions en una org de Salesforce.</p>
219
+ <h3>Propiedades</h3>
220
+ <div style="overflow-x:auto">
221
+ <table width="100%" style="min-width:500px">
222
+ <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
223
+ <tbody>
224
+ <tr><td>Conexion</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
225
+ <tr><td>Tipo</td><td>apexType</td><td></td><td>Sí</td><td><code>"rest"</code></td><td></td></tr>
226
+ <tr><td>Metodo</td><td>method</td><td></td><td>Sí</td><td><code>"POST"</code></td><td></td></tr>
227
+ <tr><td>Endpoint</td><td>path</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
228
+ <tr><td>Accion</td><td>actionName</td><td>string</td><td>Sí</td><td><code>""</code></td><td></td></tr>
229
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
230
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
231
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
232
+ </tbody>
233
+ </table>
234
+ </div>
235
+
236
+ <h3>Entrada</h3>
237
+ <div style="overflow-x:auto">
238
+ <table width="100%" style="min-width:500px">
239
+ <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
240
+ <tbody>
241
+ <tr><td>Cuerpo de la solicitud para POST/PUT/PATCH, o ignorado para GET/DELETE</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
242
+ </tbody>
243
+ </table>
244
+ </div>
245
+
246
+ <h3>Salida</h3>
247
+ <div style="overflow-x:auto">
248
+ <table width="100%" style="min-width:500px">
249
+ <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
250
+ <tbody>
251
+ <tr><td>Respuesta del endpoint Apex</td><td>payload</td><td></td><td>Sí</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>Despliega y ejecuta codigo Apex personalizado en una org de Salesforce. Soporta tipos Invocable y REST.</p>
204
258
  <h3>Propiedades</h3>
205
259
  <div style="overflow-x:auto">
206
260
  <table width="100%" style="min-width:500px">
207
261
  <thead><tr><th>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th>Predeterminado</th><th style="width:35%">Descripción</th></tr></thead>
208
262
  <tbody>
209
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
210
- <tr><td>Método</td><td>method</td><td></td><td>Sí</td><td><code>"POST"</code></td><td></td></tr>
211
- <tr><td>Ruta</td><td>path</td><td>TypedInput</td><td>Sí</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>Sí</td><td><code>false</code></td><td></td></tr>
213
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
214
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
263
+ <tr><td>Conexion</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
264
+ <tr><td>Tipo</td><td>apexType</td><td></td><td>Sí</td><td><code>"invocable"</code></td><td></td></tr>
265
+ <tr><td>Nombre de Clase</td><td>className</td><td>string</td><td>Sí</td><td><code>""</code></td><td></td></tr>
266
+ <tr><td>Mapeo de URL</td><td>urlMapping</td><td>string</td><td>Sí</td><td><code>""</code></td><td></td></tr>
267
+ <tr><td>Método HTTP</td><td>httpMethod</td><td></td><td>Sí</td><td><code>"HttpPost"</code></td><td></td></tr>
268
+ <tr><td>Codigo Apex</td><td>code</td><td>string</td><td>Sí</td><td><code>""</code></td><td></td></tr>
269
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
270
+ <tr><td></td><td>completePort</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
271
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>Sí</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>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
223
280
  <tbody>
224
- <tr><td>Cuerpo de la solicitud</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
281
+ <tr><td>Datos de entrada pasados al metodo Apex como cadena JSON</td><td>payload</td><td></td><td>Sí</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>Etiqueta</th><th>Propiedad</th><th>Tipo</th><th>Requerido</th><th style="width:35%">Descripción</th></tr></thead>
233
290
  <tbody>
234
- <tr><td>Respuesta de Apex</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
291
+ <tr><td>Respuesta de la ejecucion Apex</td><td>payload</td><td></td><td>Sí</td><td></td></tr>
235
292
  </tbody>
236
293
  </table>
237
294
  </div>
@@ -1,10 +1,13 @@
1
1
  {
2
- "salesforce-apex": {
2
+ "salesforce-apex-code": {
3
3
  "configs": {
4
4
  "name": "Nombre",
5
- "connection": "Connection",
6
- "method": "Método",
7
- "path": "Ruta"
5
+ "connection": "Conexion",
6
+ "apexType": "Tipo",
7
+ "className": "Nombre de Clase",
8
+ "urlMapping": "Mapeo de URL",
9
+ "httpMethod": "Método HTTP",
10
+ "code": "Codigo Apex"
8
11
  },
9
12
  "toggles": {
10
13
  "validateInput": "Validar entrada",
@@ -14,28 +17,66 @@
14
17
  "statusPort": "Puerto de estado"
15
18
  },
16
19
  "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
17
- "label": "Apex",
18
- "description": "Invoca un endpoint REST de Apex en Salesforce.",
20
+ "label": "Apex Code",
21
+ "description": "Despliega y ejecuta codigo Apex personalizado en una org de Salesforce. Soporta tipos Invocable y REST.",
22
+ "inputLabels": "Entrada",
23
+ "outputLabels": [
24
+ "Respuesta"
25
+ ],
26
+ "input": {
27
+ "payload": "Datos de entrada pasados al metodo Apex como cadena JSON"
28
+ },
29
+ "outputs": [
30
+ {
31
+ "payload": "Respuesta de la ejecucion Apex"
32
+ }
33
+ ]
34
+ },
35
+ "salesforce-apex-invocation": {
36
+ "configs": {
37
+ "name": "Nombre",
38
+ "connection": "Conexion",
39
+ "apexType": "Tipo",
40
+ "method": "Metodo",
41
+ "path": "Endpoint",
42
+ "actionName": "Accion"
43
+ },
44
+ "toggles": {
45
+ "validateInput": "Validar entrada",
46
+ "validateOutput": "Validar salida",
47
+ "errorPort": "Puerto de error",
48
+ "completePort": "Puerto de completado",
49
+ "statusPort": "Puerto de estado"
50
+ },
51
+ "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
52
+ "label": "Apex Invocation",
53
+ "description": "Llama a endpoints REST Apex existentes o Invocable Actions en una org de Salesforce.",
19
54
  "inputLabels": "Solicitud",
20
55
  "outputLabels": [
21
56
  "Respuesta"
22
57
  ],
23
58
  "input": {
24
- "payload": "Cuerpo de la solicitud"
59
+ "payload": "Cuerpo de la solicitud para POST/PUT/PATCH, o ignorado para GET/DELETE"
25
60
  },
26
61
  "outputs": [
27
62
  {
28
- "payload": "Respuesta de Apex"
63
+ "payload": "Respuesta del endpoint Apex"
29
64
  }
30
65
  ]
31
66
  },
32
67
  "salesforce-bulk": {
33
68
  "configs": {
34
69
  "name": "Nombre",
35
- "connection": "Connection",
70
+ "connection": "Conexión",
36
71
  "operation": "Operación",
37
72
  "sObjectType": "Tipo de SObject",
38
- "externalIdField": "Campo de ID externo"
73
+ "query": "Consulta SOQL",
74
+ "externalIdField": "Campo de ID externo",
75
+ "assignmentRuleId": "ID de regla de asignación",
76
+ "columnDelimiter": "Delimitador de columna",
77
+ "lineEnding": "Fin de línea",
78
+ "pollInterval": "Intervalo de sondeo (ms)",
79
+ "pollTimeout": "Tiempo de espera de sondeo (ms)"
39
80
  },
40
81
  "toggles": {
41
82
  "validateInput": "Validar entrada",
@@ -53,11 +94,11 @@
53
94
  "Job Completado"
54
95
  ],
55
96
  "input": {
56
- "payload": "Arreglo de registros o consulta SOQL"
97
+ "payload": "Array de registros, cadena CSV, stream legible (ingesta) o disparador (consulta)"
57
98
  },
58
99
  "outputs": [
59
100
  {
60
- "payload": "Resultados de la operación masiva"
101
+ "payload": "Consulta: registro individual. Ingesta: { successfulResults, failedResults, unprocessedRecords }"
61
102
  }
62
103
  ]
63
104
  },
@@ -88,7 +129,7 @@
88
129
  "salesforce-describe": {
89
130
  "configs": {
90
131
  "name": "Nombre",
91
- "connection": "Connection",
132
+ "connection": "Conexion",
92
133
  "sObjectType": "Tipo de SObject"
93
134
  },
94
135
  "toggles": {
@@ -106,21 +147,22 @@
106
147
  "Metadatos del SObject"
107
148
  ],
108
149
  "input": {
109
- "payload": "Carga útil de entrada"
150
+ "payload": "Nombre de API del SObject (sustituye la configuracion si se proporciona)"
110
151
  },
111
152
  "outputs": [
112
153
  {
113
- "payload": "Metadatos de descripción del SObject"
154
+ "payload": "Resultado de descripcion del SObject con campos, relaciones secundarias e informacion de tipo de registro"
114
155
  }
115
156
  ]
116
157
  },
117
158
  "salesforce-dml": {
118
159
  "configs": {
119
160
  "name": "Nombre",
120
- "connection": "Connection",
161
+ "connection": "Conexión",
121
162
  "operation": "Operación",
122
163
  "sObjectType": "Tipo de SObject",
123
- "externalIdField": "Campo de ID externo"
164
+ "externalIdField": "Campo de ID externo",
165
+ "record": "Registro"
124
166
  },
125
167
  "toggles": {
126
168
  "validateInput": "Validar entrada",
@@ -148,7 +190,7 @@
148
190
  "salesforce-soql": {
149
191
  "configs": {
150
192
  "name": "Nombre",
151
- "connection": "Connection",
193
+ "connection": "Conexión",
152
194
  "query": "Consulta"
153
195
  },
154
196
  "toggles": {
@@ -179,7 +221,7 @@
179
221
  "salesforce-streaming": {
180
222
  "configs": {
181
223
  "name": "Nombre",
182
- "connection": "Connection",
224
+ "connection": "Conexión",
183
225
  "channelName": "Canal",
184
226
  "subscribeType": "Suscribirse desde",
185
227
  "replayId": "ID de reproducción",