|
Using SAS v6.08 on MVS.
I want to improve field validation on an fsedit screen. I think that
a persistant list approach might work faster. I have 10 fsedit screens
that will call the scl entry to color the failed fields red.
PROBLEM: Make more efficient field validation code. The field should
turn red and reverse if it fails specification limits as set
in the 'liqv.af.specs.scl' entry.
QUESTION: Anyone have a small example to get me going? I have made
small lists but that was in the fsedit code. I want the
fsedit scl to call an .scl entry to build the list for use
by that user. The session is a remote session.
A shortened version of my current code that works is below:
It has fsedit and an scl code sections.
/* fsedit code below */
INIT:
control enter always term;
MenuList=makelist();
MenuList=insertc(MenuList,'Pass',-1,'PASS');
MenuList=insertc(MenuList,'Fails',-1,'FAILS');
MenuList=insertc(MenuList,'Information',-1,'INFO');
MenuList=insertc(MenuList,'Contaminated',-1,'CONTA');
MenuList=insertc(MenuList,'Trash',-1,'TRASH');
return;
MAIN:
select(substr(dispo,1,1));
when('P') dispo='PASS';
when('F') dispo='FAILS';
when('I') dispo='INFO';
when('C') dispo='CONTA';
when('T') dispo='TRASH';
when('?') do; MenuItem=popmenu(MenuList);
if MenuItem then dispo=nameitem(MenuList,MenuItem); end;
otherwise;end;
CHECK:
call display('liqv.af.specs.scl',
mtltype,acpen77,acduc77,acsol,acsg,acfp,
acvis140,acvis275,acst,acrloh,acrduc77,acrvi140,
cbsg,cbfp,cbwc,cbkv140,cbd437,cbd500,cbd600,cbd680,
cbrv140,cbrp77,cbrs,cbrst,emsg,emfv77,emfv122,emrd,emre,
emsieve,emss,emdm,emod,emph,emrv140,emrp77,emrd77,
emrd392,emrs,emrfv180,emrsp,emrer,emrst,pmip77,
pmip392,pmis,pmisg,pmifp,pmiv140,pmiv275,pmisep,
pmisp,pmirer,pmirp392,pmiip77,pmiid392,pmiisol,pmiisg,
pmiifp,pmiiv140,pmiiv275,pmiird39,pmiirvis,dispo);
link COLORIT;
return;
COLORIT:
do i=1 to symget('n');
opspec=open('work.specs','i');
any=attrn(opspec,'any');
if any then do;
rc=fetchobs(opspec,i);fspec=getvarc(opspec,1);
rc=field('color red reverse',fspec); alarm;
end;
rc=close(opspec);
end;
return;
TERM:
return;
/* liqv.af.specs.scl code below */
entry mtltype $ 10 acpen77 8 acduc77 $ 10 acsol acsg 8 acfp $ 10
acvis140 acvis275 8 acst $ 10 acrloh 8 acrduc77 $ 10 acrvi140
cbsg 8 cbfp $ 10 cbwc cbkv140 cbd437 cbd500 cbd600 cbd680
cbrv140 cbrp77 cbrs 8 cbrst $ 8 emsg emfv77 emfv122 emrd emre
emsieve emss emdm 8 emod emph $ 10 emrv140 emrp77 8 emrd77
emrd392 $ 10 emrs emrfv180 emrsp emrer 8 emrst $ 10 pmip77
pmip392 pmis pmisg 8 pmifp $ 10 pmiv140 pmiv275 8 pmisep $ 10
pmisp pmirer pmirp392 pmiip77 8 pmiid392 $ 10 pmiisol pmiisg 8
pmiifp $ 10 pmiiv140 pmiiv275 8 pmiird39 $ 10 pmiirvis 8 dispo
$ 5;
INIT:
if dispo eq 'FAILS' then dispo='';
rc=delete('work.spec');
rc=copy('user.specs','work.specs');
if dispo eq 'INFO' or dispo eq 'TRASH' or
dispo eq 'CONTA' then info=1;
return;
TERM:
select(mtltype);
when('AC-20') do;
if acpen77 < 60 or acpen77 > 100 then do;
if not info then dispo='FAILS';
submit continue; data work.spec;
length fspec $ 8; fspec='ACPEN77';
run; data work.specs;set work.specs work.spec; run; endsubmit;
end;
if acvis140 < (2000-400) or acvis140 > (2000+400) then do;
if not info then dispo='FAILS';
submit continue; data work.spec;
length fspec $ 8; fspec='ACVIS140';
run; data work.specs;set work.specs work.spec; run; endsubmit;
end;
end;
otherwise;end;
if dispo ne 'FAILS' and dispo ne 'INFO' and dispo ne 'TRASH' and
dispo ne 'CONTA' then dispo='PASS';
submit continue;data _null_;set work.specs end=last;
if last then call symput('n',_n_); run;endsubmit;
return;
////////////////////////************/////////////////////
I shortened the code for this post to conserve space. TIA
************************************************************************
*Work email: umtr121@dsibm.okladot.state.ok.us *
*Home email: khobson@telepath.com *
*Home Pg: http://www.telepath.com/khobson *
*CO-SAS Pg: http://www.telepath.com/khobson/sas/sas.html *
*OKDOT Pg: http://www.okladot.state.ok.us *
*Work Phone: 405-521-2677 Fax: 405-522-0552 *
************************************************************************
|