Trimble Workcenter
On This Page
- Universal Capabilities versus Broad Capabilities
- Static Architecture
- Services
- Use Cases
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.
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; } }
- Trimble Workcenter GitHub Repository
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.
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
Use Cases
Ingest Tenant
Call Chains Diagram - Ingest Tenant
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
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
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
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
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
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
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
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
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; } }