Compare commits

...
4 Commits
Author SHA1 Message Date
allan 44bc7f7fea Merge pull request 'fix: optimisation, renamed values for DDTYPE to save space' (#285) from ddtype_rename into additional-validations-regex
Build / Build-and-ng-test (pull_request) Successful in 5m23s
Lighthouse Checks / lighthouse (pull_request) Successful in 21m50s
Build / Build-and-test-development (pull_request) Successful in 20m35s
Reviewed-on: #285
2026-07-25 18:17:22 +00:00
4gl f60bcef583 fix: licensecheker
Build / Build-and-ng-test (pull_request) Successful in 5m0s
Lighthouse Checks / lighthouse (pull_request) Successful in 21m7s
Build / Build-and-test-development (pull_request) Successful in 19m40s
2026-07-25 17:41:39 +01:00
4gl e7abb0a08a chore: down to 0 vulns
Build / Build-and-ng-test (pull_request) Failing after 1m57s
Build / Build-and-test-development (pull_request) Skipped
Lighthouse Checks / lighthouse (pull_request) Failing after 2m12s
2026-07-25 17:29:00 +01:00
4gl cfb60e5e4b fix: optimisation, renamed values for DDTYPE to save space
Build / Build-and-ng-test (pull_request) Failing after 1m45s
Build / Build-and-test-development (pull_request) Skipped
Lighthouse Checks / lighthouse (pull_request) Successful in 20m4s
2026-07-25 16:18:42 +01:00
16 changed files with 670 additions and 537 deletions
+19
View File
@@ -0,0 +1,19 @@
# Dependency Updates Checklist
Whenever any `package.json` (root, `client/`, or `sas/`) or lockfile is modified, run the same checks CI runs before pushing:
1. **npm audit** (must be clean for prod deps):
```bash
npm audit --omit=dev # in repo root
cd sas && npm audit --omit=dev
cd ../client && npm audit --omit=dev
```
Fix with `npm audit fix`, targeted `overrides` in `package.json`, or version bumps — never `npm audit fix --force` blindly, as it can introduce breaking changes.
2. **License checker** (client only):
```bash
cd client && npm run license-checker
```
If a new dependency fails, either add its SPDX id to the `onlyAllow` list in `client/licenseChecker.js` (if the license is acceptable, e.g. permissive ones like `BlueOak-1.0.0`) or add the specific package to `excludePackages` with justification. Data Controller ships on-prem, so only OSI-approved permissive licenses are acceptable for production dependencies.
Both checks run in `.gitea/workflows/build.yaml` (`Check audit` and `Licence checker` steps) and will fail the build if skipped locally.
+1 -1
View File
@@ -8,7 +8,7 @@ const check = (cwd) => {
start: cwd,
excludePrivatePackages: true,
onlyAllow:
'AFLv2.1;Apache 2.0;Apache-2.0;Apache*;Artistic-2.0;0BSD;BSD*;BSD-2-Clause;BSD-3-Clause;CC0-1.0;CC-BY-3.0;CC-BY-4.0;ISC;MIT;MPL-2.0;ODC-By-1.0;Python-2.0;Unlicense;',
'AFLv2.1;Apache 2.0;Apache-2.0;Apache*;Artistic-2.0;BlueOak-1.0.0;0BSD;BSD*;BSD-2-Clause;BSD-3-Clause;CC0-1.0;CC-BY-3.0;CC-BY-4.0;ISC;MIT;MPL-2.0;ODC-By-1.0;Python-2.0;Unlicense;',
excludePackages:
'@cds/city@1.1.0;@handsontable/angular-wrapper@16.0.1;@handsontable/angular-wrapper@17.1.0;@handsontable/angular-wrapper@18.0.0;handsontable@^16.0.1;handsontable@16.2.0;handsontable@17.1.0;handsontable@18.0.0;hyperformula@2.7.1;hyperformula@3.0.0;hyperformula@3.1.0;hyperformula@3.2.0;hyperformula@3.3.0;jackspeak@3.4.3;path-scurry@1.11.1;package-json-from-dist@1.0.1;buffers@0.1.1'
},
+494 -304
View File
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -147,6 +147,10 @@
"overrides": {
"ajv": "8.18.0",
"uuid": "11.1.1",
"lighthouse": "13.4.0"
"lighthouse": "13.4.0",
"exceljs": {
"archiver": "^8.0.0",
"unzipper": "^0.12.5"
}
}
}
+2 -1
View File
@@ -14,7 +14,8 @@ export interface ColumnDetail {
LENGTH: number
NAME: string
TYPE: string
VARNUM: number
// No longer sent by viewdata.sas — optional for legacy responses.
VARNUM?: number
}
export interface Approver {
@@ -55,8 +55,8 @@ describe('VaFilterService', () => {
'SOME_DATETIME'
]
const cols = [
{ NAME: 'SOME_CHAR', DDTYPE: 'CHARACTER' },
{ NAME: 'SOME_NUM', DDTYPE: 'NUMERIC' },
{ NAME: 'SOME_CHAR', DDTYPE: 'C' },
{ NAME: 'SOME_NUM', DDTYPE: 'N' },
{ NAME: 'SOME_TIME', DDTYPE: 'TIME' },
{ NAME: 'SOME_DATE', DDTYPE: 'DATE' },
{ NAME: 'SOME_DATETIME', DDTYPE: 'DATETIME' }
+8 -2
View File
@@ -163,14 +163,20 @@ export class VaFilterService {
/**
* SAS data-type kind of a column spec. DDTYPE carries
* TIME/DATE/DATETIME/NUMERIC/CHARACTER; checked DATETIME-before-DATE (substring).
* TIME/DATE/DATETIME in full, with C/N for CHARACTER/NUMERIC (legacy
* responses may still carry the full strings); checked DATETIME-before-DATE
* (substring).
*/
private columnKind(col: any): VaColumnKind {
const ddtype = (col?.DDTYPE ?? '').toString().toUpperCase()
if (ddtype.includes('DATETIME')) return 'datetime'
if (ddtype.includes('DATE')) return 'date'
if (ddtype.includes('TIME')) return 'time'
if (ddtype.includes('NUMERIC') || (col?.TYPE ?? '') === 'num') {
if (
ddtype === 'N' ||
ddtype.includes('NUMERIC') ||
(col?.TYPE ?? '') === 'num'
) {
return 'numeric'
}
return 'char'
@@ -1,6 +1,8 @@
export interface Col {
NAME: string
VARNUM: number
// No longer sent by getdata.sas (dropped to trim the COLS payload) —
// column order in the array is authoritative. Optional for legacy responses.
VARNUM?: number
LABEL: string
FMTNAME: string
DDTYPE: string
@@ -743,7 +743,7 @@ const makeCol = (name: string, varnum: number): Col =>
VARNUM: varnum,
LABEL: name,
FMTNAME: '',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
TYPE: '',
CLS_RULE: 'READ',
MEMLABEL: '',
@@ -865,7 +865,7 @@ const example_dqRules: any = [
const example_cols = [
{
CLS_RULE: 'READ',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
DESC: 'dropdown_desc',
TYPE: '',
FMTNAME: '',
@@ -878,7 +878,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'NUMERIC',
DDTYPE: 'N',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -891,7 +891,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'NUMERIC',
DDTYPE: 'N',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -904,7 +904,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -917,7 +917,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -930,7 +930,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -943,7 +943,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'CHARACTER',
DDTYPE: 'C',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -995,7 +995,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'NUMERIC',
DDTYPE: 'N',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -1008,7 +1008,7 @@ const example_cols = [
},
{
CLS_RULE: 'READ',
DDTYPE: 'NUMERIC',
DDTYPE: 'N',
DESC: '',
TYPE: '',
FMTNAME: '',
@@ -44,10 +44,9 @@ const data = {
cols: [
{
NAME: "PRIMARY_KEY_FIELD",
VARNUM: 1,
LABEL: "PRIMARY_KEY_FIELD",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -55,10 +54,9 @@ const data = {
},
{
NAME: "SOME_BESTNUM",
VARNUM: 9,
LABEL: "SOME_BESTNUM",
FMTNAME: "BEST",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -66,10 +64,9 @@ const data = {
},
{
NAME: "SOME_CHAR",
VARNUM: 2,
LABEL: "SOME_CHAR",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -77,7 +74,6 @@ const data = {
},
{
NAME: "SOME_DATE",
VARNUM: 5,
LABEL: "SOME_DATE",
FMTNAME: "DATE",
DDTYPE: "DATE",
@@ -88,7 +84,6 @@ const data = {
},
{
NAME: "SOME_DATETIME",
VARNUM: 6,
LABEL: "SOME_DATETIME",
FMTNAME: "DATETIME",
DDTYPE: "DATETIME",
@@ -99,10 +94,9 @@ const data = {
},
{
NAME: "SOME_DROPDOWN",
VARNUM: 3,
LABEL: "SOME_DROPDOWN",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -110,10 +104,9 @@ const data = {
},
{
NAME: "SOME_HARDSELECT",
VARNUM: 10,
LABEL: "SOME_HARDSELECT",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -121,10 +114,9 @@ const data = {
},
{
NAME: "SOME_NUM",
VARNUM: 4,
LABEL: "SOME_NUM",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -132,10 +124,9 @@ const data = {
},
{
NAME: "SOME_SHORTNUM",
VARNUM: 8,
LABEL: "SOME_SHORTNUM",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -143,7 +134,6 @@ const data = {
},
{
NAME: "SOME_TIME",
VARNUM: 7,
LABEL: "SOME_TIME",
FMTNAME: "TIME",
DDTYPE: "TIME",
@@ -154,10 +144,9 @@ const data = {
},
{
NAME: "READONLY_COL",
VARNUM: 11,
LABEL: "READONLY_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Read-only: default value inserted on add-row, not editable",
@@ -165,10 +154,9 @@ const data = {
},
{
NAME: "HIDDEN_COL",
VARNUM: 12,
LABEL: "HIDDEN_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Hidden: invisible in grid but submitted; default on add-row",
@@ -176,10 +164,9 @@ const data = {
},
{
NAME: "ROUND_COL",
VARNUM: 13,
LABEL: "ROUND_COL",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Round: edited values rounded Excel-style to 2 decimals",
@@ -187,10 +174,9 @@ const data = {
},
{
NAME: "NUMFMT_COL",
VARNUM: 14,
LABEL: "NUMFMT_COL",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Number format: displayed as EUR currency (value unchanged)",
@@ -9,37 +9,33 @@ _webout=`{"SYSDATE" : "26SEP22"
{
"NAME": "PRIMARY_KEY_FIELD",
"LENGTH": 8,
"VARNUM": 1,
"LABEL": "PRIMARY_KEY_FIELD",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_BESTNUM",
"LENGTH": 8,
"VARNUM": 9,
"LABEL": "SOME_BESTNUM",
"FMTNAME": "BEST",
"FORMAT": "BEST.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_CHAR",
"LENGTH": 32767,
"VARNUM": 2,
"LABEL": "SOME_CHAR",
"FMTNAME": "",
"FORMAT": "$32767.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "SOME_DATE",
"LENGTH": 8,
"VARNUM": 5,
"LABEL": "SOME_DATE",
"FMTNAME": "DATE",
"FORMAT": "DATE9.",
@@ -49,7 +45,6 @@ _webout=`{"SYSDATE" : "26SEP22"
{
"NAME": "SOME_DATETIME",
"LENGTH": 8,
"VARNUM": 6,
"LABEL": "SOME_DATETIME",
"FMTNAME": "DATETIME",
"FORMAT": "DATETIME19.",
@@ -59,37 +54,33 @@ _webout=`{"SYSDATE" : "26SEP22"
{
"NAME": "SOME_DROPDOWN",
"LENGTH": 128,
"VARNUM": 3,
"LABEL": "SOME_DROPDOWN",
"FMTNAME": "",
"FORMAT": "$128.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "SOME_NUM",
"LENGTH": 8,
"VARNUM": 4,
"LABEL": "SOME_NUM",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_SHORTNUM",
"LENGTH": 4,
"VARNUM": 8,
"LABEL": "SOME_SHORTNUM",
"FMTNAME": "",
"FORMAT": "4.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_TIME",
"LENGTH": 8,
"VARNUM": 7,
"LABEL": "SOME_TIME",
"FMTNAME": "TIME",
"FORMAT": "TIME8.",
+45 -95
View File
@@ -68,10 +68,9 @@ let webouts = {
cols: [
{
NAME: "PRIMARY_KEY_FIELD",
VARNUM: 1,
LABEL: "PRIMARY_KEY_FIELD",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -80,10 +79,9 @@ let webouts = {
},
{
NAME: "SOME_BESTNUM",
VARNUM: 9,
LABEL: "SOME_BESTNUM",
FMTNAME: "BEST",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -92,10 +90,9 @@ let webouts = {
},
{
NAME: "SOME_CHAR",
VARNUM: 2,
LABEL: "Some Character Column",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -104,7 +101,6 @@ let webouts = {
},
{
NAME: "SOME_DATE",
VARNUM: 5,
LABEL: "Some Date",
FMTNAME: "DATE",
DDTYPE: "DATE",
@@ -116,7 +112,6 @@ let webouts = {
},
{
NAME: "SOME_DATETIME",
VARNUM: 6,
LABEL: "SOME_DATETIME",
FMTNAME: "DATETIME",
DDTYPE: "DATETIME",
@@ -128,10 +123,9 @@ let webouts = {
},
{
NAME: "SOME_DROPDOWN",
VARNUM: 3,
LABEL: "SOME_DROPDOWN",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -140,10 +134,9 @@ let webouts = {
},
{
NAME: "SOME_HARDSELECT",
VARNUM: 10,
LABEL: "SOME_HARDSELECT",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -152,10 +145,9 @@ let webouts = {
},
{
NAME: "SOME_NUM",
VARNUM: 4,
LABEL: "",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -164,10 +156,9 @@ let webouts = {
},
{
NAME: "SOME_SHORTNUM",
VARNUM: 8,
LABEL: "SOME_SHORTNUM",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -176,7 +167,6 @@ let webouts = {
},
{
NAME: "SOME_TIME",
VARNUM: 7,
LABEL: "SOME_TIME",
FMTNAME: "TIME",
DDTYPE: "TIME",
@@ -188,10 +178,9 @@ let webouts = {
},
{
NAME: "READONLY_COL",
VARNUM: 11,
LABEL: "READONLY_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Read-only: default value inserted on add-row, not editable",
@@ -200,10 +189,9 @@ let webouts = {
},
{
NAME: "HIDDEN_COL",
VARNUM: 12,
LABEL: "HIDDEN_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Hidden: invisible in grid but submitted; default on add-row",
@@ -212,10 +200,9 @@ let webouts = {
},
{
NAME: "ROUND_COL",
VARNUM: 13,
LABEL: "ROUND_COL",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Round: edited values rounded Excel-style to 2 decimals",
@@ -224,10 +211,9 @@ let webouts = {
},
{
NAME: "NUMFMT_COL",
VARNUM: 14,
LABEL: "NUMFMT_COL",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "Number format: displayed as EUR currency (value unchanged)",
@@ -236,10 +222,9 @@ let webouts = {
},
{
NAME: "REGEX_HARD_COL",
VARNUM: 15,
LABEL: "REGEX_HARD_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "HARDREGEX: must be a valid email address or submission is blocked",
@@ -248,10 +233,9 @@ let webouts = {
},
{
NAME: "REGEX_SOFT_COL",
VARNUM: 16,
LABEL: "REGEX_SOFT_COL",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "SOFTREGEX: should be a valid UK postcode, shown as a yellow warning if not, but can still submit",
@@ -404,10 +388,9 @@ let webouts = {
cols: [
{
NAME: "DD_LONGDESC",
VARNUM: 6,
LABEL: "DD_LONGDESC",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -416,10 +399,9 @@ let webouts = {
},
{
NAME: "DD_OWNER",
VARNUM: 7,
LABEL: "DD_OWNER",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -428,10 +410,9 @@ let webouts = {
},
{
NAME: "DD_RESPONSIBLE",
VARNUM: 8,
LABEL: "DD_RESPONSIBLE",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -440,10 +421,9 @@ let webouts = {
},
{
NAME: "DD_SENSITIVITY",
VARNUM: 9,
LABEL: "DD_SENSITIVITY",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -452,10 +432,9 @@ let webouts = {
},
{
NAME: "DD_SHORTDESC",
VARNUM: 5,
LABEL: "DD_SHORTDESC",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -464,10 +443,9 @@ let webouts = {
},
{
NAME: "DD_SOURCE",
VARNUM: 4,
LABEL: "DD_SOURCE",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -476,10 +454,9 @@ let webouts = {
},
{
NAME: "DD_TYPE",
VARNUM: 3,
LABEL: "DD_TYPE",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -488,10 +465,9 @@ let webouts = {
},
{
NAME: "TX_FROM",
VARNUM: 1,
LABEL: "TX_FROM",
FMTNAME: "datetime",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -499,10 +475,9 @@ let webouts = {
},
{
NAME: "TX_TO",
VARNUM: 2,
LABEL: "TX_TO",
FMTNAME: "datetime",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -682,10 +657,9 @@ let webouts = {
cols: [
{
NAME: "LAST_SEEN_DT",
VARNUM: 2,
LABEL: "LAST_SEEN_DT",
FMTNAME: "date",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -693,10 +667,9 @@ let webouts = {
},
{
NAME: "REGISTERED_DT",
VARNUM: 3,
LABEL: "REGISTERED_DT",
FMTNAME: "date",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -704,10 +677,9 @@ let webouts = {
},
{
NAME: "USER_ID",
VARNUM: 1,
LABEL: "USER_ID",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -809,10 +781,9 @@ let webouts = {
cols: [
{
NAME: "AUDIT_LIBDS",
VARNUM: 22,
LABEL: "AUDIT_LIBDS",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -821,10 +792,9 @@ let webouts = {
},
{
NAME: "BUSKEY",
VARNUM: 7,
LABEL: "BUSKEY",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -833,10 +803,9 @@ let webouts = {
},
{
NAME: "CLOSE_VARS",
VARNUM: 13,
LABEL: "CLOSE_VARS",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -845,10 +814,9 @@ let webouts = {
},
{
NAME: "DSN",
VARNUM: 4,
LABEL: "DSN",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -857,10 +825,9 @@ let webouts = {
},
{
NAME: "LIBREF",
VARNUM: 3,
LABEL: "LIBREF",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -869,10 +836,9 @@ let webouts = {
},
{
NAME: "LOADTYPE",
VARNUM: 6,
LABEL: "LOADTYPE",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -881,10 +847,9 @@ let webouts = {
},
{
NAME: "NOTES",
VARNUM: 20,
LABEL: "NOTES",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -893,10 +858,9 @@ let webouts = {
},
{
NAME: "NUM_OF_APPROVALS_REQUIRED",
VARNUM: 5,
LABEL: "NUM_OF_APPROVALS_REQUIRED",
FMTNAME: "",
DDTYPE: "NUMERIC",
DDTYPE: "N",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -905,10 +869,9 @@ let webouts = {
},
{
NAME: "POST_APPROVE_HOOK",
VARNUM: 17,
LABEL: "POST_APPROVE_HOOK",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -917,10 +880,9 @@ let webouts = {
},
{
NAME: "POST_EDIT_HOOK",
VARNUM: 15,
LABEL: "POST_EDIT_HOOK",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -929,10 +891,9 @@ let webouts = {
},
{
NAME: "PRE_APPROVE_HOOK",
VARNUM: 16,
LABEL: "PRE_APPROVE_HOOK",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -941,10 +902,9 @@ let webouts = {
},
{
NAME: "PRE_EDIT_HOOK",
VARNUM: 14,
LABEL: "PRE_EDIT_HOOK",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -953,10 +913,9 @@ let webouts = {
},
{
NAME: "RK_UNDERLYING",
VARNUM: 21,
LABEL: "RK_UNDERLYING",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -965,10 +924,9 @@ let webouts = {
},
{
NAME: "SIGNOFF_COLS",
VARNUM: 18,
LABEL: "SIGNOFF_COLS",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -977,10 +935,9 @@ let webouts = {
},
{
NAME: "SIGNOFF_HOOK",
VARNUM: 19,
LABEL: "SIGNOFF_HOOK",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -989,7 +946,6 @@ let webouts = {
},
{
NAME: "TX_FROM",
VARNUM: 1,
LABEL: "TX_FROM",
FMTNAME: "DATETIME",
DDTYPE: "DATETIME",
@@ -1000,7 +956,6 @@ let webouts = {
},
{
NAME: "TX_TO",
VARNUM: 2,
LABEL: "TX_TO",
FMTNAME: "DATETIME",
DDTYPE: "DATETIME",
@@ -1011,10 +966,9 @@ let webouts = {
},
{
NAME: "VAR_BUSFROM",
VARNUM: 10,
LABEL: "VAR_BUSFROM",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -1023,10 +977,9 @@ let webouts = {
},
{
NAME: "VAR_BUSTO",
VARNUM: 11,
LABEL: "VAR_BUSTO",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -1035,10 +988,9 @@ let webouts = {
},
{
NAME: "VAR_PROCESSED",
VARNUM: 12,
LABEL: "VAR_PROCESSED",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -1047,10 +999,9 @@ let webouts = {
},
{
NAME: "VAR_TXFROM",
VARNUM: 8,
LABEL: "VAR_TXFROM",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
@@ -1059,10 +1010,9 @@ let webouts = {
},
{
NAME: "VAR_TXTO",
VARNUM: 9,
LABEL: "VAR_TXTO",
FMTNAME: "",
DDTYPE: "CHARACTER",
DDTYPE: "C",
CLS_RULE: "READ",
MEMLABEL: "",
DESC: "",
+35 -66
View File
@@ -31,37 +31,33 @@ let webouts = {
{
"NAME": "PRIMARY_KEY_FIELD",
"LENGTH": 8,
"VARNUM": 1,
"LABEL": "PRIMARY_KEY_FIELD",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_BESTNUM",
"LENGTH": 8,
"VARNUM": 9,
"LABEL": "SOME_BESTNUM",
"FMTNAME": "BEST",
"FORMAT": "BEST.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_CHAR",
"LENGTH": 32767,
"VARNUM": 2,
"LABEL": "Some Character Column",
"FMTNAME": "",
"FORMAT": "$32767.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "SOME_DATE",
"LENGTH": 8,
"VARNUM": 5,
"LABEL": "Some Date",
"FMTNAME": "DATE",
"FORMAT": "DATE9.",
@@ -71,7 +67,6 @@ let webouts = {
{
"NAME": "SOME_DATETIME",
"LENGTH": 8,
"VARNUM": 6,
"LABEL": "SOME_DATETIME",
"FMTNAME": "DATETIME",
"FORMAT": "DATETIME19.",
@@ -81,37 +76,33 @@ let webouts = {
{
"NAME": "SOME_DROPDOWN",
"LENGTH": 128,
"VARNUM": 3,
"LABEL": "SOME_DROPDOWN",
"FMTNAME": "",
"FORMAT": "$128.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "SOME_NUM",
"LENGTH": 8,
"VARNUM": 4,
"LABEL": "",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_SHORTNUM",
"LENGTH": 4,
"VARNUM": 8,
"LABEL": "SOME_SHORTNUM",
"FMTNAME": "",
"FORMAT": "4.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "SOME_TIME",
"LENGTH": 8,
"VARNUM": 7,
"LABEL": "SOME_TIME",
"FMTNAME": "TIME",
"FORMAT": "TIME8.",
@@ -3093,117 +3084,105 @@ let webouts = {
{
"NAME": "DSN",
"LENGTH": 32,
"VARNUM": 3,
"LABEL": "Dataset Name (32 chars)",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "IS_DIFF",
"LENGTH": 8,
"VARNUM": 9,
"LABEL": "Did value change? (1/0/-1). Always -1 for appends and deletes.",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "IS_PK",
"LENGTH": 8,
"VARNUM": 8,
"LABEL": "Is Primary Key Field? (1/0)",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "KEY_HASH",
"LENGTH": 32,
"VARNUM": 4,
"LABEL": "MD5 Hash of primary key values (pipe seperated)",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "LIBREF",
"LENGTH": 8,
"VARNUM": 2,
"LABEL": "Library Reference (8 chars)",
"FMTNAME": "",
"FORMAT": "$8.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "LOAD_REF",
"LENGTH": 36,
"VARNUM": 1,
"LABEL": "unique load reference",
"FMTNAME": "",
"FORMAT": "$36.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "MOVE_TYPE",
"LENGTH": 1,
"VARNUM": 6,
"LABEL": "Either (A)ppended, (D)eleted or (M)odified",
"FMTNAME": "",
"FORMAT": "$1.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "NEWVAL_CHAR",
"LENGTH": 32765,
"VARNUM": 14,
"LABEL": "New (character) value",
"FMTNAME": "",
"FORMAT": "$32765.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "NEWVAL_NUM",
"LENGTH": 8,
"VARNUM": 12,
"LABEL": "New (numeric) value",
"FMTNAME": "BEST",
"FORMAT": "BEST32.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "OLDVAL_CHAR",
"LENGTH": 32765,
"VARNUM": 13,
"LABEL": "Old (character) value",
"FMTNAME": "",
"FORMAT": "$32765.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "OLDVAL_NUM",
"LENGTH": 8,
"VARNUM": 11,
"LABEL": "Old (numeric) value",
"FMTNAME": "BEST",
"FORMAT": "BEST32.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "PROCESSED_DTTM",
"LENGTH": 8,
"VARNUM": 7,
"LABEL": "Processed at timestamp",
"FMTNAME": "E8601DT",
"FORMAT": "E8601DT26.6",
@@ -3213,22 +3192,20 @@ let webouts = {
{
"NAME": "TGTVAR_NM",
"LENGTH": 32,
"VARNUM": 5,
"LABEL": "Target variable name (32 chars)",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "TGTVAR_TYPE",
"LENGTH": 1,
"VARNUM": 10,
"LABEL": "Either (C)haracter or (N)umeric",
"FMTNAME": "",
"FORMAT": "$1.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
}
],
"dsmeta": [
@@ -4426,12 +4403,12 @@ let webouts = {
]
, "cols":
[
{"NAME":"ALERT_DS" ,"LENGTH":32 ,"VARNUM":4 ,"LABEL":"ALERT_DS" ,"FMTNAME":"" ,"FORMAT":"$32." ,"TYPE":"C" ,"DDTYPE":"CHARACTER" }
,{"NAME":"ALERT_EVENT" ,"LENGTH":20 ,"VARNUM":2 ,"LABEL":"ALERT_EVENT" ,"FMTNAME":"" ,"FORMAT":"$20." ,"TYPE":"C" ,"DDTYPE":"CHARACTER" }
,{"NAME":"ALERT_LIB" ,"LENGTH":8 ,"VARNUM":3 ,"LABEL":"ALERT_LIB" ,"FMTNAME":"" ,"FORMAT":"$8." ,"TYPE":"C" ,"DDTYPE":"CHARACTER" }
,{"NAME":"ALERT_USER" ,"LENGTH":100 ,"VARNUM":5 ,"LABEL":"ALERT_USER" ,"FMTNAME":"" ,"FORMAT":"$100." ,"TYPE":"C" ,"DDTYPE":"CHARACTER" }
,{"NAME":"TX_FROM" ,"LENGTH":8 ,"VARNUM":1 ,"LABEL":"TX_FROM" ,"FMTNAME":"DATETIME" ,"FORMAT":"DATETIME19.3" ,"TYPE":"N" ,"DDTYPE":"DATETIME" }
,{"NAME":"TX_TO" ,"LENGTH":8 ,"VARNUM":6 ,"LABEL":"TX_TO" ,"FMTNAME":"DATETIME" ,"FORMAT":"DATETIME19.3" ,"TYPE":"N" ,"DDTYPE":"DATETIME" }
{"NAME":"ALERT_DS" ,"LENGTH":32 ,"LABEL":"ALERT_DS" ,"FMTNAME":"" ,"FORMAT":"$32." ,"TYPE":"C" ,"DDTYPE":"C" }
,{"NAME":"ALERT_EVENT" ,"LENGTH":20 ,"LABEL":"ALERT_EVENT" ,"FMTNAME":"" ,"FORMAT":"$20." ,"TYPE":"C" ,"DDTYPE":"C" }
,{"NAME":"ALERT_LIB" ,"LENGTH":8 ,"LABEL":"ALERT_LIB" ,"FMTNAME":"" ,"FORMAT":"$8." ,"TYPE":"C" ,"DDTYPE":"C" }
,{"NAME":"ALERT_USER" ,"LENGTH":100 ,"LABEL":"ALERT_USER" ,"FMTNAME":"" ,"FORMAT":"$100." ,"TYPE":"C" ,"DDTYPE":"C" }
,{"NAME":"TX_FROM" ,"LENGTH":8 ,"LABEL":"TX_FROM" ,"FMTNAME":"DATETIME" ,"FORMAT":"DATETIME19.3" ,"TYPE":"N" ,"DDTYPE":"DATETIME" }
,{"NAME":"TX_TO" ,"LENGTH":8 ,"LABEL":"TX_TO" ,"FMTNAME":"DATETIME" ,"FORMAT":"DATETIME19.3" ,"TYPE":"N" ,"DDTYPE":"DATETIME" }
]
, "dsmeta":
[
@@ -4520,67 +4497,60 @@ let webouts = {
{
"NAME": "BASE_COL",
"LENGTH": 32,
"VARNUM": 4,
"LABEL": "BASE_COL",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "BASE_DS",
"LENGTH": 32,
"VARNUM": 3,
"LABEL": "BASE_DS",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "BASE_LIB",
"LENGTH": 8,
"VARNUM": 2,
"LABEL": "BASE_LIB",
"FMTNAME": "",
"FORMAT": "$8.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "RULE_ACTIVE",
"LENGTH": 8,
"VARNUM": 7,
"LABEL": "RULE_ACTIVE",
"FMTNAME": "",
"FORMAT": "8.",
"TYPE": "N",
"DDTYPE": "NUMERIC"
"DDTYPE": "N"
},
{
"NAME": "RULE_TYPE",
"LENGTH": 32,
"VARNUM": 5,
"LABEL": "RULE_TYPE",
"FMTNAME": "",
"FORMAT": "$32.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "RULE_VALUE",
"LENGTH": 128,
"VARNUM": 6,
"LABEL": "RULE_VALUE",
"FMTNAME": "",
"FORMAT": "$128.",
"TYPE": "C",
"DDTYPE": "CHARACTER"
"DDTYPE": "C"
},
{
"NAME": "TX_FROM",
"LENGTH": 8,
"VARNUM": 1,
"LABEL": "TX_FROM",
"FMTNAME": "DATETIME",
"FORMAT": "DATETIME19.3",
@@ -4590,7 +4560,6 @@ let webouts = {
{
"NAME": "TX_TO",
"LENGTH": 8,
"VARNUM": 8,
"LABEL": "TX_TO",
"FMTNAME": "DATETIME",
"FORMAT": "DATETIME19.3",
@@ -5395,10 +5364,10 @@ let webouts = {
const v = JSON.parse(webouts.MPE_X_TEST)
v.cols.push(
{ NAME: "READONLY_COL", LENGTH: 200, VARNUM: 11, LABEL: "READONLY_COL", FMTNAME: "", FORMAT: "$200.", TYPE: "C", DDTYPE: "CHARACTER" },
{ NAME: "HIDDEN_COL", LENGTH: 200, VARNUM: 12, LABEL: "HIDDEN_COL", FMTNAME: "", FORMAT: "$200.", TYPE: "C", DDTYPE: "CHARACTER" },
{ NAME: "ROUND_COL", LENGTH: 8, VARNUM: 13, LABEL: "ROUND_COL", FMTNAME: "", FORMAT: "BEST.", TYPE: "N", DDTYPE: "NUMERIC" },
{ NAME: "NUMFMT_COL", LENGTH: 8, VARNUM: 14, LABEL: "NUMFMT_COL", FMTNAME: "", FORMAT: "BEST.", TYPE: "N", DDTYPE: "NUMERIC" }
{ NAME: "READONLY_COL", LENGTH: 200, LABEL: "READONLY_COL", FMTNAME: "", FORMAT: "$200.", TYPE: "C", DDTYPE: "C" },
{ NAME: "HIDDEN_COL", LENGTH: 200, LABEL: "HIDDEN_COL", FMTNAME: "", FORMAT: "$200.", TYPE: "C", DDTYPE: "C" },
{ NAME: "ROUND_COL", LENGTH: 8, LABEL: "ROUND_COL", FMTNAME: "", FORMAT: "BEST.", TYPE: "N", DDTYPE: "N" },
{ NAME: "NUMFMT_COL", LENGTH: 8, LABEL: "NUMFMT_COL", FMTNAME: "", FORMAT: "BEST.", TYPE: "N", DDTYPE: "N" }
)
v.viewdata = v.viewdata.map((row, i) => ({
+10 -6
View File
@@ -24,10 +24,10 @@
<h5> cols </h5>
Contains column level attributes.
@li NAME - column name
@li VARNUM - var position. https://core.sasjs.io/mp__getcols_8sas.html
@li LABEL - var label. https://core.sasjs.io/mp__getcols_8sas.html
@li FMTNAME - derived format. https://core.sasjs.io/mp__getcols_8sas.html
@li DDTYPE - derived dropdown. https://core.sasjs.io/mp__getcols_8sas.html
@li DDTYPE - derived dropdown. C=CHARACTER, N=NUMERIC, else DATE / TIME /
DATETIME. https://core.sasjs.io/mp__getcols_8sas.html
@li CLS_RULE - values include:
- EDIT - the column is editable
- READ - the column should be readonly
@@ -488,14 +488,18 @@ select upcase(loadtype)
/* extract col info */
%mp_getcols(&libds, outds=cols1)
/* join with cls rules */
/* join with cls rules. Trim COLS payload in the SQL below - DDTYPE
C=CHARACTER N=NUMERIC (dates kept in full), VARNUM dropped (client
relies on column order, not position) */
proc sql;
create table work.cols as
select a.NAME
,a.VARNUM
,coalesce(c.desc,a.NAME) as LABEL
,a.FMTNAME
,a.DDTYPE
,case a.DDTYPE
when 'CHARACTER' then 'C'
when 'NUMERIC' then 'N'
else a.DDTYPE end as DDTYPE
,case b.cls_hide
when 1 then 'HIDE'
when 0 then 'EDIT'
@@ -503,7 +507,7 @@ create table work.cols as
,c.memlabel
,c.longdesc
,d.colType
from work.cols1 a
from work.cols1(drop=varnum) a
left join work.cls_rules b
on a.NAME=b.CLS_VARIABLE_NM
left join work.spec c
+2 -2
View File
@@ -33,7 +33,7 @@ data cols(keep=name type length varnum format label);
else if formatl=0 then format=cats(format2,'.');
else format=cats(format2,formatl,'.');
type='C';
ddtype='CHARACTER';
ddtype='C';
end;
else do;
if format2='' then format=cats(length,'.');
@@ -44,7 +44,7 @@ data cols(keep=name type length varnum format label);
if format=:'DATETIME' then ddtype='DATETIME';
else if format=:'DATE' then ddtype='DATE';
else if format=:'TIME' then ddtype='TIME';
else ddtype='NUMERIC';
else ddtype='N';
end;
if label='' then label=name;
run;
+17 -6
View File
@@ -15,13 +15,12 @@
<h4> Service Outputs </h4>
<h5> cols </h5>
@li DDTYPE
@li DDTYPE - C=CHARACTER, N=NUMERIC, else DATE / TIME / DATETIME
@li FORMAT
@li LABEL
@li LENGTH
@li NAME
@li TYPE
@li VARNUM
<h5> sasparams </h5>
@li FILTER_TEXT
@@ -361,11 +360,23 @@ run;
)
%mp_getcols(&libds, outds=cols1)
/* trim COLS payload in the SQL below - DDTYPE C=CHARACTER N=NUMERIC
(dates kept in full), VARNUM dropped (client relies on column order,
not position) */
proc sql;
create table cols(drop=srclabel) as
select a.*
,coalesce(b.dd_shortdesc,a.srclabel,a.name) as label
from cols1(rename=(label=srclabel)) a
create table cols as
select a.name
,a.type
,a.length
,a.format
,a.fmtname
,case a.ddtype
when 'CHARACTER' then 'C'
when 'NUMERIC' then 'N'
else a.ddtype end as ddtype
,coalesce(b.dd_shortdesc,a.label,a.name) as label
from cols1 a
left join &mpelib..mpe_datadictionary
(where=(&dc_dttmtfmt. < tx_to
and dd_source ? %upcase("&orig_libds")