SuitePortal
User GuideTenant Pages

Tenant Pages

Create custom portal pages for your customers and vendors

Tenant Pages

Tenant Pages allow you to create custom data views that appear in customer and vendor portals. Each page displays synced data in a configurable table format.

What is a Tenant Page?

A tenant page is a custom page that:

  • Displays data from a specific dataset (synced from NetSuite)
  • Appears in the customer/vendor portal sidebar
  • Has configurable columns, filters, and sorting
  • Respects row-level security (customers see only their data)

Page Properties

PropertyTypeDescription
idstringUnique page identifier
organization_idstringOwner organization
titlestringDisplay name in sidebar
slugstringURL path segment
descriptionstringOptional page description
iconstringSidebar icon identifier
dataset_idstringSource dataset/collection
record_typestringNetSuite record type
tenant_idstringParent tenant identifier
table_configobjectTable display configuration
statusnumber1=Draft, 2=Active, 3=Inactive
sort_ordernumberPosition in sidebar

Page Status

ValueStatusDescription
1DraftPage is not visible
2ActivePage is visible and accessible
3InactivePage is hidden but preserved

Creating a Tenant Page

Via Dashboard

  1. Navigate to Portal → Pages
  2. Click Create Page
  3. Configure page settings:
    • Title and slug
    • Dataset/record type
    • Table columns
    • Filters
  4. Set status to Active
  5. Click Save

Page Input

FieldRequiredDescription
titleYesPage display name
slugYesURL path (e.g., my-orders)
dataset_idYesTarget dataset
record_typeYesNetSuite record type
tenant_idYesParent tenant ID
table_configYesColumn and filter config
descriptionNoPage description
iconNoSidebar icon
statusNoDefault: 2 (Active)
sort_orderNoSidebar position

Table Configuration

The table_config object defines how data is displayed:

interface TableConfig {
  columns: TableColumn[];
  filters?: TableFilter[];
  pagination?: {
    page_size: number;
  };
  sorting?: {
    column: string;
    direction: 'asc' | 'desc';
  };
}

Column Configuration

PropertyTypeDescription
keystringData field key
labelstringColumn header text
typeenumData type for formatting
sortablebooleanEnable column sorting
searchablebooleanInclude in search
widthstringColumn width (CSS)

Column Types

TypeDescriptionExample Display
textPlain text"ABC Company"
numberNumeric value"1,234"
dateDate formatting"Jan 15, 2024"
emailEmail link"user@example.com"
phonePhone formatting"(555) 123-4567"
booleanYes/No display"Yes" / "No"
currencyMoney formatting"$1,234.56"

Filter Configuration

PropertyTypeDescription
keystringField to filter
labelstringFilter label
typeenumFilter input type
optionsarrayOptions for select type

Filter Types

TypeDescription
textFree text input
selectDropdown selection
dateDate picker
numberNumeric input

Example Configuration

"My Orders" Page

{
  "title": "My Orders",
  "slug": "my-orders",
  "dataset_id": "sale",
  "record_type": "salesorder",
  "table_config": {
    "columns": [
      {
        "key": "tranid",
        "label": "Order #",
        "type": "text",
        "sortable": true,
        "searchable": true
      },
      {
        "key": "trandate",
        "label": "Date",
        "type": "date",
        "sortable": true
      },
      {
        "key": "total",
        "label": "Amount",
        "type": "currency",
        "sortable": true
      },
      {
        "key": "status",
        "label": "Status",
        "type": "text",
        "sortable": true
      }
    ],
    "filters": [
      {
        "key": "status",
        "label": "Status",
        "type": "select",
        "options": [
          { "value": "pending", "label": "Pending" },
          { "value": "approved", "label": "Approved" },
          { "value": "shipped", "label": "Shipped" }
        ]
      }
    ],
    "pagination": {
      "page_size": 25
    },
    "sorting": {
      "column": "trandate",
      "direction": "desc"
    }
  },
  "status": 2,
  "sort_order": 1
}

Row-Level Security

Tenant pages automatically filter data based on the logged-in user's context:

Portal TypeFilter Applied
TenantAll records for the tenant
CustomerRecords where entity = customer ID
VendorRecords where entity = vendor ID

Users only see data they are authorized to access.

Page Data

Each page has associated TenantPageData records:

PropertyTypeDescription
idstringUnique record identifier
tenant_page_idstringParent page
ns_idstringNetSuite internal ID
customer_ns_idstringCustomer NetSuite ID (for filtering)
dataobjectSynced record data
synced_atstringLast sync timestamp

Editing Pages

  1. Navigate to Portal → Pages
  2. Click on a page
  3. Modify settings
  4. Click Save

Editable Properties

PropertyEditable
titleYes
slugYes
descriptionYes
iconYes
table_configYes
statusYes
sort_orderYes
dataset_idNo
record_typeNo

Deleting Pages

  1. Navigate to Portal → Pages
  2. Click Delete on the page
  3. Confirm deletion

Warning: Deleting a page also removes associated page data.

Page URLs

Pages are accessible at:

/portal/pages/{tenant_id}/{slug}

Example:

/portal/pages/ACCT_123456/my-orders

Active pages appear in the portal sidebar in sort_order sequence. Only pages with status = 2 (Active) are displayed.