下载

1下载券

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第7章 在Web中使用表单

第7章 在Web中使用表单.doc

第7章 在Web中使用表单

zhengguangchuan
2013-11-26 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《第7章 在Web中使用表单doc》,可适用于IT/计算机领域

第章在Web中使用表单第章在Web中使用表单在表单中使用公式和JavaScript在表单中使用Web元素嵌入Web元素创建特殊用途的模板表单嵌入视图的例子在表单和表单对象中使用HTML属性RTF文本域的属性Cookie使用表单操作和热点表单操作使用热点在表单内使用html在域中使用Html在表单内直接使用内置Html显示附属图形文件把文本域显示为文本区域在表单内使用CGI变量表单和搜索定制视图搜索表单定制搜索界面定制SiteSearch表单定制搜索结果表单其它特性使用隐藏域获取上载文件名称表单是Notes应用的基础它们决定了数据在输入输出过程中的显示方式在一定程度上也决定了在数据库中信息是如何存储的。如果没有设计漂亮的表单就不会有精美的Domino应用。如果你熟悉HTML的表单开始时你可能会被LotusNotes的表单弄糊涂。和HTML表单一样Notes的表单被用来从用户那儿获取信息(通常是通过可编辑的域)。和HTML表单不一样的是Notes的表单也被用来显示已经获取的信息。这些信息存储在称为文档的容器之中。当你打开一个Notes表单时填写完信息选择保存。此时在数据库中保存一个新文档。这个文档中包含了一个Form域它的值是用来创建文档的表单名当你打开文档时这个表单被用来显示信息。文档是数据的一部分表单是数据库设计的一部分。这和一个数据库中的记录(称为数据)与表(称为基础组织)二者之间的关系相类似。在HTML表单和Notes表单中另一个不同的地方是访问的模式。在默认情况下当你打开一个Notes文档时它处于阅读模式(只读模式)读者所看到的都是在一个字处理器中创建的文档不包含任何文本域或下拉列表。如果你将此文档改成编辑模式则它有着明显的不同:可编辑文本域下拉列表以及其他元素都变得可见了好像是在一个HTML的表单之中。然而你所见到的并非是一个表单确切地说你所看到的文档是通过一个表单显示出来的。当你想通过Web来创建一个新文档时你通过打开表单OpenFormURL命令打开一个适当的表单。例如下面的URL在“讨论数据库”中打开了MainTopic的表单。http:localhostdiscussnsfMainTopicopenFormDomino将Notes表单转化成一个HTML表单以响应你的请求。当然Notes客户端应用还可以使用表单的没有HTML等价的另外一些特征这些特征并不能在Domino的Web应用中工作。你可以通过提交表单来保存新文档。提交表单时会触发表单事件(通过一个CreateeDocumentURL对象)。继而Domino使用在CreateDocumentURL中指定的表单将信息从HTML表单传输过来并保存在数据中。你不必考虑一个Notes表单是否适合Web。在你的Notes表单或文档中使用的大部分格式都能被Domino服务器翻译成HTML语言。随着Domino新版本的推出由Notes向Web的转换会更完善更完美。我们在Web设计中还要配合Html的很多特性比如CSS等。在表单中使用公式和JavaScript在表单中使用公式和JavaScript主要体现在几个方面:)窗口标题公式)html首页内容)htmlBody属性)JSHeader)表单在Web上支持的其他事件)域公式和事件图表表单事件中使用公式.窗口标题公式在这里以字符串的形式制订窗口标题在Web上对应为HTML的<title>标签的内容。显示在浏览器的标题栏里。.html首页内容在Web上设置<head>标签中的内容。也可以在表单中使用“$$HTMLHead”域设置此标签的内容。下例是在Designer中用公式指定一个JavaScript脚本库globaljs。如果在字符串中使用引号请加转义符反斜杠“”公式WebDbName获得符合Web格式的数据库文件名。图表html首页内容使用公式或者在公式中使用“{}”来应用字符串这样在字符串中间就不需要转义符了。这两种做法效果是相同的。在浏览器IE(后面所用浏览器都是IE)中预览然后查看源文件:图表在浏览器中查看Html首页内容.HtmlBody属性设置<body>标签的属性。遵循公式的语法。下例设置Body的背景图片。图表表单中的Htmlbody属性在Web中显示(截取局部)图表在浏览器中查看Body属性查看源文件.JSHeader在Html页面中定义应用于本页面的JavaScript代码遵循JavaScript的语法。而不是公式的语法。在这里定义的JavaScript函数和变量可以在整个表单中使用。图表在JSHeader中使用JavaScript查看Web源程序图表在浏览器中查看JSHeader产生的Script标签.表单在Web上支持的其他事件作为Web应用程序我们一般在公式的这些事件中使用JavaScript代码遵循JavaScript的语法。如:OnLoadOnUnLoadOnClickOnSubmit以OnLoad为例图表在onLoad事件中使用JSHeader中定义的JavaScript函数在OnLoad里面使用了上面定义的showCopyRight函数每当转载后就显示版权信息。图表onLoad函数的效果.域公式和事件与的缺省值公式、计算值公式、输入转换公式、输入校验公式等都可应用Web见第章。下面以“IBM认证系统”的studentinfo表单为例在输入姓名的长度应大于等小于等于。输入转换公式:图表域的输入转换公式输入校验公式:图表域的输入验证公式在Web中预览只输入一个字前后有多个空格:“杨”图表域输入验证公式效果保存后返回下面结果注意:这个输入验证是在服务器上发生的不是在客户端如果提交的数据流比较大效率不太高。后面会讲解在浏览器中用JavaScript校验。.$$Return域$$Return是一个特殊的域它的值决定了用户递交了表单后将会看到什么。如果返回值是包含在方括号中间的URL用户的浏览器将直接指向此URL否则Domino仅仅向浏览器传输值。只有执行了下述命令后才会启用$$Return域的作用。Command(FileSave)Command(FileCloseWindow)我们可以在$$Return域中写下列内容表单提交后打开另外一个URL。图表$$Return域中的公式如果不使用$$Return域表单提交后仅仅显示文字“表单已处理”。在表单中使用Web元素在Domino中提供了许多不同类型的设计元素他们都非常有用。但是当配合着使用这些元素时常常变得更为有效。配合使用Domino的设计元素的最常用的方法是在一个表单内嵌入多种元素。嵌入的元素包括视图、导航器、大纲和文件上载控件。嵌入Web元素在表单中和其他设计元素例如大纲一起配合使用的最简单的方法是直接嵌入元素。例如你可以创建一个小的水平的大纲并嵌入到每一个表单中以帮助用户使用数据库。若使用这种方法通过一个OpenFormURL打开表单来显示此大纲(或其他设计元素)。可以使用“创建菜单”。图表在表单中嵌入元素创建特殊用途的模板表单你可以创建一些特殊的表单不但可以使用OpenForm的URL也可以使其他URL例如OpenView或OpenNavigator来打开这个表单。.$$ViewTemplate你可以让Domino总是使用一个表单来显示一个特殊的视图。为此给此视图命名为:$$ViewTemplateforViewName在此ViewName是视图的名字或别名。例如一个用来显示AllbyDate视图的表单可以命名为$$ViewTemplateforAllbyDate。当你创建这种$$ViewTemplate的类型的表单时必须在表单中嵌入视图本身(或者你也可以包含一个名为$$ViewBody的域来替换嵌入的视图)。.$$ViewTemplateDefault假设你的Domino数据库包含个不同的视图而你想让他们具有一致的风格你可以创建一个$$ViewTemplate表单并做份拷贝每一个对应一个视图但这会非常费时。相反你可以创建一个简单的表单用来显示数据库内的任何视图仅仅只须给表单命名为$$ViewTemplateDefault当你创建这种$$ViewTemplate表单时嵌入一个视图元素(或$$ViewBody域)而不必指定一个特殊的视图。.$$NavigatorTemplate你可以让Domino总是使用一个表单来显示一个特殊的导航器。为此给表单命名为:$$NavigatorTemplateforNavigatorName.$$NavigatorTemplateDefault你可以创建一个简单的表单用来显示数据库内的任何导航器仅仅只须给表单命名为$$NavigatorTemplateDefault.联合表单你可以使用联合的表单名或别名来创建多重目的的表单。例如如果你给表单命名为:$$ViewTemplateDefault|$$NavigatorTemplateDefault缺省地使用同一个表单来显示数据库中的任何视图或导航器。嵌入视图的例子在数据库中创建一个$$ViewTemplateDefault表单嵌入一个$$ViewBody域。图表$$ViewTemplateDefault表单当打开视图时就使用这个表单显示图表缺省模板表单的显示效果在表单和表单对象中使用HTML属性你可以在表单中为表单和表单中的每一个元素指定HTML属性。在Domino中这样做而不是编辑一个静态的HTML文件的好处是你可以使用Notes的公式语言来决定HTML属性。如果你想使表单的HTML根据用户或域值或其他元素的不同而改变的话该属性非常有用。表单的html属性图表表单的Html属性域的html属性图表域的html属性表单的“Html首页内容”输入在<head><head>标签之间的内容。也可以在表单中用$$Htmlhead代替。我们可以在表单“Html首页内容”中增加一个<meta>标签:{<metahttpequiv="refresh"content="">}每个秒对当前页面刷新一次。查看源文件:图表使用Meta标签RTF文本域的属性你可以通过在域的HTML属性中指定行数和列数来控制RTF文本域的大小。在其Html属性中指定下述公式:"rows=cols=wrap=virtual"在html源文件的值如下:<textareaname="InfoBody"rows=cols=wrap=virtual><textarea>Cookie使用一个<META>标记设置Cookie和一个CGI域并返回值。Cookie是当客户端要求一个特殊的URL时HTTP服务器传输给客户端的一些信息。然后当客户端在同一域内请求其他的URL时客户端为此域传输给服务器所有的CookiesCookie数据被保留在客户端机器上的浏览中。当用户打开一个Domino表单时你可以使用<META>标记的HTTPEQUIV属性来设置一个Cookie。为此创建一个HTML的Head公式它的值为如下格式:"<metahttpequiv="SetCookie"content="cookiename=value">"为了得到Cookie数据创建一个名为HTTPCOOKIE的多值文本域(HTTPCOOKIE是一个CGI变量)。在html首页属性中写入:"<metahttpequiv="SetCookie"content="CUSTOMER=explorerpath=expires=Friday,Dec::GMT">"在表单上创建一个“HTTPCookie”域。在浏览器中打开表单在HttpCookie域中会看到Cookie的值图表使用meta标记设置Cookie观察其结果除了用户设置的外Domino自动增加了一个Cookie名字是DomAuthSessId用于Domino认证。使用表单操作和热点表单操作可以创建表单操作按钮用于Notes客户端Web浏览器或者两者都用。对于Notes客户端的应用你可以配置表单操作并在菜单条中显示但在Web浏览器中的应用并不支持这一点。对Domino的操作按钮有两种类型的使用方式。有一种缺省按钮的方式当你在数据库属性中设置了“Web访问:UseJavascriptwhengeneratingpages”,即是这种结果。这一部分描述了缺省的方式。另外一种方式见后面的章节。缺省地Domino将操作按钮转换为简单的URL链接或命令。某些类型的公式比较容易转换为URL。但有些公式例如DialogBox因为它们没有相类似的对应URL而不被支持如果你创建了一个表单操作按钮但它不能被转换为一个URL链接Domino将帮你隐藏它。尽管Domino并不支持直接使用LotusScript的按钮但它可以显示一个按钮此按钮使用command(ToolsRunMacro)公式来运行LotusScript或Java代理。当然这些代理只能使用Web支持的特性。对于在Domino下运行的代理LotusScript的前端类是不可用的。例如你不能创建一个运行Domino代理的按钮它使用NotesUIDocumentCut()和UIDoucmentpaste()。下表显示了在Domino应用中非常实用的表单操作按钮。图表常用的表单操作操作例子创建新文档command(Compose”StudentInfo”)保存文档command(filesave)编辑当前文档Command(EditDocument)删除当前文档Command(Editclear)使用浏览器打开URLURLOpen(“wwwibmcom”)打开一个视图Command(OpenView"UserProfiles")在视图中打开一个特殊的文档Command(OpenView"UserProfiles"Username)Command(OpenDocument)运行代理Command(ToolsRunMacro"Cleanup")打开导航command(OpenNavigator"MainMenu")提供在线帮助Urlopen(""WebDbName"$helpOpenhelp")以“保存”为例转化成的URL为<a>标记:图表表单操作的转化结果调用了一个doClick函数:图表操作的公用doClick函数在代码的最后调用了一个表单submit提交函数。在提交之前设置了target属性和域Click的值。在Designer为“StudentInfo”表单创建的操作如下:在浏览器的显示效果如下(有些操作被隐藏了):每个操作被转换成<a>标记后显示在表格里。但是这个样式不太美观。设想用<table>的属性修改其样式发现该表格没有名称如果修改其样式则表单的所有表格都回发生变化。经过仔细观察表单产生的html代码发现操作使用的表格在最上面。可以用下面的JavaScript代码修改操作条的样式:functionsetActionBarStyle(){varcoll=documentalltags("table")varbg="#ccc"varbg="#FFFFFF"if(coll!=){vart=coll第一个表格varr=trowstborder=tborderColor=bgtname="actionbar"tbgColor=bgrbgColor=bgtcellPadding=tcellSpacing=tstylecolor="#FFFFF"}}具体设置方法是:把这个函数放在表单的“JSHeader”事件中或者创建一个JavaScript库在表单的“Hmtl首页内容”中引入。在表单的onLoad事件中调用该函数。图表设置表单操作的新样式重新刷新页面后显示如下:图表改变后的表单操作样式去掉了表格的边框。使用热点在表单中可以创建下列类型的热点:图表创建热点在Web中支持链接热点按钮和操作热点。·链接热点在Web上转换为<a>标记。·操作热点的转化方式和表单操作相同。·按钮在Web上转换为<inputtype=button>标记附带一个OnClick事件。下面的表单上有个操作按钮:图表表单中的热点按钮在浏览器中转化为<input>图表热点按钮转化成的html代码在表单内使用html在域中使用Html有时为了达到一些特殊效果我们需要在表单中直接使用HTML下面以一个列表为例子假设你有一个ProjectSkills的多值域用户使用下拉列表框中选定的值来填充它之后当用户使用只读模式打开该文档的时候选定的值被显示时Notes会让你选择某个老式的定界符例如:ProjectManagementSystemsAnalysisNetworkEngineering创建一个特别的计算域令它在编辑状态时隐藏使用下面的公式把这些值转换为HTML:"<li>"ProjectSkills"<li>"这个公式在ProjectSkills域的开始和结尾添加列表标签如果你将这个域设置为每行显示一个值你得到的结果如下:<li>ProjectManagement<li><li>SystemsAnalysis<li><li>NetworkEngineering<li>在Web浏览器中转换为列表:ProjectManagementSystemsAnalysisNetworkEngineering方括号和尖括号在Domino中代表直接传递到浏览器的HTML代码作为结果在浏览器中以加重表单的方式列出技能项目。如果你希望你的表单在Notes中和在浏览器中同样吸引人请注意保证这个域对Notes客户端用户隐藏。在表单内直接使用内置Html为了向浏览器直接传送HTML代码我们还可以把html代码之间写在表单内选择这些文本在“文本”菜单中选择“内置Html”。图表使用内置html文本下图中的灰色代码就是“内置Html”直接在浏览器中显示他们的含义是创建了一个表格。图表内置html文本的格式显示附属图形文件当我们在表单中嵌入“文件上载控制”后在浏览器中可以向文档上载附件。图表表单中使用文件上载控制使用Domino表单嵌入的控制上载的文件被自动附加在创建的Notes文档中。默认情况下Domino把文件附件显示为一个图标该图标连接到附加的URL中。附加的URL采用如下形式:http:Serverdatabaseviewdocument$filefilename根据文件类型的不同点击一个指向文件的链接将有不同的效果。例如点击一个指向典型的二进制文件的链接将引发浏览器显示一个提示询问你是想用某个应用程序打开该文件还是想把它保存在本地的硬盘上。点击一个指向HTML文件的链接将引起浏览器显示HTML文件内容这与把HTML文件保存在服务器的文件系统中效果是不一样的。对于Web兼容的图形文件比如JPG形式或GIF形式我们希望能够直接看到他们的内容。最简单的处理办法是创建一个计算域这个域使用AttachmentNames函数产生一系列的<img>标签每个附属文件一个。(AttachmentNames函数返回所有附属文件的列表类似地AttachmentLengths函数返回所有附属文件的长度)。这种方法的问题在于并非每个文件都是图形文件事实上并非每个附属图形都是Web兼容的形式某些图形可能是TIFPCX或者BMP形式。我们需要做的是只对那些JPG或GIF形式的文件产生<IMG>标签而忽略其他文件格式。我们在“InfoContentForm”表单的下部创建了一个显示时计算域“InfoPhoto”它产生一些列的<IMG>标签而前只针对Web兼容的图片。下图显示了它的效果。图表直接显示文档附属的图形文件可以看出文档中有个附件只为Web支持的图形创建了<IMG>标签。下面是InfoPhoto的计算公式:)NoPreviewMsg:="图片(无)")SupportedImages:="gif":"jpeg":"jpg":"jpe":"jfif":"pjpeg":"pjp":"bmp")SupportedImages:=UpperCase(SupportedImages))InfoAttNames:=AttachmentNames)tmp:=UpperCase(InfoAttNames)""Right(InfoAttNames""))If(Ends(UpperCase(InfoAttNames)SupportedImages)""Attachments=Return(NoPreviewMsg)Return(NoPreviewMsg)))View:="")DocID:=Text(DocumentUniqueID))n:=)files:="")While(n<=Elements(SupportedImages))tmp:=Trim(Left(tmp""SupportedImagesn)Right(tmpSupportedImagesn)))files:=files:tmp)n:=n)))files:=Trim(files))url:="<imgsrc=""""WebDbName""View""DocID"$file"files""width=height=>")url下面我们逐行对公式进行分析。并假设有个附件:"aaagif”:"bbbjpg”:"cccbmp”:"dddgif"公式的第一行是一个没有图片时的提示信息第二行列表类型的临时变量存储了支持的图形文件的扩展名。第三行把临时变量SupportedImages中的值转为大写这样便于进行字符串比较。第四行获取所有的附件的名称临时变量InfoAttNames的值就是:"aaagif”:"bbbjpg”:"cccbmp”:"dddgif"第行把所有的附件名称转换为大写在末尾再加一个扩展名tmp结果如下:"AAAGIFGIF":"BBBJPGJPG":"CCCBMPBMP":"DDDGIFGIF"第行用if和Ends函数分析文件名判断是否有支持的文件类型。如果没有支持的文件类型或者附件个数为终止公式。第行把“”赋值给临时变量View存储视图的文件名是视图的占位符匹配任何视图。第行获得文档的唯一ID。第行到第行是While函数。遍历SupportedImages中的每一个值当第一次循环时left函数的返回值为:“AAA”:“”:“”:“DDD”@Right函数的返回值为:“GIF”:“”:“”:“GIF”做加法后使用trim去掉空值tmp结果为“AAAGIF”:“DDDGIF”。后缀名为GIF的图形文件被提取出来。循环执行完毕后所有被支持的文件都被提取出来存储在临时变量Files中。然后把Files的值和<IMG>标签进行组合注意字符串的首位家方括号把域的值作为HTML代码。第行是计算域的主公式把计算的结果赋值给计算域InfoBody。有时可能对用户附加在文档中的文件(比如一个图形)有其他用途当文档被显示的时候你不想显示附件的图标。为了隐藏上载的附件在表单中创建一个名为$VAttachmentOptions的域并将其值设为。把文本域显示为文本区域默认情况下当Domino把一个表单转换为HTML形式的时候它把RTF文本域转换为<TEXTAREA>标签把文本域转换为<INPUTTYPE=“TEXT”>标签。通常情况下这种转换工作良好文本域的值较短可作为姓名或类别RTF域的值较长可作为信件的主体。但是偶尔也有例外例如假设你有一个包含一段文字或者更多的Description域而且你想把这个域包含在视图中则你就不能使用RTF域因为RTF域的内容不能显示在视图中。那么开发者应该怎么做呢?你可以使用内置HTML文本创建一个文本域和一个<TEXTAREA>界面。首先你应该了解Domino不管你使用的文本域是自动产生的还是人工创建的只要这个域的NAME属性与设计表单时创建的域的属性相同即可。以“模拟练习题选择题表单”为例题目有时比较长如果用文本域输入空间比较小使用“内置Html文本”创建一个<textarea>文本区域name属性与题目名称域“MQuestion”相同。设置隐藏条件在编辑时显示<textarea>文本区域只读模式时隐藏。图表把单行文本域显示为文本区域在浏览器中创建题目:图表文本域变文本区域的显示效果内置HTML文本创建了一个行高列宽的文本区域允许用户有足够的空间填写描述。注意文本区域的name属性被设置为MQuestion这样当你在文本区域中输入一个值并提交表单的时候你输入的值被保存在文档的MQuestion域中。“内置Html文本”中有一个<计算的值>是一个计算文本其公式是:MQuestion如果不使用计算文本每次编辑或退出文档的时候将丢失原来的MQuestion。计算文本保证当你编辑一个存在的题目文档的时候原来的MQuestion总是出现在文本区域中如果不编辑文本区域并提交表单的时候MQuestion域保持不变当你对文本区域进行了编辑的时候该域的内容被更新。在表单内使用CGI变量CGI变量是能把服务器端信息传递到其他CGI程序或脚本中的环境变量。典型情况下当用户提交表单的时候CGI变量被设置处理表单的CGI程序从环境中获得这些变量。CGI程序可能是一个Perl脚本C程序DominoCreateDocumentURL,一个LotusScript代理或其他能够处理一个表单的程序。在Domino中捕获CGI变量有下面两种方式:·在Domino表单中创建一个特别的域和CGI变量的名称相同。·在LotusScript或Java中获取一个DocumentContext对象并访问它的属性。为了在域中捕获CGI变量创建一个以CGI变量命名的文本域(例如HTTPCOOKIE)。一般地在编辑状态下将该域设置为隐藏这样用户就不能改变域中的值。当用户打开表单的时候HTTPCOOKIE环境变量的实际值变成了域中的默认值。在第章列出了所有的CGI变量。我们在使用CGI域的方式和其普通域相同的可以设置为可编辑计算创建时计算和显示时计算。图表表单中使用CGI变量表单和搜索Domino提供了一个支持搜索功能的命令ViewShowSearchBar在视图上可以使用此命令创建一个搜索操作。执行后其界面如下:图表缺省的搜索表单观察其URL命令:http:syzxserverLotusCertnsffdfcdca$searchFormSearchView数据库名称后是被搜索视图的唯一标识符视图后是缺省的$searchForm搜索表单?后面是SearchView命令。为了提供更友好的搜索界面我们可以定制搜索表单。定制视图搜索表单当你选择一个连接到视图的搜索链接的时候Domino在当前数据库中寻找一个名为$$Search的表单。如果存在Domino显示这个表单否则它显示默认的视图搜索表单。搜索表单的ACTION属性依赖于搜索的视图。例如由Domino产生的视图的搜索表单可能包含如下<Form>标签:<formmethod="POST"action="LotusCertnsffdfcdcaSearchView">这就是我们在定制搜索表单过程中需要的标签。但是当Domino显示一个规则表单的时候对表单的缺省操作使用CreateDocumentURL下面是两种避开这个问题的主要方法:·方法:使用你自己的<Form>标签覆盖由Domino产生的<Form>标签。·方法:使用$$Return域或者WebQuerySave代理改变当用户按下Submit按钮时Domino的反应。第一个方法是用内置Html文本只需要把下面的内置HTML文本包含在你的$$Search表单的顶部:<FORM><FORMMETHOD=POSTACTION="SearchView">这将终止由Domino产生的<Form>模块并开始一个新的<Form>模块。这个操作的URL包含在当前目录中因此如果用户显示$$Search表单使用下面的URL:Http:Serverfdfcdca$SearchFormSearchView则这个操作URL转换为:Http:ServerfdfcdcaSearchView使用第二种方法你使用一个$$Return域或者WebQuerySave代理分析用户的输入并把浏榄器指向SearchViewURL。例如Domino的“SearchSite”模板的$$Search表单使用下面的$$Return公式:DBName:=WebDbname""DBName"SearchSiteQuery="Query"SearchOrder="Text(Sort)"SearchMax="Text(MaxResults)"SearchWV="If(ExactMatch="""TRUE""FALSE")"SearchThesaurus="If(UseThesaurus="""FALSE""TRUE")""因为这种方法使用了HTTP的GET方法而不是POST方法它导致了很长的可读性很差的URL。但是另一方面这种方法使你可以使用Notes公式语句计算查询自变量的值。坦率的说大部分用户并不能很熟练地使用Domino查询语法组成如下查询:FIELDTitleCONTAINS"domain"ORFIELDCategoriesCONTAINS"lotus"但是这些查询可能非常有用而且有效率。当你只对某个特定的域感兴趣的话为什么要对每个文档进行全文搜索呢?你可以通过添加选项定制$$Search表单使用户搜索特定的域变的简单从而可以使用$$Return公式(或WebQuerySave代理)根据用户的输入计算一个Domino搜索URL。在定制搜索的时候我们需要在$$Search表单中增加下面的域图表搜索表单中的预定义域OptionalargumentsDescriptionDefaultValueQuery搜索字符串无SearchMax共能返回项目的最大数目=不受限制无但是缺省值可以在Web站点文档中设置SearchWv包含衍生词:TRUE(或)或FALSE(或)FALSESearchOrder=按相关性=按日期升序=按日期降序=使用视图顺序(仅使用SearchView时)SearchThesaurus使用同义词:TRUE(或)或FALSE(或)(R搜索引擎忽略此选项)FALSESearchFuzzy使用模糊搜索:TRUE(或)或FALSE(或)FALSESearchEntry用于每个结果项目的表单名称(forSearchDomainonly)"ResultEntry"Start开始文档以翻开书页=未翻开书页Count返回翻开书页的页数=未翻开书页Scope搜索范围:=限于Notes数据库=限于文件系统=都包括搜索运算符如下表:搜索运算符是一些词和字符用来指示Notes搜索特定组合的词、域、日期和数字。在Notes中搜索运算符的工作方式与在大多数Web搜索引擎中的方式相同即基于布尔逻辑同时具有某些强大的功能增强。例如可创建一个搜索用于搜索出现在同一文档中的两个词并指定这两个词的靠近程度、它们必须位于哪个域以及它们的精确大小写形式。此外还可指定应该将某个词视为比另一个词更重要以便包含第一个词的文档更靠近搜索结果列表的顶部。此外还可以使用通配符搜索词的一部分。运算符是Notes中的保留词。如果希望像搜索正常文本一样搜索运算符(例如在"GeneandJoan"这样的短语中)则必须用引号将该短语引起来。要在搜索中使用运算符应按下表所示格式在“搜索”栏中的文本输入框中输入该运算符。图表搜索条件运算符运算符描述和样例Notes视图Notes网域Web视图和网域Contians包含=告知Notes此运算符之前的域必须包含其后面的文本。“CONTAINS”与其两边的单词之间应有空格。样例:'ProjectnameCONTAINStopsecret'将查找其Projectname域中包含'topsecret'一词的文档。是是否fieldfieldnameFIELDfieldnamefieldname(使用方括号)表示“搜索该域”。必须通过域名指定要搜索的域。样例:以下是查找其Projectname域中包含短语topsecret的文档的三种方式:FIELDProjectnameCONTAINStopsecretfieldProjectnameCONTAINStopsecretProjectnameCONTAINStopsecret注意Notes将文件附件存储在$FILE域中。是否是仅适用于视图搜索()parentheses决定Notes将以哪种顺序处理查询区段。在括号内的查询部分将优先于括号外的部分进行处理。样例:'(FIELDProjectnameCONTAINStopsecretORFIELDTitleCONTAINStuna)AND(FieldbodyCONTAINScatORFieldrevdate>)'将返回其Projectname域中包含'topsecret'一词或者其标题域中包含'tuna'一词并且body域中包含cat一词或者revdate域中包含一个大于的日期的文档。是否是且AND查找包含所有由AND连接的条件或单词的文档。样例:'catANDdogANDfish'将查找包含这三个单词的文档。是是'不适用或OR|ACCRUE,(逗号)查找包含任意一个条件或单词的文档并且返回结果按搜索项在文档中的出现次数进行排列。样例:'catORdogORfish'将查找至少包含其中一个单词的文档。注意按相关性进行排序时ACCRUE要比OR效果好些。是是是NOTnot!对查询取非。可在词间输入NOT:'catANDNOTdog'查找包含cat一词的文档但是如果它们也包含dog一词则不查找这些文档。'(catORdog)ANDNOT(fishORfrogs)'查找包含cat或dog一词的文档但是如果它们也包含fish或frog则不查找这些文档。'(catANDdog)ANDNOTfish'查找包含cat和dog两词的文档但是如果它们也包含fish一词则不查找这些文档。可在任何域名前输入NOT:'NOTProjectnameCONTAINStopsecret'查找其Projectname域中不包含'topsecret'一词的文档。不能在数学符号=、<、>、<=或>=后输入NOT也不能在日期或数字前输入NOT。例如'date=NOT'不是正确的查询。是是是""为运算符(如AND、OR、CONTAINS等)加上引号可使Notes将其视为普通词。样例:"rockandroll"将查找包含短语rockandroll的文档。是是是PARAGRAPHparagraph查找PARAGRAPH两边的单词出现在同一段落中的文档并按单词的靠近程度进行排列。样例:'carPARAGRAPHwheels'将查找'car'和'wheels'出现在同一段落中的文档并且按这两个单词在段落内的靠近程度进行排列。是是否SENTENCE句子查找SENTENCE两边的单词在同一句子中的文档并按单词的靠近程度进行排列。样例:'carSENTENCEwheels'将查找'car'和'wheels'出现在同一个句子中的文档并按这两个单词在句子中的靠近程度进行排列。是是否这是一个通配符。可代表任何单个字母。不适用于日期或数字。样例:'one'将查找包含bone、cone、done、gone(以及其他任何以'one'结尾的四个字母的单词)的文档。将查找包含stack、clock、stick、truck、rack、rick、rock的文档是是是*这是一个通配符。可代表任意多个字母。不适用于日期或数字。样例:'*one'将查找包含bone、cone、clone、crone、done、drone、gone、telephone(以及其他任何以'one'结尾的任意长度的单词)。同样'*one*'将查找包含bone、cone、clone、lonely、phoned、stoned、pardoned的文档是是是TERMWEIGHTtermweight给出搜索词的重要程度或者说“权重”。可以使用界于与之间的任意值。样例:'TERMWEIGHTphotoorTERMWEIGHTaudioorTERMWEIGHTvideo'将查找至少包含其中一个单词的文档。其中'Audio'的重要程度最高'video'次之'photo'最低。Notes会相应地排列搜索结果。第一个TERMWEIGHT与后面的值之间需要用AND或OR进行连接。是是否EXACTCASEexactcase告别Notes完全按照后面单词的大小写进行搜索。样例:'exactcaseApple'将查找包含'Apple'的文档但不查找包含'APPLE'或'apple'的文档是否否=(等于)<(小于)>(大于)<=(小于或等于)>=(大于或等于)有助于搜索数字或日期域中的数字或日期。样例:'FIELDdate'将查找'date'域中包含的日期早于的文档。是是否(连字符)告知Notes查找由连字符连接的词组。样例:'fulltext'将查找包含“fulltext”的文档。是是是注意可以使用fieldnameCreationDate按创建日期查找文档。例如"CreationDate="将查找于年月日创建的文档。可以使用fieldnameRevisionDate按上次修改日期查找文档。例如"RevisionDate="查找上次于年月日修改的文档。这些域都包含在文档标题中而不是包含在文档本身中因此在文档属性对话框中的域名列表中找不到这些域。定制搜索界面在“IBM认证系统”中创建一个$$Search表单如果使用方法一不能使用公式计算查询域的值你可能设想使用下面的计算域创建一个查询:"FIELDCategoriesCONTAINS"Category不幸的是由于提交$$Search表单公式不能计算这种方法将不生效。对于需要计算查询值的简单查询来说你最好使用方法可以创建一个$$Return域包含如下公式:""WebDbName"AllSearchViewQuery=FIELDCategoriesCONTAINS""Category"""例如如果用户选择Cats类结果URL是:dbAllSearchViewQuery=FIELDCategoriesCONTAINS"Cats"对于更复杂的查询来说使用方法可能更好。但是你将面临一个问题:如果不能使用公式的话那么应该怎样计算查询域的值。由于这种情况如此频繁发生JavaScript就派上用场了在此我们不是使用公式在表单提交以后计算查询域的值而是使用JavaScript在表单提交之前计算查询域的值。下图显示了定制表单的查询界面:图表定制的搜索界面搜索表单的表格左边是创建的构建查询条件的域每个域的值的变化调用JavaScript函数更新查询条件:图表自定义搜索表单域域HTML属性公式Title在onChange事件中调用update()Words在onChange事件中调用update()Connector在onClick事件中调用update()Query“size=”SearchMaxSearchOrderSearchWv当单击Search按钮调用update()函数这通过在<Form>标签中使用onSubmit事件实现:<FORM><FORMNAME="MySearch"METHOD=POSTACTION="SearchView"onSubmit="update()">update函数如下:functionupdate(){windowstatus="Updatingquery…"form=documentforms"MySearch"words=formWordsvaluetitle=formTitlevalueconnector=getRadioValue(formConnector)conditions=newArray()cond=(words=="")"":"(FIELDInfoBodyCONTAINS""

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/34

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利