Skip to content

Built on SASjs: Data Controller

Data Controller for SAS is the framework's proof: a commercial application, in daily use on SAS estates, built with every part of SASjs and deployed by the CLI to whichever platform the customer has.

It exists because editing data in a SAS table is a governance problem, not a technical one. The business needs to correct a value, add a row, approve a change - and the SAS team needs the audit trail, the validation and the approval workflow to be the same in every environment. Data Controller is that interface: an Angular application in the browser, 230 SAS services behind it, and a table-level policy of who may change what.

The shape of it

Taken from the project's own configuration:

Services 230 .sas files in seven folders - admin, approvers, auditors, editors, hooks, public, validations
Macros 55, in sasjs/macros
Front end Angular, on @sasjs/adapter - the same library the seed apps use
Targets 13 in one sasjsconfig.json: SAS 9, five Viya environments, seven SASjs Server
Deployment sasjs cbd -t <target> - compile, build, deploy, per environment

Thirteen targets is the point. A SAS 9 customer, a Viya customer and the CI server running tests all get the same code from the same repository, compiled the same way, with the differences confined to the target: appLoc, the server type, the context, the credentials.

What it demonstrates

  • The compile step does the heavy lifting. A deployment carries its services and the macros they use, so a customer upgrade does not mean "also deploy the macro library, in the right order, to the right folders".
  • One adapter, three platforms. The Angular client calls sasjs.request() and does not know whether the answer came from a stored process, a Viya job or SASjs Server.
  • Permissions are the platform's. The folder structure - editors, approvers, auditors - maps onto SAS 9 metadata permissions and Viya folder permissions, so the application's authority model is the estate's, not a second one invented in JavaScript.
  • The framework is usable at application scale. 230 services and 55 macros is not a demo; it is what an application with a real permission model, an audit trail and a validation framework looks like.

Where the same patterns are documented

Everything Data Controller relies on is in this site's guides - nothing in it is a private extension of the framework:

  • Services - the unit of backend work, and how it is compiled and deployed.
  • Security - identities, permissions and the trust boundaries the application inherits.
  • Testing - the harness the services are tested with.
  • Deploying to Viya and SAS 9 - what a target does on each.

Licensing and availability

Data Controller is a commercial product with a free non-commercial licence; SASjs itself, which it is built on, is MIT licensed. See datacontroller.io for the product, and Support for what the team behind both offers commercially.