- Web Services
- Sage Intacct SDK enhancements
- Customization Services and Platform Services
- General Ledger
- Accounts Receivable
- Order Entry
- Contracts
- Construction Early Adopter Program
This release is scheduled to go live beginning on the morning of November 15, 2020.
Web Services
Query custom objects
The new query function is now available for custom objects. Compared with the legacy readByQuery
function, the new query
provides more operators, lets you sort results, performs aggregate operations such as sum or average, and uses a larger pagesize limit. Perhaps most importantly, you can get the values for fields on related objects, both standard and custom, and use them in filters.
For example, consider the following related objects that are part of a sample Platform application. Customer is a standard object and the other three objects are custom.
You can perform simple queries or complex ones that cross both standard and custom objects across relationships. For example, the following queries the MCA_attendee custom object, which has a many-to-one relationship to customer via the R_attendee_customer
field. The query seeks any attendee where the related customer owes more than 5000:
<query>
<object>MCA_attendee</object>
<select>
<field>NAME</field>
<field>email</field>
<field>R_attendee_customer.CUSTOMERID</field>
</select>
<filter>
<greaterthan>
<field>R_attendee_customer.TOTALDUE</field>
<value>5000</value>
</greaterthan>
</filter>
</query>
If you need help knowing what fields are available for querying, you can return the query-able fields and relationships with the lookup function. For example, lookup
on the MCA_attendee object would include the following relationship, which we used in our query above.
<Relationship>
<OBJECTPATH>R_attendee_customer</OBJECTPATH>
<OBJECTNAME>customer</OBJECTNAME>
<LABEL>Customer</LABEL>
<RELATIONSHIPTYPE>MANY2ONE</RELATIONSHIPTYPE>
<RELATEDBY>RCUSTOMER</RELATEDBY>
</Relationship>
Asynchronous callback for readReport
In previous releases, after sending a readReport
call for an original custom report, you had to send readMore
to get the first batch of results. This release provides a new callback capability on readReport
, which notifies your callback URL when the report is ready to be consumed and provides the first batch of results.
You must be configured to use asynchronous processing, where you have a unique asynchronous transport policy associated with a URL with your handler.
When you send readReport
, you include your transport policy ID in the control
block. You can optionally provide a unique report ID:
<request>
<control>
<senderid>test_sender</senderid>
<password>test_password</password>
<controlid>446ca3a4-28b3-4379-8760-a12812c8b02c</controlid>
<uniqueid>false</uniqueid>
<dtdversion>3.0</dtdversion>
<policyid>myPolicyID</policyid> <!-- asynchronous transport policy ID -->
<includewhitespace>false</includewhitespace>
</control>
<operation>
...
<content>
<function controlid="99x">
<readReport>
<report>Employee Time by Project</report>
<arguments>
<REPORTINGPERIOD>Current Year</REPORTINGPERIOD>
</arguments>
<reportId>empTimeByProject20200626NO001</reportId> <!-- unique report ID -->
</readReport>
</function>
</content>
</operation>
</request>
A synchronous response provides an acknowledgement with the status of the request. Then, when the first batch of results are ready (1000 by default), they are sent to the handler. The response with the results also provides information about data still to be read (numremaining
) and includes the reportId
.
<authentication>
<status>success</status>
...
</authentication>
<result>
<status>success</status>
<function>readReport</function>
<controlid>9c4a7a1b-5bcb-49bb-83a6-eceb05375a2e</controlid>
<data listtype=“report” count=“1000" totalcount=“1014” numremaining=“14">
<report reportId="empTimeByProject20200626NO001">
<data>
<RECORDID>Bill#1-#2</RECORDID>
<WHENCREATED>04/15/2001</WHENCREATED>
...
</result>
If data is still pending, the handler can take the desired action, such as calling readMore
with the reportId
to get the next batch of results.
Note: This functionality is not supported for Interactive Custom Reports.
For more information:
Sage Intacct SDK enhancements
SDK for .NET
Several enhancements to the Sage Intacct SDK for .NET are now available. See the highlights below, then refer to GitHub for complete information, including fixes.
Version 3.0.0
Version 3.0.0 targets .NET Standard 2.0 and supports NET Core >=2.0 and .NET Framework >=4.6.1. See the system requirements for complete information, such as requirements for the NuGet package manager.
The SDK includes:
- New
PurchasingTransactionApprove
andPurchasingTransactionDecline
classes. - Enhanced AP payment:
- New
ApPayment
* classes that support the latest AP payment model (introduced in the XML API asAPPYMT
in 2017-R3). The oldApPaymentRequest
* classes are no longer available. - New classes that let you apply line level credits and discounts for payments:
ApPaymentDetailBill
ApPaymentDetailCreditMemo
- New
- Microsoft.Extensions.Logging support.
See the getting started example to learn about the SDK.
Version 2.3.0 of the SDK includes:
- New
ApPaymentRequestDecline
class. - New
TaskId
parameter onAbstractGlEntry
. - New
ShowPrivate
parameter onNewQuery.QueryFunction
. - New
SummaryRecordNo
parameter (known asbatchkey
in the XML API) onArPaymentCreate
.
SDK for PHP
Version 2.3.0 of the Sage Intacct SDK for PHP provides several enhancements and fixes, including:
- New
ApPaymentRequestDecline
class. - New
TaskId
parameter onAbstractGlEntry
. - New
ShowPrivate
parameter onNewQuery.QueryFunction
. - New
PurchasingTransactionApprove
andPurchasingTransactionDecline
classes. - New
SummaryRecordNo
parameter (known asbatchkey
in the XML API) onArPaymentCreate
class.
Refer to GitHub for complete information, including fixes.
See the getting started example to learn about the SDK.
SDK for Node.js
Version 1.3.0 of the Sage Intacct SDK for Node.js provides several enhancements and fixes, including:
- New
ApPaymentRequestDecline
class. - New
TaskId
parameter onAbstractGlEntry
. - New
showPrivate
parameter onQuery
function.
Refer to GitHub for complete information, including fixes.
See the getting started example to learn about the SDK.
Customization Services and Platform Services
Improved flow for moving custom pages to Action UI
This release lets you optimize your custom and customized pages in the Action UI before making them available to all users:
- Use the new UI option (Custom and customized pages) in your user preferences to update pages created or customized using Platform and Customization Services to Action UI.
- Check that each page looks correct in Action, then set its layout to Action UI in Page Editor. This overrides individual preferences so that the page is only available in Action UI.
See the information about personalizing Platform and Customization Services in your display prefererences in the Sage Intacct product help for more information.
Content Security Policy administration
With this release, we’re letting you know when a URL violates a Content Security Policy (CSP) and is blocked from loading. You can:
- View all CSP violations in a company on the Company Information page.
- View the CSP violations on a specific page in Page Editor mode in Platform Services.
See the information about installed components and CSPs in the Sage Intacct product help for more information.
Trigger log
Get visibility into when your triggers fail to execute properly in the new trigger log. Here you can find the status of triggers and execution times, as well as details about the triggers.
See the information about triggers in the Sage Intacct product help for more information.
General Ledger
Migrate your data now to take advantage of the new budget API and avoid future problems
In 2020-R3, a new GL budget object (GLBUDGETHEADER
) was introduced that supports creating a budget with details in the same call. In addition, the create and update functions on the new object provide better performance than the legacy functions on BUDGETHEADER.
If you were using the legacy budget APIs, it is recommended that you update your integrations now to be prepared when the legacy APIs become unavailable, likely 2021-R2:
- Contact support to plan your data migration—you cannot start using the new APIs without the migration if you were using the legacy APIs previously.
- Update any API calls to use the new budget objects.
Important: The legacy objects (BUDGETHEADER and GLBUDGET) will be migrated to the new object types (GLBUDGETHEADER and GLBUDGETITEMS) in a future release, planned for 2021-R2. After migration, create, update, and delete, when used on the old object names, will return error messages explaining that you need to use the new objects. You will need to contact support to have your data migrated.
Accounts Receivable
Customer email templates
You can now assign custom email templates to your customers so you can organize and style your content. Your custom email templates replace standard email templates that are sent based on transactions such as statements and invoices.
You can create or update a customer to add/modify the email templates. For more information:
- Create Customer
- Update Customer
- List Customer Email Templates
- List Customer Email Templates (Legacy)
- Get Customer Email Template
- Get Customer Email Template by ID
Ability to list customer charge card records will no longer be supported
The get_list
function for customer charge cards is scheduled for deprecation. This function will become unavailable in a future release, likely, 2021-R2. At this time, the only way to access customer credit card information will be through the Sage Intacct UI.
Important: Check your integrations now and remove this function to avoid problems when this function becomes unavailable in a future release, planned for 2021-R2.
Order Entry
Purchase order numbers in recurring order entry transactions
You can now include the customer provided purchase order number in your recurring order entry transactions.
See the customerponumber
parameter for more information:
Automatically calculated, persistent ship-by dates
Order Entry transactions now include a persistent ship-by date that indicates when the shipment must be sent in order to meet the customer’s need-by date. The ship-by date is automatically calculated based on the need-by date and the estimated days in transit (as per the shipping method specified in the UI). If the estimated days in transit is not set, the ship-by date will be the same as the need-by date.
The ship-by date remains unchanged even when the transaction is converted, which is useful for tracking across workflows.
There is also a new shipped-date parameter for the transaction to indicate when the shipment was sent. The shipped date can be overriden at the line level.
For more information, see the shipbydate
and shippeddate
parameters on the following:
Contracts
Bill partial periods
Prorated billing schedules are now supported for contract lines. So, if you create lines at mid month for which you want to prorate billing, you can set the new PRORATEBILLINGPERIOD
parameter to true
. This option is available only when BILLINGMETHOD
is Fixed price
and BILLINGOPTIONS
is Include with every invoice
.
For more information, see the PRORATEBILLINGPERIOD
parameter for the following:
Generate invoices by customer
You can now generate separate invoices for each customer. See the INVOICEBY
parameter on the following:
- Create Contract Invoice Preview
- Create Contract Invoice Filter Set
- Update Contract Invoice Filter Set
Construction Early Adopter Program
Purchasing Change Orders
You can now manage changes to Purchasing agreements as your Construction job progresses.
To do this, modify or create Purchasing transaction definitions that enable change management. A transaction definition can identify a transaction as either a source transaction or a change-order transaction. By default, Purchasing transaction definitions have change management disabled.
Using your new transaction definitions, you can create a source transaction, then create change orders that modify that source. You can create a change order even if the source transaction has been partially or fully converted.
A change order can add new entries or modify existing entries on a given source transaction. For example, assume there is a source transaction definition, Source-001
, and a change order transaction definition, Change-001
.
The following creates a source transaction with one entry:
<create_potransaction>
<transactiontype>Source-001</transactiontype>
<datecreated>
<year>2020</year>
<month>06</month>
<day>17</day>
</datecreated>
<vendorid>201</vendorid>
<datedue>
<year>2020</year>
<month>07</month>
<day>05</day>
</datedue>
<message>Source for project 19</message>
<returnto>
<contactname></contactname>
</returnto>
<payto>
<contactname></contactname>
</payto>
<state>Pending</state>
<potransitems>
<potransitem>
<itemid>A001</itemid>
<warehouseid>WareHouse10004</warehouseid>
<quantity>10</quantity>
<unit>Each</unit>
<price>99.99</price>
<locationid>1</locationid>
</potransitem>
</potransitems>
</create_potransaction>
Assume the record number for the created source transaction is 255
, and the record number for the created entry is 256
. The following provides a change order that modifies the existing entry (changes the quantity to 15) and adds a new entry to the source transaction:
<create_potransaction>
<transactiontype>Change-001</transactiontype>
<datecreated>
<year>2020</year>
<month>06</month>
<day>30</day>
</datecreated>
<createdfrom></createdfrom>
<vendorid>201</vendorid>
<message>Change for new requirements</message>
<returnto>
<contactname></contactname>
</returnto>
<payto>
<contactname></contactname>
</payto>
<state>Pending</state>
<potransitems>
<potransitem>
<itemid>A001</itemid>
<warehouseid>WareHouse10004</warehouseid>
<quantity>15</quantity>
<unit>Each</unit>
<price>100.99</price>
<locationid>1</locationid>
<relateddockey>255</relateddockey>
<relateddoclinekey>256</relateddoclinekey>
</potransitem>
<potransitem>
<itemid>A006</itemid>
<warehouseid>WareHouse10006</warehouseid>
<quantity>100</quantity>
<unit>Each</unit>
<price>80.99</price>
<locationid>1</locationid>
<relateddockey>255</relateddockey>
</potransitem>
</potransitems>
</create_potransaction>
You can delete a draft change order, but once it has approved, it cannot be deleted.
When you read
a source transaction in the API, new output parameters help identify the changes that led to the current state.
New Purchasing transaction (header) fields:
- HASCHANGE is
true
if there are draft or posted change orders to this transaction. Once change orders have been applied, the amounts or dimensions for the source document cannot be modified with anupdate
call, nor can you delete the source document. However, you can submit additional change orders. - REVISEDTOTAL is the total base currency amount including line items and subtotal amounts.
- REVISEDSUBTOTAL is the total base currency amount for line items only.
- TRX_REVISEDTOTAL is the total transaction currency amount including line items and subtotal amounts.
- TRX_REVISEDSUBTOTAL is the total transaction currency amount for line items only.
New Purchasing transaction entry fields:
REVISEDUNITQTY
is the original quantity (before applying the unit of measure) plus changes from posted change orders.REVISEDQTY
is the original quantity (after applying the unit of measure) plus changes from posted change orders.DRAFTCHANGEUNITQTY
is sum of all the quantities (before applying the units of measure) of all draft change order lines against this line.DRAFTCHANGEQTY
is sum of all the quantities (after applying the units of measure) of all draft change order lines against this line.REVISEDUNITVALUE
is the revised extended price.REVISEDVALUE
is the revised base currency extended price.TRX_REVISEDVALUE
is the revised transaction currency extended price.REVISEDUNITPRICE
is the revised price.REVISEDPRICE
is the revised base currency price.TRX_REVISEDPRICE
is the revised transaction currency price.
For more information:
- See the
ENABLEDOCCHANGE
parameter for Purchasing transaction definitions. - See the
relateddockey
andrelateddoclinekey
parameters when creating Purchasing transactions.
Price conversion for Purchasing transactions
Converting a transaction moves the transaction to the next step in the workflow (for example, from purchase order to vendor invoice). In previous releases, a Purchasing transaction line could only be converted by quantity—you can now convert a line by price as well. The price you supply is used to to determine when a line is partially or fully converted.
For more information, see the conversiontype
parameter on these functions:
Posting estimate entries to different budget periods
Customers sometimes need to post estimate entries to different budget periods in order to reflect ongoing changes to the project estimate. This can be important for financial reporting purposes.
You can now assign a period to the project estimate itself using ESTIMATEDATE
, or assign different GL budget periods to estimate entry lines with EFFECTIVEDATE
.
To choose between these two values for posting, you set the POSTTO
parameter on the header to Estimate date
or Effective date
.
For more information:
- Create Project Estimate
- Update Project Estimate
- Create Project Estimate Entry
- Update Project Estimate Entry