From 360426733ad3dd3cce41b1ca5024c4434e8215a3 Mon Sep 17 00:00:00 2001 From: Allan Bowe <> Date: Tue, 26 May 2020 09:43:42 +0200 Subject: [PATCH] adding dcu_flow image and updating stp instance docs --- docs/dc-overview.md | 18 ++ docs/dci-stpinstance.md | 44 ++-- docs/img/dcu_flow.png | Bin 0 -> 13110 bytes docs/licences.md | 502 ++++++++++++++++++++-------------------- 4 files changed, 291 insertions(+), 273 deletions(-) create mode 100644 docs/img/dcu_flow.png diff --git a/docs/dc-overview.md b/docs/dc-overview.md index a3373f1..d2177a5 100644 --- a/docs/dc-overview.md +++ b/docs/dc-overview.md @@ -21,6 +21,24 @@ There are 5 roles identified for users of the Data Controller: 4. *Auditor*. An auditor has the ability to review the [history](dc-userguide.md#history) of changes to a particular table. 5. *Administrator*. An administrator has the ability to add new [tables](dcc-tables.md) to the Data Controller, and to configure the security settings (at metadata group level) as required. +## What is a submission? + +The submission is the data that has been staged for approval. Note - submissions are never applied automatically! They must always be approved by 1 or more approvers first. The process of submission varies according to the type of submit. + +### Web Submission +When using the Web editor, a frontend check is made against the subset of data that was filtered for editing to see which rows are new / modified / marked deleted. Only those changed rows (from the extract) are submitted to the staging area. + +### Excel Submission +When importing an excel file, all rows are loaded into the web page. You have an option to edit those records. If you edit them, the original excel is discarded, and only changed rows are submitted (it becomes a web submission). If you hit SUBMIT immediately, then ALL rows are staged, and a copy of the excel file is uploaded for audit purposes. + +### CSV submission +A CSV upload bypasses the part where the records are loaded into the web page, and ALL rows are sent to the staging area directly. This makes it suitable for larger uploads. + +## Edit Stage Approve Workflow +Up to 500 rows can be edited (in the web editor) at one time. These edits are submitted to a staging area. After one or more approvals (acceptances) the changes are applied to the source table. + +![screenshot](img/dcu_flow.png) + ## Use Case Diagram There are five roles (Viewer, Editor, Approver, Auditor, Administrator) which correspond to 5 primary use cases (View Table, Edit Table, Approve Change, View Change History, Configure Table) diff --git a/docs/dci-stpinstance.md b/docs/dci-stpinstance.md index a75aee8..1a44079 100644 --- a/docs/dci-stpinstance.md +++ b/docs/dci-stpinstance.md @@ -8,8 +8,31 @@ Under these circumstances, it is recommended to create a dedicated STP server in !!! note Data Controller only updates data (add, delete, modify records). It does not need the ability to create new (permanent) tables, or modify the structure of existing tables. +## Set up DC account -## STP Server Configuration +It is recommended to have a user for each environment in which DC is deployed, eg: + +* dcsrv_dev +* dcsrv_test +* dcsrv_prod + +After these OS users are created, log into SMC in relevant environment and open User Manager. Adjust as follows: + +* Open SAS General Servers group +* Select Accounts tab +* Add the dcsrv_[ENV] user in DefaultAuth domain + +## STP Server Configuration - 9.4 + +Open the SAS Deployment Wizard and deploy a new Application Context Server from the panel windows. +Be sure to use the relevant dcsrv_[env] user as configured above. + +Now head to the [security](#security) section. + + +## STP Server Configuration - 9.3 + +As the wizard does not exist in 9.3 it is necessary to copy the folder structure. ### Clone existing directory @@ -40,25 +63,6 @@ DataControllerSTPsvr * Sasuser folder – EMPTY CONTENTS (remove all files). They aren’t relevant in the data controller context. -### Set up DC account - -It is recommended to have a user for each environment in which DC is deployed, eg: - -* dcsrv_dev -* dcsrv_test -* dcsrv_prod - -Log into SMC in relevant environment and open User Manager. Adjust as follows: - -* Open SAS General Servers group -* Select Accounts tab -* Add the dcsrv_[ENV] user in DefaultAuth domain - -#### Adding new users (Windows) -Open Windows Server Manager and adjust as follows: - -* Select / Configuration / Local Users and Groups / Groups -* Select Administrators group and Add the dcsrv_[Env] user ### Add Server diff --git a/docs/img/dcu_flow.png b/docs/img/dcu_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7113671bf2ad6f2b1cacbbe5647929e42d763b GIT binary patch literal 13110 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