Jamesbrendamour/sage-dev-docs / tools /sdk-php /custom-object-function.md
Jamesbrendamour's picture
|
download
raw
4.74 kB
---
title: Custom Object Function - Sage Intacct SDK for PHP | Sage Intacct Developer
url: https://developer.intacct.com/tools/sdk-php/custom-object-function/
---
# Custom Object Function - Sage Intacct SDK for PHP | Sage Intacct Developer
Overview
Getting Started
List AR Invoices
List Vendors (Legacy)
CRUD Customer
Custom Object Function
Troubleshooting
* 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 `FunctionInterface`.
* 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 PHP examples.
* You successfully ran the getting started example—in particular, you set up the `.credentials.ini` file required by `bootstrap.php`.
* 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. In the `composer.json` file, note that the `src/Example` directory is mapped to the `\Intacct\Example\` namespace in the autoloader:
```xml
"autoload": {
"psr-4": {
"Intacct\\Example\\": "src/Example/"
}
}
```
2. Open `src/Example/AbstractTestObject.php` and note how it extends `Intacct\Functions\AbstractFunction`.
`AbstractFunction` is a helper class provided mainly to generate random control IDs. `AbstractFunction` implements `Intacct\Functions\FunctionInterface`, and any class whose instances will be executed by a client must implement `FunctionInterface`. If using `executeBatch`, the parameter must be a `FunctionInterface[]` array.
3. Open `src/Example/TestObjectCreate.php` and note how it extends `AbstractTestObject`.
The `FunctionInterface` requires that the class implement the `writeXml(XMLWriter &$xml)` function. This implementation is where you provide the XML that will be processed at the gateway endpoint.
4. Back in `src/Example/AbstractTestObject.php`, replace `test_object` with the integration name for your custom object.
```xml
const INTEGRATION_NAME = 'test_object';
```
---
## Run the example
1. Run the `custom-object-function.php` file:
```xml
php custom-object-function.php
```
2. Observe the terminal output, which should look similar to this:
```xml
Created record ID 10153
Process finished with exit code 0
```
Note the record ID, which will be used to delete the object later.
3. Open the generated `logs/intacct.html` file in your browser 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.php` to execute a `Read` function using the record ID returned by `TestObjectCreate` as the key.
```xml
$read = new \Intacct\Functions\Common\Read();
$read->setObjectName(\Intacct\Example\TestObjectCreate::INTEGRATION_NAME);
$read->setKeys([
$recordNo
]);
$response = $client->execute($read);
```
### Delete the record
1. Create a `TestObjectDelete` class 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
<?php
namespace Intacct\Example;
use Intacct\Xml\XMLWriter;
class TestObjectDelete extends AbstractTestObject
{
public function __construct($recordId)
{
$this->setId($recordId);
}
public function writeXml(XMLWriter &$xml)
{
$xml->startElement('function');
$xml->writeAttribute('controlid', $this->getControlId());
$xml->startElement('delete');
$xml->writeElement('object', self::INTEGRATION_NAME);
$xml->writeElement('keys', $this->getId());
$xml->endElement(); // delete
$xml->endElement(); // function
}
}
```
---
## 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.74 kB
·
Xet hash:
e19e6c86d1b42c5ac9e7d76e441a1c74fa761ccc2fc273a59d3d53611db23629

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.