This release is scheduled to go live on the evening of February 22, 2019 Pacific Time.


Web Services

List entity details for the current user

A new readEntityDetails API function has been added to aid Web Services integrations running on a user’s behalf. This will list information about the entities that the current user can access. In the UI, this mimics the inter entity navigation drop down at the top of the screen.

For more information:


Customization Services

New injection parameter for API endpoints

A new {!API_ENDPOINT!} injection parameter lets you access the API endpoint in your Smart Events, SmartLink Click/Fetches, and SmartLink dashboard components.

You should add this new injection parameter to any existing or new components that include a session ID. Then adjust your server-side code to use this endpoint when calling back to Sage Intacct Web Services (instead of using one hard-coded to https://api.intacct.com/ia/xml/xmlgw.phtml). This is a best practice the ensures you are using the correct/most efficient endpoint.

Danger: Do not blindly trust parameters that your code receives over the internet. Always validate the endpoint URL is https and a *.intacct.com domain before using it.

Warning: Components may be copied to sandbox or preview environments when you opt in to these. You need to take additional steps to validate the source of these requests to avoid mixing data across environments.

For example, a dashboard Smart Link Fetch component can pass the session ID and API endpoint URL as follows:

https://www.example.com/dash.php?sessionId={!USERPROFILE.SESSIONID!}&endpoint={!API_ENDPOINT!}

The dash.php code receiving this request should:

  • Validate that the endpoint URL is https and has an *.intacct.com domain before making any callbacks.
  • Validate the session ID by making a new getAPISession callback request and parsing the response for the company ID.
  • Validate the company ID against an appropriate list.

General Ledger

General Ledger balances by dimensions

A new get_accountbalancesbydimensions API function has been added. With it you can now more efficiently list account balances grouped by any dimension (standard or user-defined). Developers using the readByQuery API function on the GLACCOUNTBALANCE object should consider using this new function instead.

For more information:

Dynamic allocations

As your business scales, an after-the-fact allocation tool can save time and effort at period end and help provide an understanding of fully loaded costs for departments, projects and more. Sage Intacct now offers a native account allocation solution that allows you to automate the allocation calculation tasks for shifting costs or sharing revenues on a periodic basis.

For more information:

Account allocation groups

Account allocation groups support bulk processing for account allocations, which is useful for organizations with many allocations that must run on the same time period. You can also use account allocation groups to set up the order for sequential processing, where one allocation is dependent on the results of a prior one.

For more information:


Tools and Libraries

Sage Intacct API collection for Postman now handles special characters in passwords

The API collection provides an updated Generate API Session call that escapes problematic special characters, such as the ampersand (&), in passwords for Web Services or login credentials.

Download

The Postman collection for the Web Services tutorial also includes the new Generate API Session call.

SDK Entity ID enhancements

After the entity ID enhancements from last release, all the Sage Intacct SDKs have been enhanced to better support entity slide in:

  • A new entity_id key lets you provide credentials in .ini files.
  • A new EntityId property is available in the client configuration object.
  • A new INTACCT_ENTITY_ID environment variable is available.
  • A new EntityId property is available on the ApiSessionCreate class.

The latest SDK versions including these changes are:


Project and Resource Management

Unique ID for tasks

The TASK object has a new TASKID parameter for assigning a readable unique ID. A task ID must be unique in the context of a project, and once a task has been created, its ID cannot be changed.

When creating timesheet entries or contract lines, you can now specify a given task by its task ID. In previous releases, tasks were specified with the TASKKEY parameter, which was the record number for the task—now the more readable task ID can be used instead.

See the TASKID parameter on the following functions:


Contracts

Percent complete billing for projects and tasks

Two new parameters on CONTRACTBILLINGTEMPLATE let you create billing templates for the percent complete on tasks or projects. You can specify whether to base the percentages on estimated hours, observed percent completed, or planned hours. Budgeted hours is also available for projects.

For more information:


Consolidations

Ability to set up Global Consolidation books

You can now use the API to create consolidation books that automatically convert different currencies into a single reporting currency, thus providing an integrated view of financial and operational results.

Creating and setting up a new consolidation book is done in several phases:

  • Create the book itself, providing the book ID, reporting currency, elimination entity, and so forth.
  • Specify the entities to consolidate.
  • Specify the elimination account where consolidation journal entries, including currency translation adjustments and elimination transactions for inter-entity balances, are posted.
  • Add journals for GAAP, tax, and user-defined books (once you’ve run a consolidation, journals can no longer be modified).
  • Override the exchange rate translation method for any GL account used in a consolidation.

Note: In 2018 Release 2, an improved version of Global Consolidations was introduced and old functionality was deprecated. Any consolidation book now has a LEGACY parameter that indicates whether it is a new consolidation book (LEGACY=’F’) or a deprecated one. The API only supports creating and updating new consolidation books.


Platform Services

Changes to standard object pages now installed as part of your application

Platform Applications can include standard objects. In previous releases, custom fields, Smart Events, Smart Rules, and changes to pages for standard objects were included when you published your application’s XML file. However, on installing the application, everything was installed except the standard object page changes. So, if you had added sections or tabs to a standard object page, users would not get these when they installed.

The current release fixes this. Applications published with the current release or later now include a version tag set to 2, which tells the installer to include any standard object page changes along with other components.

<Version>2</Version>

If this version element is not present, the installer in the UI will issue a warning message. This message is bypassed when using the installer via the API—the application is still installed but the standard page changes are not.

If the application is undeployed or deleted from a company, the page customizations for the standard object remain unless they are manually deleted. A company can install multiple applications with changes on the same standard object pages, but newer installations of applications cannot change what was installed by previous applications.

Use the lookup field name when working with relationships in formulas

In previous releases, you could only access relationships in your formulas using the integration name of the relationship. For example, you would loop through a Lead object’s related Opportunities to calculate the total revenue value of those opportunities using the relationship’s integration name (R11002):

var total = 0;
{!#LOOP_BEGIN.R11002!}
    total += {!R11002.revenue_value!};
{!#LOOP_END.R11002!}
return total;

Assuming the lookup field name on the Lead object is opportunities, you can now use this name preceded by a caret (^opportunities) as an alternative to the integration name of the relationship:

var total = 0;
{!#LOOP_BEGIN.^opportunities!}
    total += {!^opportunities.revenue_value!};
...

Provide feedback