$$Search表单的域
域名 | 数据类型 | 描述 |
Query | 文本域 | 搜索的单词或条件 |
SearchMax | 文本域或关键字域 | 搜索结果的最大文档值 |
SearchOrder | 关键字域 | 对搜索结果排序: 无序/1;老文档在前/2;新文档在前/3 |
SearchWV | 关键字域 | 是否包含单词的变体: 包含/TRUE;不包含/FALSE |
SearchThesaurus | 关键字域 | 是否包含同义词: 包含/TRUE;不包含/FALSE |
SaveOption | 文本域 | 值为0表示不能保存由本表单创建的文档 |
一. 定制视图搜索表单
当你选择一个连接到视图的搜索链接的时候,Domino在当前数据库中寻找一个名为$$Search的表单。如果存在,Domino显示这个表单,否则,它显示默认的视图搜索表单。搜索表单的ACTION属性依赖于搜索的视图。例如,由Domino产生的视图的搜索表单可能包含如下<FORM>标签:<FORMMETHOD=POSTACTION="http://server/123e 543a123e 543a123e 543a123e 543a?SearchView">
然而,当Domino显示一个规则表单的时候,对表单的操作使用CreateDocumentURL,下面是两种避开这个问题的主要方法:
•方法1:使用你自己的<FORM>标签覆盖由Domino产生的<FORM>标签。
•方法2:使用$$Return域或者WebQuerySave代理改变当用户按下Submit按钮时Domino的反应。
第一个方法有点旧了,但是确实有效(不能保证以后仍然有效)。只需要把下面的HTML通用文本包含在你的$$Search表单的顶部:
[</FORM><FORMMETHOD=POSTACTION="?SearchView">]
这将终止由Domino产生的<FORM>模块并开始一个新的<FORM>模块。这个操作的URL
包含在当前目录中,因此如果用户显示$$Search表单使用下面的URL:
http://server/123e 543a123e 543a123e 543a123e 543a/$searchForm?SearchView
则这个操作URL转换为:
http://server/123e 543a123e 543a123e 543a123e 543a?SearchView
使用第二种方法,你使用一个$$Return域或者WebQuerySave代理分析用户的输入并把浏榄器指向SearchViewURL。例如,Domino的“SearchSite”模板的$$Search表单使用下面的$$Return公式:
DBName:=@Subset(@DbName;-1);
"[[/"1DBName1"?SearchSite&Query="1Query1"&SearchOrder="1@Text(Sort)1"&SearchMax="1@Text(MaxResults)1"&SearchWV="1@If(ExactMatch="";"TRUE";"FALSE")1"&SearchThesaurus="1@If(UseThesaurus="";"FALSE";"TRUE")1"]]"
这个公式返回如下值:
[/db?SearchSite&Query=cats&SearchOrder=1&SearchMax=10SearchWV=TRUE&SearchThesaurus=FALSE]
因为这种方法使用了HTTP的GET方法而不是POST方法,它导致了很长的可读性很差的URL。但是,另一方面,这种方法使你可以使用Notes公式语句计算查询自变量的值。
为什么要使用生成查询自变量的公式呢?
坦率的说,大部分用户并不能很熟练地使用Domino查询语法组成如下查询:
FIELDTitleCONTAINS"domain"ORFIELDCategoriesCONTAINS“lotus”
但是这些查询可能非常有用而且有效率。当你只对某个特定的域感兴趣的话为什么要对每个文档进行全文搜索呢?你可以通过添加选项定制$$Search表单使用户搜索特定的域变的简单,从而可以使用$$Return公式(或WebQuerySave代理)根据用户的输入计算一个Domino搜索URL。
无论使用方法1还是方法2,你可能都想在你的$$Search表单中包含表2-4中部分或所有域。
FAQ:
Q:
1. Create a form called $$Search. It needs to contain a field for the user to enter their search string, and a button. I use the following instead if a button:
<A HREF="javascript:document.forms[0].submit();"
onClick ="javascript:document.forms[0].submit();"
OnMouseout="flipImage('Searchbutton','Searchbutton'); " OnMouseOver="flipImage('Searchbutton','Searchbuttonon');">
<IMG SRC="<Computed Value>/Search_0.gif?OpenImageResource" name = "Searchbutton" alt="Search" border = 0 height=22 width=24></a></div>
where
"/"+@ReplaceSubstring(@ReplaceSubstring(@Subset(@DbName;-1);" ";"+");"//";"/")
is in the computed value
2. Full text index your database
3. Create a view to show all documents as you would like them to appear in the search results.
4. Create a form called $$SearchTemplateDefault containing a field called $$ViewBody
I've done all that has been told, made a view called alldocuments, but when i press on the search button, it only gives me "form processed".
Another thing, on the $$search form, where should i put ""/"+@ReplaceSubstring(@ReplaceSubstring(@Subset(@DbName;-1);" ";"+");"//";"/")" and how??
Can someone please help me, because i need this to work ......
A:
RE: $$search not working
Posted by stephano bennetti on 12.Jun.02 at 04:16 using a Web browser
Category: Domino Designer -- Other
On the $$Search form you need a $$Return field.
It would contain something along these lines....
DBName:=@Subset(@DbName;-1);
"[[/"+DBName+"/($All)?SearchView&Query="+Query+"&SearchOrder="+@Text(Sort)+"&SearchMax="+@Text(MaxResults)+"&SearchWV="+@If(ExactMatch="";"TRUE";"FALSE")+"&SearchThesaurus="+@If(UseThesaurus="";"FALSE";"TRUE")+"]]"
Dont forget to include a SaveOptions field set to "0" so search forms don't get saved.
You can get all this stuff if you create a new site search database from the ntf template on your server.
Not onlt that, but if you want to see search URLs in action than watch what happens in the address bar when you search this forum.
Good Luck