Summary:
This article details Solver's robust integration to Oracle NetSuite. Solver's NetSuite connector allows users to create integrations and pull data from NetSuite into the Solver Cloud or Private Host solution. This article will detail the minimum configuration required in NetSuite for a successful integration. Solver uses the following technologies provided by NetSuite:
- RESTlet - RESTlets are an alternative to the standard SuiteTalk SOAP-based APIs. They use JSON payloads and can be used to create services optimized for specific use cases such as an item inventory lookup or account balance query without the overhead of retrieving the entire record. They also provide an opportunity to execute logic such as multiple lookups/actions on the server side vs. making multiple round trip calls from AtomSphere.
NetSuite endpoints are created using Saved Search and therefore are fully customizable. Solver provides pre-configured Saved Search templates that can be tailored to suit your organization needs.
Note: Parent attributes is not currently supported.
The information discussed in this article is relevant to Solver Cloud and Private Host customers. Customers using the BI360 4x Product must reference information on the 4x NetSuite Connector.
Article Section:
- More Information
- Checklist of Requirements
- Configure Account Setting
- Authentication Types
- Configure User Permissions for Login-Based Authentication
- Configure User Permissions for Token-Based Authentication
- Token-Based Credentials for Customers With More Than One Sandbox
- Install BI360 Bundle
- Configure RESTlet
- Delete a Deployed Script
- Edit a Saved Search from Bundle
- Create a New Saved Search
- Connect Solver to NetSuite
- Verify the Version of Your BI360 RESTLet Script
- Troubleshooting
- Properties
More Information
NetSuite imposes certain restrictions on the number of concurrent web service requests that can be made at the same time depending on which NetSuite service tier the organization belongs to. Organizations may view and adjust their account concurrency limit, total requests, and rejected requests in NetSuite > Setup > Integration > Integration Management > Integration Governance.
Organization may purchase a SuiteCloud+ license to enhance NetSuite performance. Please contact your NetSuite Account Manager for details on how to increase concurrency limits for web services, scheduled processes and file imports. |
Checklist of Requirements
The below checklist includes a list of items that need to be configured in NetSuite for a successful connection between Solver Cloud and NetSuite.
▢ A NetSuite account that has access to read Saved Searches.
Note: A users account will need “Full” permissions on Global Permissions (Setup > Users > Edit > Global Permissions)
▢ Know the RoleID for the above account.
▢ Configure Role Settings.
▢ Enable the following features (Setup > Company > Enable Features > SuiteCloud)
-
-
-
- Client SuiteScript
- Server SuiteScript
- Web Service
-
-
▢ Create a RESTlet script.
▢ Create Saved Search Settings (Get Script URL and Script ID for the Saved Search).
-
-
-
- Use alias columns to ensure all column names are unique.
- Avoid use of special characters in column names, other than spaces or underscores.
- Include both internal and external IDs (or number or name instead where applicable) for all dimensions.
- Include period starting date in addition to transaction date.
-
-
Configure Account Settings
NetSuite RESTlet allows custom RESTful web services to be developed from the NetSuite account using SuiteScript. Solver Cloud requires that Client SuiteScript, Server SuiteScript, and Web Services are enabled for the account being used to connect BI360 Cloud to the organization’s NetSuite account.
- To enable these features, navigate to Setup > Company > Enable Features > SuiteCloud
- Navigate to Setup > Company > Company information to locate the Account ID. Make a note of this information, you will need it to log in to Solver.
Authentication Types
Two authentication types are available, with the following requirements:
- LoginBased (click to access LoginBased requirements)
- Username
- Password
- RoleID
- Account ID
- Transaction Saved search ID
- Deployed Script URL
- TokenBased (click to access TokenBased requirements)
- Role ID
- Consumer Key
- Consumer Secret
- Token ID
- Token Secret
- Account ID
- Transaction Saved Search ID
- Deployed Script URL
Configure User Permissions for Login-Based Authentication
- Log into system.netsuite.com as an administrator.
- Navigate to Setup > Users/Roles > Manage Users to select a user. On the Employee page, click the Actions drop-down to select New.
- Fill out the user information as needed. On the Access tab, in the Roles pane, select from an existing role or click Add.
NOTE: Full access role (ID 18) and administrator role (ID 3) are two default setting roles
for NetSuite that have global access).
Keep this user’s username and password, you will need it to login to Solver. - Navigate to Setup > Users/Roles > Manage Roles. On the list of roles, select the role that the user has been added to. In the Permissions section, there is access to the user’s: Transactions, Reports, Lists, Setup, and Custom Record
- Click Edit.
- In the dropdown of Transactions, select Accounts. Make sure the Level column says View. select Find Transaction. Make sure the Level column is Full. Repeat, setting Transactions > Perform Search to View. This will allow the user to view transactions from the Solver Cloud application
- Other than that, in the dropdown of Transactions, select every object type in saved search. For instance, Invoice (View), Sales order (View), Check (View) etc.
- Navigate to Permissions > Lists and set the following permissions to View:
- Vendor (View)
- Item (View) (shows Entity table)
- Department (View)
- Currency (View)
- Locations (View)
- Employee (View)
- Navigate to Setup > Users/Roles > Manage Roles. Find the Internal ID for the role you
just created. Keep this Internal ID, you will need it to login to Solver.
NOTE: If this user account should not be given access to the NetSuite website, a security question can be set up.
Configure User Permissions for Token-Based Authentication
NetSuite’s OAuth is different from the standard OAuth flow. When setting up a user for token-based authentication, it may be a challenge to navigate within the NetSuite GUI, creating roles, and copy/pasting various keys.
So why use token-based authentication? The alternative is an email + password-based authentication. This email method works, but passwords expire every six months and resetting passwords with a SAAS product that integrates with NetSuite is quite involved. Plus, email + password authentication is less secure because an attacker can login to the GUI with that information.
The following steps are required to set up token-based authentication.
- Create an Integration Record. The integration record identifies the application in NetSuite’s system
- Visit the integrations page or global search for page: integrations.
- If none exist, create an integration record. After you create the record you will need to copy/paste the consumer key and consumer secret to your secrets file.
- Name: Your-Application-Name
- Authentication: Token-Based Authentication
- State: Enabled
- If the integration record already exists but you don’t have the consumer key and
consumer secret, edit the record, then press Reset Credentials.
- Enable Token-Based Authentication
- Navigate to Setup > Company > Setup Tasks > Enable Features > SuiteCloud > Manage Authentication.
- Verify Token-Based Authentication is enabled. Save any changes.
- NOTE: If this feature is not enabled, you will not see the permissions required in the
next step.
- Create a Token Role. By default, the administrator does not have token permissions. If you do not create a token role and assign it to your administrator, you will get a “Login access has been disabled for this role” error when creating a token.
- Do a global search for page: role, then choose New Role.
- Navigate to Permissions > Setup and set the following permissions to Full:
- User Access Token (Full)
- Access Token Management (Full)
- Web Services (Full)
- Manage Accounting Period (Full)
- Navigate to Permissions > Transactions and set the following permissions to View:
- Accounts (View)
- Perform Search (Full)
- Other than that, in the dropdown of Transactions, select every object type that in saved search. For instance, Invoice, Sales order, Check etc.
- Navigate to Permissions > Lists and set the following permissions to View:
- Vendor (View)
- Item (shows Entity table)
- Department (View)
- Currency (View)
- Locations (View)
- Companies (View)
- Geographies (View) (For NetSuite one world account only)
- Subsidiaries (View) (For NetSuite one world account only)
- Drugs (View) (For NetSuite one world account only)
- Add Token Management Permissions.
- Do a global search for page: employees.
- Edit your employee record.
- Navigate to Access > Roles to add the token authentication role you just created.
- Create Access Tokens.
- Do a global search for page: tokens.
- Create a New Access Token.
- Select the application and role created earlier, then save.
- Copy/paste the Token ID and token secret to your secrets file.
Token-Based Credentials for Customers With More Than One Sandbox
The following information should not be shared across all sandbox and production environments. You will need to follow the above instructions to obtain the correct credential.
- Token ID
- Token Secret
- Account ID
- Transaction Saved Search ID
- Deployed Script URL
Role ID, Consumer Key, and Consumer Secret remain the same as production.
Install BI360 Bundle
The Solver/BI360 Bundle contains RESTlet and a bundle of preconfigured NetSuite Saved Searches (GL, GL Detail, OBA, AP, AP Detail, AR, AR Detail, and Inventory).
To install the BI360 Bundle, complete the following steps:
- Navigate to Customization > SuiteBundler > Search & Install Bundles.
- In Keywords, type BI360.
- Click the BI360 Saved Search & RESlet Script and install it.
Configure RESTlet
To connect to Solver, RESTLET must be deployed as detailed in the following steps:
- Upload RESTlet SuiteScript file in the user’s account. This file is provided by the Solver Support team.
- Go to Customization > Scripting > Scripts > New.
- Click the drop-down button, then search for BI360.
Click BI360_NetSuite_xx.JS (from the bundle). - Click Create Script Record. The following will display.
- Complete all the details for new Script record and click Save.
- Click Deploy Script.
- Verify that Status reads Released and Log Level reads Error.
NOTE: In Audience, you can manage the user’s access for a deployed script.
- Click Save and the external URL of the script will display.
- Under Audience, assign user or role (which user to login to Solver) associate to this script.
The RESTlet Suite Script is now deployed in NetSuite. Keep this external url, you will need it to login to Solver.
Deleting a Deployed Script
To delete a deployed script, perform the following steps:
- Delete the Script Deployment.
- Delete the Script Record.
- Delete the Script file.
This completes the configuration of NetSuite. Users are now ready to create an integration to NetSuite via the Solver NetSuite Connector.
Edit a Saved Search from Bundle
Users can either use saved searches that installed from the Solver/BI360 bundle or create their own Saved Searches to meet their financial purpose.
Solver provides nine custom Saved Searches: GL, GL Detail, OBA, AP, AP Detail, AR, AR Detail and Inventory. It is recommended that you review and modify these saved searches as needed.
The following steps show that how to edit a saved search.
- Navigate to Reports > Saved Searches > All Saved Searches.
- Search for BI360_OBA and click Edit.
- Navigate to the Results tab.
- Click on each of these formulas and modify 8/1/2011 to starting date of your company, modify 8/31/2011 to ending date of that month of your company
- Click Preview and verify that the report meets company’s goals. Click Save.
- Return to the overall Saved Search overall page see the Saved Search ID. Keep this ID, you will need it to login to Solver.
Create a New Saved Search
The following are basic instructions to create a Saved Search. Please follow NetSuite documentation or consult your NetSuite Consultant for detailed instructions.
Saved searches must have unique column names.
- Navigate to Reports > Saved Searches > All Saved Searches > New.
- On the New Saved Search page, scroll down and select Transaction.
- Type in a descriptive Search Title and ID. The ID is what is visible in Solver. It is recommended to preface the ID as desired for easy searching later on.
- Click Save.
- Define the security, making it public or Available as list view.
- Public: make this saved search available to all users with sufficient permissions.
- Available as a view: make this search's results available to audience members as a view for lists of this kind of record.
- The bottom half the screen allows users to select the type of data to bring in. There are best practices to ensure accurate data. Please discuss with your NetSuite consultant for more information related to your organization’s specific data
- Criteria > Standard:
- Set a filter for Memorized to No.
- Apply an account filter to get the specific data desired. For example: To fetch General Ledger data, users may want to choose all accounts. For organizations with a Chart of Account (CoA) that has been configured with Account Types, it is recommended to use this attribute. Using attributes will allow the Saved Search to be dynamic as the organization’s CoA expands. When using Account codes, users must manually select all account codes.
- To retrieve Accounts Payable data, apply a filter for Account. In the popup that appears, select the organization’s Accounts Payable account.
- The Saved Search settings grid should now look like this:
- Results: Click Results to see the columns that will be returned in the Saved Search.
For summary data, you should choose the Summary Type > Group for the Date attribut.e
For detail data, leave Summary Type blank- Available Filters: Use Available filters to filter down the data set. As an example, you may choose to not bring in all of the General Ledger data and can apply a date filter to retrieve only the last three years of General Ledger data.
- Audience: If the Saved Search is not Public, use Audience to define which user(s)
and/or role(s) can see this saved search. - All other menus are left blank in this example.
- Set a filter for Memorized to No.
- Criteria > Standard:
- Click Save.
- Click Preview to view the results of the Saved Search. The preview will show users the format that Solver will receive data.
Connecting Solver to NetSuite
In order to create an integration for NetSuite, the following credentials are needed:
- Username and Password
- These credentials are the ones used to log into NetSuite for the user. This user will have the permissions configured in the instructions above.
- These credentials are the ones used to log into NetSuite for the user. This user will have the permissions configured in the instructions above.
- Account ID
- Go to Setup > Company > Company Information to view.
- Go to Setup > Company > Company Information to view.
- Role ID
- Setup > Users/Roles > Manage Roles
NOTE: In order to view the Internal ID column within NetSuite, the user will need to be logged in as an Administrator.
- Setup > Users/Roles > Manage Roles
- Transaction Saved Search ID
- Reports > Saved Searches > All Saved Searches
- Reports > Saved Searches > All Saved Searches
- Deployed Script URL
- Customization > Scripting > Script Deployments. Select the Solver script that was uploaded in the previous steps of this document by clicking the View button.
- The URL needed is listed under External URL.
- Customization > Scripting > Script Deployments. Select the Solver script that was uploaded in the previous steps of this document by clicking the View button.
- NetSuite Server – When connecting to a test environment, select Sandbox from the
dropdown, if connecting to a production environment then select the Production
option
Verifying the Version of Your BI360 RESTLet Script
- Log on to NetSuite Customization Scripting click on Scripts.
- You should see a list of scripts, look for BI360 RESTLet Script 1.0xx, click into it.
- Navigate to Deployments, then click on the script in the red box below:
- In the below screenshot, red arrow points to the version number, you can also check the external URL (green arrow) to verify you are connecting to the right script in BI360.
Troubleshooting
Integration Fails w/ the Use of Period Parameter
When a user attempts to run the NetSuite integration with a period parameter, the integration fails with the below error. In the error detail, it references the "Search Filter contains invalid search criteria: accountingPeriod".
In this particular case, the user has four fields related to Period or Date in the custom Saved Search. As the screenshot shown below, there is not any formulas to format these fields.
In the integration mapping, the user is mapping the [Period Start Date] field to the Period dimension in the Data Warehouse.
The NetSuite connector is hardcoded to reference Date and Period (Period Name) as the only acceptable fields for the Period dimension in the Data Warehouse. If any other Date or Period field from NetSuite is used, the integration will likely run successfully without a period parameter. However, the integration will fail if a period parameter is included in the Parameters page as shown in the below screenshot, even if the parameter itself is not being used during the data load.
This issue can be resolved by mapping either the Date or Period (Period Name) field to the Period dimension in the integration mapping.
- For Date, simply use the TEXT formula to convert the field to the acceptable 'YYYYMMDD' format.
- TEXT([Date],'YYYYMMDD')
- For Period (Period Name), likely this field is in the 'YYYY.MM' format. In this case, you may use the below formula to convert the syntax.
- CONCATENATE((LEFT([Period Name],4)),(RIGHT([Period Name],2)),'01')
Below is an example of what Period Name looks like in the Saved Search in NetSuite, and in the source preview in the integration.
- In the integration mapping, map Period Name from source to Period in target and apply the above formula
- Verify in the target preview the field is in 'YYYYMMDD' format. You should now be able to run the integration with a period parameter
NetSuite - You have not been granted access to the bundle.
In order for you to access the BI360 Saved Search bundle, Solver needs to know the AccountID of your organiztion and provide access to said ID in our NetSuite system. Please reach out to Solver Support and provide the AccountID that will be used to access the Saved Search bundle.
Properties:
Cloud
Private Host