123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- //not tested yet.
- //to use, add crfTecant/crfData.js to requiresScript and in the call-back, run init
- //will work with crfSetup as setup object
- var crfData={};
- crfData.init=
- function(cb=null){
- this.print('[crfData:init]');
- let that=this;
- let action=function(){that.afterScripts(cb);};
- LABKEY.requiresScript(["crfTecant/runQuery.js","crfTecant/variableList.js"],action);
- }
- crfData.afterScripts=
- function(cb=null){
- if (cb) cb();
- }
- crfData.setSetup=
- function(setup){
- this.setup=setup;
- }
- crfData.getContainer=
- function(label){
- return this.setup.getContainer(label);
- }
- crfData.print=
- function(msg){
- console.log(msg);
- }
- //getters
- crfData.getSnapshotObject=
- function(){
- if (!("dataQueriesSnapshot" in this))
- this.dataQueriesSnapshot=new Object();
- return this.dataQueriesSnapshot;
- }
- crfData.getQuerySnapshot=
- function(queryName){
- //check whether queryName is in snapshotObject?
- return this.getSnapshotObject()[queryName];
- }
- crfData.getLayoutObject=
- function(){
- if (!("dataQueriesLayout" in this))
- this.dataQueriesLayout=new Object();
- return this.dataQueriesLayout;
- }
- crfData.getQueryLayout=
- function(queryName){
- //check whether queryName is in snapshotObject?
- return this.getLayoutObject()[queryName];
- }
- crfData.getLookupObject=
- function(){
- if (!("lookup" in this))
- this.lookup=new Object();
- return this.lookup;
- }
- crfData.getLookup=
- function(queryName){
- let x=this.getLookupObject();
- if (queryName in x) return x[queryName];
- return null;
- }
- crfData.getQueryList=
- function(){
- if (!("queryList" in this))
- this.queryList=new Object();
- return this.queryList;
- }
- crfData.getRegistration=
- function(){
- let regQueryPars=variableList.parseVariables(this.setup.getSettings('registrationQuery'));
- let query=regQueryPars['query'];
- return this.getQuerySnapshot(query).rows;
- }
- crfData.getRegistrationMap=
- function(value=null){
- let rows=this.getRegistration();
- let qMap=new Object();
- let key='Key';
- if (!value) value='participantStudyId';
- for (let i=0;i<rows.length;i++){
- qMap[rows[i][key]]=rows[i][value];
- }
- return qMap;
- }
- crfData.setDataLayout=
- function(formId,cb){
- let fName='[setDataLayout]';
- this.print(fName);
- let rowsSetup=this.setup.selectFormSetupRows(formId);
- let queryArray=new Array();
- let dS=this.getLayoutObject();//reference only
- let qList=this.getQueryList();
- let qMap=this.setup.getMap('inputLists');
- //config.formConfig.lookup=new Object();
- for (let i=0;i<rowsSetup.length;i++){
- let entry=rowsSetup[i];
- //skip review rows
- if (entry['showFlag']=='REVIEW')
- continue;
- let queryId=entry['queryName'];
- let q=qMap[queryId];
- queryArray.push(runQuery.makeQuery(dS,'data',q,q,[]));
- qList[q]=0;
- this.print(fName+' adding '+q);
- if (entry['showQuery']!="NONE"){
- let sq=entry['showQuery'];
- queryArray.push(runQuery.makeQuery(dS,'data',sq,sq,[]));
- qList[sq]=0;
- this.print(fName+' adding '+sq);
-
- }
- }
- //always add reviews
- let q='reviewComments';
- queryArray.push(runQuery.makeQuery(dS,'data',q,q,[]));
- qList[q]=0;
- let that=this;
- let action=function(){that.processLayout(cb);};
- runQuery.getDataFromQueries(this,queryArray,action);
- }
- //this happens after the for loop, so all dataQueries objects are set
- crfData.processLayout=
- function(cb=null){
- let fName='[processLayout]';
- let qList=this.getQueryList();
- //for layouts
- let queryArray=new Array();
- let targetObject=this.getLookupObject();
- let lookupSet=new Object();
- for (let q in qList){
- let qobject=this.getQueryLayout(q);
- this.print(fName+" inspecting layout for "+q+" "+qobject);
- qobject.fields=qobject.metaData.fields;
- qobject.title=this.findTitle(q);
- //check for lookups
- for (let f in qobject.fields){
- //anything else is simple but lookup
- let field=qobject.fields[f];
- if (!("lookup" in field)) continue;
- let lookup=field.lookup;
- let qObject=this.getLookup(lookup.queryName);
- if (qObject) continue;
- //add to list
- let qName=lookup.queryName;
- let qCode=qName+':'+lookup.keyColumn+':'+lookup.displayColumn;
- let e=runQuery.makeQuery(targetObject,'data',qName,qCode,[]);
- //adjust minor settings
- if (lookup.containerPath) e.containerPath=lookup.containerPath;
- e.schemaName=lookup.schemaName;
- e.columns=lookup.keyColumn+','+lookup.displayColumn;
- lookupSet[qCode]=e;
- this.print(fName+' inserting '+qCode);
- }
- }
- for (let x in lookupSet){
- queryArray.push(lookupSet[x]);
- this.print(fName+' adding '+x);
- for (let v in lookupSet[x]){
- this.print(fName+' value ['+v+'] '+lookupSet[x][v]);
- }
- }
- //this.print(fName+' print '+targetObject.print);
- let that=this;
- let action=function(){that.processLookup(cb);};
- this.print(fName+' getDataFromQueries');
- runQuery.getDataFromQueries(this,queryArray,action);
- this.print(fName+' getDataFromQueries done');
- }
- crfData.processLookup=
- function(cb=null){
- let fName="[processLookup]";
- let obj=this.getLookupObject();
- for (let q in obj){
- this.print(fName+" "+q);
- let a=q.split(':');
- if (a.length<3) continue;
- let lookupName=a[0];
- let key=a[1];
- let val=a[2];
- obj[lookupName]=new Object();
- this.print(fName+' adding ['+lookupName+'] '+key+'/'+val);
- let lObject=obj[lookupName];
- lObject.LUT=new Array();//key to value
- lObject.ValToKey=new Array();//value to key
- lObject.keyColumn=key
- lObject.displayColumn=val;
-
- let qRows=obj[q].rows;
- for (let i=0;i<qRows.length;i++){
- let r=qRows[i];
- this.print(fName+' LUT ['+r[key]+'] '+r[val]);
- lObject.LUT[r[key]]=r[val];
- lObject.ValToKey[r[val]]=r[key];
- }
- }
- if (cb) cb();
- }
- crfData.setData=
- function(crfRef,cb=null){
- fName='[setData]';
- //let crfMatch=this.getCRFref();
- //let parentCrf=config.formConfig.crfEntry['parentCrf'];
- //if (parentCrf!=undefined) crfMatch=parentCrf;
- this.print(fName+' form crf ['+crfRef+'] ');
- let queryArray=new Array();
- let targetObject=this.getSnapshotObject();
- //collect data and execute callback cb for queries in cb.queryList
- let qList=this.setup.getQueryList();
- for (q in qList){
- let filters=[LABKEY.Filter.create("crfRef",crfRef)];
- queryArray.push(runQuery.makeQuery(targetObject,'data',q,q,filters));
- }
- runQuery.getDataFromQueries(this,queryArray,cb);
- }
- crfData.setRegistration=
- function(cb=null){
- let regQueryPars=variableList.parseVariables(this.setup.getSettings('registrationQuery'));
- let q=regQueryPars['query'];
- let queryArray=new Array();
- let targetObject=this.getSnapshotObject();
- queryArray.push(runQuery.makeQuery(targetObject,'data',q,q,[]));
- runQuery.getDataFromQueries(this,queryArray,cb);
- }
|