Custom Object Function
The example shows you how to:
- Create a class that extends
AbstractFunction
and implementsFunctionInterface
. - 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 bybootstrap.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
-
In the
composer.json
file, note that thesrc/Example
directory is mapped to the\Intacct\Example\
namespace in the autoloader:"autoload": { "psr-4": { "Intacct\\Example\\": "src/Example/" } }
-
Open
src/Example/AbstractTestObject.php
and note how it extendsIntacct\Functions\AbstractFunction
.AbstractFunction
is a helper class provided mainly to generate random control IDs.AbstractFunction
implementsIntacct\Functions\FunctionInterface
, and any class whose instances will be executed by a client must implementFunctionInterface
. If usingexecuteBatch
, the parameter must be aFunctionInterface[]
array. -
Open
src/Example/TestObjectCreate.php
and note how it extendsAbstractTestObject
.The
FunctionInterface
requires that the class implement thewriteXml(XMLWriter &$xml)
function. This implementation is where you provide the XML that will be processed at the gateway endpoint. -
Back in
src/Example/AbstractTestObject.php
, replacetest_object
with the integration name for your custom object.const INTEGRATION_NAME = 'test_object';
Run the example
-
Run the
custom-object-function.php
file:php custom-object-function.php
-
Observe the terminal output, which should look similar to this:
Created record ID 10153 Process finished with exit code 0
Note the record ID, which will be used to delete the object later.
-
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
-
Update
custom-object-function.php
to execute aRead
function using the record ID returned byTestObjectCreate
as the key.$read = new \Intacct\Functions\Common\Read(); $read->setObjectName(\Intacct\Example\TestObjectCreate::INTEGRATION_NAME); $read->setKeys([ $recordNo ]); $response = $client->execute($read);
Delete the record
-
Create a
TestObjectDelete
class and execute an instance of it that uses the same record ID returned in theTestObjectCreate
result.If you need help, see the example class.
<?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.