Importing Employee Loaded Costs from NetSuite

Use a custom import workflow to create or update employee loaded costs in SuiteProjects Pro from a NetSuite custom record type. SuiteProjects Pro uses the NetSuite custom record's internal ID to identify the corresponding loaded cost on subsequent imports. For general workflow information, see Custom Import Workflows and Importing Records from NetSuite into SuiteProjects Pro Using Custom Workflows.

Setting Up the Custom Import Workflow

Before you create the workflow, enable Loaded Cost Custom Import and prepare the NetSuite custom records that hold the employee loaded cost information. If corresponding loaded costs already exist in SuiteProjects Pro, associate them with the NetSuite records before the first import.

To set up a custom import workflow for employee loaded costs:

  1. Enable custom import workflows in SuiteProjects Pro. See Enabling Custom Import Workflows.

  2. Contact SuiteProjects Pro Support to enable custom import workflows for loaded cost. Enabling the Loaded Cost Custom Import optional feature creates the custom field netsuite_loaded_cost_id that custom import workflows require to hold the internal ID of the NetSuite record. It isn't possible otherwise to create custom fields for loaded cost records in SuiteProjects Pro. See Loaded Cost Custom Import.

  3. In NetSuite, create a custom record type for employee loaded costs. For the employee field, set Type to List/Record and List/Record to Employee, so users select an employee from the employee list. If Multiple Currencies is enabled in NetSuite, set the currency field to List/Record with Currency as the list, so users select a currency available in the account. If Multiple Currencies is not enabled, supply the account's currency in the import mapping. Include fields for the hourly cost, current status, and start and end dates for historical costs.

    If this information is held on NetSuite employee records, arrange for it to be copied to the custom records before import. For information about setting up the source custom records in NetSuite, see Creating Custom Record Types (External link to Oracle Help Center) and Adding Fields to Custom Record Types (External link to Oracle Help Center).

    For source-record checks and recommended constraints, see NetSuite Source Record Best Practice Guidelines.

  4. When creating a custom record holding employee loaded cost information in NetSuite, confirm that the employee you select has a matching employee record in SuiteProjects Pro.

  5. If you have existing loaded cost records in SuiteProjects Pro, match them with the corresponding loaded cost custom records in NetSuite. Use the SuiteProjects Pro XML API, SOAP API, or Integration Manager to set the NetSuite internal ID [netsuite_loaded_cost_id] custom field for existing loaded cost records in SuiteProjects Pro. The ID match ensures a 1:1 relationship between loaded cost records in SuiteProjects Pro and NetSuite, and prevents the creation of duplicate loaded cost entries in SuiteProjects Pro.

    Note:

    The NetSuite internal ID [netsuite_loaded_cost_id] custom field is not visible in the SuiteProjects Pro UI. To inspect an ID association, export the loaded_cost table. For more information about exporting records, see Integration: Import/Export.

  6. Create the custom import workflow using these settings:

    • For NetSuite record, select [Custom Record], then choose the custom record type holding employee loaded costs from the Specify dropdown field.

    • For SuiteProjects Pro record, select Loaded cost.

    • For ID field, select netsuite_loaded_cost_id__c. This required field cannot be changed after you save the workflow.

  7. Define field mapping for the loaded cost custom import workflow. See Loaded Cost Field Mapping Definition for the example mappings.

  8. Run and validate the custom import workflow. See Importing and Verifying Loaded Costs.

Loaded Cost Field Mapping Definition

The following tables show an example that imports primary-level employee loaded costs. The custrecord_oa_loaded_cost_* names represent fields in the NetSuite custom record type holding employee loaded costs; replace them with fields in your account. The workflow provides the ID mapping. Configure the additional mappings according to your source records.

ID Field Mapping

NetSuite Field

Direction

SuiteProjects Pro Field

Notes

CustomRecord.internalId

Arrow pointing right

Loaded_cost.netsuite_loaded_cost_id__c

Required workflow mapping. The workflow adds this protected row after you select the ID field. It uses the NetSuite ID to find a matching SuiteProjects Pro record or create one if no match exists. Employee and level do not replace the ID match.

Additional Field Mappings

NetSuite Field

Direction

SuiteProjects Pro Field

Notes

Looked up SuiteProjects Pro field value - Internal ID [id] of SuiteProjects Pro employee record with netsuite_user_id equal to the NetSuite custom field CustomRecord.custrecord_oa_loaded_cost_employee_ns_id

user_id lookup=custrecord_oa_loaded_cost_employee_ns_id:lookup_table=user:lookup_by=netsuite_user_id:lookup_return=id 
Arrow pointing right

Loaded_cost.user_id

Needed for a new employee cost. Look up the SuiteProjects Pro employee whose netsuite_user_id matches the NetSuite employee ID. The employee must already exist in SuiteProjects Pro.

Fixed value

lc_level '0' 
Arrow pointing right

Loaded_cost.lc_level

This example imports primary-level employee loaded costs, so it maps level 0 explicitly. Map 1 or 2 only if that level is configured and the source record represents it.

custrecord_oa_loaded_cost_hourly_cost

Arrow pointing right

Loaded_cost.cost

Map the hourly cost amount.

custrecord_oa_loaded_cost_currency

Arrow pointing right

Loaded_cost.currency

Map a currency value recognized by your SuiteProjects Pro account. Check the value returned by the NetSuite custom field and convert it in the mapping if needed. If Multiple Currencies is not enabled in NetSuite, use a fixed value mapping for the account's currency.

Value-to-value list map

<current custrecord_oa_loaded_cost_is_current>
    'true' '1'
    'false' '0'
</current> 
Arrow pointing right

Loaded_cost.current

Map the NetSuite current status to 1 for a current employee loaded cost, and 0 for historical costs. Check the values returned by the NetSuite field before using this conversion.

At most one loaded cost can be current for the same employee and loaded cost level. See also Importing and Verifying Loaded Costs.

custrecord_oa_loaded_cost_start_date

Arrow pointing right

Loaded_cost.start

Map the start date for a historical cost. Leave it empty for a current cost.

custrecord_oa_loaded_cost_end_date

Arrow pointing right

Loaded_cost.end

Map the end date for a historical cost. Leave it empty for a current cost. Use both dates for historical costs.

Note:

Field declarations such as OA_FIELDS and NS_FIELDS are not required for custom import advanced mappings. For more information, see Advanced Mappings for Custom Import Workflows.

NetSuite Source Record Best Practice Guidelines

Review these guidelines when configuring and checking the NetSuite custom records used for the import:

  • Required fields and defaults - Depending on the field types, you can make the employee, cost, and currency fields required, set a minimum for a numeric cost field, and review the default for the current-status checkbox. See Setting Validation and Defaulting Properties (External link to Oracle Help Center) and Configuring Fields or Screens (External link to Oracle Help Center).

  • Conditional date checks - For historical costs, require both dates; for current costs, keep both dates empty. For checks when users save a record, see Return User Error Action (External link to Oracle Help Center). Configure and test the checks for your account; the SuiteProjects Pro custom import does not supply them.

  • One current source record - Maintain only one current NetSuite loaded cost per employee and loaded cost level. Keep historical records when you need to import their periods.

  • Historical periods - Use non-overlapping date ranges for historical costs at the same employee and level. Both endpoints are included: a period ending June 30 can be followed by one starting July 1.

  • Source-record review - Required fields on a form do not establish uniqueness across records or detect overlapping periods. Review the records before importing them. A saved search can help you inspect them. See saved search (External link to Oracle Help Center).

  • Workflow filters - Use Using Filters to exclude obsolete duplicate current records when the NetSuite source has a suitable field. Keep historical records in scope. A workflow filter evaluates individual records and does not validate uniqueness or date overlaps across records.

Importing and Verifying Loaded Costs

Run the custom import workflow manually or in a workflow group. By default, it imports every record of the selected NetSuite type on each run, including records imported previously. Check the mappings and filters before importing into an account with existing loaded costs.

In SuiteProjects Pro 2026.2, importing a current employee loaded cost clears the current flag on other current loaded costs for the same employee and level. Those records are retained, and the integration log identifies the records updated. Importing a historical loaded cost leaves the existing current cost unchanged. Previously, multiple current costs for the same employee and level could cause reports to count costs more than one time.

After the run, inspect the employee's loaded costs by level and review the integration log. Check the current amount and currency, historical periods, and any messages that identify records whose current flag was cleared. Export the loaded_cost table to confirm NetSuite-ID associations when necessary. If a report was affected by multiple current loaded costs, rerun it and compare the results with the employee cost records.