světNotes.cz

Full-text s vlastným dialógom (II)
Novinky
31.03.2005 - Miroslav Uhlár

V predchádzajúcom článku som popísal používanie alternatívneho vyhľadávacieho okna, dnes idem k podstate: Ako je to vlastne zrealizované?
Pri popise vychádzam z "prototypového zadania", ktoré si budete vedieť určite prispôsobiť.

A. Zadanie
V aplikácii SearchBox sa nachádzajú dokumenty, obsahujúce tri polia: Subject, Categories (Text) a Body (Rich Text). Úlohou je pripraviť používateľovi vyhľadávanie, ktoré:
1. Umožní zadať slová, vyskytujúce sa v ľubovoľnej časti dokumentu
2. Umožní zadať slová, ktoré sa zároveň nesmú nachádzať v ľubovoľnej časti dokumentu
3. Umožní zadať slová, ktoré musia byť zároveň v nadpise dokumentu (pole Subject)
4. Vyhľadané slová musia byť podfarbené (klasickým full-text spôsobom)

B. Design
Zjednodušená verzia Use Case diagramu:





C. Implementácia

1. Tlačítko MySearch v pohľade
- Otvára formulár formSearch (ako dialógové okno bez OK a Cancel)
- Spúšťa agenta SearchBar

2. Formulár formSearch
- Obsahuje polia na definovanie vyhľadávaných kritérií (Keyword-In, Keyword_Out, Subject)
- Obsahuje pole BasicSelection, ktoré transformuje kritériá na full text query:

A:=@If(Keywords_In="";"";"("+@Implode(Keywords_In;" OR ")+")");
B:=@If(Keywords_Out="";"";"("+@Implode("Not("+Keywords_Out +")";" AND ")+")");
C:=@If(Subject="";"";"("+@Implode("[Subject] Contains \""+Subject+"\"";" OR ")+")");
@Implode(@Trim(A:B:C);" AND ")

- Obsahuje tlačítko Vyhľadať, ktoré zrealizuje:

@Command([ViewRefreshFields]);
@Command([EditGotoField];"BasicSelection");
@Command([EditSelectAll]);
@Command([EditCopy]);
@Command([FileCloseWindow])

3. Agent SearchBar
- Zatvorí a otvorí SearchBar v pohľade (vymazanie prípadných predchádzajúcich queries)
- Vloží obsah clipboardu do SearchBar
- Zavolá agenta Enter (imitácia kliknutia na systémové Search tlačítko)

4. Agent Enter
Deklarácia:
Declare Sub keybd_event Lib "user32.dll" (Byval bVk As Integer, Byval bScan As Integer, Byval dwFlags As Integer,Byval dwExtraInfo As Integer)

Inicializácia
keybd_event &hd,0,0,0 ' Stlačenie enteru
keybd_event &hd,0,2,0 ' Uvoľnenie enteru


D. Limity
Až na prvý limit sa ostatné dajú odstrániť:
1. Podpora len pre Win32 prostredie klienta Lotus Notes
2. V kódoch nie sú "Error Handling" sekvencie
3. V pohľade musia byť zobrazené dokumenty pred použitím MySearch
4. Nie je podpora pre aktualizáciu FT indexu pre spustením hľadania
5. Nie je podpora pre "zrušenie" hľadania


E. Prototyp SearchBox.nsf
To najpodstatnejšie nakoniec - download SearchBox.nsf. A nezabudnite si pred otestovaním vytvoriť Full-text index....