Link Search Menu Expand Document

Trimble Workcenter

On This Page
  1. Universal Capabilities versus Broad Capabilities
    1. The Trimble Workcenter
    2. The Trimble Apps Toolkit
      1. Modus Web Components
      2. Authentication Proxy
      3. Modus React Bootstrap
      4. Example React Application
      5. Federated Authorization
  2. Static Architecture
  3. Services
  4. Use Cases
    1. Ingest Tenant
      1. Call Chains Diagram - Ingest Tenant
    2. Configure Publication Site
      1. Call Chains Diagram - Configure Publication Site
    3. Register Widget Template
      1. Call Chains Diagram - Register Widget Template
    4. Register Local Data Source
      1. Call Chains Diagram - Register Local Data Source
    5. Configure Widget
      1. Call Chains Diagram - Configure Widget
    6. Register Remote Data Provider
      1. Call Chains Diagram - Register Remote Data Provider
    7. Configure Remote Data Source
      1. Call Chains Diagram - Configure Remote Data Source
    8. Define Dashboard
      1. Call Chains Diagram - Define Dashboard
    9. Publish Dashboard
      1. Call Chains Diagram - Publish Dashboard
    10. Export Dashboard Definition
    11. Import Dashboard Definition

Universal Capabilities versus Broad Capabilities

The Trimble Cloud Platform provides highly generalized, universal capabilities. Universal capabilities address concerns such as Authentication, Authorization, Rights Management and Profile Management. These services are analogous to utilities, such as electricity generation and water provisioning. Such services are universally leveraged by all buildings.

Certain types of buildings also depend on broad capabilities that are also general in nature, but limited in applicability to specific types of buildings. These broad capabilities harness universal capabilities in ways that fit the needs of particular types of buildings. For example, all buildings require water pressure but different types of buildings deliver this broad capability in distinct ways. Skyscrapers store water in tanks and towers at the top of the building while single family homes do not.

In a similar fashion Trimble can provide not only universal capabilities, but we can begin to consider how more targeted Platforms can address the broad capabilities of specific solution categories. For example, Trimble provides Customer Applications and Internet-of-Things (IoT) solutions. Each of these solution categories require the universal capabilities provided the Trimble Cloud Platform. However, each of these categories also benefit from broad capabilities that more closely align with their distinct requirements and use cases.

The Trimble Workcenter provides the broad capabilities needed for rapid design, development and delivery of customer-facing business applications while leveraging the universal capabilities provided by the Trimble Cloud Platform.

The Trimble Apps Toolkit provides broad capabilities that enable accelerated product design, development and delivery by leveraging standards, best practices, and common libraries.

The Trimble Workcenter and The Trimble Apps Toolkit combine to provide accelerated realization of our Connect & Scale 2025 objectives.

The Trimble Workcenter

The Trimble Workcenter model provides design guidance that:

  • Categorizes capabilities as universal or broad, providing a shared mental model for defining ownership of and responsibility for the delivery and maintenance of necessary capabilities
  • Provides a roadmap to guide increased consistency, cohesion, and clarity of design, development and delivery over time
  • Places existing applications in a clear context of their current and future relationship with the Trimble Cloud and Trimble Workcenters

The following diagram should not be strictly interpreted as an architectural diagram or as a comprehensive system architecture diagram. It provides a high level overview of how customers engage with Web Applications that leverage services provided by the Trimble Workcenter. It also reflects how existing and new applications can migrate toward full adoption of The Trimble Workcenter.

View Source
Copy To Clipboard
digraph x {
    graph [splines=ortho, nodesep=1]
    label="Trimble Apps Platform"
    node                                                    [shape=box]
    pad=.4
    labelloc=t
    nodesep=.7
    ranksep=.7

    Top                                                     [shape=none width=0 height=0 label=""]

    PersonaA                                                [fillcolor="#555555" fontcolor=white color=transparent style=filled shape=octagon width=1.3 height=1.3 label="Customer\nPersona"]
    PersonaB                                                [fillcolor="#777777" fontcolor=white color=transparent style=filled shape=circle width=1.3 height=1.3 label="Customer\nPersona"]
    PersonaC                                                [fillcolor="#999999" fontcolor=white color=transparent style=filled shape=diamond width=1.3 height=1.3 label="Customer\nPersona"]
    PersonaD                                                [fillcolor="#bbbbbb" fontcolor=black color=transparent style=filled shape=box width=1.3 height=1.3 label="Customer\nPersona"]
    PersonaE                                                [fillcolor="#333333" fontcolor=white color=transparent style=filled shape=diamond width=1.3 height=1.3 label="Customer\nPersona"]
    PersonaF                                                [fillcolor="#dddddd" fontcolor=black color=transparent style=filled shape=circle width=1.3 height=1.3 label="Customer\nPersona"]

    TrimbleAppsClient                                       [class="utility" shape=box width=11 height=.4 label="Client Library"]
    TrimbleApps                                             [class="manager" shape=box width=11 height=.4 label="Trimble Apps Platform"]
    ProductAServices                                        [class="access" shape=box label="Product Services"]
    ProductBServices                                        [class="access" shape=box label="Product Services"]
    ProductCServices                                        [class="access" shape=box label="Product Services"]

    ProfileManagement                                       [class="resource" label="Profiles\n\nUsers,\nTenants,\nSystems, Services"]
    RightsManagement                                        [class="resource" label="Rights\n\nLicensing,\nEntitlements,\nSubscriptions"]
    AuthorizationManagement                                 [class="resource" label="Authorization\n\nFederated Policy\nDefinitions,\nDecisions,\nDistribution"]

    Visualizations                                          [class="resource" label="Visualizations\n\nPublication Sites,\nDashboards,\nWidgets"]
    DataProviders                                           [class="resource" label="Data Providers\n\nIndustry Specific,\nProduct Specific\nEndpoints\nand Schemas"]
    Workflows                                               [class="resource" label="Workflows\n\nDefinitions,\nStatuses,\nHistory"]
    Scheduling                                              [class="resource" label="Scheduling\n\nWorkflow\nTimeout,\nRetries"]

    TrimbleCloud                                            [class="utility" width=7 height=.4 label="Trimble Cloud Platform"]

    subgraph cluster_apps {
        label=""
        margin=25

        Apps                                                [shape=box class="client" width=14 height=.4 label="Web Applications"]
        TID                                                 [shape=box class="utility" width=1.4 height=.7 label="Authentication\n(TID)"]

        Workcenters                                         [shape=box class="client" width=1.4 height=.7 label="Daily\n(Workcenter)"]
        LeadGen                                             [shape=box class="client" width=1.4 height=.7 label="Funnel\n(Atrium)"]
        HelpAndSupport                                      [shape=box class="client" width=1.4 height=.7 label="Account\n(My Trimble)"]
        CLI                                                 [shape=box class="client" width=1.4 height=.7 label="System\nAdmin"]
        ProductA                                            [shape=box class="client" width=1.4 height=.7 label="Latest\nProducts"]
        ProductB                                            [shape=box class="client" width=1.4 height=.7 label="Migrating\nProducts"]
        ProductC                                            [shape=box class="client" width=1.4 height=.7 label="Legacy\nProducts"]

        Apps -> Workcenters                                 [arrowhead=none]
        Apps -> LeadGen                                     [arrowhead=none]
        Apps -> HelpAndSupport                              [arrowhead=none]
        Apps -> CLI                                         [style=invis]

        Apps -> ProductA                                    [arrowhead=none]
        Apps -> ProductB                                    [arrowhead=none]
        Apps -> ProductC                                    [arrowhead=none]

       { rank=same; Apps; TID; }
    }

    Top -> PersonaA                                         [style=invis]

    Apps -> TID
    TID -> TrimbleCloud

    PersonaA -> Apps
    PersonaB -> Apps
    PersonaC -> Apps
    PersonaD -> Apps
    PersonaE -> Apps
    PersonaF -> Apps

    Workcenters -> TrimbleAppsClient
    LeadGen -> TrimbleAppsClient
    HelpAndSupport -> TrimbleAppsClient
    CLI -> TrimbleAppsClient

    TrimbleAppsClient -> TrimbleApps

    ProductAServices -> TrimbleAppsClient
    ProductA -> ProductAServices

    ProductB -> ProductBServices
    ProductC -> ProductCServices
    ProductBServices -> TrimbleAppsClient             [style=dashed]
    ProductBServices -> TrimbleCloud                        [style=dashed]

    TrimbleApps -> Visualizations                     [minlen=2]
    TrimbleApps -> DataProviders                      [minlen=2]
    TrimbleApps -> Workflows                          [minlen=2]
    TrimbleApps -> Scheduling                         [minlen=2]

    TrimbleApps -> TrimbleCloud

    TrimbleCloud -> ProfileManagement
    TrimbleCloud -> RightsManagement
    TrimbleCloud -> AuthorizationManagement

    { rank=same; TrimbleApps; }
    { rank=same; ProductAServices; ProductBServices; ProductCServices; }
}

The Trimble Apps Toolkit

The Trimble Apps Toolkit provides ready-made, reusable components and packages that can be leveraged for rapid design, development and delivery of applications.

View Source
Copy To Clipboard
digraph x {
    graph [splines=ortho, nodesep=1]
    label="Trimble Apps Toolkit (Web)"
    node                                                    [shape=box width=1.5]
    pad=.4
    labelloc=t
    nodesep=.7
    ranksep=.7

    Top                                                     [shape=none width=0 height=0 label=""]

    ReactApp                                                [class="client" width=6.5 label="React Application"]
    AngularApp                                              [class="client" width=6.5 label="Angular Application"]

    ModusReact                                              [class="client-package" label="Modus React\nBootstrap"]
    ModusAngular                                            [class="client-package" label="Modus\nAngular"]
    MWCA                                                    [class="client-package" label="Modus Web\nComponents"]
    MWCB                                                    [class="client-package" label="Modus Web\nComponents"]

    TrimbleAppsPlatformClientA                              [class="access" label="Trimble Apps\nPlatform Client"]
    TrimbleAppsPlatformClientB                              [class="access" label="Trimble Apps\nPlatform Client"]

    TrimbleAppsPlatformA                                    [class="resource" shape=cylinder label="Trimble Apps\nPlatform"]
    TrimbleAppsPlatformB                                    [class="resource" shape=cylinder label="Trimble Apps\nPlatform"]

    AuthNA                                                  [class="utility" label="Authentication\nProxy"]
    AuthNB                                                  [class="utility" label="Authentication\nProxy"]

    TIDA                                                    [class="resource" shape=cylinder label="Trimble ID\nAuthentication"]
    TIDB                                                    [class="resource" shape=cylinder label="Trimble ID\nAuthentication"]

    { rank=same; ReactApp; AngularApp; }
    { rank=same; MWCA; MWCB; }
    { rank=same; TrimbleAppsPlatformClientA; TrimbleAppsPlatformClientB; AuthNA; AuthNB; }

    Top -> ReactApp                                         [style=invis]
    Top -> AngularApp                                       [style=invis]

    ModusReact -> MWCA
    ModusAngular -> MWCB

    ReactApp -> ModusReact
    AngularApp -> ModusAngular
    ReactApp -> TrimbleAppsPlatformClientA
    AngularApp -> TrimbleAppsPlatformClientB
    ReactApp -> AuthNA                                      [style=invis]
    AngularApp -> AuthNB                                    [style=invis]

    TrimbleAppsPlatformClientA -> AuthNA
    TrimbleAppsPlatformClientA -> TrimbleAppsPlatformA
    TrimbleAppsPlatformClientB -> AuthNB
    TrimbleAppsPlatformClientB -> TrimbleAppsPlatformB

    AuthNA -> TIDA
    AuthNB -> TIDB

}

The Trimble Apps Toolkit currently consists of the following elements:

Modus Web Components

Authentication Proxy

Modus React Bootstrap

Example React Application

Federated Authorization

Static Architecture

Services

The Trimble Workcenter app is a web application that takes full advantage of the capabilities of The Trimble Workcenter and The Trimble Apps Toolkit.
The Atrium App is a web application for marketing and lead generation. It includes an integration with the Trimble Workcenter for displaying a single Workcenter dashboard.
The System Admin CLI is a command line interface for administration and configuration of the Trimble Workcenter.
Various systems will be integrated into the Trimble Workcenter. For example, some external systems will be registered as Data Providers with configured Data Endpoints. The data from these Data Endpoints will be retrieved by the Trimble Workcenter to populate Data Sources that can supply Visual Components with data for them to render.
In its function as a client, the Schedule Subsystem will call into the Trimble Workcenter to trigger workflow continuations as scheduled.

The Gateway provides hosting for system services. In its current form, HTTP and AMQP transports are configured and hosted within the Gateway process itself. The Gateway also currently hosts gRPC services for all Managers, Engines and Accessors, using domain sockets as a transport. This deployment topology is subject to change and extension as the needs of the Trimble Workcenter evolve and expand.

The Configuration Manager defines operations for general system configuration such as Tenancy, Accounts, Users and Navigation.
The Customization Manager defines operations for customizing Visual Components and Data Providers. Visual Components include Widget Templates, Widgets, Dashboards, and Publication Sites. Data Providers are remote APIs that provide data from particular Data Provider Endpoints. The data provided by these endpoints can be retrieved, transformed and cached to make it available for use by specific Visual Components.

Use Cases

Ingest Tenant

Call Chains Diagram - Ingest Tenant

View Source
Copy To Clipboard
digraph d {
    label="Ingest Tenant"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    VP                                          [shape=cylinder class="client-system" label="Viewpoint\nPlatform"]
    K                                           [class="utility" label="Distributed\nCommit Log"]
    G                                           [class="utility" label="Gateway"]
    Configuration                               [class="manager" label="Configuration\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    ProfileAccess                               [class="access" label="Profile\nAccess"]
    ProfileStore                                [shape=cylinder class="resource" label="Profile\nStore"]

    Top -> K                                    [style=invis]
    VP -> K
    K -> G                                      [dir=back class="async"]
    G -> Configuration
    Configuration -> ProfileAccess
    ProfileAccess -> ProfileStore
    Configuration -> Outbound                   [class="async" label="OnTenantIngested"]

    { rank=same; VP; K; }
    { rank=same; Configuration; Outbound; }
}

Configure Publication Site

Call Chains Diagram - Configure Publication Site

View Source
Copy To Clipboard
digraph d {
    label="Configure Publication Site"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    VisualAccess                                [class="access" label="Visualization\nAccess"]
    VisualStore                                 [shape=cylinder class="resource" label="Visualization\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> VisualAccess
    VisualAccess -> VisualStore
    // Customization -> Outbound                   [class="async" label="OnPublicationSiteConfigured"]

    { rank=same; Customization; Outbound; }
}

Register Widget Template

Call Chains Diagram - Register Widget Template

View Source
Copy To Clipboard
digraph d {
    label="Register Widget Template"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    VisualAccess                                [class="access" label="Visualization\nAccess"]
    VisualStore                                 [shape=cylinder class="resource" label="Visualization\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> VisualAccess
    VisualAccess -> VisualStore
    // Customization -> Outbound                   [class="async" label="OnWidgetTemplateRegistered"]

    { rank=same; Customization; Outbound; }
}

Register Local Data Source

Call Chains Diagram - Register Local Data Source

View Source
Copy To Clipboard
digraph d {
    label="Register Local Data Source"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccsssA                                     [class="access" label="Data Provider\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Data Provider\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccsssA
    AccsssA -> StoreA
    // Customization -> Outbound                   [class="async" label="OnDataSourceRegistered"]

    { rank=same; Customization; Outbound; }
}

Configure Widget

Call Chains Diagram - Configure Widget

View Source
Copy To Clipboard
digraph d {
    label="Configure Widget"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccsssA                                     [class="access" label="Data Provider\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Data Provider\nStore"]
    AccsssB                                     [class="access" label="Visualization\nAccess"]
    StoreB                                      [shape=cylinder class="resource" label="Visualization\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccsssA
    Customization -> AccsssB
    AccsssA -> StoreA
    AccsssB -> StoreB
    Customization -> Outbound                   [class="async" label="OnWidgetConfigured"]

    { rank=same; Customization; Outbound; }
}

Register Remote Data Provider

Call Chains Diagram - Register Remote Data Provider

View Source
Copy To Clipboard
digraph d {
    label="Register Remote Data Provider"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccsssA                                     [class="access" label="Data Provider\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Integrated\nSubsystem"]
    AccsssB                                     [class="access" label="Data Provider\nAccess"]
    StoreB                                      [shape=cylinder class="resource" label="Data Provider\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccsssA
    Customization -> AccsssB
    AccsssA -> StoreA
    AccsssB -> StoreB
    // Customization -> Outbound                   [class="async" label="OnDataProviderRegistered"]

    { rank=same; Customization; Outbound; }
}

Configure Remote Data Source

Call Chains Diagram - Configure Remote Data Source

View Source
Copy To Clipboard
digraph d {
    label="Register Remote Data Source"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccsssA                                     [class="access" label="Data Provider\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Integrated\nSubsystem"]
    AccsssB                                     [class="access" label="Data Provider\nAccess"]
    StoreB                                      [shape=cylinder class="resource" label="Data Provider\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccsssA
    Customization -> AccsssB
    AccsssA -> StoreA
    AccsssB -> StoreB
    // Customization -> Outbound                   [class="async" label="OnDataSourceRegistered"]

    { rank=same; Customization; Outbound; }
}

Define Dashboard

Call Chains Diagram - Define Dashboard

View Source
Copy To Clipboard
digraph d {
    label="Define Dashboard"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccessA                                     [class="access" label="Visualization\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Visualization\nStore"]
    AccessB                                     [class="access" label="Data Provider\nAccess"]
    StoreB                                      [shape=cylinder class="resource" label="Data Provider\nStore"]
    AccessC                                     [class="access" label="Workflow\nAccess"]
    StoreC                                      [shape=cylinder class="resource" label="Workflow\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccessA
    AccessA -> StoreA

    AccessB -> StoreB
    AccessC -> StoreC
    Customization -> AccessB
    Customization -> AccessC

    { rank=same; Customization; Outbound; }
}

Publish Dashboard

Call Chains Diagram - Publish Dashboard

View Source
Copy To Clipboard
digraph d {
    label="Publish Dashboard"
    labelloc=t
    pad=.4
    node                                        [shape=box width=1.4 height=.6]

    Top                                         [shape=none height=0 width=0 label=""]
    CLI                                         [class="client" label="CLI"]
    G                                           [class="utility" label="Gateway"]
    Customization                               [class="manager" label="Customization\nManager"]
    Outbound                                    [shape=none width=0 height=0 label=""]
    AccessA                                     [class="access" label="Visualization\nAccess"]
    StoreA                                      [shape=cylinder class="resource" label="Visualization\nStore"]
    AccessC                                     [class="access" label="Workflow\nAccess"]
    StoreC                                      [shape=cylinder class="resource" label="Workflow\nStore"]

    Top -> CLI                                  [style=invis]
    CLI -> G                                    [class="sync"]
    G -> Customization
    Customization -> AccessA
    AccessA -> StoreA
    AccessC -> StoreC
    Customization -> AccessC
    Customization -> Outbound                   [class="async" label="OnDashboardPublished"]

    { rank=same; Customization; Outbound; }
}

Export Dashboard Definition

Import Dashboard Definition