Jamesbrendamour/sage-dev-docs / tools /sdk-net /custom-object-function.md
Jamesbrendamour's picture
|
download
raw
5 kB
---
title: Custom Object Function - Sage Intacct SDK for .NET | Sage Intacct Developer
url: https://developer.intacct.com/tools/sdk-net/custom-object-function/
---
# Custom Object Function - Sage Intacct SDK for .NET | 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 `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 .NET examples.
* You successfully ran the getting started example—in particular, you set up the `credentials.ini` file required by `Bootstrap.cs`.
* 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 `AbstractTestObject.cs` and note how it 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 a `List<IFunction>`.
2. Open `TestObjectCreate.cs` and note how it extends `AbstractTestObject`.
The `IFunction` interface requires that the class implement the `void WriteXml(ref IaXmlWriter xml)` function. This implementation is where you provide the XML that will be processed at the gateway endpoint.
3. Back in `AbstractTestObject.cs`, replace `test_object` with the integration name for your custom object.
```xml
protected const string IntegrationName = "test_object";
```
---
## Run the example
1. Run the project, and enter `5` when prompted.
For example, the following runs the project from the command line:
```xml
cd Intacct.Examples
"C:\Program Files\dotnet\dotnet.exe" bin/Debug/netcoreappX.X/Intacct.Examples.dll
```
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. Type `6` to exit the program.
4. Open the generated `Intacct.Examples/bin/Debug/netcoreappX.X/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 `CustomObjectFunction.cs` to execute a `Read` function using the record ID returned by `TestObjectCreate` as the key. For example:
```xml
using Intacct.SDK.Functions.Common;
...
Read read = new Read()
{
ObjectName = "test_object",
Keys =
{
10054
}
};
Task<OnlineResponse> readTask = client.Execute(read);
readTask.Wait();
OnlineResponse readResponse = readTask.Result;
Result readResult = readResponse.Results[0];
int recordNo = int.Parse(readResult.Data[0].Element("id").Value);
Console.WriteLine("Read record ID " + recordNo.ToString());
```
### 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
using Intacct.SDK.Xml;
namespace Intacct.Examples
{
public class TestObjectDelete : AbstractTestObject
{
public TestObjectDelete(int recordId)
{
this.Id = recordId;
}
public override void WriteXml(ref IaXmlWriter xml)
{
xml.WriteStartElement("function");
xml.WriteAttribute("controlid", this.ControlId, true);
xml.WriteStartElement("delete");
xml.WriteElement("object", IntegrationName);
xml.WriteElement("keys", this.Id);
xml.WriteEndElement(); // delete
xml.WriteEndElement(); // 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:
5 kB
·
Xet hash:
801a514ae6feb2c6cf0d71221d34eb3f13724a72eccb474b40bfed0c49be0c0c

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