Buckets:
| title: Custom Object Function - Sage Intacct SDK for Node.js | Sage Intacct Developer | |
| url: https://developer.intacct.com/tools/sdk-node-js/custom-object-function/ | |
| # Custom Object Function - Sage Intacct SDK for Node.js | Sage Intacct Developer | |
| Overview | |
| Getting Started | |
| List AR Invoices | |
| List Vendors (Legacy) | |
| CRUD Customer | |
| Custom Object Function | |
| * Prerequisites | |
| * Set up | |
| * Run the example | |
| * Extra credit | |
| + Get the record by ID | |
| * Delete the record | |
| * What’s next? | |
| --- | |
| The example shows you how to: | |
| * Create a class that extends `AbstractFunction` and implements `IFunction`. | |
| * Implement the `writeXml` function to generate XML for the API function for the request. | |
| * Call execute on a client and pass in the API function instance to send the request to the gateway. | |
| --- | |
| ## Prerequisites | |
| * You have downloaded or cloned the Sage Intacct SDK for Node.js examples. | |
| * You successfully ran the getting started example—in particular, you set up the `credentials.ini` file required by `bootstrap.js`. | |
| * The company you are using has Platform Services enabled and an object definition for your custom object (the example uses `test_object`). | |
| * The user you are using has add, edit, delete, list, and view permissions for the custom object. | |
| --- | |
| ## Set up | |
| 1. Open `TestObject.js` and note how `AbstractTestObject` extends `Intacct/SDK/Functions/AbstractFunction`. | |
| `AbstractFunction` is a helper class provided mainly to generate random control IDs. `AbstractFunction` implements `Intacct/SDK/Functions/IFunction`, and any class whose instances will be executed by a client must implement `IFunction`. If using `executeBatch`, the parameter must be an `IFunction[]` array. | |
| 2. In `TestObject.js` note how `TestObjectCreate` extends `AbstractTestObject`. | |
| The `IFunction` interface requires that the class implement the `writeXml(xml)` function. This implementation is where you provide the XML that will be processed at the gateway endpoint. | |
| 3. Back in the `AbstractTestObject` class, replace `test_object` with the integration name for your custom object. | |
| ```xml | |
| this.integrationName = "test_object"; | |
| ``` | |
| --- | |
| ## Run the example | |
| 1. Run the `custom-object-function.js` file: | |
| ```xml | |
| node custom-object-function.js | |
| ``` | |
| 2. Observe the terminal output, which should look similar to this: | |
| ```xml | |
| Created record ID 10153 | |
| ``` | |
| Note the record ID, which will be used to delete the object later. | |
| 3. Open the generated `logs/intacct.log` file in a text editor and review the entries. | |
| The file provides info and debug entries. The SDK provides a debug entry for each HTTP request/response (with the Sage Intacct endpoint). | |
| Note that the log file was created by the logger set in the client config. | |
| --- | |
| ## Extra credit | |
| ### Get the record by ID | |
| 1. Update `custom-object-function.js` to execute a `Read` function using the record ID returned by `TestObjectCreate` as the key. For example: | |
| ```xml | |
| let read = new IA.Functions.Common.Read(); | |
| read.objectName = "test_object"; | |
| read.keys = [ | |
| 10174, | |
| ]; | |
| const readResponse = await client.execute(read); | |
| const readResult = readResponse.getResult(); | |
| const recordNo = parseInt(readResult.data[0]["id"]); | |
| console.log("Read record ID " + recordNo.toString()); | |
| ``` | |
| ## Delete the record | |
| 1. Create a `TestObjectDelete` class in `TestObject.js` and execute an instance of it that uses the same record ID returned in the `TestObjectCreate` result. | |
| If you need help, see the example class. | |
| ```xml | |
| class TestObjectDelete extends AbstractTestObject { | |
| constructor(recordId) { | |
| super(); | |
| this.id = recordId; | |
| } | |
| writeXml(xml) { | |
| xml.writeStartElement("function"); | |
| xml.writeAttribute("controlid", this.controlId, true); | |
| xml.writeStartElement("delete"); | |
| xml.writeElement("object", this.integrationName, true); | |
| xml.writeElement("keys", this.id, true); | |
| xml.writeEndElement(); // delete | |
| xml.writeEndElement(); // function | |
| } | |
| } | |
| exports.TestObjectDelete = TestObjectDelete; | |
| ``` | |
| --- | |
| ## What’s next? | |
| For more complex examples, you can use the functions in the SDK as models. For example, `AbstractBill` extends `AbstractFunction`, then `BillCreate` and `BillDelete` extend `AbstractBill` and write the XML for creating or deleting bills. | |
| Provide feedback | |
Xet Storage Details
- Size:
- 4.44 kB
- Xet hash:
- 0de3b3edf1d9117c50f564b80fe07c4ca2bf5219a7908907036c7386548bf86d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.