Login

Managed Packages

While the GRAX application is hosted outside of the Salesforce platform, we provide our customers with multiple ways to integrate GRAX with Salesforce to best fit their needs. This guide walks you through installing and managing the optional GRAX Salesforce Managed Packages.

Pre-requisites

Prior to installing a GRAX Managed Package, you'll need the following:

  1. A copy of the GRAX application connected to a storage bucket running on cloud infrastructure

    Need help getting set up?

    Contact Support or the Trial Team for assistance.

  2. A Salesforce account

    • You can use your existing Salesforce account or register here for a Salesforce Developer Edition account

Available Managed Packages

We offer two Managed Packages:

Second Generation Managed Package

The Second Generation Managed Package is our latest and greatest GRAX Managed Package. This package features:

Installing the Second Generation Managed Package

  • Install GRAX Second Generation Managed Package in Production (including Developer Editions) or Install GRAX Second Generation Managed Package in Sandbox (including Scratch orgs)
  • Enter Salesforce login details
  • Select the user type (Admin Users, All Users, or Specific Profiles) you'd like to install the managed package for and click Install
    • Install for Admins Only:
      • Specifies the following settings on the installing administrator’s profile and any profile with the Customize Application permission:
        • Apex classes — enabled
        • Custom LWC tab - enabled
        • Custom Settings record - enabled
        • Second Generation LWCs - enabled
        • After installation, if you have Enterprise, Performance, Unlimited, or Developer Edition, set the appropriate user and object permissions on custom profiles as needed
    • Install for All Users:
      • Specifies the following settings on all internal custom profiles:
        • Apex classes — enabled
        • Custom LWC tab - enabled
        • Custom Settings record - enabled
        • Second Generation LWCs - enabled
    • Install for Specific Profiles:
      • Enables you to choose the usage access for all custom profiles in your organization. You can set each profile to have full access or no access for the new package and all its components.
        • Full Access — Specifies the following settings for each profile.
        • Apex classes — enabled
        • Custom LWC tab - enabled
        • Custom Settings record - enabled
        • Second Generation LWCs - enabled
    • Please Note: If you install for All Users, then all users will have access to the Apex Classes thar support the LWCs. If you install for Admin's Only or Specific Profiles, and the LWCs are not displaying for a user, then you'll need to provide users access to the Apex Classes listed below via a permission set or by adding them directly to their profile.
      • Version
      • Custom Settings
Install GRAX Second Gen

Configuring the Second Generation Managed Package

Once the installation is complete, take the following steps:

  • Open SFDC Setup
  • Search for Custom Settings
  • Click on Manage next to GRAX Settings
  • Click New to create a new organization-level default custom setting record
  • Fill in the URL field with the URL of your GRAX instance (e.g. https://mygraxapp.secure.grax.io)
  • Search for Trusted URLs in SFDC Setup
  • Click New Trusted URL
  • Enter any acceptable name for the new Trusted URL
  • Fill in the URL field with the URL of your GRAX instance (e.g. https://mygraxapp.secure.grax.io)
  • Check the frame-src checkbox
  • Save the new Trusted URL

First Generation Managed Package

The First Generation Managed Package was the first, and original, GRAX Managed Package. This package features:

Installing the First Generation Managed Package

  • Install GRAX First Generation Managed Package in Production (including Developer Editions) or Install GRAX First Generation Managed Package in Sandbox (including Scratch orgs)

  • Enter Salesforce login details

  • Select the user type (Admin Users, All Users, or Specific Profiles) you'd like to install the managed package for and click Install

    • Install for Admins Only: Specifies the following settings on the installing administrator’s profile and any profile with the Customize Application permission:
      • Object permissions — Read, Create, Edit, Delete, View All, and Modify All enabled
      • Field-level security — set to visible and editable for all fields
      • Apex classes — enabled
      • Visualforce pages — enabled
      • App settings — enabled
      • Tab settings — enabled for GRAX app
      • Page layout settings — read only
      • Record Type settings — read only
      • After installation, if you have Enterprise, Performance, Unlimited, or Developer Edition, set the appropriate user and object permissions on custom profiles as needed
    • Install for All Users: Specifies the following settings on all internal custom profiles:
      • Object permissions — Read, Create, Edit, and Delete enabled
      • Field-level security — set to visible and editable for all fields
      • Apex classes — enabled
      • Visualforce pages — enabled
      • App settings — enabled
      • Tab settings — enabled for GRAX app
      • Page layout settings — read only
      • Record Type settings — copied from administrator profile
    • Install for Specific Profiles: Enables you to choose the usage access for all custom profiles in your organization. You can set each profile to have full access or no access for the new package and all its components.
      • Full Access — Specifies the following settings for each profile.
      • Object permissions — Read, Create, Edit, Delete, View All, and Modify All enabled
      • Field-level security — set to visible and editable for all fields
      • Apex classes — enabled
      • Visualforce pages — enabled
      • App settings — enabled
      • Tab settings — enabled for GRAX app
      • Page layout settings — read only
      • Record Type settings — read only
    Install GRAX
  • Before the installation begins, you'll be prompted to grant third-party access. Check the box granting access to third-party websites and click Continue.

Configuring the First Generation Managed Package

Assign Permission Sets

Configure GRAX in Salesforce

  • Launch the GRAX App in Salesforce from the App Launcher icon and click Unlock in the bottom right corner
  • In a separate tab, login to GRAX and navigate to Settings > GRAX API Tokens > Reveal GRAX Tokens
  • Copy and paste the Application URL and API Token information from GRAX into Salesforce and click Save
    API Tokens 3

📘

NOTE:

The GRAX Configuration tab will need to be reconfigured each time the application URL or the API tokens change

Configure Remote Site Setting
  • Click Add Remote Site Setting
    Remote Site 1
  • The necessary information will auto-populate
  • Click Save
Configure Trusted URLs
  • Copy your GRAX app URL
    Trusted URLs 1
  • Using Quick Find in Salesforce Setup, search for Trusted URLs and click New Trusted URL
  • Enter GRAX as the API Name and paste the URL in the URL box
    Trusted URLs 3
Configure Custom Settings

To enable a custom setting, follow the steps below:

  • Using Quick Find in Salesforce Setup, search for Custom Settings
  • Click Manage next to GRAX Settings
  • Click Edit
  • Click the checkbox next to the custom setting you wish to enable
  • Click Save
Enable Auto Backup Custom Setting

The Enable Auto Backup custom setting, when set to TRUE, does the following:

Redirects the Schedule tab to GRAX web app, which removes the ability to see legacy backup and archive jobs
BEFORE enabling this custom setting, you need to ensure that ALL of the following are true:

  • All legacy backup jobs have been deactivated
  • All legacy archive jobs have been deactivated
  • All archive jobs, that you want to continue to run, have been moved over to the webapp
Enable GRAX Next Generation Custom Setting

The Enable GRAX Next Generation custom setting, when set to TRUE, does the following:

  • Redirects the Search tab to GRAX Global Search
  • Redirects the Summary tab to GRAX Auto Backup
  • Hides the Summary History dropdown on an individual GSP action dropdown
  • Hides Datalake Delete tab
  • Hides Logs tab
  • Hides Setup sub-tab (GRAX>Configuration>Setup)
  • Hides Time Machine Trigger Template Code on GRAX>Configuration>Miscellaneous

FAQs

Don't I need the Managed Package to manage and utilize GRAX?

No - Using the GRAX Salesforce Managed Package is now optional. All GRAX features, with the exception of LWCs, can be accessed directly via the application's web interface.

How do I know whether I have the First or Second Generation Managed Package installed?

The First Generation Managed Package namespace is grax, while the Second Generation Managed Package namespace is graxinc.

Can I have both the First Generation and Second Generation Managed Packages installed at the same time?

Technically, yes you can. However, we do not recommend this as it may be difficult to decipher between the different LWCs and permission sets.

Can I manage permission sets without the Managed Package?

User permission sets can be created via the Auto Config flow during initial configuration, or by manually creating the Console permission sets by using the Salesforce Developer Console.

What does it mean to uninstall a Managed Package?

Uninstalling a managed package removes its components and data from the org. During the uninstall process, any customizations, including custom fields or links, that you’ve made to the package are removed.

Do I need special permissions to uninstall the Managed Package?

To uninstall managed packages, you will need the Download AppExchange Packages user permission.

How do I uninstall the Managed Package?

Log in to the Salesforce org where you want to uninstall the GRAX Salesforce Managed Package and follow the steps here.

📘

NOTE:

It is not necessary to save any of the GRAX Salesforce Managed Package data. This will only contain configuration and helper job information which is now maintained on the web application.

Uninstall Managed Package

After uninstalling the GRAX Salesforce Managed Package it will appear under the Uninstalled Packages section. Once the uninstall status is complete you can delete the GRAX Salesforce Managed Package by clicking Del under Action. Click OK when prompted to permanently delete it.

📘

NOTE:

All referenced components will need to be removed prior to the uninstalling and deleting the GRAX Salesforce Managed Package. The most common components that will need to be removed are Permission sets and the Lightning Web Component Bundle. If the managed package user permission sets are being used then these will need to be replaced by first manually creating the Console permission sets and assigning them to the users. If the LWC included in the managed package are being used, then these will also need to be replaced by the Embedded LWC Data Viewer option.

Click here for additional resources on removing a SFDC managed package.

Can I migrate permission sets from the Managed Package to the "Console" permission sets?

Yes. Before starting the migration, run Auto Config (or create the Console permission sets manually) to ensure the destination permission sets exist. The script below will map the managed package permission sets to the Console permission sets:

  • GRAX Configuration Admin -> GRAX Console Admin Permission
  • GRAX Advanced User -> GRAX Console Power Permission
  • GRAX User -> GRAX Console Standard Permission

To run the script in the Salesforce Developer Console:

  1. Open the Salesforce Developer Console
  2. Open the Debug menu
  3. Select Open Execute Anonymous Window (or press CTRL + E)
  4. Copy the script below into the Enter Apex Code dialog
  5. Select the Open Log checkbox
  6. Click Execute
private class GRAXLegacyPerm {
  Map<String, Id> psIDs;
  Map<String, Set<Id>> existingConsole;

  public GRAXLegacyPerm() {
    List<PermissionSet>lps=[
        SELECT Id, Name
        FROM PermissionSet
        WHERE name in ('GRAX_Configuration_Admin', 'GRAX_Advanced_User', 'GRAX_User', 'GRAX_Console_Admin_User', 'GRAX_Console_Power_User', 'GRAX_Console_Standard_User')
    ];

    psIDs = new Map<String, Id>();
    for(PermissionSet ps : lps){
        System.debug('PermissionSet '+ps.Name +' Id: ' + ps.Id);
        psIDs.put(ps.Name, ps.Id);
    }

    existingConsole = new Map<String, Set<Id>>();
    for (String name : new String[]{'GRAX_Console_Admin_User', 'GRAX_Console_Power_User', 'GRAX_Console_Standard_User'}) {
         List<PermissionSetAssignment> ecpsa = [
            SELECT AssigneeId
            FROM PermissionSetAssignment
            WHERE IsActive=true
              AND PermissionSetId = :psIDs.get(name)
        ];

        Set<Id> ecpsuID = new Set<Id>();

        for (PermissionSetAssignment a : ecpsa) {
            ecpsuID.add(a.AssigneeId);
        }
        existingConsole.put(name, ecpsuID);
        System.debug('Existing '+name +' User Ids: ' + ecpsa);

    }
  }

  public String migratePermSet(String oldPS, String newPS) {
    List<PermissionSetAssignment> migratePS  = new List<PermissionSetAssignment>();
    List<PermissionSetAssignment> lpsuID = [
        SELECT AssigneeId
        FROM PermissionSetAssignment
        WHERE IsActive=true
          AND PermissionSetId = :psIDs.get(oldPS)
          AND AssigneeId NOT IN :existingConsole.get(newPS)
    ];

    for(PermissionSetAssignment a : lpsuID){
        System.debug('Migrate '+oldPS+' User: ' + a.AssigneeId + ' to '+newPS);

        migratePS.add( new PermissionSetAssignment (
            PermissionSetId = psIDs.get(newPS),
            AssigneeId =  a.AssigneeId
        ));

        if( migratePS.size() > 200) {
            upsert migratePS;
            migratePS.clear();
        }
    }
    if( migratePS.size() > 0) {
        try {
            insert migratePS;
        } catch(DmlException e) {
            System.debug('error: ' + e);
        }
      migratePS.clear();

    }
    return 'done';
  }
}


GRAXLegacyPerm glp = new GRAXLegacyPerm();

glp.migratePermSet('GRAX_Configuration_Admin', 'GRAX_Console_Admin_User');
glp.migratePermSet('GRAX_Advanced_User', 'GRAX_Console_Power_User');
glp.migratePermSet('GRAX_User', 'GRAX_Console_Standard_User');