diff --git a/docz/docs/03-demos/02-grid/01-xs.md b/docz/docs/03-demos/02-grid/01-xs.md index 64e0a31..8d61779 100644 --- a/docz/docs/03-demos/02-grid/01-xs.md +++ b/docz/docs/03-demos/02-grid/01-xs.md @@ -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 ( <>
The -standalone script should be downloaded and uploaded to the File Cabinet.
+SheetJS standalone script should be uploaded to the File Cabinet. -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. \ No newline at end of file diff --git a/docz/docs/03-demos/12-engines/21_boa.md b/docz/docs/03-demos/12-engines/21_boa.md index 13faacd..2eee50f 100644 --- a/docz/docs/03-demos/12-engines/21_boa.md +++ b/docz/docs/03-demos/12-engines/21_boa.md @@ -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):