When developing custom client scripts in NetSuite, there are situations where you need to access details about the current user, such as their location. However, directly querying the employee record can lead to permission issues, especially if the user’s role doesn’t have access to view employee records.
To address this issue, you can use the runtime module, which allows you to access the current user’s information without directly querying the employee record. This approach eliminates the need for additional role permissions while still providing access to the necessary user data.
Why Avoid Direct Employee Record Access?
Directly accessing employee records can cause permission errors if the user’s role doesn’t have sufficient access rights. These errors can disrupt the execution of your script and affect the user experience. By leveraging the runtime module, you can access user information that is generally available across all roles without needing explicit permissions to employee records.
Step-by-Step Guide
Here’s a step-by-step guide on how to get the current user’s location without querying the employee record:
1. Use the runtime Module
NetSuite provides the runtime module, which allows you to access information about the current user. This module is widely available and does not require special permissions.
Here’s a sample script that demonstrates how to access the current user’s location using the runtime module:
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define(['N/currentRecord', 'N/runtime'], function(currentRecord, runtime) {
function pageInit(context) {
// Get the current user using the runtime module
var currentUser = runtime.getCurrentUser();
// Get the location ID of the current user
var userLocation = currentUser.getLocation();
// Get the current record
var rec = context.currentRecord;
// Assuming 'Head Office' location has ID '1', you can replace '1' with the actual ID
if (userLocation !== '1') {
// Disable a field if the user's location is not 'Head Office'
rec.getField({ fieldId: 'your_field_id' }).isDisabled = true;
}
}
return {
pageInit: pageInit
};
});
Understanding the Script
runtime.getCurrentUser(): This method retrieves the current user’s information.currentUser.getLocation(): This method returns the location ID associated with the current user.- Disable Field Based on Location: If the user’s location doesn’t match the desired location (e.g., “Head Office”), the script disables a specific field on the form.
3. Custom Field Consideration
If the user’s location isn’t directly accessible or you need additional user-specific information, consider using a custom field on the employee record. This field can be populated automatically based on the user’s login. However, to avoid permissions issues, ensure this field is accessible without requiring direct access to the employee record.
Key Considerations
- User Location ID: Ensure you know the correct internal ID of the “Head Office” location or any location you want to compare against.
- Custom Field: If the user’s location isn’t available via the
runtimemodule, consider setting a custom field on the employee record or using a script that triggers upon user login. - Role Permissions: Since the script doesn’t directly query the employee record, you avoid potential permission errors. The
runtimemodule relies on runtime permissions, which are generally available across all roles.
Conclusion
By using the runtime module to access current user details, you can avoid the challenges associated with querying employee records directly. This approach simplifies your scripts, reduces the need for special permissions, and enhances the overall performance and reliability of your NetSuite customizations. Whether you’re working with location-based customizations or need other user-specific data, this method is a robust and efficient solution.