El primer paso será crear un nuevo objeto sobre la ventana de resultados, un menú desplegable cuyo aspecto sería el siguiente:
En el procedimiento $construct de la ventana resultados añadiremos la siguiente secuencia:
; Carga menú de favoritos
Do cFavoritos.$define(cFavNombre,cFavConsulta)
Test if file exists {[con(mid(sys(115),1,pos(':',sys(115))),iBusqueda,'.txt')]}
If flag true
Set import file name {[con(mid(sys(115),1,pos(':',sys(115))),iBusqueda,'.txt')]}
Prepare for import from file {Delimited (tabs)}
Import data cFavoritos
Close import file
End If
Do cFavoritos.$addbefore(1,'Favoritos')
Do cFavoritos.$add('Añadir...')
Do cFavoritos.$add('Examinar...')
Do cFavoritos.$line.$assign(1)
Cuando el usuario seleccione una opción de éste menú podrá suceder lo siguiente:
On evClick
Switch cFavoritos.cFavNombre
Case 'Añadir...'
Prompt for input De nombre a la selección actual/Favoritos/3005/50 Returns cFavNombre (Cancel button,Prompt above entry)
If flag true
Do cFavoritos.$addafter(1,cFavNombre,$clib.$queries.[iBusqueda].$extraquerytext)
; Guarda favoritos en el disco
Set current list cFavoritos
If #LN>3
Set print or export file name {[con(mid(sys(115),1,pos(':',sys(115))),iBusqueda,'.txt')]}
For each line in list from 2 to #LN-2 step 1
Transmit text to print file {[cFavoritos.cFavNombre][chr(9)][cFavoritos.cFavConsulta][chr(9)][chr(13)]}
End For
Close print or export file
End If
End If
Case 'Examinar...'
Open window instance Favoritos (iBusqueda)
; Recarga favoritos
Set import file name {[con(mid(sys(115),1,pos(':',sys(115))),iBusqueda,'.txt')]}
Prepare for import from file {Delimited (tabs)}
Import data cFavoritos
Close import file
Do cFavoritos.$addbefore(1,'Favoritos')
Do cFavoritos.$add('Añadir...')
Do cFavoritos.$add('Examinar...')
Do cFavoritos.$line.$assign(1)
Do $root.$redraw()
Default
Do $clib.$queries.[iBusqueda].$extraquerytext.$assign(cFavoritos.cFavConsulta)
Do iVerList.$definefromsqlclass(iBusqueda)
Do iVerList.$sessionobject.$assign(iSessionObj) Returns #F
Do iVerList.$select() Returns lStatus
Do iVerList.$fetch(kFetchAll) Returns lStatus
Do iVerList.$line.$assign(1)
Calculate cRecordList as con(iVerList.$linecount,' registros en seleción')
Do $root.$redraw()
End Switch
Do cFavoritos.$line.$assign(1)
Do $cwind.$objs.Favoritos.$redraw()
La ventana para la gestión de favoritos (opción examinar) mostraría el siguiente aspecto:
La programación para esta ventana sería como sigue:
En el $construct de la ventana:
Do iListFavor.$define(iFavNombre,iFavConsulta)
Set current list iListFavor
Set import file name {[con(mid(sys(115),1,pos(':',sys(115))),pBusqueda,'.txt')]}
Prepare for import from file {Delimited (tabs)}
Import data iListFavor
Close import file
Enter data
If flag true
; Guarda favoritos en el disco
Set print or export file name {[con(mid(sys(115),1,pos(':',sys(115))),pBusqueda,'.txt')]}
For each line in list from 1 to #LN step 1
Transmit text to print file {[iListFavor.iFavNombre][chr(9)][iListFavor.iFavConsulta][chr(9)][chr(13)]}
End For
Close print or export file
End If
Close top window
Para la opción "mover arriba":
On evClick ;; Event Parameters - pRow( Itemreference )
Calculate iListFavor.$line as $cwind.$objs.favoritos_datagrid_1016.$gridvcell-1
If iListFavor.$line>1&iListFavor.$linecount>1
Load from list
Do iListFavor.$addbefore(iListFavor.$line-1,iFavNombre,iFavConsulta)
Do iListFavor.$remove(iListFavor.$line+1)
Do $cwind.$objs.favoritos_datagrid_1016.$redraw()
End If
Para la opción "mover abajo":
On evClick
Calculate iListFavor.$line as $cwind.$objs.favoritos_datagrid_1016.$gridvcell-1
If iListFavor.$line
Load from list
Do iListFavor.$addafter(iListFavor.$line+1,iFavNombre,iFavConsulta)
Do iListFavor.$remove(iListFavor.$line)
Do $cwind.$objs.favoritos_datagrid_1016.$redraw()
End If
Y por último para la opción "eliminar":
On evClick
Calculate iListFavor.$line as $cwind.$objs.favoritos_datagrid_1016.$gridvcell-1
If iListFavor.$line>0
Do iListFavor.$remove(iListFavor.$line)
Do $cwind.$objs.favoritos_datagrid_1016.$redraw()
End If
Y eso será todo, el sistema contendrá en archivos de texto plano, las preferencias o favoritos de las búsquedas seleccionadas permitiendo su posterior uso, con tan sólo seleccionarlas desde el menú, cada búsqueda diferente tendrá su propio archivo de texto plano.