@celigo/api-specs 0.2.216 → 0.2.218
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/dist/export.yml +102 -40
- package/dist/tool.yml +102 -40
- package/package.json +1 -1
- package/schemas.json +2 -2
package/dist/export.yml
CHANGED
|
@@ -1461,6 +1461,18 @@ components:
|
|
|
1461
1461
|
IMPORTANT: Ensure the field is not being updated by other processes, as this could
|
|
1462
1462
|
cause records to be skipped unexpectedly. If multiple processes need to track exports,
|
|
1463
1463
|
use separate boolean fields for each process.
|
|
1464
|
+
- |-
|
|
1465
|
+
On a NetSuite saved-search export the run pins the set of records to flag when it
|
|
1466
|
+
starts and reads them from the front of the still-unflagged set, so records that
|
|
1467
|
+
become eligible during the run wait for the next run — the pattern to recommend over
|
|
1468
|
+
a type-`all` export whose flow sets the flag in a later NetSuite step. Correctness
|
|
1469
|
+
then rests on Group rows, not on the Batch size limit: with `netsuite.skipGrouping:
|
|
1470
|
+
false` (Group rows on, search sorted by Internal ID) every record of the pinned set
|
|
1471
|
+
exported exactly once at a batch size of 5, with no duplicates when two records
|
|
1472
|
+
became eligible mid-run (they waited for the next run); with Group rows
|
|
1473
|
+
off on a search that returns several rows per record, the rows of a record that fall
|
|
1474
|
+
after the page in which it was flagged are not exported and are not retried (83 of
|
|
1475
|
+
134 transaction lines at a batch size of 1, 117 of 134 at 5).
|
|
1464
1476
|
examples:
|
|
1465
1477
|
- isExported
|
|
1466
1478
|
- hasBeenSynced
|
|
@@ -4763,9 +4775,10 @@ components:
|
|
|
4763
4775
|
json:
|
|
4764
4776
|
type: object
|
|
4765
4777
|
description: |-
|
|
4766
|
-
Parsing settings for JSON files. Configure when type is "json". resourcePath
|
|
4767
|
-
|
|
4768
|
-
the
|
|
4778
|
+
Parsing settings for JSON files. Configure when type is "json". resourcePath selects the
|
|
4779
|
+
record elements inside the document — the wildcard form (`*`, `rows[*]`) iterates an
|
|
4780
|
+
array, while a path that stops at the array (or an empty path on a root array) yields
|
|
4781
|
+
the whole array as one record; malformed JSON fails the entire file's processing.
|
|
4769
4782
|
|
|
4770
4783
|
Required when type is json.
|
|
4771
4784
|
x-celigo-ai-guidance:
|
|
@@ -4807,8 +4820,12 @@ components:
|
|
|
4807
4820
|
]
|
|
4808
4821
|
```
|
|
4809
4822
|
- Records are directly at the root as an array
|
|
4810
|
-
-
|
|
4811
|
-
-
|
|
4823
|
+
- Set resourcePath to `*` (or `[*]`) so each element becomes a record
|
|
4824
|
+
- An empty resourcePath returns the entire array as ONE record — a large file then
|
|
4825
|
+
fails with `record_size_exceeded` instead of being split. The export form appends
|
|
4826
|
+
the wildcard itself when the attached sample file is 10 MB or smaller (why a blank
|
|
4827
|
+
path often works in the UI — a larger sample gets no wildcard and the blank path
|
|
4828
|
+
stands); a document sent through the API carries exactly the path it names
|
|
4812
4829
|
|
|
4813
4830
|
### Container Object Pattern
|
|
4814
4831
|
```json
|
|
@@ -4824,7 +4841,8 @@ components:
|
|
|
4824
4841
|
}
|
|
4825
4842
|
```
|
|
4826
4843
|
- Records are in an array inside a container object
|
|
4827
|
-
- Requires resourcePath (e.g., "data")
|
|
4844
|
+
- Requires resourcePath with the element wildcard (e.g., "data[*]" or "data.*");
|
|
4845
|
+
"data" alone selects the array itself and yields it as one record
|
|
4828
4846
|
- Common in API responses with metadata
|
|
4829
4847
|
|
|
4830
4848
|
### Nested Container Pattern
|
|
@@ -4843,13 +4861,20 @@ components:
|
|
|
4843
4861
|
}
|
|
4844
4862
|
```
|
|
4845
4863
|
- Records are deeply nested in the hierarchy
|
|
4846
|
-
- Requires dot notation in
|
|
4864
|
+
- Requires dot notation ending in the element wildcard (e.g., "response.results[*]")
|
|
4847
4865
|
- Common in complex API responses
|
|
4848
4866
|
- |-
|
|
4849
4867
|
## ERROR PREVENTION
|
|
4850
4868
|
|
|
4851
4869
|
- **Invalid Path**: Incorrectly specified resourcePath results in zero records found
|
|
4852
|
-
- **
|
|
4870
|
+
- **Array as one record**: a path that stops at the array (or an empty path on a root
|
|
4871
|
+
array) yields the whole array as a single record; it fails `record_size_exceeded`
|
|
4872
|
+
("The size of a single record should not exceed 26214400 bytes. This may happen
|
|
4873
|
+
because the Resource path is not set correctly") once the file passes 25 MiB — the
|
|
4874
|
+
fix is the element wildcard (`*` / `path[*]`). A preSavePage hook cannot split the
|
|
4875
|
+
record instead: the rejection happens while the file is parsed, before any page of
|
|
4876
|
+
records exists for a hook to receive (an export with such a hook fails identically,
|
|
4877
|
+
with zero pages generated)
|
|
4853
4878
|
- **Empty Results**: If path resolves to null or non-existent field, no error is thrown but no records are processed
|
|
4854
4879
|
- **Parsing Failures**: Malformed JSON will cause the entire file processing to fail
|
|
4855
4880
|
- |-
|
|
@@ -4863,11 +4888,19 @@ components:
|
|
|
4863
4888
|
resourcePath:
|
|
4864
4889
|
type: string
|
|
4865
4890
|
description: |-
|
|
4866
|
-
Dot-notation path
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4891
|
+
Dot-notation path that selects the record elements within the JSON document, ending
|
|
4892
|
+
in the element wildcard — `*` when the file's root is the record array,
|
|
4893
|
+
`response.data.customers[*]` (or `.customers.*`) when the array sits under a key. A
|
|
4894
|
+
path that stops at the array — `response.data.customers`, or an empty path on a root
|
|
4895
|
+
array — yields the whole array as a single record, which fails `record_size_exceeded`
|
|
4896
|
+
once it exceeds 26,214,400 bytes. The export form appends the wildcard when the
|
|
4897
|
+
attached sample file is 10 MB or smaller, so a path left blank in the UI often works
|
|
4898
|
+
where the same document sent through the API — or a form with a larger sample — does
|
|
4899
|
+
not. Array indexing and `$`-rooted JSONPath (`$[*]`,
|
|
4900
|
+
`$.rows`) are not supported; a path that resolves to nothing produces zero records
|
|
4901
|
+
without raising an error. This is the file parser's path only — the path to records
|
|
4902
|
+
in an HTTP API response is the separate `http.response.resourcePath`, with its own
|
|
4903
|
+
rules (a bare dot path such as `results.customers` selects the record array there).
|
|
4871
4904
|
x-celigo-ai-guidance:
|
|
4872
4905
|
- |-
|
|
4873
4906
|
Specifies the path to the array of records within the JSON structure.
|
|
@@ -4876,18 +4909,18 @@ components:
|
|
|
4876
4909
|
- |-
|
|
4877
4910
|
## BEHAVIOR
|
|
4878
4911
|
|
|
4879
|
-
- **Purpose**:
|
|
4880
|
-
- **Format**: Dot notation
|
|
4881
|
-
- **When Empty**:
|
|
4882
|
-
- **Result**:
|
|
4912
|
+
- **Purpose**: Selects the elements that become records within the JSON structure
|
|
4913
|
+
- **Format**: Dot notation to navigate nested objects, ending in the element wildcard (e.g., "data.records[*]")
|
|
4914
|
+
- **When Empty**: The whole document is one record — a root object is that one record; a root array is NOT split (use `*` to split it)
|
|
4915
|
+
- **Result**: Each element the wildcard selects is processed as one record; a path that stops at the array yields the array as one record
|
|
4883
4916
|
- |-
|
|
4884
4917
|
## PATH NOTATION GUIDELINES
|
|
4885
4918
|
|
|
4886
4919
|
### Basic Path Patterns
|
|
4887
4920
|
|
|
4888
|
-
- **Root Level Array**:
|
|
4889
|
-
- **Single Level Nesting**:
|
|
4890
|
-
- **Multi-Level Nesting**:
|
|
4921
|
+
- **Root Level Array**: `*` (or `[*]`) when records are a direct array at root
|
|
4922
|
+
- **Single Level Nesting**: The property name plus the wildcard (e.g., "data[*]", "results[*]", "items.*")
|
|
4923
|
+
- **Multi-Level Nesting**: Dot notation plus the wildcard (e.g., "response.data.items[*]")
|
|
4891
4924
|
|
|
4892
4925
|
### Path Construction Rules
|
|
4893
4926
|
|
|
@@ -4896,13 +4929,14 @@ components:
|
|
|
4896
4929
|
- Each segment must be a valid property name in the JSON
|
|
4897
4930
|
|
|
4898
4931
|
2. **Target Requirements**:
|
|
4899
|
-
- The path
|
|
4900
|
-
-
|
|
4901
|
-
-
|
|
4932
|
+
- The parser yields whatever the path selects as the record(s): to get one record per array element, the path MUST end in the element wildcard (`[*]` or `.*`)
|
|
4933
|
+
- A path that stops at the array ("data") selects the array itself and yields ONE record holding every element
|
|
4934
|
+
- A path that selects a single object ("response", "response.data") yields that object as one record — the shape for a file that IS one record
|
|
4935
|
+
- The wildcard iterates whatever it is applied to: on an OBJECT (`*` on a root object, "response.*") it yields one record per member value, not the object — apply it to arrays
|
|
4902
4936
|
|
|
4903
4937
|
3. **Limitations**:
|
|
4904
4938
|
- Array indexing is not supported in the path (e.g., "data[0]")
|
|
4905
|
-
-
|
|
4939
|
+
- `$`-rooted JSONPath is not supported ("$[*]", "$.data[*]" match nothing and yield zero records)
|
|
4906
4940
|
- Regular expressions are not supported
|
|
4907
4941
|
- |-
|
|
4908
4942
|
## DETERMINATION STRATEGY FOR AI AGENTS
|
|
@@ -4918,20 +4952,21 @@ components:
|
|
|
4918
4952
|
|
|
4919
4953
|
| Source Type | Common Paths | Example |
|
|
4920
4954
|
|-------------|--------------|---------|
|
|
4921
|
-
|
|
|
4922
|
-
|
|
|
4923
|
-
|
|
|
4924
|
-
|
|
|
4925
|
-
|
|
|
4955
|
+
| Root array file | "*" | "*" |
|
|
4956
|
+
| REST APIs | "data[*]", "results[*]", "items[*]" | "data[*]" |
|
|
4957
|
+
| Complex APIs | "response.data[*]", "data.items[*]" | "response.data[*]" |
|
|
4958
|
+
| Database Exports | "rows[*]", "records[*]", "exports[*]" | "rows[*]" |
|
|
4959
|
+
| CRM Systems | "contacts[*]", "accounts[*]", "opportunities[*]" | "contacts[*]" |
|
|
4960
|
+
| Analytics APIs | "data.rows[*]", "response.data.rows[*]" | "data.rows[*]" |
|
|
4926
4961
|
|
|
4927
4962
|
3. **Verification Approach**:
|
|
4928
|
-
-
|
|
4929
|
-
- Each element
|
|
4963
|
+
- Preview the export: the parse stage must show one record per array element — a single record that is itself an array means the path stopped at the array
|
|
4964
|
+
- Each element should represent one complete record
|
|
4930
4965
|
- The array should not be a property array (like tags or categories)
|
|
4931
4966
|
- |-
|
|
4932
4967
|
## IMPLEMENTATION EXAMPLES
|
|
4933
4968
|
|
|
4934
|
-
### Root Array
|
|
4969
|
+
### Root Array
|
|
4935
4970
|
|
|
4936
4971
|
JSON Structure:
|
|
4937
4972
|
```json
|
|
@@ -4943,9 +4978,11 @@ components:
|
|
|
4943
4978
|
|
|
4944
4979
|
Configuration:
|
|
4945
4980
|
```json
|
|
4946
|
-
"resourcePath": ""
|
|
4981
|
+
"resourcePath": "*"
|
|
4947
4982
|
```
|
|
4948
4983
|
|
|
4984
|
+
An empty path (or omitting it) returns this array as ONE record rather than two.
|
|
4985
|
+
|
|
4949
4986
|
### Single-Level Nesting
|
|
4950
4987
|
|
|
4951
4988
|
JSON Structure:
|
|
@@ -4961,7 +4998,7 @@ components:
|
|
|
4961
4998
|
|
|
4962
4999
|
Configuration:
|
|
4963
5000
|
```json
|
|
4964
|
-
"resourcePath": "orders"
|
|
5001
|
+
"resourcePath": "orders[*]"
|
|
4965
5002
|
```
|
|
4966
5003
|
|
|
4967
5004
|
### Multi-Level Nesting
|
|
@@ -4983,7 +5020,7 @@ components:
|
|
|
4983
5020
|
|
|
4984
5021
|
Configuration:
|
|
4985
5022
|
```json
|
|
4986
|
-
"resourcePath": "response.data.customers"
|
|
5023
|
+
"resourcePath": "response.data.customers[*]"
|
|
4987
5024
|
```
|
|
4988
5025
|
- |-
|
|
4989
5026
|
## TROUBLESHOOTING INDICATORS
|
|
@@ -4991,6 +5028,8 @@ components:
|
|
|
4991
5028
|
If you encounter these issues, review the resourcePath setting:
|
|
4992
5029
|
|
|
4993
5030
|
- Export completes successfully but processes 0 records
|
|
5031
|
+
- `record_size_exceeded` — "The size of a single record should not exceed 26214400 bytes. This may happen because the Resource path is not set correctly": the path stopped at the array, so the whole file is one record; append the element wildcard (`*` for a root array, `path[*]` for a nested one) — a preSavePage hook cannot help: the record is rejected while the file is parsed, before any page exists for a hook to receive
|
|
5032
|
+
- A preview whose single record is itself an array of the expected objects (same cause, small file)
|
|
4994
5033
|
- "Cannot read property 'forEach' of undefined" errors
|
|
4995
5034
|
- "Expected array but got object/string/number" errors
|
|
4996
5035
|
- Records appear flattened or with unexpected structure
|
|
@@ -5002,10 +5041,11 @@ components:
|
|
|
5002
5041
|
- Document the expected JSON structure alongside the configuration
|
|
5003
5042
|
- For APIs with changing response structures, implement validation checks
|
|
5004
5043
|
examples:
|
|
5005
|
-
-
|
|
5006
|
-
-
|
|
5007
|
-
-
|
|
5008
|
-
-
|
|
5044
|
+
- '*'
|
|
5045
|
+
- data.orders[*]
|
|
5046
|
+
- response.results[*]
|
|
5047
|
+
- items[*]
|
|
5048
|
+
- data.customers.records.*
|
|
5009
5049
|
xlsx:
|
|
5010
5050
|
type: object
|
|
5011
5051
|
description: |-
|
|
@@ -9413,7 +9453,7 @@ components:
|
|
|
9413
9453
|
PathToRecords:
|
|
9414
9454
|
type: string
|
|
9415
9455
|
maxLength: 250
|
|
9416
|
-
description: Path to the array of records inside each document or item fetched from the source; each array element is emitted as an individual record, which keeps records within the 5 MB page-size limit even when the source document exceeds it. Accepts dot notation (e.g. `data.orders`) or JSONPath for values starting with `$`, including unions (`$['orders','invoices'][*]`) and filter expressions (`$.items[?(@.qty>3)]`); a path that resolves to nothing emits zero records for that document or item. When omitted, each document or item is emitted as one record, exactly as before
|
|
9456
|
+
description: Path to the array of records inside each document or item fetched from the source; each array element is emitted as an individual record, which keeps records within the 5 MB page-size limit even when the source document exceeds it. Accepts dot notation (e.g. `data.orders`) or JSONPath for values starting with `$`, including unions (`$['orders','invoices'][*]`) and filter expressions (`$.items[?(@.qty>3)]`); a path that resolves to nothing emits zero records for that document or item. When omitted, each document or item is emitted as one record, exactly as before. HTTP exports configure the same capability through `http.response.resourcePath` with these same path rules; file-based exports configure it through `file.json`/`file.xml` `resourcePath`, where the JSON file parser follows its own rule — the path yields whatever it selects as the record, so it must end in the element wildcard (`*` for a root array, `data.orders[*]` under a key) to emit one record per element, and `$`-rooted JSONPath is not supported there.
|
|
9417
9457
|
examples:
|
|
9418
9458
|
- lineItems
|
|
9419
9459
|
- order.lineItems
|
|
@@ -10691,6 +10731,12 @@ components:
|
|
|
10691
10731
|
Set `true` for an ad-hoc RESTlet search (criteria and columns without a saved
|
|
10692
10732
|
search): grouping needs the search sorted by internal id, and an unsorted ad-hoc
|
|
10693
10733
|
search fails with `[search_not_sorted]`.
|
|
10734
|
+
- |-
|
|
10735
|
+
With export type `once`, keep this `false` on a search that returns several rows per
|
|
10736
|
+
record: `once` flags the record when the page holding its first row completes, and
|
|
10737
|
+
with `true` the record's remaining rows drop out of the later requests — at a batch
|
|
10738
|
+
size of 5, 17 of 134 transaction lines never exported. Grouped, the record is the
|
|
10739
|
+
whole transaction and every row is exported exactly once.
|
|
10694
10740
|
- 'For `exportSelect` / `refreshableSelect` dropdowns backed by a NetSuite RESTlet, set `skipGrouping: true`: the UI''s option mapper expects flat per-row results, and the platform otherwise wraps each row in its own grouping list (every option''s `label` then renders as `undefined`).'
|
|
10695
10741
|
statsOnly:
|
|
10696
10742
|
type: boolean
|
|
@@ -10912,6 +10958,22 @@ components:
|
|
|
10912
10958
|
and memory use per call; tune to the record's size. The RESTlet caps a call at 1000,
|
|
10913
10959
|
so a larger value acts as 1000. In a test run or preview the request is capped at the
|
|
10914
10960
|
export's `pageSize` (default 20) instead.
|
|
10961
|
+
x-celigo-ai-guidance:
|
|
10962
|
+
- |-
|
|
10963
|
+
Each request re-runs the saved search and returns the next slice by position, on
|
|
10964
|
+
the SuiteBundle and SuiteApp 2.0 RESTlets alike. Rows that enter the result set
|
|
10965
|
+
ahead of the position between two requests come back again — a contiguous block
|
|
10966
|
+
of duplicates equal to the rows that entered; rows that leave it are skipped with
|
|
10967
|
+
no error. A run whose rows fit in one request has no gap. The shift acts on
|
|
10968
|
+
positions, not on order: in the probes every row came back in one fixed per-row
|
|
10969
|
+
order (Internal ID, then line) on every run, and the inserted rows displaced them
|
|
10970
|
+
all the same. Export type `once` with `netsuite.skipGrouping: false` prevents it,
|
|
10971
|
+
because it pins the record set when the run starts.
|
|
10972
|
+
- |-
|
|
10973
|
+
Leave this blank unless a NetSuite time limit forced a smaller value: a smaller
|
|
10974
|
+
batch multiplies the request boundaries per run, and each one is exposed when
|
|
10975
|
+
the search's membership changes mid-run (an older record approved, a flag the
|
|
10976
|
+
search filters on reset).
|
|
10915
10977
|
examples:
|
|
10916
10978
|
- 100
|
|
10917
10979
|
- 200
|
package/dist/tool.yml
CHANGED
|
@@ -27851,6 +27851,18 @@ components:
|
|
|
27851
27851
|
IMPORTANT: Ensure the field is not being updated by other processes, as this could
|
|
27852
27852
|
cause records to be skipped unexpectedly. If multiple processes need to track exports,
|
|
27853
27853
|
use separate boolean fields for each process.
|
|
27854
|
+
- |-
|
|
27855
|
+
On a NetSuite saved-search export the run pins the set of records to flag when it
|
|
27856
|
+
starts and reads them from the front of the still-unflagged set, so records that
|
|
27857
|
+
become eligible during the run wait for the next run — the pattern to recommend over
|
|
27858
|
+
a type-`all` export whose flow sets the flag in a later NetSuite step. Correctness
|
|
27859
|
+
then rests on Group rows, not on the Batch size limit: with `netsuite.skipGrouping:
|
|
27860
|
+
false` (Group rows on, search sorted by Internal ID) every record of the pinned set
|
|
27861
|
+
exported exactly once at a batch size of 5, with no duplicates when two records
|
|
27862
|
+
became eligible mid-run (they waited for the next run); with Group rows
|
|
27863
|
+
off on a search that returns several rows per record, the rows of a record that fall
|
|
27864
|
+
after the page in which it was flagged are not exported and are not retried (83 of
|
|
27865
|
+
134 transaction lines at a batch size of 1, 117 of 134 at 5).
|
|
27854
27866
|
examples:
|
|
27855
27867
|
- isExported
|
|
27856
27868
|
- hasBeenSynced
|
|
@@ -30658,9 +30670,10 @@ components:
|
|
|
30658
30670
|
json:
|
|
30659
30671
|
type: object
|
|
30660
30672
|
description: |-
|
|
30661
|
-
Parsing settings for JSON files. Configure when type is "json". resourcePath
|
|
30662
|
-
|
|
30663
|
-
the
|
|
30673
|
+
Parsing settings for JSON files. Configure when type is "json". resourcePath selects the
|
|
30674
|
+
record elements inside the document — the wildcard form (`*`, `rows[*]`) iterates an
|
|
30675
|
+
array, while a path that stops at the array (or an empty path on a root array) yields
|
|
30676
|
+
the whole array as one record; malformed JSON fails the entire file's processing.
|
|
30664
30677
|
|
|
30665
30678
|
Required when type is json.
|
|
30666
30679
|
x-celigo-ai-guidance:
|
|
@@ -30702,8 +30715,12 @@ components:
|
|
|
30702
30715
|
]
|
|
30703
30716
|
```
|
|
30704
30717
|
- Records are directly at the root as an array
|
|
30705
|
-
-
|
|
30706
|
-
-
|
|
30718
|
+
- Set resourcePath to `*` (or `[*]`) so each element becomes a record
|
|
30719
|
+
- An empty resourcePath returns the entire array as ONE record — a large file then
|
|
30720
|
+
fails with `record_size_exceeded` instead of being split. The export form appends
|
|
30721
|
+
the wildcard itself when the attached sample file is 10 MB or smaller (why a blank
|
|
30722
|
+
path often works in the UI — a larger sample gets no wildcard and the blank path
|
|
30723
|
+
stands); a document sent through the API carries exactly the path it names
|
|
30707
30724
|
|
|
30708
30725
|
### Container Object Pattern
|
|
30709
30726
|
```json
|
|
@@ -30719,7 +30736,8 @@ components:
|
|
|
30719
30736
|
}
|
|
30720
30737
|
```
|
|
30721
30738
|
- Records are in an array inside a container object
|
|
30722
|
-
- Requires resourcePath (e.g., "data")
|
|
30739
|
+
- Requires resourcePath with the element wildcard (e.g., "data[*]" or "data.*");
|
|
30740
|
+
"data" alone selects the array itself and yields it as one record
|
|
30723
30741
|
- Common in API responses with metadata
|
|
30724
30742
|
|
|
30725
30743
|
### Nested Container Pattern
|
|
@@ -30738,13 +30756,20 @@ components:
|
|
|
30738
30756
|
}
|
|
30739
30757
|
```
|
|
30740
30758
|
- Records are deeply nested in the hierarchy
|
|
30741
|
-
- Requires dot notation in
|
|
30759
|
+
- Requires dot notation ending in the element wildcard (e.g., "response.results[*]")
|
|
30742
30760
|
- Common in complex API responses
|
|
30743
30761
|
- |-
|
|
30744
30762
|
## ERROR PREVENTION
|
|
30745
30763
|
|
|
30746
30764
|
- **Invalid Path**: Incorrectly specified resourcePath results in zero records found
|
|
30747
|
-
- **
|
|
30765
|
+
- **Array as one record**: a path that stops at the array (or an empty path on a root
|
|
30766
|
+
array) yields the whole array as a single record; it fails `record_size_exceeded`
|
|
30767
|
+
("The size of a single record should not exceed 26214400 bytes. This may happen
|
|
30768
|
+
because the Resource path is not set correctly") once the file passes 25 MiB — the
|
|
30769
|
+
fix is the element wildcard (`*` / `path[*]`). A preSavePage hook cannot split the
|
|
30770
|
+
record instead: the rejection happens while the file is parsed, before any page of
|
|
30771
|
+
records exists for a hook to receive (an export with such a hook fails identically,
|
|
30772
|
+
with zero pages generated)
|
|
30748
30773
|
- **Empty Results**: If path resolves to null or non-existent field, no error is thrown but no records are processed
|
|
30749
30774
|
- **Parsing Failures**: Malformed JSON will cause the entire file processing to fail
|
|
30750
30775
|
- |-
|
|
@@ -30758,11 +30783,19 @@ components:
|
|
|
30758
30783
|
resourcePath:
|
|
30759
30784
|
type: string
|
|
30760
30785
|
description: |-
|
|
30761
|
-
Dot-notation path
|
|
30762
|
-
|
|
30763
|
-
|
|
30764
|
-
|
|
30765
|
-
|
|
30786
|
+
Dot-notation path that selects the record elements within the JSON document, ending
|
|
30787
|
+
in the element wildcard — `*` when the file's root is the record array,
|
|
30788
|
+
`response.data.customers[*]` (or `.customers.*`) when the array sits under a key. A
|
|
30789
|
+
path that stops at the array — `response.data.customers`, or an empty path on a root
|
|
30790
|
+
array — yields the whole array as a single record, which fails `record_size_exceeded`
|
|
30791
|
+
once it exceeds 26,214,400 bytes. The export form appends the wildcard when the
|
|
30792
|
+
attached sample file is 10 MB or smaller, so a path left blank in the UI often works
|
|
30793
|
+
where the same document sent through the API — or a form with a larger sample — does
|
|
30794
|
+
not. Array indexing and `$`-rooted JSONPath (`$[*]`,
|
|
30795
|
+
`$.rows`) are not supported; a path that resolves to nothing produces zero records
|
|
30796
|
+
without raising an error. This is the file parser's path only — the path to records
|
|
30797
|
+
in an HTTP API response is the separate `http.response.resourcePath`, with its own
|
|
30798
|
+
rules (a bare dot path such as `results.customers` selects the record array there).
|
|
30766
30799
|
x-celigo-ai-guidance:
|
|
30767
30800
|
- |-
|
|
30768
30801
|
Specifies the path to the array of records within the JSON structure.
|
|
@@ -30771,18 +30804,18 @@ components:
|
|
|
30771
30804
|
- |-
|
|
30772
30805
|
## BEHAVIOR
|
|
30773
30806
|
|
|
30774
|
-
- **Purpose**:
|
|
30775
|
-
- **Format**: Dot notation
|
|
30776
|
-
- **When Empty**:
|
|
30777
|
-
- **Result**:
|
|
30807
|
+
- **Purpose**: Selects the elements that become records within the JSON structure
|
|
30808
|
+
- **Format**: Dot notation to navigate nested objects, ending in the element wildcard (e.g., "data.records[*]")
|
|
30809
|
+
- **When Empty**: The whole document is one record — a root object is that one record; a root array is NOT split (use `*` to split it)
|
|
30810
|
+
- **Result**: Each element the wildcard selects is processed as one record; a path that stops at the array yields the array as one record
|
|
30778
30811
|
- |-
|
|
30779
30812
|
## PATH NOTATION GUIDELINES
|
|
30780
30813
|
|
|
30781
30814
|
### Basic Path Patterns
|
|
30782
30815
|
|
|
30783
|
-
- **Root Level Array**:
|
|
30784
|
-
- **Single Level Nesting**:
|
|
30785
|
-
- **Multi-Level Nesting**:
|
|
30816
|
+
- **Root Level Array**: `*` (or `[*]`) when records are a direct array at root
|
|
30817
|
+
- **Single Level Nesting**: The property name plus the wildcard (e.g., "data[*]", "results[*]", "items.*")
|
|
30818
|
+
- **Multi-Level Nesting**: Dot notation plus the wildcard (e.g., "response.data.items[*]")
|
|
30786
30819
|
|
|
30787
30820
|
### Path Construction Rules
|
|
30788
30821
|
|
|
@@ -30791,13 +30824,14 @@ components:
|
|
|
30791
30824
|
- Each segment must be a valid property name in the JSON
|
|
30792
30825
|
|
|
30793
30826
|
2. **Target Requirements**:
|
|
30794
|
-
- The path
|
|
30795
|
-
-
|
|
30796
|
-
-
|
|
30827
|
+
- The parser yields whatever the path selects as the record(s): to get one record per array element, the path MUST end in the element wildcard (`[*]` or `.*`)
|
|
30828
|
+
- A path that stops at the array ("data") selects the array itself and yields ONE record holding every element
|
|
30829
|
+
- A path that selects a single object ("response", "response.data") yields that object as one record — the shape for a file that IS one record
|
|
30830
|
+
- The wildcard iterates whatever it is applied to: on an OBJECT (`*` on a root object, "response.*") it yields one record per member value, not the object — apply it to arrays
|
|
30797
30831
|
|
|
30798
30832
|
3. **Limitations**:
|
|
30799
30833
|
- Array indexing is not supported in the path (e.g., "data[0]")
|
|
30800
|
-
-
|
|
30834
|
+
- `$`-rooted JSONPath is not supported ("$[*]", "$.data[*]" match nothing and yield zero records)
|
|
30801
30835
|
- Regular expressions are not supported
|
|
30802
30836
|
- |-
|
|
30803
30837
|
## DETERMINATION STRATEGY FOR AI AGENTS
|
|
@@ -30813,20 +30847,21 @@ components:
|
|
|
30813
30847
|
|
|
30814
30848
|
| Source Type | Common Paths | Example |
|
|
30815
30849
|
|-------------|--------------|---------|
|
|
30816
|
-
|
|
|
30817
|
-
|
|
|
30818
|
-
|
|
|
30819
|
-
|
|
|
30820
|
-
|
|
|
30850
|
+
| Root array file | "*" | "*" |
|
|
30851
|
+
| REST APIs | "data[*]", "results[*]", "items[*]" | "data[*]" |
|
|
30852
|
+
| Complex APIs | "response.data[*]", "data.items[*]" | "response.data[*]" |
|
|
30853
|
+
| Database Exports | "rows[*]", "records[*]", "exports[*]" | "rows[*]" |
|
|
30854
|
+
| CRM Systems | "contacts[*]", "accounts[*]", "opportunities[*]" | "contacts[*]" |
|
|
30855
|
+
| Analytics APIs | "data.rows[*]", "response.data.rows[*]" | "data.rows[*]" |
|
|
30821
30856
|
|
|
30822
30857
|
3. **Verification Approach**:
|
|
30823
|
-
-
|
|
30824
|
-
- Each element
|
|
30858
|
+
- Preview the export: the parse stage must show one record per array element — a single record that is itself an array means the path stopped at the array
|
|
30859
|
+
- Each element should represent one complete record
|
|
30825
30860
|
- The array should not be a property array (like tags or categories)
|
|
30826
30861
|
- |-
|
|
30827
30862
|
## IMPLEMENTATION EXAMPLES
|
|
30828
30863
|
|
|
30829
|
-
### Root Array
|
|
30864
|
+
### Root Array
|
|
30830
30865
|
|
|
30831
30866
|
JSON Structure:
|
|
30832
30867
|
```json
|
|
@@ -30838,9 +30873,11 @@ components:
|
|
|
30838
30873
|
|
|
30839
30874
|
Configuration:
|
|
30840
30875
|
```json
|
|
30841
|
-
"resourcePath": ""
|
|
30876
|
+
"resourcePath": "*"
|
|
30842
30877
|
```
|
|
30843
30878
|
|
|
30879
|
+
An empty path (or omitting it) returns this array as ONE record rather than two.
|
|
30880
|
+
|
|
30844
30881
|
### Single-Level Nesting
|
|
30845
30882
|
|
|
30846
30883
|
JSON Structure:
|
|
@@ -30856,7 +30893,7 @@ components:
|
|
|
30856
30893
|
|
|
30857
30894
|
Configuration:
|
|
30858
30895
|
```json
|
|
30859
|
-
"resourcePath": "orders"
|
|
30896
|
+
"resourcePath": "orders[*]"
|
|
30860
30897
|
```
|
|
30861
30898
|
|
|
30862
30899
|
### Multi-Level Nesting
|
|
@@ -30878,7 +30915,7 @@ components:
|
|
|
30878
30915
|
|
|
30879
30916
|
Configuration:
|
|
30880
30917
|
```json
|
|
30881
|
-
"resourcePath": "response.data.customers"
|
|
30918
|
+
"resourcePath": "response.data.customers[*]"
|
|
30882
30919
|
```
|
|
30883
30920
|
- |-
|
|
30884
30921
|
## TROUBLESHOOTING INDICATORS
|
|
@@ -30886,6 +30923,8 @@ components:
|
|
|
30886
30923
|
If you encounter these issues, review the resourcePath setting:
|
|
30887
30924
|
|
|
30888
30925
|
- Export completes successfully but processes 0 records
|
|
30926
|
+
- `record_size_exceeded` — "The size of a single record should not exceed 26214400 bytes. This may happen because the Resource path is not set correctly": the path stopped at the array, so the whole file is one record; append the element wildcard (`*` for a root array, `path[*]` for a nested one) — a preSavePage hook cannot help: the record is rejected while the file is parsed, before any page exists for a hook to receive
|
|
30927
|
+
- A preview whose single record is itself an array of the expected objects (same cause, small file)
|
|
30889
30928
|
- "Cannot read property 'forEach' of undefined" errors
|
|
30890
30929
|
- "Expected array but got object/string/number" errors
|
|
30891
30930
|
- Records appear flattened or with unexpected structure
|
|
@@ -30897,10 +30936,11 @@ components:
|
|
|
30897
30936
|
- Document the expected JSON structure alongside the configuration
|
|
30898
30937
|
- For APIs with changing response structures, implement validation checks
|
|
30899
30938
|
examples:
|
|
30900
|
-
-
|
|
30901
|
-
-
|
|
30902
|
-
-
|
|
30903
|
-
-
|
|
30939
|
+
- '*'
|
|
30940
|
+
- data.orders[*]
|
|
30941
|
+
- response.results[*]
|
|
30942
|
+
- items[*]
|
|
30943
|
+
- data.customers.records.*
|
|
30904
30944
|
xlsx:
|
|
30905
30945
|
type: object
|
|
30906
30946
|
description: |-
|
|
@@ -35308,7 +35348,7 @@ components:
|
|
|
35308
35348
|
PathToRecords:
|
|
35309
35349
|
type: string
|
|
35310
35350
|
maxLength: 250
|
|
35311
|
-
description: Path to the array of records inside each document or item fetched from the source; each array element is emitted as an individual record, which keeps records within the 5 MB page-size limit even when the source document exceeds it. Accepts dot notation (e.g. `data.orders`) or JSONPath for values starting with `$`, including unions (`$['orders','invoices'][*]`) and filter expressions (`$.items[?(@.qty>3)]`); a path that resolves to nothing emits zero records for that document or item. When omitted, each document or item is emitted as one record, exactly as before
|
|
35351
|
+
description: Path to the array of records inside each document or item fetched from the source; each array element is emitted as an individual record, which keeps records within the 5 MB page-size limit even when the source document exceeds it. Accepts dot notation (e.g. `data.orders`) or JSONPath for values starting with `$`, including unions (`$['orders','invoices'][*]`) and filter expressions (`$.items[?(@.qty>3)]`); a path that resolves to nothing emits zero records for that document or item. When omitted, each document or item is emitted as one record, exactly as before. HTTP exports configure the same capability through `http.response.resourcePath` with these same path rules; file-based exports configure it through `file.json`/`file.xml` `resourcePath`, where the JSON file parser follows its own rule — the path yields whatever it selects as the record, so it must end in the element wildcard (`*` for a root array, `data.orders[*]` under a key) to emit one record per element, and `$`-rooted JSONPath is not supported there.
|
|
35312
35352
|
examples:
|
|
35313
35353
|
- lineItems
|
|
35314
35354
|
- order.lineItems
|
|
@@ -36586,6 +36626,12 @@ components:
|
|
|
36586
36626
|
Set `true` for an ad-hoc RESTlet search (criteria and columns without a saved
|
|
36587
36627
|
search): grouping needs the search sorted by internal id, and an unsorted ad-hoc
|
|
36588
36628
|
search fails with `[search_not_sorted]`.
|
|
36629
|
+
- |-
|
|
36630
|
+
With export type `once`, keep this `false` on a search that returns several rows per
|
|
36631
|
+
record: `once` flags the record when the page holding its first row completes, and
|
|
36632
|
+
with `true` the record's remaining rows drop out of the later requests — at a batch
|
|
36633
|
+
size of 5, 17 of 134 transaction lines never exported. Grouped, the record is the
|
|
36634
|
+
whole transaction and every row is exported exactly once.
|
|
36589
36635
|
- 'For `exportSelect` / `refreshableSelect` dropdowns backed by a NetSuite RESTlet, set `skipGrouping: true`: the UI''s option mapper expects flat per-row results, and the platform otherwise wraps each row in its own grouping list (every option''s `label` then renders as `undefined`).'
|
|
36590
36636
|
statsOnly:
|
|
36591
36637
|
type: boolean
|
|
@@ -36807,6 +36853,22 @@ components:
|
|
|
36807
36853
|
and memory use per call; tune to the record's size. The RESTlet caps a call at 1000,
|
|
36808
36854
|
so a larger value acts as 1000. In a test run or preview the request is capped at the
|
|
36809
36855
|
export's `pageSize` (default 20) instead.
|
|
36856
|
+
x-celigo-ai-guidance:
|
|
36857
|
+
- |-
|
|
36858
|
+
Each request re-runs the saved search and returns the next slice by position, on
|
|
36859
|
+
the SuiteBundle and SuiteApp 2.0 RESTlets alike. Rows that enter the result set
|
|
36860
|
+
ahead of the position between two requests come back again — a contiguous block
|
|
36861
|
+
of duplicates equal to the rows that entered; rows that leave it are skipped with
|
|
36862
|
+
no error. A run whose rows fit in one request has no gap. The shift acts on
|
|
36863
|
+
positions, not on order: in the probes every row came back in one fixed per-row
|
|
36864
|
+
order (Internal ID, then line) on every run, and the inserted rows displaced them
|
|
36865
|
+
all the same. Export type `once` with `netsuite.skipGrouping: false` prevents it,
|
|
36866
|
+
because it pins the record set when the run starts.
|
|
36867
|
+
- |-
|
|
36868
|
+
Leave this blank unless a NetSuite time limit forced a smaller value: a smaller
|
|
36869
|
+
batch multiplies the request boundaries per run, and each one is exposed when
|
|
36870
|
+
the search's membership changes mid-run (an older record approved, a flag the
|
|
36871
|
+
search filters on reset).
|
|
36810
36872
|
examples:
|
|
36811
36873
|
- 100
|
|
36812
36874
|
- 200
|
package/package.json
CHANGED