windows-nt/Source/XPSP1/NT/inetsrv/query/sdk/dhtml/cidhtml.htm
2020-09-26 16:20:57 +08:00

597 lines
17 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<!--------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright 1998-1999 Microsoft Corporation. All Rights Reserved.
//
// PROGRAM: CiDHtml.htm
//
// PURPOSE: Illustrates use of Dynamic HTML to build a client-side
// query page used to access Indexing Service.
//
// PLATFORM: Windows 2000
//
//-------------------------------------------------------------------------->
<HTML>
<HEAD>
<TITLE>Indexing Service Dynamic HTML Sample</TITLE>
<META NAME="DESCRIPTION" CONTENT="Indexing Service client-side query form">
<META NAME="AUTHOR" CONTENT="Indexing Service Team">
<META NAME="KEYWORDS" CONTENT="Indexing Service, query, content, hit">
<META NAME="SUBJECT" CONTENT="Sample form">
<META NAME="MS.CATEGORY" CONTENT="Internet">
<META NAME="MS.LOCALE" CONTENT="EN-US">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1252">
<base target="_blank">
</HEAD>
<BODY OnLoad="Init()" LANGUAGE="VBScript">
<center>
<DIV ID="idTransDiv"
ALIGN=CENTER
STYLE="position:0; top:0; height:0; width:500; filter:revealTrans(duration=3.0, transition=5);">
<H2 id="idHead" STYLE="position:0; visibility:visible; margin-bottom:0;">
<font color=Blue>
Indexing&nbsp;Service Query&nbsp;Form
</font></H2>
</DIV>
</center>
<br>
<!-- This table contains the user-entry form. -->
<div align=center>
<TABLE bgcolor=ffffcc cellpadding=2 cellspacing=3 Border=3 WIDTH=400>
<TR><td>
<div id="QueryHeader"><b><LABEL FOR=SrchStrCtrl NAME="UserSearchString">Enter your free text query below:</LABEL></b></div>
<INPUT ID="SrchStrCtrl" TYPE="TEXT" NAME="UserSearchString" SIZE="50" MAXLENGTH="100" TABINDEX=1>&nbsp;
<BUTTON TYPE=SUBMIT ID="CmdGo">&nbsp;<FONT SIZE=-1>Search</FONT>&nbsp;</BUTTON>&nbsp;<br>
<INPUT TYPE="RADIO" ID = StdQryButton NAME="radioQueryType" VALUE="0" checked onclick="StandardSelected()">
<LABEL FOR=StdQryButton> Standard query (free text) </LABEL> <br>
<INPUT TYPE="RADIO" ID = AdvQryButton NAME="radioQueryType" VALUE="1" onclick="AdvancedSelected()">
<LABEL FOR=AdvQryButton> Advanced query </LABEL> <br>
<div align=right> <A HREF="ixqlang.htm" target=_self>Tips for searching</A></div>
<LABEL FOR=SortCtrl> <b>Sort by: </b> </LABEL> <SELECT ID = SortCtrl NAME="selectSort" onchange="SortOrderSelected()">
<OPTION SELECTED VALUE="Rank"> Rank
<OPTION VALUE="DocTitle">Title
<OPTION VALUE="Path">Path
<OPTION VALUE="Size">Size
<OPTION VALUE="Write">Date
</SELECT>
<LABEL FOR=OrderCtrl> <b>Order by: </b> </LABEL>
<SELECT ID = OrderCtrl NAME="selectOrder" onchange="SortOrderSelected()">
<OPTION SELECTED VALUE="[d]"> Descending
<OPTION VALUE="[a]">Ascending
</SELECT>
<P><table ID=idUnfiltered cellspacing=0 cellpadding=0><tr><td> To see a list of unfiltered documents click:&nbsp;
</td><td id="UnfilteredRequest" onmouseover="mouseoverUnfiltered()" onmouseout="mouseoutUnfiltered()" onclick="UnfilteredSelected()" bgcolor=ffffcc><FONT color=blue><u> Unfiltered Docs</u></FONT></td></a></tr></table>
</TD></TR>
</TABLE>
<p>
<HR WIDTH=80% ALIGN=center SIZE=3>
<p>
<!-- A couple of navigation buttons, initially disabled. -->
<a id=JumpPoint name="ResultPart"></a>
<table width=775 ID=TopButt>
<tr><td>
<FORM NAME=Navigation ALIGN=RIGHT>
<INPUT TYPE="BUTTON" NAME="CmdPrevious" VALUE="Previous">
<INPUT TYPE="BUTTON" NAME="CmdNext" VALUE="Next">
</FORM>
<BR>
<P ID=Counter><EM>No results</EM>
<BR>
<!--
-- This is the output table. Result rows will by dynamically added, but the header will
-- just be hidden until needed.
-->
</td></td>
</table>
<!-- <br><INPUT TYPE="BUTTON" NAME="SortRank" VALUE="Sort by Ascending Rank"> -->
<P>
<TABLE bgcolor=ffffcc ID=Results COLS=3 CELLSPACING=1 CELLPADDING=3>
<TR bgcolor=99cccc>
<TH>#</TH>
<TH>Title</TH>
<TH>Size</TH>
<TH>Modified</TH>
<TH>Path</TH>
</TR>
</TABLE>
<table width=775 ID=BottomButt>
<tr><td>
<br><br>
<FORM NAME=Navigation2 ALIGN=RIGHT>
<INPUT TYPE="BUTTON" NAME="CmdPrevious" VALUE="Previous">
<INPUT TYPE="BUTTON" NAME="CmdNext" VALUE="Next">
</FORM>
</td></tr>
</table>
</BODY>
<SCRIPT LANGUAGE=VBSCRIPT>
DIM RS ' The ADO Recordset. Initially null.
DIM SortBy ' Current sort order
DIM FirstOnPage, LastOnPage ' Keeps track of records being shown
DIM MaxDisplayed ' Max number of results displayed on-screen
DIM machine,catalog
DIM OrigLocation
DIM fUnfiltered ' Unfiltered query was requested.
DIM fFreetext ' Free text query was requested
'
' SubRoutine: Init
'
' Synopsis: Initializes the page. Sets defaults for page-global variables
' and DHTML elements. Initially, no query is active.
'
Private SUB Init()
' Make the heading roll into view
' idHead.style.visibility = "hidden"
' idTransDiv.filters.item(0).apply()
' idTransDiv.filters.item(0).transition = 3
' idHead.style.visibility = "visible"
' idTransDiv.filters(0).play(1.000)
UserSearchString.focus
Navigation.CmdPrevious.Disabled = TRUE
Navigation.CmdNext.Disabled = TRUE
Navigation2.CmdPrevious.Disabled = TRUE
Navigation2.CmdNext.Disabled = TRUE
FirstOnPage = 0
LastOnPage = 0
MaxDisplayed = 25
fUnfiltered = FALSE
SortBy = "Rank[d]"
'Parse the catalog name out of the URL
'No need to localize "catalog", "machine" because they are hidden
'from the user.
'URL syntax is: file://<syspath>/help/ciquery.htm#machine=<machine>,catalog=<catalog>
'catPos = InStr(1, Document.Location.Hash, "catalog=", 1)
'catPos = catPos + 8
'catalog name is at the end of the string
'catalog = Right(Document.Location.Hash, len(Document.Location.Hash) - catPos + 1)
'Parse the machine name out of the URL
'macPos = InStr(1, Document.Location.Hash, "machine=", 1)
'macPos = macPos + 8
'machine name is between "machine=" and ",catalog="
'commaPos = InStr(macPos, Document.Location.Hash, ",catalog", 1)
'machine = Mid(Document.Location.Hash, macPos, commaPos - macPos)
'Check the state of buttons and init accordingly
IF StdQryButton.Checked THEN
call StandardSelected
ELSE
call AdvancedSelected
end if
HideTable()
HideBottomButt()
END SUB
Const L_Freetext_Text="<LABEL FOR=SrchStrCtrl> <b>Enter your free text query below:</b> </LABEL>"
Const L_Advanced_Text="<LABEL FOR=SrchStrCtrl> <b>Enter your advanced query below:</b> </LABEL>"
'
' SubRoutine: StandardSelected()
'
' Synopsis: Queries will be free-text
'
Private SUB StandardSelected()
Document.All.QueryHeader.innerHTML = CStr(L_Freetext_Text)
fFreetext = TRUE
END SUB
'
' SubRoutine: AdvancedSelected
'
' Synopsis: Allows for advanced queries to be executed
'
Private SUB AdvancedSelected()
Document.All.QueryHeader.innerHTML = CStr(L_Advanced_Text)
fFreetext = FALSE
END SUB
'
' SubRoutine: mouseoverUnfiltered
'
' Synopsis: Hilights the Unfiltered Docs cell
'
Private SUB mouseoverUnfiltered()
UnfilteredRequest.bgcolor = "99cccc"
END SUB
'
' SubRoutine: mouseoutUnfiltered()
'
' Synopsis: Un-hilights the Unfiltered Docs cell back to the original color
'
Private SUB mouseoutUnfiltered()
UnfilteredRequest.bgcolor = "ffffcc"
END SUB
'
' SubRoutine: UnfilteredSelected()
'
' Synopsis: Searches for unfiltered documents
'
Private SUB UnfilteredSelected()
fUnfiltered = TRUE
CmdGo_OnClick()
END SUB
'
' SubRoutine: SortOrderSelected()
'
' Synopsis: Sets the sort order as selected by the user
'
Private SUB SortOrderSelected()
IF StrComp(selectSort.value, "DocTitle") = 0 THEN
SortBy = selectSort.value & selectOrder.value & ",Filename" & selectOrder.value
ELSE
SortBy = selectSort.value & selectOrder.value
END IF
END SUB
'
' SubRoutine: CmdNext_OnClick()
'
' Synposis: Displays next page of query results.
'
Private SUB CmdNext_OnClick()
NextPage()
END SUB
'
' SubRoutine: CmdPrevious_OnClick()
'
' Synposis: Displays previous page of query results.
'
Private SUB CmdPrevious_OnClick()
RS.Move( -MaxDisplayed - LastOnPage + FirstOnPage )
NextPage()
END SUB
Const L_Creation_Status_Text="Creating query object..."
Const L_Issuing_Status_Text="Issuing query..."
'
' SubRoutine: CmdGo_OnClick
'
' Synopsis: Executes query
'
Private SUB CmdGo_OnClick()
ON ERROR RESUME NEXT
'
' Setup Query
'
Window.Status = L_Creation_Status_Text
SET Q = CreateObject("ixsso.Query")
Q.DefineColumn "Unfiltered(DBTYPE_BOOL, 1) = 49691c90-7e17-101a-a91c-08002b2ecda9 7"
' use the default catalog
'Q.Catalog = "query://"+ machine + "/" + catalog
Q.SortBy = SortBy
Q.Columns = "DocTitle, FileName, Path, Write, Size"
Q.Dialect = 2
'
' The default use of the query form should be completely freetext.
' Advanced users can then use all of the features of the query language
' by having the check boxed checked.
'
IF fUnfiltered THEN
CompSearch = "@Unfiltered=TRUE"
fUnfiltered = FALSE
'ELSEIF Advanced.Checked THEN
ELSEIF fFreetext = TRUE THEN
CompSearch = "{freetext}" & UserSearchString.value & "{/freetext}"
ELSE
CompSearch = UserSearchString.value
END IF
'
' The query is now set up. Time to execute.
'
IF CompSearch <> "" THEN
Q.Query = CompSearch
' Issue query
Window.Status = L_Issuing_Status_Text
set RS = Q.CreateRecordSet("nonsequential")
Navigation.CmdPrevious.Disabled = TRUE
Navigation.CmdNext.Disabled = TRUE
Navigation2.CmdPrevious.Disabled = TRUE
Navigation2.CmdNext.Disabled = TRUE
HideBottomButt()
IF Err.Number = 0 THEN
NextPage()
ELSE
ReportError Err.Number, Err.Description
Err.Clear()
END IF
END IF
END SUB
'
' SubRoutine: NextPage
'
' Synopsis: Workhorse routine to populate table with results
'
Const L_QueryMatched_Text="Query matched "
Const L_Records_Text=" record(s)"
Const L_NoResults_Text="<EM>No results</EM>"
Const L_NoResults_Text_NoEm="No results"
Const L_PopulatingList_Text="Populating result list (row "
Const L_Of_Text=" of "
Const L_ShowingRecords_Text=" record(s). Now showing "
Const L_To_Text=" to "
Private SUB NextPage
'
' Populate result list. Once this message is displayed, virtually all the time is being
' spent in DHTML and not in query processing.
'
fFirstPage = TRUE
'
' Did we actually get anything back?
'
IF RS.RecordCount = 0 THEN
IF Err.Number = 0 THEN
Document.All.Counter.innerHTML = CStr(L_NoResults_Text)
Window.Status = CStr(L_NoResults_Text_NoEm)
MsgBox CStr(L_NoResults_Text_NoEm)
ELSE
ReportError Err.Number, Err.Description
END IF
JumpPoint.scrollintoview ( FALSE )
FirstOnPage = 0
Navigation.CmdNext.Disabled = TRUE
Navigation.CmdPrevious.Disabled = TRUE
Navigation2.CmdPrevious.Disabled = TRUE
Navigation2.CmdNext.Disabled = TRUE
HideBottomButt()
HideTable()
ELSE
JumpPoint.scrollintoview ( TRUE )
FirstOnPage = RS.AbsolutePosition
LastOnPage = FirstOnPage
Document.All.Counter.innerText = CStr(L_QueryMatched_Text) + CStr(RS.RecordCount) + CStr(L_Records_Text)
ShowTable()
END IF
'
' Loop through the table. For each row, either store values from Recordset or delete
' the row.
'
FOR i = 1 TO MaxDisplayed
Window.Status = CStr(L_PopulatingList_Text) + CStr(i) + CStr(L_Of_Text) + Cstr(MaxDisplayed) + ")"
IF RS.EOF THEN
'
' We hit the end. Just clear any remaining rows and fall out of loop.
'
FOR j = Results.Rows.length - 1 TO i STEP -1
Results.DeleteRow(j)
NEXT
EXIT FOR
ELSE
'
' We may have to add a row...
'
IF i >= Results.Rows.length THEN
Results.InsertRow()
FOR j = 0 TO 4
Results.Rows(i).InsertCell()
NEXT
Results.Rows(i).Cells(0).align = "right"
Results.Rows(i).Cells(2).align = "right"
Results.Rows(i).Cells(3).align = "right"
END IF
' Write record number
Results.Rows(i).Cells(0).innerText = CStr( RS.AbsolutePosition ) + "."
' Write either title or filename
IF VarType(RS("DocTitle")) = 1 Or RS("DocTitle") = "" THEN
Results.Rows(i).Cells(1).innerHTML = "<A HREF=""file://" & RS("path") & """>" & RS("filename") & "</A>"
ELSE
Results.Rows(i).Cells(1).innerHTML = "<A HREF=""file://" & RS("path") & """>" & RS("DocTitle") & "</A>"
END IF
' Size
Results.Rows(i).Cells(2).innerText = RS("Size")
' Last Modify time
WriteTime = CDate( RS("Write") )
Results.Rows(i).Cells(3).innerText = CStr(Month(WriteTime)) + "-" + CStr(Day(WriteTime)) + "-" + CStr(Year(WriteTime) ) + " "
' Path
Results.Rows(i).Cells(4).innerHTML = "<A HREF=""file://" & RS("path") & """>" & RS("Path") & "</A>"
LastOnPage = LastOnPage + 1
RS.MoveNext
END IF
NEXT
'
' Report result.
'
IF FirstOnPage <> LastOnPage And RS.RecordCount <> 0 THEN
Document.All.Counter.innerHTML = CStr(L_QueryMatched_Text) + CStr(RS.RecordCount) + CStr(L_ShowingRecords_Text) + CStr(FirstOnPage) + CStr(L_To_Text) + CStr(LastOnPage-1) + "."
END IF
'
' Enable Previous/Next as appropriate
'
IF FirstOnPage <= 1 THEN
Navigation.CmdPrevious.Disabled = TRUE
Navigation2.CmdPrevious.Disabled = TRUE
ELSE
Navigation.CmdPrevious.Disabled = FALSE
Navigation2.CmdPrevious.Disabled = FALSE
END IF
IF RS.EOF THEN
Navigation.CmdNext.Disabled = TRUE
Navigation2.CmdNext.Disabled = TRUE
UserSearchString.focus
ELSE
Navigation.CmdNext.Disabled = FALSE
Navigation.CmdNext.focus
Navigation2.CmdNext.Disabled = FALSE
END IF
IF Navigation2.CmdPrevious.Disabled = FALSE OR Navigation2.CmdNext.Disabled = FALSE THEN
ShowBottomButt()
END IF
'
' Done!
'
Window.Status = Window.DefaultStatus
END SUB
'
' SubRoutine: HideBottomButt
'
' Synopsis: Hides the bottom button table from the user's view.
'
SUB HideBottomButt()
BottomButt.Rows(0).Cells(0).style.visibility = "hidden"
BottomButt.Border = 0
BottomButt.Rules = ""
FOR i = BottomButt.Rows.length - 1 TO 1 STEP -1
BottomButt.DeleteRow(i)
NEXT
END SUB
'
' SubRoutine: ShowBottomButt
'
' Synopsis: Shows the bottom button table from the user's view.
'
SUB ShowBottomButt()
BottomButt.Rows(0).Cells(0).style.visibility = "visible"
BottomButt.Border = 0
BottomButt.Rules = ""
END SUB
'
' SubRoutine: HideTable
'
' Synopsis: Hides the table from the user's view.
'
SUB HideTable()
Results.Rows(0).Cells(0).style.visibility = "hidden"
Results.Rows(0).Cells(1).style.visibility = "hidden"
Results.Rows(0).Cells(2).style.visibility = "hidden"
Results.Rows(0).Cells(3).style.visibility = "hidden"
Results.Rows(0).Cells(4).style.visibility = "hidden"
Results.Border = 0
Results.Rules = ""
FOR i = Results.Rows.length - 1 TO 1 STEP -1
Results.DeleteRow(i)
NEXT
END SUB
'
' SubRoutine: ShowTable
'
' Synopsis: Makes the result table visible.
'
SUB ShowTable()
Results.Rows(0).Cells(0).style.visibility = "visible"
Results.Rows(0).Cells(1).style.visibility = "visible"
Results.Rows(0).Cells(2).style.visibility = "visible"
Results.Rows(0).Cells(3).style.visibility = "visible"
Results.Rows(0).Cells(4).style.visibility = "visible"
Results.Border = 1
Results.Rules = "cols"
END SUB
'
' SubRoutine: ReportError
'
' Synopsis: Clears table and reports error.
'
' Arguments: [ErrNo] -- Error to report
'
Const L_RedError_Text="<FONT color=red><EM><B>Error "
SUB ReportError( ErrNo, ErrDesc )
HideTable()
Window.Status = Err.Description
MsgBox Err.Description
UserSearchString.focus
Document.All.Counter.innerHTML = CStr(L_RedError_Text) + Hex(Err.Number) + " - " + Err.Description + "</B></EM></FONT>"
END SUB
</SCRIPT>
</HTML>