home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Product / Product.zip / visilotu.zip / SAMPLE.PRG < prev    next >
Text File  |  1995-11-17  |  19KB  |  626 lines

  1. !.HEADER
  2. !
  3. !
  4. !
  5. !    SAMPLE.PRG - Sample Program for Lotus Notes/Visualizer interface
  6. !
  7. !    IBM European Applications Support
  8. !
  9. !    C Interface written by Klaus-Peter Schlotter - IBM Germany
  10. !    ASL Application written by Mike Cory - Decision Management Systems, Inc.
  11. !    ASL Object Wrapper written by Matthew Perrins - EAS IBM UK
  12. !
  13. !.spec winsize MAX MAX
  14. !.spec edit 1
  15. !.spec textcol 0 17
  16. !.spec appdest 1 d:\desktop\vis2lono\sample.apl
  17. !.HEADER
  18. !
  19. ! ON SELECT
  20. ! This block is triggered whenever the user selects a control
  21. ! or menu entry.
  22. !
  23. !
  24. ! ON START
  25. ! This block is executed when the program is initially invoked.
  26. ! It is normally used to initialize variables needed during
  27. ! program execution and to open the main window of the
  28. ! application.
  29. !
  30. ON START(FileName)
  31. DO
  32.   !
  33.   ! Assign boolean variables
  34.   LET yes = 1
  35.   LET no  = 0
  36.   !
  37.   ! Assign all variables referred by the windows
  38.   !
  39.   LET CreateTableRC =""                           ! used by Text control named 'T.w_sample.TEXT4'
  40.   LET GetFieldListRC =""                          ! used by Text control named 'T.w_sample.TEXT3'
  41.   LET GetFormListRC =""                           ! used by Text control named 'T.w_sample.TEXT2'
  42.   LET GetServerListRC =""                         ! used by Text control named 'T.w_sample.TEXT1'
  43.  
  44.   LET CurrentDirectory=""
  45.   LET CurrentServer=""
  46.   LET CurrentSelection=""
  47.   !
  48.   ! Call procedure to define data for list control(s)
  49.   !
  50.   CALL List_Define
  51.  
  52.   ! enable operating system calls
  53.   OPEN SYSTEM Sys
  54.  
  55.   ! get profile data
  56.   OPEN PROFILE Prof
  57.  
  58.   !
  59.   OPEN WINDOW w_sample, , "I.Windows.sample"
  60.   !
  61.   ! assign the column titles for list controlLIST1
  62.   LET T.w_sample.LIST1'COLTITLE1="Title_1"
  63.   !
  64.   ! assign the column titles for list controlLIST2
  65.   LET T.w_sample.LIST2'COLTITLE1="Title_2"
  66.   !
  67.   ! assign the column titles for list controlLIST3
  68.   LET T.w_sample.LIST3'COLTITLE1="Title_3"
  69.   !
  70.   ! assign the column titles for list controlLIST4
  71.   LET T.w_sample.LIST4'COLTITLE1="Title_4"
  72.   !
  73.   ! assign the column titles for list controlLIST5
  74.   LET T.w_sample.LIST5'COLTITLE1="Title_5"
  75.   !
  76.   ! assign the column titles for list controlLIST6
  77.   LET T.w_sample.LIST6'COLTITLE1="Title_6"
  78.   ! assign the column titles for list controlLIST7
  79.   LET T.w_sample.LIST7'COLTITLE1="Title_7"
  80.  
  81.   LET T.w_sample.PUSH1[0]'ENABLED=No
  82.   LET T.w_sample.PUSH2[0]'ENABLED=No
  83.   LET T.w_sample.PUSH3[0]'ENABLED=No
  84.   LET T.w_sample.PUSH4[0]'ENABLED=No
  85.  
  86.   LET OriginalTitle = W_Sample'TITLE
  87.   LET W_Sample'TITLE = "Connecting to Lotus Notes..."
  88.  
  89.   OPEN LOTUSNOTES Lotus
  90.  
  91.   LET W_Sample'TITLE = OriginalTitle
  92.  
  93.   ! Define Current Position
  94.   g_CurLoc = A.System.StartDs'Location
  95.   IF Split(g_CurLoc,Length(g_CurLoc),1) = "\"
  96.     g_CurLoc = Split(g_CurLoc,1,Length(g_CurLoc)-1)
  97.  
  98. END
  99.  
  100. ON SELECT
  101. DO
  102.   CASE A.System.Object
  103.     !
  104.     WHEN "T.w_sample.PUSH5"
  105.     DO
  106.       DEFINE ServerList[0]
  107.  
  108.       ! blank out these vectors
  109.       DEFINE DirectoryList[0]                     ! vector to hold paths within server
  110.       DEFINE FileList[0]                          ! vector to hold files (databases & directories) within server
  111.       DEFINE FileInfoList[0]                      ! vector to hold details about files
  112.       DEFINE FormList[0]                          ! vector to hold list of forms within database
  113.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  114.       DEFINE FieldType[0]                         ! vector to hold type of field
  115.  
  116.       ! 'push' button marked 'GetServerList'
  117.       CALL Lotus'GetServerList(POINTER(ServerList[0]))   ! pointer to ASL vector is required
  118.  
  119.     END
  120.  
  121.     WHEN "T.w_sample.PUSH1"
  122.     DO
  123.  
  124.       ! 'push' button marked 'GetFileList'
  125.  
  126.       DEFINE DirectoryList[0]                     ! vector to hold paths within server
  127.       DEFINE FileList[0]                          ! vector to hold files (databases & directories) within server
  128.       DEFINE FileInfoList[0]                      ! vector to hold details about files
  129.  
  130.       ! blank out these vectors
  131.  
  132.       DEFINE FormList[0]                          ! vector to hold list of forms within database
  133.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  134.       DEFINE FieldType[0]                         ! vector to hold type of field
  135.  
  136.       MODIFY Lotus,
  137.         DIRECTORY = CurrentDirectory
  138.  
  139.       CALL Lotus'GetFileList( POINTER(DirectoryList[0]),
  140.                               POINTER(FileList[0]),
  141.                               POINTER(FileInfoList[0]))
  142.     END
  143.     !
  144.     WHEN "T.w_sample.PUSH2"
  145.     DO
  146.  
  147.       DEFINE FormList[0]                          ! vector to hold list of forms within database
  148.  
  149.       ! blank out these vectors
  150.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  151.       DEFINE FieldType[0]                         ! vector to hold type of field
  152.  
  153.       ! 'push' button marked 'GetFormList'
  154.       CALL Lotus'GetFormList( POINTER(FormList[0]) )                      ! pointer to ASL vector of forms
  155.     END
  156.     !
  157.     WHEN "T.w_sample.PUSH3"
  158.     DO
  159.  
  160.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  161.       DEFINE FieldType[0]                         ! vector to hold type of field
  162.  
  163.       IF NOVALUE(CurrentDirectory)
  164.         LET FileName = Lotus'DATABASE
  165.       ELSE
  166.         LET FileName = FULLPATH(CurrentDirectory,Lotus'DATABASE)
  167.  
  168.       MODIFY Lotus,
  169.         DATABASE = FileName
  170.  
  171.       ! 'push' button marked 'GetFieldList'
  172.       CALL Lotus'GetFormFieldList( POINTER(FieldList[0]),
  173.                                    POINTER(FieldType[0]))
  174.  
  175.       LET T.w_sample.PUSH4[0]'ENABLED=Yes
  176.  
  177.     END
  178.     !
  179.     WHEN "T.w_sample.PUSH4"
  180.     DO
  181.       ! 'push' button marked 'CreateTable'
  182.       DEFINE SelList[0]                           ! define vector for QUERYCHECK on Listbox
  183.       DEFINE SelCols[0]                           ! vector to hold selected fieldnames
  184.  
  185.       CALL T.W_Sample.LIST2'QUERYCHECK(SelList[0])! which columns are selected
  186.  
  187.       DO rr=1:SelList[0]'ENTRIES                  ! place the selected fieldnames
  188.         INSERT SelCols[0]=FieldList[SelList[rr]]  ! in a vector for use below
  189.       END
  190.  
  191.       IF SelCols[0]'ENTRIES=0                     ! if no columns were selected
  192.       DO                                          ! then message the user and return
  193.         ERROR 1,"You must first select 1 or more columns..."
  194.         RETURN
  195.       END
  196.  
  197.       DEFINE A.Lotus.ErrorInfo[0]              ! clear our messages vector
  198.  
  199.  
  200.       CALL Lotus'CreateProductTable(
  201.                   String("_\TEST.TAB",g_CurLoc),  ! Name Of Table To Create
  202.                   POINTER(SelCols[0]))            ! pointer to ASL vector of selected fields
  203.  
  204.       ! Set result table to be deleted
  205.       !
  206.       LET TempTableName = String("_\TEST.TAB",g_Curloc)
  207.       CALL Sys'INCLUDETEMP( TempTableName )           ! Delete file at application close
  208.  
  209.  
  210.       ! Empty A.Lotus.ErrorInfo and then get the errors from the last call
  211.       !
  212.       DEFINE A.Lotus.ErrorInfo[0]
  213.       CALL Lotus'GetErrorInfo(POINTER(A.Lotus.ErrorInfo[0]))
  214.       !
  215.       SHUT Test
  216.       ! Open The Table
  217.       OPEN TABLE Test,
  218.         NAME     = "TEST.TAB",
  219.         LOCATION = g_CurLoc,
  220.         MODE = "READ"
  221.  
  222.       CALL Build_List("Test")                     ! call our own procedure to build Listbox dynamically
  223.  
  224.       MODIFY T.w_sample.LIST1,                    ! update the listbox to reflect
  225.         COLDATA="TabColumns",                      ! updated columns vector
  226.         EXPRESSION="TabLayout",                    ! layout vector
  227.         COLTITLE1="Title_1"                        ! and titles vector
  228.  
  229.       LET CreateTableRc = TRIM(CreateTableRc)||"-" ||
  230.         A.Lotus.ErrorInfo[0]'entries
  231.  
  232.     END
  233.     !
  234.     !
  235.     WHEN "T.w_sample.LIST3"
  236.     DO
  237.  
  238.       ! list box set for single select mode
  239.       MODIFY Lotus,
  240.         FORMNAME = FormList[A.System.BoxNumber]
  241.  
  242.       CurrentSelection = 'Form="'||Lotus'FORMNAME||'"'
  243.  
  244.       MODIFY Lotus,
  245.         EXPRESSION = CurrentSelection
  246.  
  247.       LET T.w_sample.PUSH3[0]'ENABLED=Yes
  248.       ! blank out these vectors
  249.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  250.       DEFINE FieldType[0]                         ! vector to hold type of field
  251.  
  252.     END
  253.     !
  254.     !
  255.     WHEN "T.w_sample.LIST5"
  256.     DO
  257.  
  258.       ! list box set for single select mode
  259.       MODIFY Lotus,
  260.         SERVERNAME = ServerList[A.System.BoxNumber]
  261.  
  262.       LET T.w_sample.PUSH1[0]'ENABLED=Yes
  263.  
  264.       ! blank out these vectors
  265.       DEFINE DirectoryList[0]                     ! vector to hold paths within server
  266.       DEFINE FileList[0]                          ! vector to hold files (databases & directories) within server
  267.       DEFINE FileInfoList[0]                      ! vector to hold details about files
  268.       DEFINE FormList[0]                          ! vector to hold list of forms within database
  269.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  270.       DEFINE FieldType[0]                         ! vector to hold type of field
  271.  
  272.     END
  273.  
  274.     WHEN "T.w_sample.LIST6"
  275.     DO
  276.  
  277.       ! list box set for single select mode
  278.       MODIFY Lotus,
  279.         DATABASE = FileList[A.System.BoxNumber]
  280.  
  281.       LET T.w_sample.PUSH2[0]'ENABLED=Yes
  282.  
  283.       ! blank out these vectors
  284.       DEFINE FormList[0]                          ! vector to hold list of forms within database
  285.       DEFINE FieldList[0]                         ! vector to hold fieldnames
  286.       DEFINE FieldType[0]                         ! vector to hold type of field
  287.  
  288.     END
  289.  
  290.   END
  291. END
  292.  
  293. !
  294. ! Construct the arrays needed to support list controls
  295. !
  296. PROCEDURE List_Define
  297. DO
  298.   !
  299.   ! Define data to handle list 'T.w_sample.LIST1'
  300.   !
  301.   DEFINE TabColumns[0]                            ! coldata vector
  302.   DEFINE TabLayout[0]                             ! expression vector
  303.   !
  304.   ! fill the expression vector
  305.   !
  306.   INSERT TabLayout[0]="WIDTH=300 SEPARATOR=YES JUST=LEFT READONLY=YES"
  307.   !
  308.   ! Initialise the referred vectors. These are the vectors
  309.   ! which will contain the data to be displayed
  310.   !
  311.   DEFINE Documents[0]
  312.   !
  313.   ! fill the reference vector to point to these vectors
  314.   !
  315.   INSERT TabColumns[0] = "Documents"
  316.   !
  317.   ! create and fill the titles vector
  318.   !
  319.   DEFINE Title_1[0]
  320.   INSERT Title_1[0] = "Documents"
  321.   !
  322.   ! Define data to handle list 'T.w_sample.LIST2'
  323.   !
  324.   DEFINE FldColumns[0]                            ! coldata vector
  325.   DEFINE FldLayout[0]                             ! expression vector
  326.   !
  327.   ! fill the expression vector
  328.   !
  329.   INSERT FldLayout[0]="WIDTH=100 SEPARATOR=YES JUST=LEFT READONLY=YES"
  330.   INSERT FldLayout[0]="WIDTH=60 SEPARATOR=YES JUST=LEFT READONLY=YES"
  331.   INSERT FldLayout[0]="WIDTH=100 SEPARATOR=YES JUST=LEFT READONLY=YES"
  332.   !
  333.   ! Initialise the referred vectors. These are the vectors
  334.   ! which will contain the data to be displayed
  335.   !
  336.   DEFINE FieldList[0]
  337.   DEFINE FieldType[0]
  338.   DEFINE ColumnList[0]
  339.   !
  340.   ! fill the reference vector to point to these vectors
  341.   !
  342.   INSERT FldColumns[0] = "FieldList"
  343.   INSERT FldColumns[0] = "FieldType"
  344.   INSERT FldColumns[0] = "ColumnList"
  345.   !
  346.   ! create and fill the titles vector
  347.   !
  348.   DEFINE Title_2[0]
  349.   INSERT Title_2[0] = "Name"
  350.   INSERT Title_2[0] = "Type"
  351.   INSERT Title_2[0] = "Column"
  352.   !
  353.   ! Define data to handle list 'T.w_sample.LIST3'
  354.   !
  355.   DEFINE ForColumns[0]                            ! coldata vector
  356.   DEFINE ForLayout[0]                             ! expression vector
  357.   !
  358.   ! fill the expression vector
  359.   !
  360.   INSERT ForLayout[0]="WIDTH=200 SEPARATOR=YES JUST=LEFT READONLY=YES"
  361.   !
  362.   ! Initialise the referred vectors. These are the vectors
  363.   ! which will contain the data to be displayed
  364.   !
  365.   DEFINE FormList[0]
  366.   !
  367.   ! fill the reference vector to point to these vectors
  368.   !
  369.   INSERT ForColumns[0] = "FormList"
  370.   !
  371.   ! create and fill the titles vector
  372.   !
  373.   DEFINE Title_3[0]
  374.   INSERT Title_3[0] = "Forms"
  375.   !
  376.   ! Define data to handle list 'T.w_sample.LIST4'
  377.   !
  378.   DEFINE DirColumns[0]                            ! coldata vector
  379.   DEFINE DirLayout[0]                             ! expression vector
  380.   !
  381.   ! fill the expression vector
  382.   !
  383.   INSERT DirLayout[0]="WIDTH=100 SEPARATOR=YES JUST=LEFT READONLY=YES"
  384.   !
  385.   ! Initialise the referred vectors. These are the vectors
  386.   ! which will contain the data to be displayed
  387.   !
  388.   DEFINE DirectoryList[0]
  389.   !
  390.   ! fill the reference vector to point to these vectors
  391.   !
  392.   INSERT DirColumns[0] = "DirectoryList"
  393.   !
  394.   ! create and fill the titles vector
  395.   !
  396.   DEFINE Title_4[0]
  397.   INSERT Title_4[0] = "Directories"
  398.   !
  399.   ! Define data to handle list 'T.w_sample.LIST5'
  400.   !
  401.   DEFINE FilColumns[0]                            ! coldata vector
  402.   DEFINE FilLayout[0]                             ! expression vector
  403.   !
  404.   ! fill the expression vector
  405.   !
  406.   INSERT FilLayout[0]="WIDTH=100 SEPARATOR=YES JUST=LEFT READONLY=YES"
  407.   INSERT FilLayout[0]="WIDTH=200 SEPARATOR=YES JUST=LEFT READONLY=YES"
  408.   !
  409.   ! Initialise the referred vectors. These are the vectors
  410.   ! which will contain the data to be displayed
  411.   !
  412.   DEFINE FileList[0]
  413.   DEFINE FileInfoList[0]
  414.   !
  415.   ! fill the reference vector to point to these vectors
  416.   !
  417.   INSERT FilColumns[0] = "FileList"
  418.   INSERT FilColumns[0] = "FileInfoList"
  419.   !
  420.   ! create and fill the titles vector
  421.   !
  422.   DEFINE Title_6[0]
  423.   INSERT Title_6[0] = "File"
  424.   INSERT Title_6[0] = "Details"
  425.  
  426.   !
  427.   ! Define data to handle list 'T.w_sample.LIST6'
  428.   !
  429.   DEFINE SerColumns[0]                            ! coldata vector
  430.   DEFINE SerLayout[0]                             ! expression vector
  431.   !
  432.   ! fill the expression vector
  433.   !
  434.   INSERT SerLayout[0]="WIDTH=100 SEPARATOR=YES JUST=LEFT READONLY=YES"
  435.   !
  436.   ! Initialise the referred vectors. These are the vectors
  437.   ! which will contain the data to be displayed
  438.   !
  439.   DEFINE ServerList[0]
  440.   !
  441.   ! fill the reference vector to point to these vectors
  442.   !
  443.   INSERT SerColumns[0] = "ServerList"
  444.   !
  445.   ! create and fill the titles vector
  446.   !
  447.   DEFINE Title_5[0]
  448.   INSERT Title_5[0] = "Servers"
  449.  
  450.   !
  451.   ! Define data to handle list 'T.w_sample.LIST7'
  452.   !
  453.   DEFINE MColumns[0]                              ! coldata vector
  454.   DEFINE MLayout[0]                               ! expression vector
  455.   !
  456.   ! fill the expression vector
  457.   !
  458.   INSERT MLayout[0]="WIDTH=500 SEPARATOR=YES JUST=LEFT READONLY=YES"
  459.   !
  460.   ! Initialise the referred vectors. These are the vectors
  461.   ! which will contain the data to be displayed
  462.   !
  463.   DEFINE A.Lotus.ErrorInfo[0]
  464.   !
  465.   ! fill the reference vector to point to these vectors
  466.   !
  467.   INSERT MColumns[0] = "A.Lotus.ErrorInfo"
  468.   !
  469.   ! create and fill the titles vector
  470.   !
  471.   DEFINE Title_7[0]
  472.   INSERT Title_7[0] = "Messages"
  473. END
  474. !
  475. ! ON QUIT
  476. ! This block is executed when the user uses Close in the
  477. ! system menu.
  478. ! For a secondary window this would imply, 'shut the window'.
  479. ! For a primary window the impication is, 'close the
  480. ! Application'.
  481. !
  482. ON QUIT
  483. DO
  484.   CASE A.System.Object
  485.  
  486.     WHEN "T..w_sample"                            ! primary window
  487.       QUEUE PROGRAM A.System.ThisTask,STOP
  488.  
  489.     OTHERWISE
  490.       SHUT ?A.System.Object
  491.  
  492.   END
  493. END
  494. !
  495. ! ERROR event
  496. ! This block is executed when there is a run-time error.
  497. ! You can trap errors here or allow the error message provided
  498. ! to identify the error and stop the program.
  499. !
  500.  
  501. ON ERROR
  502. DO
  503.   !
  504.   ! Message to identify failing module and line
  505.   !
  506.   LET ans=DIALOG("EFD7004",0,
  507.    A.System.ErrorModule ,
  508.    A.System.ErrorLine )
  509.  
  510.   DO i=1 : A.System.ErrorNumber[0]'ENTRIES
  511.  
  512.     IF ans = "CANCEL"
  513.       TERMINATE
  514.  
  515.       ! Display system message corresponding to error
  516.     LET ans = DIALOG ("EFD" ||
  517.      A.System.Errornumber[i], 0,
  518.      A.System.ErrorInfo[i])
  519.   END
  520.  
  521.   SHUT Lotus
  522.  
  523.   STOP
  524.  
  525. END
  526. !
  527. ! ON STOP
  528. ! This block is executed when the program is terminated.
  529. ! You should use the block to carry out any housekeeping
  530. ! required before closing
  531. !
  532. ON STOP
  533. DO
  534.   LET W_Sample'TITLE = "Disconnecting from Lotus Notes..."
  535.   CALL W_Sample'REFRESH()
  536.  
  537.   SHUT Lotus
  538.  
  539.   STOP
  540. END
  541. !┌───────────────────────────────────────────────────────────────┐
  542. !│You are recommended to use this box to provide a functional    │
  543. !│description of the block.                                      │
  544. !│In particular, you should note calls to and from the block, as │
  545. !│well as noting any windows opened, and so on.                  │
  546. !└───────────────────────────────────────────────────────────────┘
  547.  
  548. PROCEDURE Build_List(p_handle)
  549. DO
  550.  
  551.   DEFINE ColList[0]
  552.  
  553.   FORGIVE
  554.     CALL (?p_handle)'COLUMNS(ColList)             ! get list of columns
  555.  
  556.   IF A.System.ErrorNumber
  557.     RETURN
  558.  
  559.   DEFINE TabColumns[0]                            ! COLDATA vector
  560.   DEFINE TabLayout[0]                             ! EXPRESSION Vector
  561.   DEFINE Title_1[0]                               ! COLTITLE vector
  562.   DEFINE Width[0]                                 ! width for EXPRESSION vector
  563.   DEFINE Just[0]                                  ! justification for EXPRESSION vector
  564.  
  565.   DO r=1:(?p_handle)'Columns                      ! build the vectors for LIST control
  566.     LET ThisCol =                                 ! create full reference
  567.      p_handle~"."~ColList[r]
  568.  
  569.     LET Type =                                    ! get column type
  570.      (?ThisCol)'TYPE[0]
  571.  
  572.     INSERT TabColumns[0] =                        ! add to the COLDATA vector
  573.      ThisCol~"[0]"
  574.  
  575.     INSERT Title_1[0]  =                          ! add to the COLTITLE vector
  576.      ColList[r]
  577.  
  578.     LET ThisWidth=MAX((?ThisCol)'WIDTH[0],LENGTH(ColList[r]))
  579.  
  580.     INSERT width[0]   =                           ! width used in EXPRESSION vector
  581.      ThisWidth
  582.  
  583.     INSERT Just[0]    =                           ! justification used in
  584.      IF(Type="NUMERIC",                           ! EXRESSION vector
  585.     "right",
  586.      "left",
  587.      "left")
  588.   END
  589.  
  590.   DO r=1:(?p_handle)'Columns                      ! build the EXPRESSION vector
  591.     INSERT TabLayout[0]=
  592.      "WIDTH="~Width[r]*8~" SEPARATOR=yes JUST="~Just[r]
  593.   END
  594.  
  595.   SHUT T.w_sample.LIST8                           ! shut the listbox
  596.  
  597.   OPEN LIST T.w_sample.LIST8,T..w_sample,         ! now re-open  it
  598.    x          = T.w_sample.LIST1'X,               ! LIST1 will be hidden but we will
  599.    y          = T.w_sample.LIST1'Y,               ! use its dimensions however it
  600.    sizex      = T.w_sample.LIST1'sizeX,           ! exists in the Window editor
  601.    sizey      = T.w_sample.LIST1'sizeY,
  602.    COLDATA    = "TabColumns",
  603.    EXPRESSION = "TabLayout",
  604.    COLTITLE1  = "Title_1",
  605.    HORZSCROLL = Yes,
  606.    VERTSCROLL = Yes,
  607.    VISIBLE    = Yes,
  608.    ENABLED    = 3
  609.  
  610.   LET T.w_sample.LIST1'VISIBLE=No
  611.  
  612. END
  613.  
  614. ON DATA
  615. DO
  616.   CASE A.System.Object
  617.     WHEN "T.W_SAMPLE.SLE1"
  618.     DO
  619.       MODIFY Lotus,
  620.         EXPRESSION = CurrentSelection
  621.     END
  622.   END
  623. END
  624.  
  625.  
  626.