@kitalive/sfdx-plugin 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -27
- package/lib/commands/kit/data/bulk/delete.js +10 -2
- package/lib/commands/kit/data/bulk/delete.js.map +1 -1
- package/lib/commands/kit/data/bulk/query.js +101 -5
- package/lib/commands/kit/data/bulk/query.js.map +1 -1
- package/messages/data.bulk.delete.md +8 -0
- package/messages/data.bulk.query.md +32 -0
- package/oclif.manifest.json +34 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ $ npm install -g @kitalive/sfdx-plugin
|
|
|
17
17
|
$ sf COMMAND
|
|
18
18
|
running command...
|
|
19
19
|
$ sf (--version)
|
|
20
|
-
@kitalive/sfdx-plugin/1.0.
|
|
20
|
+
@kitalive/sfdx-plugin/1.0.4 darwin-arm64 node-v22.17.1
|
|
21
21
|
$ sf --help [COMMAND]
|
|
22
22
|
USAGE
|
|
23
23
|
$ sf COMMAND
|
|
@@ -49,13 +49,13 @@ Bulk delete records by SOQL select query.
|
|
|
49
49
|
|
|
50
50
|
```
|
|
51
51
|
USAGE
|
|
52
|
-
$ sf kit data bulk delete -
|
|
53
|
-
Serial|Parallel] [-s <value>] [-w <value>] [--api-version <value>]
|
|
52
|
+
$ sf kit data bulk delete -o <value> [--json] [--flags-dir <value>] [-q <value>] [--query-file <value>] [--hard]
|
|
53
|
+
[--concurrency-mode Serial|Parallel] [-s <value>] [-w <value>] [--api-version <value>]
|
|
54
54
|
|
|
55
55
|
FLAGS
|
|
56
56
|
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
|
|
57
57
|
configuration variable is already set.
|
|
58
|
-
-q, --query=<value>
|
|
58
|
+
-q, --query=<value> SOQL query to delete
|
|
59
59
|
-s, --batch-size=<value> [default: 10000] The batch size of the job
|
|
60
60
|
-w, --wait=<value> The number of minutes to wait for the command to complete before displaying the
|
|
61
61
|
results
|
|
@@ -63,6 +63,7 @@ FLAGS
|
|
|
63
63
|
--concurrency-mode=<option> [default: Parallel] The concurrency mode (Parallel or Serial) for the job
|
|
64
64
|
<options: Serial|Parallel>
|
|
65
65
|
--hard Perform a hard delete
|
|
66
|
+
--query-file=<value> SOQL query file to delete
|
|
66
67
|
|
|
67
68
|
GLOBAL FLAGS
|
|
68
69
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -72,9 +73,13 @@ EXAMPLES
|
|
|
72
73
|
Delete Opportunity records with CloseDate older than 2 years:
|
|
73
74
|
|
|
74
75
|
$ sf kit data bulk delete -q "SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2"
|
|
76
|
+
|
|
77
|
+
Delete Opportunity records by SOQL file:
|
|
78
|
+
|
|
79
|
+
$ sf kit data bulk delete --query-file ./path/to/Opportunity.soql
|
|
75
80
|
```
|
|
76
81
|
|
|
77
|
-
_See code: [src/commands/kit/data/bulk/delete.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
82
|
+
_See code: [src/commands/kit/data/bulk/delete.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/delete.ts)_
|
|
78
83
|
|
|
79
84
|
## `sf kit data bulk insert`
|
|
80
85
|
|
|
@@ -125,7 +130,7 @@ EXAMPLES
|
|
|
125
130
|
$ sf kit data bulk insert -o MyObject__c -f ./path/to/MyObject__c.csv -c ./path/to/convert.js -w 10
|
|
126
131
|
```
|
|
127
132
|
|
|
128
|
-
_See code: [src/commands/kit/data/bulk/insert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
133
|
+
_See code: [src/commands/kit/data/bulk/insert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/insert.ts)_
|
|
129
134
|
|
|
130
135
|
## `sf kit data bulk query`
|
|
131
136
|
|
|
@@ -133,18 +138,21 @@ Bulk query records.
|
|
|
133
138
|
|
|
134
139
|
```
|
|
135
140
|
USAGE
|
|
136
|
-
$ sf kit data bulk query -
|
|
137
|
-
[--api-version <value>]
|
|
141
|
+
$ sf kit data bulk query -o <value> [--json] [--flags-dir <value>] [-q <value>] [--query-file <value>] [-f <value>]
|
|
142
|
+
[--object-field-label] [--field-label-mapping <value>] [--all] [-w <value>] [--api-version <value>]
|
|
138
143
|
|
|
139
144
|
FLAGS
|
|
140
|
-
-f, --csv-file=<value>
|
|
141
|
-
-o, --target-org=<value>
|
|
142
|
-
|
|
143
|
-
-q, --query=<value>
|
|
144
|
-
-w, --wait=<value>
|
|
145
|
-
|
|
146
|
-
--all
|
|
147
|
-
--api-version=<value>
|
|
145
|
+
-f, --csv-file=<value> [default: standard output] Output csv file
|
|
146
|
+
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
|
|
147
|
+
configuration variable is already set.
|
|
148
|
+
-q, --query=<value> SOQL query to export
|
|
149
|
+
-w, --wait=<value> [default: 5] The number of minutes to wait for the command to complete before
|
|
150
|
+
displaying the results
|
|
151
|
+
--all include deleted or archived records
|
|
152
|
+
--api-version=<value> Override the api version used for api requests made by this command
|
|
153
|
+
--field-label-mapping=<value> JSON file that maps field API names to output field names
|
|
154
|
+
--object-field-label Output field names with object field labels
|
|
155
|
+
--query-file=<value> SOQL query file to export
|
|
148
156
|
|
|
149
157
|
GLOBAL FLAGS
|
|
150
158
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -154,9 +162,22 @@ EXAMPLES
|
|
|
154
162
|
Query Account records and save to specified path:
|
|
155
163
|
|
|
156
164
|
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" -f ./path/to/Account.csv
|
|
165
|
+
|
|
166
|
+
Query Account records from SOQL file:
|
|
167
|
+
|
|
168
|
+
$ sf kit data bulk query --query-file ./path/to/Account.soql -f ./path/to/Account.csv
|
|
169
|
+
|
|
170
|
+
Query Account records with object field labels:
|
|
171
|
+
|
|
172
|
+
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" --object-field-label
|
|
173
|
+
|
|
174
|
+
Query Account records with custom field label mapping:
|
|
175
|
+
|
|
176
|
+
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" --field-label-mapping \
|
|
177
|
+
./path/to/field-label-mapping.json
|
|
157
178
|
```
|
|
158
179
|
|
|
159
|
-
_See code: [src/commands/kit/data/bulk/query.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
180
|
+
_See code: [src/commands/kit/data/bulk/query.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/query.ts)_
|
|
160
181
|
|
|
161
182
|
## `sf kit data bulk update`
|
|
162
183
|
|
|
@@ -207,7 +228,7 @@ EXAMPLES
|
|
|
207
228
|
$ sf kit data bulk update -o MyObject__c -f ./path/to/MyObject__c.csv -c ./path/to/convert.js -w 10
|
|
208
229
|
```
|
|
209
230
|
|
|
210
|
-
_See code: [src/commands/kit/data/bulk/update.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
231
|
+
_See code: [src/commands/kit/data/bulk/update.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/update.ts)_
|
|
211
232
|
|
|
212
233
|
## `sf kit data bulk upsert`
|
|
213
234
|
|
|
@@ -260,7 +281,7 @@ EXAMPLES
|
|
|
260
281
|
-w 10
|
|
261
282
|
```
|
|
262
283
|
|
|
263
|
-
_See code: [src/commands/kit/data/bulk/upsert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
284
|
+
_See code: [src/commands/kit/data/bulk/upsert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/upsert.ts)_
|
|
264
285
|
|
|
265
286
|
## `sf kit data csv convert`
|
|
266
287
|
|
|
@@ -298,7 +319,7 @@ EXAMPLES
|
|
|
298
319
|
$ sf kit data csv convert -i ./path/to/input.csv -f ./path/to/output.csv -c ./path/to/convert.js
|
|
299
320
|
```
|
|
300
321
|
|
|
301
|
-
_See code: [src/commands/kit/data/csv/convert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
322
|
+
_See code: [src/commands/kit/data/csv/convert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/csv/convert.ts)_
|
|
302
323
|
|
|
303
324
|
## `sf kit graphql editor`
|
|
304
325
|
|
|
@@ -332,7 +353,7 @@ EXAMPLES
|
|
|
332
353
|
$ sf kit graphql editor --port 8080
|
|
333
354
|
```
|
|
334
355
|
|
|
335
|
-
_See code: [src/commands/kit/graphql/editor.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
356
|
+
_See code: [src/commands/kit/graphql/editor.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/graphql/editor.ts)_
|
|
336
357
|
|
|
337
358
|
## `sf kit layout assignments deploy`
|
|
338
359
|
|
|
@@ -367,7 +388,7 @@ EXAMPLES
|
|
|
367
388
|
$ sf kit layout assignments deploy -o me@my.org -f config/layout-assignments.sandbox.json
|
|
368
389
|
```
|
|
369
390
|
|
|
370
|
-
_See code: [src/commands/kit/layout/assignments/deploy.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
391
|
+
_See code: [src/commands/kit/layout/assignments/deploy.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/layout/assignments/deploy.ts)_
|
|
371
392
|
|
|
372
393
|
## `sf kit layout assignments retrieve`
|
|
373
394
|
|
|
@@ -406,7 +427,7 @@ EXAMPLES
|
|
|
406
427
|
$ sf kit layout assignments retrieve -o me@my.org -f config/layout-assignments.sandbox.json
|
|
407
428
|
```
|
|
408
429
|
|
|
409
|
-
_See code: [src/commands/kit/layout/assignments/retrieve.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
430
|
+
_See code: [src/commands/kit/layout/assignments/retrieve.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/layout/assignments/retrieve.ts)_
|
|
410
431
|
|
|
411
432
|
## `sf kit metadata dependencies`
|
|
412
433
|
|
|
@@ -433,7 +454,7 @@ EXAMPLES
|
|
|
433
454
|
$ sf kit metadata dependencies
|
|
434
455
|
```
|
|
435
456
|
|
|
436
|
-
_See code: [src/commands/kit/metadata/dependencies.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
457
|
+
_See code: [src/commands/kit/metadata/dependencies.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/metadata/dependencies.ts)_
|
|
437
458
|
|
|
438
459
|
## `sf kit object fields describe`
|
|
439
460
|
|
|
@@ -465,7 +486,7 @@ EXAMPLES
|
|
|
465
486
|
$ sf kit object fields describe -o me@my.org -s CustomObject__c --json
|
|
466
487
|
```
|
|
467
488
|
|
|
468
|
-
_See code: [src/commands/kit/object/fields/describe.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
489
|
+
_See code: [src/commands/kit/object/fields/describe.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/object/fields/describe.ts)_
|
|
469
490
|
|
|
470
491
|
## `sf kit object fields setup`
|
|
471
492
|
|
|
@@ -499,7 +520,7 @@ EXAMPLES
|
|
|
499
520
|
$ sf kit object fields setup -o me@my.org -s CustomObject__c -f path/to/custom_object_fields.csv --delete
|
|
500
521
|
```
|
|
501
522
|
|
|
502
|
-
_See code: [src/commands/kit/object/fields/setup.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
523
|
+
_See code: [src/commands/kit/object/fields/setup.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/object/fields/setup.ts)_
|
|
503
524
|
|
|
504
525
|
## `sf kit script`
|
|
505
526
|
|
|
@@ -593,5 +614,5 @@ EXAMPLES
|
|
|
593
614
|
> await conn.query('SELECT Id, Name FROM Account LIMIT 1')
|
|
594
615
|
```
|
|
595
616
|
|
|
596
|
-
_See code: [src/commands/kit/script/execute.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
617
|
+
_See code: [src/commands/kit/script/execute.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/script/execute.ts)_
|
|
597
618
|
<!-- commandsstop -->
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
1
2
|
import { Messages } from '@salesforce/core';
|
|
2
3
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
3
4
|
import { composeQuery, getField, parseQuery, } from '@jetstreamapp/soql-parser-js';
|
|
@@ -11,9 +12,13 @@ export default class DeleteCommand extends SfCommand {
|
|
|
11
12
|
static flags = {
|
|
12
13
|
query: Flags.string({
|
|
13
14
|
char: 'q',
|
|
14
|
-
|
|
15
|
+
exactlyOne: ['query', 'query-file'],
|
|
15
16
|
summary: messages.getMessage('flags.query.summary'),
|
|
16
17
|
}),
|
|
18
|
+
'query-file': Flags.string({
|
|
19
|
+
exactlyOne: ['query', 'query-file'],
|
|
20
|
+
summary: messages.getMessage('flags.query-file.summary'),
|
|
21
|
+
}),
|
|
17
22
|
hard: Flags.boolean({
|
|
18
23
|
default: false,
|
|
19
24
|
summary: messages.getMessage('flags.hard.summary'),
|
|
@@ -47,7 +52,7 @@ export default class DeleteCommand extends SfCommand {
|
|
|
47
52
|
const { flags } = await this.parse();
|
|
48
53
|
const org = flags['target-org'];
|
|
49
54
|
const conn = org.getConnection(flags['api-version']);
|
|
50
|
-
const query = parseQuery(flags.query);
|
|
55
|
+
const query = parseQuery(this.getQuery(flags.query, flags['query-file']));
|
|
51
56
|
query.fields = [getField('Id')];
|
|
52
57
|
const soql = composeQuery(query);
|
|
53
58
|
this.spinner.start(flags.hard ? 'Bulk hard delete' : 'Bulk delete');
|
|
@@ -98,6 +103,9 @@ export default class DeleteCommand extends SfCommand {
|
|
|
98
103
|
bulkQuery(conn, query) {
|
|
99
104
|
return bulkQuery(conn, query);
|
|
100
105
|
}
|
|
106
|
+
getQuery(query, queryFile) {
|
|
107
|
+
return query ?? fs.readFileSync(queryFile).toString('utf8');
|
|
108
|
+
}
|
|
101
109
|
bulkLoad(conn, sobject, operation, rows, options) {
|
|
102
110
|
return bulkLoad(conn, sobject, operation, rows, options);
|
|
103
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAO,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,QAAQ,EACR,SAAS,GAGV,MAAM,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CACxC,uBAAuB,EACvB,WAAW,CACZ,CAAC;AACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CACpC,uBAAuB,EACvB,kBAAkB,CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAqB;IACvD,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import { Messages } from '@salesforce/core';
|
|
3
3
|
import { write } from '@fast-csv/format';
|
|
4
4
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
5
|
+
import { getFlattenedFields, parseQuery } from '@jetstreamapp/soql-parser-js';
|
|
5
6
|
import { bulkQuery } from '../../../../bulk.js';
|
|
6
7
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
7
8
|
const messages = Messages.loadMessages('@kitalive/sfdx-plugin', 'data.bulk.query');
|
|
@@ -11,15 +12,25 @@ export default class QueryCommand extends SfCommand {
|
|
|
11
12
|
static flags = {
|
|
12
13
|
query: Flags.string({
|
|
13
14
|
char: 'q',
|
|
14
|
-
|
|
15
|
+
exactlyOne: ['query', 'query-file'],
|
|
15
16
|
summary: messages.getMessage('flags.query.summary'),
|
|
16
17
|
}),
|
|
18
|
+
'query-file': Flags.string({
|
|
19
|
+
exactlyOne: ['query', 'query-file'],
|
|
20
|
+
summary: messages.getMessage('flags.query-file.summary'),
|
|
21
|
+
}),
|
|
17
22
|
'csv-file': Flags.string({
|
|
18
23
|
char: 'f',
|
|
19
24
|
summary: messages.getMessage('flags.csv-file.summary'),
|
|
20
25
|
aliases: ['csvfile'],
|
|
21
26
|
deprecateAliases: true,
|
|
22
27
|
}),
|
|
28
|
+
'object-field-label': Flags.boolean({
|
|
29
|
+
summary: messages.getMessage('flags.object-field-label.summary'),
|
|
30
|
+
}),
|
|
31
|
+
'field-label-mapping': Flags.string({
|
|
32
|
+
summary: messages.getMessage('flags.field-label-mapping.summary'),
|
|
33
|
+
}),
|
|
23
34
|
all: Flags.boolean({
|
|
24
35
|
summary: messages.getMessage('flags.all.summary'),
|
|
25
36
|
}),
|
|
@@ -36,9 +47,16 @@ export default class QueryCommand extends SfCommand {
|
|
|
36
47
|
const org = flags['target-org'];
|
|
37
48
|
const conn = org.getConnection(flags['api-version']);
|
|
38
49
|
const file = flags['csv-file'];
|
|
50
|
+
const query = this.getQuery(flags.query, flags['query-file']);
|
|
51
|
+
const objectFieldLabel = flags['object-field-label'];
|
|
52
|
+
const fieldLabelMapping = flags['field-label-mapping'];
|
|
53
|
+
const fieldLabels = objectFieldLabel || fieldLabelMapping
|
|
54
|
+
? await this.getFieldLabels(conn, query, objectFieldLabel, fieldLabelMapping)
|
|
55
|
+
: new Map();
|
|
56
|
+
this.validateFieldLabels(query, fieldLabels);
|
|
39
57
|
this.spinner.start('Bulk query');
|
|
40
58
|
try {
|
|
41
|
-
const rows = await this.bulkQuery(conn,
|
|
59
|
+
const rows = await this.bulkQuery(conn, query, {
|
|
42
60
|
all: flags.all,
|
|
43
61
|
wait: flags.wait,
|
|
44
62
|
});
|
|
@@ -47,13 +65,14 @@ export default class QueryCommand extends SfCommand {
|
|
|
47
65
|
return rows;
|
|
48
66
|
}
|
|
49
67
|
this.spinner.stop(`${rows.length} records`);
|
|
68
|
+
const outputRows = this.applyFieldLabels(rows, fieldLabels);
|
|
50
69
|
if (file) {
|
|
51
|
-
this.writeCsv(
|
|
70
|
+
this.writeCsv(outputRows, fs.createWriteStream(file));
|
|
52
71
|
}
|
|
53
72
|
else if (!this.jsonEnabled()) {
|
|
54
|
-
this.writeCsv(
|
|
73
|
+
this.writeCsv(outputRows, process.stdout);
|
|
55
74
|
}
|
|
56
|
-
return
|
|
75
|
+
return outputRows;
|
|
57
76
|
}
|
|
58
77
|
catch (e) {
|
|
59
78
|
this.spinner.stop('error');
|
|
@@ -63,8 +82,85 @@ export default class QueryCommand extends SfCommand {
|
|
|
63
82
|
writeCsv(rows, stream) {
|
|
64
83
|
write(rows, { headers: true, writeBOM: true }).pipe(stream);
|
|
65
84
|
}
|
|
85
|
+
getQuery(query, queryFile) {
|
|
86
|
+
return query ?? fs.readFileSync(queryFile).toString('utf8');
|
|
87
|
+
}
|
|
88
|
+
async getFieldLabels(conn, soql, useObjectFieldLabel, mappingFile) {
|
|
89
|
+
const parsedQuery = parseQuery(soql);
|
|
90
|
+
const labels = new Map();
|
|
91
|
+
if (useObjectFieldLabel) {
|
|
92
|
+
const objectInfo = await conn.describe(parsedQuery.sObject);
|
|
93
|
+
const fields = objectInfo.fields;
|
|
94
|
+
const fieldMap = new Map(fields.map((field) => [field.name, field]));
|
|
95
|
+
const relationshipFieldMap = new Map(fields
|
|
96
|
+
.filter((field) => field.relationshipName)
|
|
97
|
+
.map((field) => [field.relationshipName, field]));
|
|
98
|
+
for (const fieldName of getFlattenedFields(parsedQuery)) {
|
|
99
|
+
const field = fieldMap.get(fieldName);
|
|
100
|
+
if (field) {
|
|
101
|
+
labels.set(fieldName, field.label);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const relationshipName = fieldName.match(/^(.+)\.Name$/)?.[1];
|
|
105
|
+
const relationshipField = relationshipName && relationshipFieldMap.get(relationshipName);
|
|
106
|
+
if (relationshipField) {
|
|
107
|
+
labels.set(fieldName, relationshipField.label.replace(/ ID$/, ''));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (mappingFile) {
|
|
112
|
+
for (const [fieldName, label] of Object.entries(this.readFieldLabelMappings(mappingFile))) {
|
|
113
|
+
labels.set(fieldName, label);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return labels;
|
|
117
|
+
}
|
|
118
|
+
readFieldLabelMappings(file) {
|
|
119
|
+
const mappings = JSON.parse(fs.readFileSync(file).toString('utf8'));
|
|
120
|
+
if (!mappings ||
|
|
121
|
+
Array.isArray(mappings) ||
|
|
122
|
+
typeof mappings !== 'object' ||
|
|
123
|
+
Object.values(mappings).some((value) => typeof value !== 'string')) {
|
|
124
|
+
throw new Error(messages.getMessage('errors.invalidFieldLabelMapping', [file]));
|
|
125
|
+
}
|
|
126
|
+
return mappings;
|
|
127
|
+
}
|
|
128
|
+
applyFieldLabels(rows, labels) {
|
|
129
|
+
if (!labels.size)
|
|
130
|
+
return rows;
|
|
131
|
+
return rows.map((row) => Object.fromEntries(Object.entries(row).map(([fieldName, value]) => [
|
|
132
|
+
labels.get(fieldName) ?? fieldName,
|
|
133
|
+
value,
|
|
134
|
+
])));
|
|
135
|
+
}
|
|
136
|
+
validateFieldLabels(soql, labels) {
|
|
137
|
+
if (!labels.size)
|
|
138
|
+
return;
|
|
139
|
+
const duplicatedLabels = this.findDuplicatedLabels(getFlattenedFields(parseQuery(soql)).map((fieldName) => ({
|
|
140
|
+
fieldName,
|
|
141
|
+
label: labels.get(fieldName) ?? fieldName,
|
|
142
|
+
})));
|
|
143
|
+
if (duplicatedLabels.length) {
|
|
144
|
+
throw new Error(messages.getMessage('errors.duplicatedFieldLabel', [
|
|
145
|
+
duplicatedLabels
|
|
146
|
+
.map(({ label, fieldNames }) => `${label} (${fieldNames.join(', ')})`)
|
|
147
|
+
.join('; '),
|
|
148
|
+
]));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
66
151
|
bulkQuery(conn, query, options) {
|
|
67
152
|
return bulkQuery(conn, query, options);
|
|
68
153
|
}
|
|
154
|
+
findDuplicatedLabels(fields) {
|
|
155
|
+
const fieldNamesByLabel = new Map();
|
|
156
|
+
for (const { fieldName, label } of fields) {
|
|
157
|
+
const fieldNames = fieldNamesByLabel.get(label) ?? [];
|
|
158
|
+
fieldNames.push(fieldName);
|
|
159
|
+
fieldNamesByLabel.set(label, fieldNames);
|
|
160
|
+
}
|
|
161
|
+
return [...fieldNamesByLabel.entries()]
|
|
162
|
+
.filter(([, fieldNames]) => fieldNames.length > 1)
|
|
163
|
+
.map(([label, fieldNames]) => ({ label, fieldNames }));
|
|
164
|
+
}
|
|
69
165
|
}
|
|
70
166
|
//# sourceMappingURL=query.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAc,QAAQ,EAAO,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAgB,MAAM,qBAAqB,CAAC;AAE9D,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CACpC,uBAAuB,EACvB,iBAAiB,CAClB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAoB;IACrD,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,18 @@ Bulk delete records by SOQL select query.
|
|
|
8
8
|
|
|
9
9
|
<%= config.bin %> <%= command.id %> -q "SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2"
|
|
10
10
|
|
|
11
|
+
- Delete Opportunity records by SOQL file:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --query-file ./path/to/Opportunity.soql
|
|
14
|
+
|
|
11
15
|
# flags.query.summary
|
|
12
16
|
|
|
13
17
|
SOQL query to delete
|
|
14
18
|
|
|
19
|
+
# flags.query-file.summary
|
|
20
|
+
|
|
21
|
+
SOQL query file to delete
|
|
22
|
+
|
|
15
23
|
# flags.hard.summary
|
|
16
24
|
|
|
17
25
|
Perform a hard delete
|
|
@@ -8,18 +8,50 @@ Bulk query records.
|
|
|
8
8
|
|
|
9
9
|
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" -f ./path/to/Account.csv
|
|
10
10
|
|
|
11
|
+
- Query Account records from SOQL file:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --query-file ./path/to/Account.soql -f ./path/to/Account.csv
|
|
14
|
+
|
|
15
|
+
- Query Account records with object field labels:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" --object-field-label
|
|
18
|
+
|
|
19
|
+
- Query Account records with custom field label mapping:
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> -q "SELECT Id, Name FROM Account" --field-label-mapping ./path/to/field-label-mapping.json
|
|
22
|
+
|
|
11
23
|
# flags.query.summary
|
|
12
24
|
|
|
13
25
|
SOQL query to export
|
|
14
26
|
|
|
27
|
+
# flags.query-file.summary
|
|
28
|
+
|
|
29
|
+
SOQL query file to export
|
|
30
|
+
|
|
15
31
|
# flags.csv-file.summary
|
|
16
32
|
|
|
17
33
|
[default: standard output] Output csv file
|
|
18
34
|
|
|
35
|
+
# flags.object-field-label.summary
|
|
36
|
+
|
|
37
|
+
Output field names with object field labels
|
|
38
|
+
|
|
39
|
+
# flags.field-label-mapping.summary
|
|
40
|
+
|
|
41
|
+
JSON file that maps field API names to output field names
|
|
42
|
+
|
|
19
43
|
# flags.all.summary
|
|
20
44
|
|
|
21
45
|
include deleted or archived records
|
|
22
46
|
|
|
47
|
+
# errors.invalidFieldLabelMapping
|
|
48
|
+
|
|
49
|
+
Invalid field label mapping file: %s
|
|
50
|
+
|
|
51
|
+
# errors.duplicatedFieldLabel
|
|
52
|
+
|
|
53
|
+
Duplicated output field names: %s
|
|
54
|
+
|
|
23
55
|
# flags.wait.summary
|
|
24
56
|
|
|
25
57
|
The number of minutes to wait for the command to complete before displaying the results
|
package/oclif.manifest.json
CHANGED
|
@@ -267,7 +267,8 @@
|
|
|
267
267
|
"aliases": [],
|
|
268
268
|
"args": {},
|
|
269
269
|
"examples": [
|
|
270
|
-
"Delete Opportunity records with CloseDate older than 2 years:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2\""
|
|
270
|
+
"Delete Opportunity records with CloseDate older than 2 years:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2\"",
|
|
271
|
+
"Delete Opportunity records by SOQL file:\n<%= config.bin %> <%= command.id %> --query-file ./path/to/Opportunity.soql"
|
|
271
272
|
],
|
|
272
273
|
"flags": {
|
|
273
274
|
"json": {
|
|
@@ -288,12 +289,18 @@
|
|
|
288
289
|
"query": {
|
|
289
290
|
"char": "q",
|
|
290
291
|
"name": "query",
|
|
291
|
-
"required": true,
|
|
292
292
|
"summary": "SOQL query to delete",
|
|
293
293
|
"hasDynamicHelp": false,
|
|
294
294
|
"multiple": false,
|
|
295
295
|
"type": "option"
|
|
296
296
|
},
|
|
297
|
+
"query-file": {
|
|
298
|
+
"name": "query-file",
|
|
299
|
+
"summary": "SOQL query file to delete",
|
|
300
|
+
"hasDynamicHelp": false,
|
|
301
|
+
"multiple": false,
|
|
302
|
+
"type": "option"
|
|
303
|
+
},
|
|
297
304
|
"hard": {
|
|
298
305
|
"name": "hard",
|
|
299
306
|
"summary": "Perform a hard delete",
|
|
@@ -639,7 +646,10 @@
|
|
|
639
646
|
"aliases": [],
|
|
640
647
|
"args": {},
|
|
641
648
|
"examples": [
|
|
642
|
-
"Query Account records and save to specified path:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id, Name FROM Account\" -f ./path/to/Account.csv"
|
|
649
|
+
"Query Account records and save to specified path:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id, Name FROM Account\" -f ./path/to/Account.csv",
|
|
650
|
+
"Query Account records from SOQL file:\n<%= config.bin %> <%= command.id %> --query-file ./path/to/Account.soql -f ./path/to/Account.csv",
|
|
651
|
+
"Query Account records with object field labels:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id, Name FROM Account\" --object-field-label",
|
|
652
|
+
"Query Account records with custom field label mapping:\n<%= config.bin %> <%= command.id %> -q \"SELECT Id, Name FROM Account\" --field-label-mapping ./path/to/field-label-mapping.json"
|
|
643
653
|
],
|
|
644
654
|
"flags": {
|
|
645
655
|
"json": {
|
|
@@ -660,12 +670,18 @@
|
|
|
660
670
|
"query": {
|
|
661
671
|
"char": "q",
|
|
662
672
|
"name": "query",
|
|
663
|
-
"required": true,
|
|
664
673
|
"summary": "SOQL query to export",
|
|
665
674
|
"hasDynamicHelp": false,
|
|
666
675
|
"multiple": false,
|
|
667
676
|
"type": "option"
|
|
668
677
|
},
|
|
678
|
+
"query-file": {
|
|
679
|
+
"name": "query-file",
|
|
680
|
+
"summary": "SOQL query file to export",
|
|
681
|
+
"hasDynamicHelp": false,
|
|
682
|
+
"multiple": false,
|
|
683
|
+
"type": "option"
|
|
684
|
+
},
|
|
669
685
|
"csv-file": {
|
|
670
686
|
"aliases": [
|
|
671
687
|
"csvfile"
|
|
@@ -678,6 +694,19 @@
|
|
|
678
694
|
"multiple": false,
|
|
679
695
|
"type": "option"
|
|
680
696
|
},
|
|
697
|
+
"object-field-label": {
|
|
698
|
+
"name": "object-field-label",
|
|
699
|
+
"summary": "Output field names with object field labels",
|
|
700
|
+
"allowNo": false,
|
|
701
|
+
"type": "boolean"
|
|
702
|
+
},
|
|
703
|
+
"field-label-mapping": {
|
|
704
|
+
"name": "field-label-mapping",
|
|
705
|
+
"summary": "JSON file that maps field API names to output field names",
|
|
706
|
+
"hasDynamicHelp": false,
|
|
707
|
+
"multiple": false,
|
|
708
|
+
"type": "option"
|
|
709
|
+
},
|
|
681
710
|
"all": {
|
|
682
711
|
"name": "all",
|
|
683
712
|
"summary": "include deleted or archived records",
|
|
@@ -1844,5 +1873,5 @@
|
|
|
1844
1873
|
]
|
|
1845
1874
|
}
|
|
1846
1875
|
},
|
|
1847
|
-
"version": "1.0.
|
|
1876
|
+
"version": "1.0.4"
|
|
1848
1877
|
}
|