netsuite
This commit is contained in:
parent
272cecf23c
commit
be15eb3620
@ -30,7 +30,7 @@ function SheetJSXSpread() {
|
||||
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
|
||||
const [done, setDone] = React.useState(false);
|
||||
const ref = React.useRef(); // ref to DIV container
|
||||
const set_url = React.useCallback((evt) => setUrl(evt.target.value));
|
||||
const set_url = (evt) => setUrl(evt.target.value);
|
||||
|
||||
return ( <>
|
||||
<div height={300} width={300} ref={ref}/>
|
||||
|
@ -29,7 +29,7 @@ function SheetJSCDG() {
|
||||
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
|
||||
const [done, setDone] = React.useState(false);
|
||||
const ref = React.useRef(); // ref to DIV container
|
||||
const set_url = React.useCallback((evt) => setUrl(evt.target.value));
|
||||
const set_url = (evt) => setUrl(evt.target.value);
|
||||
const [cdg, setCdg] = React.useState(null); // reference to grid object
|
||||
|
||||
return ( <>
|
||||
|
@ -94,7 +94,7 @@ is strongly recommended to convert that array to a worksheet directly.
|
||||
```jsx live
|
||||
function SheetJStorage() {
|
||||
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
|
||||
const set_url = React.useCallback((evt) => setUrl(evt.target.value));
|
||||
const set_url = (evt) => setUrl(evt.target.value);
|
||||
const [out, setOut] = React.useState("");
|
||||
const xport = React.useCallback(async() => {
|
||||
// get first worksheet data as array of objects
|
||||
|
@ -119,7 +119,7 @@ function SheetJSQLWriter() {
|
||||
})).filter(x => x).slice(0, 6);
|
||||
}
|
||||
const [url, setUrl] = React.useState("https://sheetjs.com/data/cd.xls");
|
||||
const set_url = React.useCallback((evt) => setUrl(evt.target.value));
|
||||
const set_url = (evt) => setUrl(evt.target.value);
|
||||
const [out, setOut] = React.useState("");
|
||||
const xport = React.useCallback(async() => {
|
||||
const ab = await (await fetch(url)).arrayBuffer();
|
||||
|
@ -1,37 +1,72 @@
|
||||
---
|
||||
title: NetSuite
|
||||
sidebar_title: NetSuite
|
||||
description: Automate the NetSuite ERP platform with SuiteScripts. Effortlessly read and write spreadsheets using SheetJS. Modernize Excel-powered business processes with confidence.
|
||||
pagination_prev: demos/local/index
|
||||
pagination_next: demos/extensions/index
|
||||
---
|
||||
|
||||
# Spreadsheets in NetSuite SuiteScripts
|
||||
|
||||
import current from '/version.js';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
The [AMD script](/docs/getting-started/installation/amd) can be uploaded to the
|
||||
file cabinet and referenced in the `define` call in SuiteScripts.
|
||||
[NetSuite](https://www.netsuite.com/) is a suite of cloud-based software systems
|
||||
for Enterprise Resource Planning (ERP). It has a robust scripting interface.[^1]
|
||||
|
||||
This demo discusses the key SheetJS operations. Familiarity with SuiteScript 2
|
||||
is assumed. The following sections of the SuiteScript documentation should be
|
||||
perused before reading this demo:
|
||||
[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
|
||||
data from spreadsheets.
|
||||
|
||||
- [SuiteScript 2.x API Introduction](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4387172221.html)
|
||||
is an introduction that includes a simple example with deployment details,
|
||||
- [SuiteScript 2.x Custom Modules](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4704097697.html)
|
||||
covers custom modules and adding third party scripts to modules.
|
||||
- [`N/file` Module](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4205693274.html)
|
||||
covers the `N/file` module. It is the main API for interacting with files.
|
||||
This demo explores the SuiteScript scripting features in NetSuite. We'll explore
|
||||
how to use SheetJS in SuiteScripts for reading and writing files in NetSuite.
|
||||
|
||||
The library plays nice with each script type, including RESTlets and Suitelets.
|
||||
:::note
|
||||
|
||||
This demo was verified by NetSuite consultants in the following deployments:
|
||||
|
||||
| `@NScriptType` | `@NApiVersion` | Date |
|
||||
|:----------------|:---------------|:-----------|
|
||||
| ScheduledScript | 2.1 | 2023-03-09 |
|
||||
| Restlet | 2.1 | 2023-04-20 |
|
||||
| Suitelet | 2.1 | 2023-07-21 |
|
||||
|
||||
:::
|
||||
|
||||
## Installation
|
||||
|
||||
In SuiteScript parlance, third-party scripts are "Custom Modules"[^2].
|
||||
|
||||
The [SheetJS AMD script](/docs/getting-started/installation/amd) can be uploaded
|
||||
to the file cabinet and referenced in the `define` call in SuiteScripts.
|
||||
|
||||
:::info pass
|
||||
|
||||
SheetJS scripts have been tested against the Rhino engine[^3] and work in both
|
||||
SuiteScript 2.0 and SuiteScript 2.1.
|
||||
|
||||
:::
|
||||
|
||||
#### Adding SheetJS Scripts
|
||||
|
||||
<p><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>The
|
||||
standalone script</a> should be downloaded and uploaded to the File Cabinet.</p>
|
||||
SheetJS standalone script</a> should be uploaded to the File Cabinet.</p>
|
||||
|
||||
After uploading, create a JSON configuration file (or add the alias to an
|
||||
existing config file). The reference points to the file and omits the `.js`.
|
||||
:::note pass
|
||||
|
||||
```json
|
||||
It is strongly recommended to keep the original filename `xlsx.full.min.js`.
|
||||
|
||||
:::
|
||||
|
||||
#### JSON Configuration
|
||||
|
||||
Assuming the uploaded file was named `xlsx.full.min.js`, the `paths` object in
|
||||
the JSON configuration should reference `xlsx.full.min`. The reference can be
|
||||
absolute or relative[^4].
|
||||
|
||||
For example, if the script `xlsx.full.min.js` was placed in the `SuiteScripts`
|
||||
top-level directory, the config should use `"/SuiteScripts/xlsx.full.min"`:
|
||||
|
||||
```json title="JsLibraryConfig.json"
|
||||
{
|
||||
"paths": {
|
||||
// highlight-next-line
|
||||
@ -40,8 +75,22 @@ existing config file). The reference points to the file and omits the `.js`.
|
||||
}
|
||||
```
|
||||
|
||||
This config file should be referenced in SuiteScripts using `@NAmdConfig`. This
|
||||
part is documented in ["Import a third-party JavaScript Library"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4704111062.html#bridgehead_4738199877):
|
||||
Relative references are also supported. If the entire project is stored in one
|
||||
folder, the config can use `"./xlsx.full.min"`:
|
||||
|
||||
```json title="JsLibraryConfig.json"
|
||||
{
|
||||
"paths": {
|
||||
// highlight-next-line
|
||||
"xlsx": "./xlsx.full.min"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### SuiteScript Usage
|
||||
|
||||
The JSON configuration file should be referenced in SuiteScripts using
|
||||
`@NAmdConfig`. The path alias `"xlsx"` should be passed to `define`:
|
||||
|
||||
```js
|
||||
/**
|
||||
@ -56,28 +105,67 @@ define(['N/file', 'xlsx'], function(file, XLSX) {
|
||||
});
|
||||
```
|
||||
|
||||
## Reading Files
|
||||
## Sheets in the File Cabinet
|
||||
|
||||
`N/file` provides [`file.load`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4226574300.html)
|
||||
for pulling files:
|
||||
The NetSuite File Cabinet[^5] is the primary feature for storing documents.
|
||||
|
||||
[`File#getContents`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4229269811.html)
|
||||
returns the data as a Base64-encoded string which can be read with `XLSX.read`:
|
||||
`N/file` is the primary module for interacting with the File Cabinet[^6].
|
||||
This section assumes that `N/file` is bound to the variable `file`:
|
||||
|
||||
```js
|
||||
/* load file */
|
||||
var f = file.load({ id: id_of_file });
|
||||
/* parse */
|
||||
var workbook = XLSX.read(f.getContents(), {type: "base64"});
|
||||
define(
|
||||
['N/file', 'xlsx'],
|
||||
function(
|
||||
// highlight-next-line
|
||||
file, // 'N/file'
|
||||
XLSX // 'xlsx'
|
||||
) {
|
||||
// ...
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Writing Files
|
||||
### Reading Files
|
||||
|
||||
`N/file` provides [`file.create`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4223861820.html)
|
||||
and `file.load` for creating and loading files respectively.
|
||||
There are three steps to reading files:
|
||||
|
||||
Binary content must be Base64-encoded. Fortunately, `XLSX.write` with `base64`
|
||||
type will generate compatible Base64 strings:
|
||||
1) Pull files from the file cabinet using `file.load`[^7]. The method returns a
|
||||
`file.File` object which represents the file metadata.
|
||||
|
||||
2) Read raw data from the file using `File#getContents`[^8]. The method returns
|
||||
the data as a Base64-encoded string.
|
||||
|
||||
3) Parse the data with the SheetJS `read` method[^9]. This method returns a
|
||||
SheetJS workbook object.
|
||||
|
||||
`file.load` expects an `id` property, which can be be the internal ID (displayed
|
||||
in the File Cabinet web interface) or an absolute or relative path string.
|
||||
|
||||
```js
|
||||
/* file ID or path */
|
||||
var id_of_file = 7262; // Internal ID 7262
|
||||
/* load file */
|
||||
var f = file.load({ id: id_of_file });
|
||||
/* read file */
|
||||
var b64 = f.getContents();
|
||||
/* parse */
|
||||
var workbook = XLSX.read(b64, { type: "base64" });
|
||||
```
|
||||
|
||||
At this point, standard SheetJS utility functions[^10] can extract data from the
|
||||
workbook object.
|
||||
|
||||
### Writing Files
|
||||
|
||||
There are three steps to writing files:
|
||||
|
||||
1) Write the data with the SheetJS `write` method[^11]. Using the `base64` output
|
||||
type[^12], the method will return a Base64 string.
|
||||
|
||||
2) Create a new file using `file.create`[^13]. The recommended file type is
|
||||
`file.Type.EXCEL`. The method returns a `file.File` object.
|
||||
|
||||
3) Upload data to the File Cabinet with `File#save`[^14]
|
||||
|
||||
```js
|
||||
/* write XLSX workbook as Base64 string */
|
||||
@ -91,3 +179,18 @@ var newfile = file.create({
|
||||
/* save */
|
||||
newfile.save();
|
||||
```
|
||||
|
||||
[^1]: See ["SuiteScript 2.x API Introduction"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4387172221.html) in the NetSuite documentation.
|
||||
[^2]: See ["SuiteScript 2.x Custom Modules"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4704097697.html) in the NetSuite documentation.
|
||||
[^3]: See ["Java + Rhino" demo](/docs/demos/engines/rhino)
|
||||
[^4]: See ["Module Dependency Paths"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4430268304.html#Module-Dependency-Paths) in the NetSuite documentation.
|
||||
[^5]: See ["File Cabinet Overview"](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_N541319.html) in the NetSuite documentation.
|
||||
[^6]: See [`N/file` Module](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4205693274.html) in the NetSuite documentation.
|
||||
[^7]: See [`file.load`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4226574300.html) in the NetSuite documentation.
|
||||
[^8]: See [`File.getContents()`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4229269811.html) in the NetSuite documentation.
|
||||
[^9]: See [`read` in "Reading Files"](/docs/api/parse-options)
|
||||
[^10]: See ["Utility Functions"](/docs/api/utilities/)
|
||||
[^11]: See [`write` in "Writing Files"](/docs/api/write-options)
|
||||
[^12]: See ["Supported Output Formats"](/docs/api/write-options#supported-output-formats)
|
||||
[^13]: See [`file.create`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4223861820.html) in the NetSuite documentation.
|
||||
[^14]: See [`File.save()`](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4229271179.html) in the NetSuite documentation.
|
@ -115,7 +115,7 @@ This demo was tested in the following deployments:
|
||||
|
||||
| Architecture | Date |
|
||||
|:-------------|:-----------|
|
||||
| `darwin-x64` | 2023-07-05 |
|
||||
| `darwin-x64` | 2023-07-19 |
|
||||
| `darwin-arm` | 2023-07-05 |
|
||||
| `linux-x64` | 2023-07-05 |
|
||||
|
||||
@ -129,10 +129,10 @@ cd sheetjs-boa
|
||||
cargo run
|
||||
```
|
||||
|
||||
2) Add the `boa` crate from the Git repository:
|
||||
2) Add the `boa_engine` crate:
|
||||
|
||||
```bash
|
||||
cargo add --git https://github.com/boa-dev/boa boa_engine
|
||||
cargo add boa_engine
|
||||
```
|
||||
|
||||
3) Download the [Standalone build](/docs/getting-started/installation/standalone):
|
||||
|
Loading…
Reference in New Issue
Block a user