Programming with the VPE code library

From VistApedia
Jump to: navigation, search

Programming with the VPE code library

Started 7/24/2006 by K Toppenberg
I'll use this to capture notes:
The code library is in the %ZVEM namespace.  
The source files are stored in _ZVEM*.m on GT_M
The %ZVEMKT* modules contain the code for the scrollable display/selector.


LIST^%ZVEMKT (Generic Lister)

SELECT^%ZVEMKF -- generic selecter

  (different from SELECT^%ZVEMKT)
Examples:
do SELECT^%ZVEMKTF(50,"TOP") will allow a user to select (by toggling with
 the space key) a list of fileman fields from file 50.  [ESC] will jump
 out, and the results are stored in ^TMP("VPE","FIELDS",$J,*)


SELECT^%ZVEMKT (Generic Lister)

Here is some code that uses the VPE Selector tool.  It is just a wrapper

Selector(pArray,pResults,Header)

       ;"Purpose: Interface with VPE Selector code to select from an array
       ;"Input: pArray -- NAME OF array holding items to be selected from
       ;"            Expected format:
       ;"              @pArray@("Display Words")=ReturnValue  <-- optional
       ;"              @pArray@("Display Words")=ReturnValue
       ;"              @pArray@("Display Words")=ReturnValue
       ;"       pResults -- NAME OF array to have results returned in
       ;"              ** Note: Prior will NOT be KILLED first
       ;"              Format of returned array:  
       ;"              Only those valuse that user selected will be returned
       ;"              @pResults@("Display Words")=ReturnValue  <-- ptional
       ;"              @pResults@("Display Words")=ReturnValue  
       ;"              @pResults@("Display Words")=ReturnValue  
       ;"       Header -- OPTIONAL -- A header text to show.
       
       new ref set ref=$name(^TMP("VEE",$J))
       kill @ref
       if $get(pArray)="" goto SelDone
       if $get(pResults)="" goto SelDone
       ;"First set up array of options        
       new DispWords,RtnValue
       new order set order=1
       set DispWords=$order(@pArray@(""))
       if DispWords'="" for  do  quit:(DispWords="")
       . set RtnValue=$get(@pArray@(DispWords),"<NONE>")
       . set @ref@(order)=RtnValue_$char(9)_$extract(DispWords,1,$get(IOM,80))
       . set order=order+1
       . set DispWords=$order(@pArray@(DispWords))
       
       if $get(Header)'="" set @ref@("HD")=Header

       ;"Note: Rules of use:
       ;"  ref must=^TMP("VEE",$J)
       ;"  Each line should be in this format:
       ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue
       ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue
       ;"      @ref@(number)=ReturnValue_$char(9)_DisplayValue
       ;"  Results come bac in:
       ;"      ^TMP("VPE","SELECT",$J)
       D SELECT^%ZVEMKT(ref)
       ;"Format selected options.        
       new index set index=$order(^TMP("VPE","SELECT",$J,""))
       if index'="" for  do  quit:(index="")
       . new s,s1,s2
       . set s=$get(^TMP("VPE","SELECT",$J,index))
       . set s1=$piece(s,$char(9),1)
       . set s2=$piece(s,$char(9),2)
       . set @pResults@(s2)=s1
       . set index=$order(^TMP("VPE","SELECT",$J,index))
       
       kill ^TMP("VPE","SELECT",$J)
       kill @ref
       
SelDone        
       quit

TestSel
       new temp,results
       set temp("Kevin")="option 1"
       set temp("John")=123345
       set temp("Bill")=$J
       
       do Selector("temp","results","Here is some header text")
       
       if $data(results) zwr results(*)
       quit