LOTUS 學習技巧 連載

火星人 @ 2014-03-04 , reply:0


LOTUS 學習技巧 連載

版主大人,
這個版太清涼啦~ ~~
我發些文章ZT來旺旺場,你給加精吧



LOTUS學習技巧 三


1.        我如何在頁面上建立一個熱點,讓它打開一個文檔?
答: 在頁面上寫一段文字,然後選上這段文字,然後點菜單」創建」 –熱點--操作熱 點
然後選LotusScript ,舉個例子,比如打開ID 為NT00000C62的文檔:
Sub Click(Source As Button)
Dim uiworkspace As New notesuiworkspace
Dim curdatabase As notesuidatabase
Dim database As notesdatabase
Dim doc As notesdocument
Set curdatabase = uiworkspace.currentdatabase
Set database = curdatabase.database
Set doc = database.getdocumentbyid("00000C62")
Call uiworkspace.EditDocument(True,doc,False )
End Sub
2.        我如何實現歸檔,比如我如何把當前視圖中所有被選中的文檔歸入文件夾 fold 中?
答: 用Script象如下這樣實現:
Sub AddDocToFold(fold As String)
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim docList As String
Set uiview = uiworkspace.currentview
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
Call doc.PutInFolder( fold )
Next
End Sub
3.        我如何實現把某文件夾視圖中的被選擇的文檔從該文件夾中清除,但卻不能刪除他們?
答: 用Script 實現如下:
Sub RemoveDocFromFold( fold As String,all As Integer)
'功能:
' 把文檔從某個文件夾中移走,但並不刪除此文檔
'參數:
' fold: 文件夾
' all : 0表示僅移走當前選擇的文檔,1表示移走該文件夾中所有文檔
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim view As notesview
Set uiview = uiworkspace.currentview
Set view = uiview.view
If all = 0 Then '移去所選文檔
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
Call doc.RemoveFromFolder( fold )
Next
Else
If all=1 Then '移去全部文檔
Set doc = view.GetFirstDocument
'遍列該視圖的所有文檔,獲取所有滿足條件的紀錄數
While Not(doc Is Nothing)
Call doc.RemoveFromFolder( fold )
Set doc = view.GetNextDocument(doc)
Wend
End If
End If
'Evaluate("@Command()")
End Sub
4.        我如何把當前視圖中的所有的被選擇的文檔的某個域的值替換掉?
答: 用Script 實現如下:
Sub SelectedDocFieldReplace( Field As String,repval As String)
'功能:
' 把所選文檔中的每個 Field 域的值 改為 repval
'參數:
' Field 要更改的域的名稱
' repval 修改後的域值
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim order_num As String
'order_num = Inputbox$("請輸入批次")
Set uiview = uiworkspace.currentview
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
On Error Goto lable1
Call doc.replaceitemvalue(Field,repval)
Call doc.save(True,False)
Next
Exit Sub
lable1:
Msgbox("錯誤!,所選文檔沒有指定的域,這個錯誤發生在沒有給 selectedDocFieldReplace() 函數傳遞正確的參數")
Exit Sub
End Sub
5.        我如何創建某個程序運行結果的日誌文檔?
6.         
答: 首先新建一個日誌文檔的表單,並把該表單設置成資料庫的默認表單,然後 就用Script 創建文檔,並填寫該文檔中某些域的值,最後存檔,例子程序片段如下:
'寫傳真日誌
Dim faxerdoc as notesdocument
『faxerr_receiver,faxerr_docnum,faxerr_content是表單form_faxerr的三個域名

Set faxerrdoc = New NotesDocument( db )
faxerrdoc.Form = "form_faxerr"
Call faxerrdoc.replaceitemvalue("faxerr_receiver",Cstr(peoplecount) )
Call faxerrdoc.replaceitemvalue("faxerr_docnum",strsucssnding )
Call faxerrdoc.replaceitemvalue("faxerr_content",faxerrmsg )
success = faxerrdoc.ComputeWithForm( False, False )
If success Then
Call faxerrdoc.Save( True, False )
Else
Msgbox("無法寫入傳真日誌....")
End If
'Msgbox(faxerrmsg)
Exit Sub
7.        我要從當前視圖中選擇一批文檔,並讓程序從這些文檔中提取信息,在嵌入在表單中的OLE對象 Word文檔中建立一張表,要求是選擇了幾篇文檔就在這張表中畫幾行,這張表的每個列的信息都中文檔中的域中提取,換句話說,就是要把被選文檔以Word文檔表格的形式表示出來,能否給我一個這方面的例子程序?
8.         
答: 可以,下面就是這樣的一個例子:
Sub inputgroupplan(source As notesuidocument,doccollection As notesdocumentcollection)
'功能: 自動生成出團計劃表。
' 詳細描述:
' 從 文檔集合 doccollection 中提取各個域值,並把提取的信息以一定
' 的表格形式送入當前文檔的 body 域中的 OLE 對象--Word 文檔中.
'參數:
' source: 當前文檔
' doccollection :文檔集(比如文檔的選擇集)
'編寫:
' 商雲方
'完成日期:
'
Dim session As New NotesSession '當前會話
Dim counter As Integer '計數器
Dim doccustom As NotesDocument 'notes 文檔對象
Dim thisdoc As Variant 'Word 文檔對象
Dim thisrange As Variant 'Word 開發中的 range 對象
Dim thispicture As Variant '嵌入Word 文檔的圖象對象
Dim thistable As Variant '嵌入Word 文檔的表格對象
Dim pagehead As String '嵌入Word 標題
'獲取嵌入文檔的句丙
If source.EditMode Then
Set thisdoc = source.getobject("oleobject")
'插入一幅圖
Set thispicture = thisdoc.shapes.Addpicture("c:\學習\cassiatb.jpg")
'設置圖像屬性
With thispicture.wrapformat '環繞方式
.type = wdwrappicture '類型為picture
.side = wdwrapright '文字右環繞
End With
'設置該文檔的頁面設置的左邊距為20個單位(象素)
With thisdoc.pagesetup
.leftmargin = 20
.rightmargin = 20
End With
counter=0
pagehead = Inputbox$("請輸入標題")
pagehead = Chr(10) & pagehead & Chr(10) & Chr(10) & Chr(10)
'Call source.FieldSetText ( "Namelist_Group_Num", group_num )
'groupstring = "Namelist" & " " & group_num & Chr(10)
Set thisrange = thisdoc.range(1,1)
thisrange.InsertBefore (pagehead)
Set thisrange = thisdoc.range(2,Len(pagehead))
With thisrange
.bold = True '加粗
.ParagraphFormat.Alignment = 1'wdAlignParagraphCenter 行居中
.font.size = 20 '字體大小為20
End With
Set doccustom = doccollection.GetFirstDocument
'遍列文檔集的所有文檔,獲取所有滿足條件的紀錄數
While Not(doccustom Is Nothing)
counter=counter+1
Set doccustom = doccollection.GetNextDocument(doccustom)
Wend
'動態分配紀錄數組
'Redim record(counter,6) As String
'插入一張表
Set thisrange = thisdoc.range(Len(pagehead)+1,Len(pagehead)+1)
Set thistable = thisdoc.tables.Add(thisrange, counter+1, 8)
'thistable.autoformat(False)
'寫表頭
thistable.rows(1).cells(1).range.insertbefore("前往國家")
thistable.rows(1).cells(2).range.insertbefore("國家數")
thistable.rows(1).cells(3).range.insertbefore("天數")
thistable.rows(1).cells(4).range.insertbefore("出境城市")
thistable.rows(1).cells(5).range.insertbefore("入境城市")
thistable.rows(1).cells(6).range.insertbefore("出發日期")
thistable.rows(1).cells(7).range.insertbefore("同行價")
thistable.rows(1).cells(8).range.insertbefore("市場指導價")
'恢復計數器
counter = 0
'寫表內容
Set doccustom = doccollection.GetFirstDocument
While Not(doccustom Is Nothing)
counter = counter+1
thistable.rows(counter+1).cells(1).range.insertbefore(doccustom.plan_country(0))
thistable.rows(counter+1).cells(2).range.insertbefore(doccustom.plan_country_num(0))
thistable.rows(counter+1).cells(3).range.insertbefore(doccustom.plan_day(0))
thistable.rows(counter+1).cells(4).range.insertbefore(doccustom.plan_out_city(0))
thistable.rows(counter+1).cells(5).range.insertbefore(doccustom.plan_in_city(0))
thistable.rows(counter+1).cells(6).range.insertbefore(doccustom.plan_date(0))
thistable.rows(counter+1).cells(7).range.insertbefore(doccustom.plan_whole_price(0))
thistable.rows(counter+1).cells(8).range.insertbefore(doccustom.plan_mart_price(0))
Set doccustom = doccollection.GetNextDocument(doccustom)
Wend
End If
End Sub
9.        如何實現表單上的內容根據用戶的輸入動態變化?

答: 一般可以用notes的隱藏屬性功能來控制,使用當公式為真是隱藏,然後靠公式來控制具體怎樣隱藏.比如可以在對話筐上放一個對話筐列表,裡面放十個選項,當用戶選擇了其中的某幾個選項時,響應的在下面的表單部分顯示幾行.這可以畫一個表格,這個表格的屬性中設置邊框的線條粗細為零.然後對應十個選項分為十行,每行填入和選項響應的內容,然後選定某一行的所有文本,編輯其隱藏屬性,選當公式為真時隱藏,這個公式您就可以寫成當選項的被選中條目中不包含本行文字時隱藏就可以了,這樣這一行就會在響應的選項被選中時才會顯示.
10.        notes沒有應用程序級的公共變數,那麼我如果要彈出一個對話筐,並從這個對話筐中返回很多用戶輸入,我該怎麼辦?
怎樣判斷視圖中沒有文檔?
dim uiw as new notesuiworkspace
dim doc as notesdocument
set doc = uiw.getfirstdocument()
if doc is nothing then
.....
end if
如何將查詢結果放到一個文件夾里?
下面是將搜索結果放到名叫newfolder的文件夾中,並跳轉到該文件夾上
Sub Click(Source As Button)
dim uiw as new notesuiworkspace
dim uidoc as notesuiworkspace
dim doc as notesdocument
set uidoc = uiw.currentdocument
set doc = uidoc.document
dim ss as new notessession
dim db as notesdatabase
set db = ss.currentdatabase
const newfolder = "文件夾名稱"
Dim docs As notesdocumentcollection

q=doc.query(0)
Set docs = db.ftsearch(q, 0)
Call docs.PutAllInFolder( newfolder )
Call uiw.OpenDatabase( ,,newfolder)
End Sub
如何在Notes中調用ODBC數據源中的進程?
Dim session As New NotesSession
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
con.ConnectTo(資料庫)
qry.SQL = SELECT * FROM 資料庫
result.Execute
If result.IsResultSetAvailable Then
Do
result.NextRow
id=result.GetValue(ID,id)
Loop Until result.IsEndOfData
result.Close(DB_CLOSE)
Else
Messagebox "Cannot get result set for AssetData"
Exit Sub
End If
con.Disconnect
End Sub
從後台刷新當前文檔?
將當前文檔先關閉后再打開
set doc=uidoc.document
......
call uidoc.save()
call uidoc.close()
set uidoc=ws.editdocument(doc)
獲得當前視圖中選擇了的文檔?
可以用 Notesdatabase 的 Unprocesseddocuments 屬性。

Dim session As New notessession
Dim db As notesdatabase
Dim collection As notesdocumentcollection

Set db = session.currentdatabase
Set collection = db.UnprocessedDocuments

Unprocesseddocuments 其實很有用的
notes和Excel交換數據
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim excelApplication As Variant
Dim excelWorkbook As Variant
Dim excelSheet As Variant
Dim i As Integer

Set excelApplication = CreateObject(Excel.Application)
excelApplication.Visible = True
Set excelWorkbook = excelApplication.Workbooks.Add
Set excelSheet = excelWorkbook.Worksheets(Sheet1)
excelSheet.Cells(1,1).Value = 姓名
excelSheet.Cells(1,2).Value = 年齡

i = 1
Set db = session.CurrentDatabase
Set view = db.GetView(abc)
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
i = i + 1
excelSheet.Cells(i,1).Value = doc.ClassCategories(0)
excelSheet.Cells(i,2).Value = doc.Subject(0)
Set doc = view.GetNextDocument(doc)
Wend
excelSheet.Columns(A:B).Select
excelSheet.Columns(A:B).EntireColumn.AutoFit

excelWorkbook.SaveAs(Script 內容)
excelApplication.Quit
Set excelApplication = Nothing
在視圖中怎樣歷遍所有的文檔?
Dim db As New NotesDatabase( Ankara, current\projects.nsf )
Dim view As NotesView
Dim doc As NotesDocument
Set view = db.GetView( Open\By Due Date )
Set doc = view.GetFirstDocument
While Not ( doc Is Nothing )
....................
Set doc = view.GetNextDocument( doc )
Wend
在scipt中如何調用公式
例如我們想要取伺服器名的普通名,在script中用@name() ,假設server變數以取到伺服器名稱
在script中用Evaluate可以運行公式,如:servername=Evaluate(@name(;server))
怎樣用script代理取到CGI變數
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
Messagebox User = + doc.Remote_User(0)
《解決方案》

LOTUS 學習技巧 連載

好貼,一定要up!
《解決方案》

LOTUS 學習技巧 連載

你不說也會給加精華鼓勵的。

目前國內LOTUS的論壇不少,以前去走走看看,發覺都是人氣不足,缺乏的就是大家的積极參与。。。

辛苦了~~~
《解決方案》

LOTUS 學習技巧 連載

LOTUS學習技巧 一

1、 notes同關係型資料庫比較
關係型資料庫          Lotus Notes
基於事務處理模型        基於文檔型
使用結構化數據        使用半結構數據元素(豐富文本,圖片,等)
提供實時訪問數據        使用複製來增加或減少文檔(按修改)
使用特別的queiries定位數據        使用視圖定位數據
集中在一個企業內部        在企業與企業間
使用SQL來訪問        使用全文檢索來訪問

2、什麼應用不適合notes
    1.實時的數據處理
2.大於4G的資料庫(R5增加到64G)
3.基於query和基於報表
4.複雜計算

3、同義名有什麼用?
在表單,視圖,關鍵字中可以用同義名,主要用途是當你想在程序中用英文,而在取名或顯示給用戶用中文時,你可以用同義氣名,用"|"來分隔,注意:可以使用多個同義名,notes會存取最右邊的一個。||

4、 如何做一個動態的windows title?
在表單中的windows title的事件中寫入一個公式,如想按用戶的名字變,寫上@username就ok了!要想按域變,寫上域名就ok.
  
5、怎樣激活域幫助
在域屬性的選項屬性中的幫助描述寫入幫助信息,就可以。當游標在該域時,狀態欄會自動出現幫助描述,注意如果沒有看到,在操作欄上請選 查看---域幫助

6、怎樣做到關鍵字能自動增、減?
在關鍵字屬性中,選用公式,然後輸入公式,公式用@dbcolumn函數返回視圖中的值,這時就能做到關鍵字能自動增、減,不過有沒有用的關鍵字。

7、各種域類型區別介紹?
域類型        何時變化
計算型        當文檔創建,存檔,刷新時計算,並保存在文檔中
顯示時計算        當文檔打開編輯,讀或刷新時計算,不保存在文檔中
創建時計算        當文檔被創建時,僅此計算一次,並保存在文檔中。

8、主文檔、答覆文檔、答覆的答覆文檔介紹

  
類別        描述
文檔        用來創建主文檔,不依附其他的文檔
答覆        用來答覆主文檔,依靠主文檔,在層次視圖裡有同主文檔有縮進關係
答覆的答覆
        可以用來答覆主文檔,也可以答覆答覆的答覆文檔,同它的父文檔有縮進關係。
   注意:答覆文檔無論選定的是主文檔,還是答覆文檔,還是答覆的答覆文檔,都是針對主文檔答覆的.
  
9、 如果讓用戶必須填一些域,否則不準保存?
  @假設該域為name;在該Name域的input  validation的事件中寫入下列公式:@if(name="";@failure("please input your name");@success)  

10、怎樣將一個資料庫做成模板?
有多種方法,這裡介紹一種,在工作台選中一個要做模板的資料庫,然後選擇文件---資料庫---新建拷貝,在彈出的對話框中將.nsf改為.ntf就ok了。

11、怎樣做到當游標從一個域移到另一個域,表單自動刷新?
在該域所在的表單中選擇表單屬性中的預設選項中"自動刷新域。

12、怎樣讓用戶保存文檔時,域中的數值自動轉化你想要的標準格式?
假設該域為name;想把它轉化為大寫,在該Name域的input translation的事件中寫入下列公式:@UpperCase(State),就可以具體的字元串的操作公式,請看本頁的字元串操作。

13、怎樣在表單中控制某一個域讓誰編輯?
你可以把該域放到存取控制區段里,指定該區段的編輯者就只有該編輯者才能修改改域了。

14、怎樣控制區域布局中域,當使用tab時,游標的移動順序?
假設在區域布局中有a,b,c三個域,我想要它們游標移動的順序為a,c,b.可以這樣做,選中a域,選設計----置前,選中c域,選設計----置前,選中b域,選設計----置前.

15、在視圖中怎樣做出主文檔,答覆文檔,答覆的答覆層層縮進的效果?
在視圖屬性中選"縮進一個層次顯示答覆文檔"只代表文檔有答覆摺疊的層次,但不能在視圖中顯示出來,為了做到層層縮進,我們必須另外開發,在視圖中的前面做一列,選定列屬性"僅顯示答覆文檔",然後在該列的公式中寫上如果是答覆文檔的話,該列顯示什麼,如果是答覆的答覆文檔顯示什麼,就可以瞭然后調整各列的寬度就可以看到有縮進的效果。        ""

16、ACL中的安全介紹
訪問級別        功能
管理者        能修改ACL和複製設置,在本地加密一個資料庫,刪除一個資料庫,能執行比它低級別的任何任務。
設計者        能修改所有的設計元素,創建全文索引,能執行比它低級別的任何任務。
編輯者        能創建文檔和編輯文檔
作者        能創建和編輯在作者域中有她名字的文檔
讀者        能讀文檔,但不能創建和編輯文檔
存放者        能創建新文檔,但不能讀到任何文檔,即使是他自己創建的
不能存取者        不能訪問資料庫

17、 公式學習:

  變數

變數有兩種類型:域,臨時變數,你可以在公式中使用域名作為變數如:FirstName

臨時變數只能存在於公式中。它的作用範圍就是它所在的公式,除了在公式中賦予給它的屬性以外沒有其他屬性。創建一個臨時變數的語法是:variableName := value

  
常量
常量類型        描述
文本型        用""標記的字符集,如:"joe.",注意:為了在文本串中用引號,用轉義符"\",如:\""
數字型        數字0-9,能用(+和-),科學記數法和常量e

時間型        任何時間型的常量用([]),如:

操作符

    操作符類型
      符號
             例子

      賦值
:=
Areacode:=@left(phone;3)

      計算
乘號 *                除號 /                加號 +                減號
UnitPrice*3                                      TotalPrice/qty                                   TotalPrice+Tax                                   TotalPrice-Discount


      比較
等於  =               不等於 != =! <>; >;<    小於<                 小於等於 <=           大於 >;                大於等於 >;=
SELECT Year=1996                                  SELECT Month!="January"                        SELECT Age<70                                      SELECT Year<=1990                                SELECT Age>;30                                   SELECT Age>;=21


      串聯
列表 :                 文本  +
"Tricycle":"Mini-bike":"5-speed"         CompanyName+",inc."


      邏輯
否  !                  於  &                 或  |
Status="Approved"&TargetMarket!="Children"



  
  公式關鍵字

  
關鍵字語法
描述
例子

FIELD fieldname:=value

賦一個值給當前notes文檔中的域,如果域不存在則創建一個,存在則覆蓋該值。
FIELD CompanyName:=Company+"。inc"


REM ["remarks"]
註釋
REM "12/15/95"

SELECT logicalValue

在視圖,代理或複製公式中用來定義一個文檔集
SELECT form="idea"


  
字元串處理函數介紹?

  
函數
描述

@propercase(string)

將字元串中的單詞轉換成字首大寫的形式:每個單詞的頭一個字母大寫,後面的其他字母小寫。以下的樣例將返回 Every Child Loves Toys. @ProperCase("every CHILD LOves toys")

@trim(strin)

從文本字元串中(或文本列表的每一個元素中)刪除位於開頭和結尾的空格,同時還刪除多餘的空格。以下的樣例將返回 ROBERT SMITH。@Trim(@UpperCase("Robert Smith"))

@length(string)

返迴文本字元串中字元的個數.該樣例返回 45。@Length("The boy crossed the wide, but gentle, stream.")

@newline

在文本字元串中插入一個新行(回車)。下面公式返回                 Hi                                                        There                                     "Hi"+@NewLine+"There"

@matches(string;pattern)

用一個樣本字元串去匹配一個字元串。因為樣本字元串可以包含一定數量的通配符和邏輯符號,所以可以用較複雜的模式去匹配字元串。     該樣例返回 0。                                       @Matches("A big test";"a?test")

@left

從左到右搜索字元串,並返回字元串中最左邊的幾個字元。           該樣例返回"Len"。                                @Left("Lennard Wallace";3)


  
邏輯操作

  
       函數
                           操作

      @if
  @if(condition1;action1;condition2;action2;else-action)


  
如果滿足條件1,則做action1,如果滿足條件2,則做action2,否則做else-action.

注意: 1.該函數必須有奇數個參數。

       2.總共可以加99個條件

       3.可以嵌套


  
日期操作

  
  函數
描述

@created
返回創建此文檔時的時間-日期值。

@adjust(time-date; year;month;day;hour;   month;day;hour;minute ;second)
按照指定的年、月、日、小時、分鐘、秒來調整指定的時間-日期值。調整的值可正可負。

以下的樣例將返回 09/2/97。 @adjust(;2;2;2;0;0;0)

@today
返回當天的日期。

@month(time-date)
從指定的時間-日期中提取月份值        

該樣例返回 1。 @Month()

@Weekday(time-date)
算出一周中的某一天,返回一個表示這一天的數字。

下面樣例返回 5(實際是星期六)。  Weekday()

@tomorrow
返回明天日期的時間-日期值。


  
算術操作

  
       函數
              描述

@Max(number;number)

  給出兩個數字,返回較大的那個數字。

下面樣例返回 99;6;7;8
@Max(99:2:3;5:6:7:8)

@Max(number;number)

給定兩個數字,返回較小的那一個。

以下的樣例將返回 5;2;3;3
@Min(99:2:3;5:6:7:8)

@Round(number)
將指定的數字歸整,結果為最接近它的一個數

該樣例返回 1
@Round(1.499)

@Round(number;factor)

如果還指定了另外一個數字,就用它作為規整因子

如果稱做 NumberOfEmployees 的域值是12338,則該樣例返回12340
@Round(NumberOfEmployees;10)

@Sum(num;num;..)

在一組數字或數字列表中進行加法運算。

以下的樣例將返回 3
@Sum( 1 : 2 )


  
列表操作

  
函數
描述

@Elements(list)
計算列表中文本、數字、時間-日期的個數。該函數總是返回數字以指明在列表中項目的個數。

如果 SalesForce 域中的列表是 "Rogers" : "Binney" : "Harris" : "Larson",則以下的樣例將返回 4。"                               @Elements(SalesForce)

@Max(list;list)
  給出兩個數字列表,返回較大的那個數字列表。

@Member(value; stringlist)
給定一個值,在文本列表中找到該值的位置。

下面樣例返回 0。                                   @Member("Sales"; "Finance":"Service":"Legal")"

@Subset(list;number)
從左到右搜索一個列,並返回您所指定數量的值。如果您指定了一個負數,@Subset 將從右到左搜索,但結果卻是按從頭到尾的次序排列。

以下的樣例將返回 New Orleans;London。            @Subset("New Orleans":"London":"Frankfurt":"Tokyo"; 2)


  
數據轉換

  
       函數
                         描述

@Text(value)
將任意值轉換成文本字元串。 如:@text(RetailPrice)

@TexttoNumber(string)
在可能的情況下,將文本字元串轉換成數字。如:                 @texttonumber("32.95")


  
特殊函數

  
     函數
                  描述

@Username
返回當前的用戶名或伺服器名。

如果用戶名是層次結構名, @UserName 將以規範格式返回(其中包含 CN、OU、O 和 C 標識符)。 如果如果要返回縮寫格式的名字(忽略標識符),請使用 @V3UserName。


@name(;name)


用來裁剪層次結構名。可以用它將標準格式的名稱進行縮寫,將縮寫名稱擴展為它的標準格式,在名稱中找到某一個部分,掉轉部件的順序以便用層次名稱為一個視圖分類。                                       如:@Name(;Author)

@AllChildren
包含父文檔的所有滿足選擇標準的"答覆"文檔。

@AllDescendants
包含所有滿足選擇標準的父文檔的答覆文檔以及答覆的答覆文檔。

@IsResponseDoc
判斷某個文檔是否為答覆文檔。

@IsNewDoc
對於一個正在編輯的文檔,指出該文檔是否已經存檔

@IsText(value)
判斷某個值是否為文本(或文本列表)。

@IsNumber(value)
判斷某個值是否為一個數字(或數字列表)。

@Failure(string)
返回您給出的消息;當用於輸入確認校驗時,若輸入的數值不符合校驗條件,@Failure 將顯示您給出的消息。                  

如:這個樣例給出了輸入校驗公式。如果用戶在"AreaCode"域中輸入了大於 999 的數字,則返回一條錯誤信息"Area codes have only 3 digits"。    @If(AreaCode<999;@Success;@Failure(Area codes have only 3 digits")

@Success
返回 1(真)。在輸入檢查公式中將該函數與 @If 一起使用可以判斷輸入的值是否滿足檢查條件。

如:當"Price"域中的值小於100 時,以下的樣例將返回 1 並允許文檔保存。在輸入檢查公式中表示輸入的數據正確。 @If(Price<100;@Success;@Failure(Price too large")


  
  作者域、讀者域介紹


作者域是一個域類型為作者類型的域,它是用來控制文檔的作者的。作者域不能控制到ACL編輯者以上的許可權,擁有編輯者或編輯者以上許可權的,不管該文檔中的作者域是否有它。作者域只能控制作者或作者以下的許可權。你只須將名字,角色,群組放到作者域的公式中就可以了。

讀者域是一個域類型為讀者類型的域,它是用來控制文檔的讀者的。讀者域能控制到ACL的任何許可權,即使它是管理者。也就是說,只要讀者域里沒有他,即使他是管理者也不能看到該文檔。編程方法同作者域。


怎樣定義一個域的寬度?


在普通表單中,沒有辦法控制域的寬度(在notes上);但在區域布局中你可以隨意拖動域的寬度。所以你要控制域寬度,你可以把它放到區域布局中。


怎樣激活表單繼承屬性


在form1表單的屬性中的預設選項中選擇繼承整個文檔到RTF域,並選擇繼承到哪個域。然後回到視圖中選定用form2創建的文檔創建文檔(用form1表單)。你就可以看到用form1表單創建的文檔中的RTF域中繼承了form2創建的文檔創建文檔,它可以文檔鏈接,也可以是整個文檔,這個選擇表單屬性就可以了。


常用保留域介紹


Notes 提供了預定義的域,可以使用它們來自動添加一些只有自己編程才能實現的功能。這些域名在 Notes 中是保留的。如果想使用不同的保留域名稱或者重新定義該域,Notes 將顯示錯誤消息。也就是說你在表單中放置同名的域,表單會自動完成一些功能,如:我加一個叫mailoptions的域,並將其值設為"1",然後在表單中創建一個sendto的域,當表單保存時,它會自動發送一個文檔到sendto里的接收者。

郵遞文檔的保留域

保留域名稱用途

MailOptions  
由用戶決定是否郵遞文檔  

SaveOptions
控制文檔在郵遞時是否保存

Sign
創建者簽名文檔防止損害

Encrypt
加密郵件SendTo將郵件發送給本域列出的用戶

CopyTo
將郵件的拷貝發送給本域列出的用戶      

BlindCopyTo
將郵件的隱藏拷貝發送給本域列出的用戶

DeliveryPriority
分別以"高"、"中"、"低"的優先順序郵遞郵件

DeliveryReport                                   
當郵件郵遞給收件人時返回一個報告   

ReturnReceipt
當收件人閱讀郵件時返回回執

MailFormat                                       
通過 cc:MailTM 郵遞郵件

  

 

 

 

 

                                                                                                                                                                                                         
通用的保留域

保留域名稱用途Categories分類文檔$VersionOpt控制文檔的版本跟蹤FolderOptions將新文檔放置到文件夾中Secret EncryptionKeys使用機密密鑰加密文檔,而不使用公用加密密鑰



            
怎樣判斷某一天所在周的最後一天

@If(tdate != ""; @Adjust(tdate; 0; 0; @Modulo(8 - @Weekday(tdate); 7); 0; 0; 0); tdate)
  

怎樣計算兩個日期域間有幾周?

diffDays := (EndDate - StartDate) / 86400 + 1;
strtDay := @Modulo(@Weekday(StartDate); 7);
endDay := @Modulo(@Weekday(EndDate); 7);
result := (diffDays - endDay + strtDay - 8) * 5 / 7 - @Max(-2; -strtDay) - @Min(1; endDay) + 5 - strtDay + endDay
  

怎樣在公式里用Dos命令

@Command(; "C:\\COMMAND.COM"; "/C DEL C:\\TEST.TXT")


怎樣截取@dblookup的錯誤信息

TempVar := @DbLookup();
@If(@IsError(TempVar); 'perform desired error response'; 'perform desired
action on TempVar')


怎樣做到當文檔有答覆時,用郵件通知該文檔的作者

1.在主文檔,答覆文檔,答覆的答覆文檔創建一個域:form,預設值:@Name(;@Usernam
2.在答覆表單創建一個域:parentform,預設值(用繼承)form
3.在答覆的答覆表單,創建一個域:"parentform"預設值(用繼承)
ParentFrom:from
4.在答覆和答覆的答覆表單增加一個隱藏,顯示時計算的"announce"域,公式是:@If(@IsDocBeingSaved;@Success;@Return(0));
List := @Trim(@Replace(ParentFrom;From;""));
@If(@Elements(List) >; 0; @Success;@Return(0));
SendList := @Prompt(; "Mail Notify?"; "Send mail notification about your reply to ";"";List);
@If(@Elements(SendList) >; 0; @Success;@Return(0));
@MailSend(SendList; ""; ""; "Ref:" + OriginalSubject; ""; "My reply: "; )


怎樣在notes.ini里將環境變數刪除

ENVIRONMENT environmental variable := ""; 或者 @SetEnvironment("environmental variable";"").
  

在答覆文檔里如何修改主文檔的值

@SetDocField($Ref;"Field on Parent Doc";"Value")
  

怎樣得到一個群組裡有哪些成員

@Name(;@DbLookup("";@Subset(@MailDbName;1) : "Names.nsf";"Groups";"YourGroupName";
"Members"))
《解決方案》

LOTUS 學習技巧 連載

LOTUS學習技巧 二

1、lotus notes 5.0 資料庫應用程序開發的合理順序是怎樣的?
答:開發 lotus notes 5.0 資料庫應用程序的合理順序是:
一、首先做好各個共享域、共享操作。
二、首先開發所有表單
三、其次開發所有視圖
四、再次開發大綱
五、然後開發頁面
六、然後開發框架集

2、如何在IE中顯示視圖的操作按紐?
答:要在IE中顯示視圖的操作按紐要做到三點:
一、操作必須有內容,即不能為空操作。
二、操作的公式必須正確,如果是錯誤的也顯示不出來。
三、在視圖的高級屬性中必須起用小程序。

3、怎樣在notes 或 IE 中顯示時使用框架集?
答:要使用框架集則要做到三點:
一、首先創建框架集。
二、然後指定框架集中個框架的內容(內容可以是視圖、大綱、或表單),並指定目標幀。
三、在資料庫的高級屬性中指定在瀏覽此資料庫時使用框架集,並指定框架集的名字。

4、何時做大綱比較合理?
答:由於大綱是組織視圖的,所以如果在作好大綱后並指定了各視圖,以後你又修改了視圖的名字,則大綱不能提取到所要求的某個視圖,則大綱便會連所有其他內容也不顯示,正常情況下,在頁中嵌入一個已經存在的大綱時,會看到大綱的內容,如果大綱有錯誤(比如,所要求的視圖名不存在了)則不會看到大綱的全部內容。所以如果你在作好大綱後有修改了視圖名字,則建議把大綱刪除掉,重新建立一個同名大綱。

5、為什麼 有時 視圖中的某些列在設置了分類屬性后仍然象沒有分類似的?但這些列在IE中顯示分類卻是正常的?
答:你的列屬性設置是正常的,只是notes的設計刷新功能不健全,也就是你怎麼刷新都不會把一些無用的信息去掉,這種情況下應該從新啟動notes,如果還不行就要從新啟動伺服器,這樣就肯定可以了。這種問題在notes的其他設計中也會遇到的。

6、如何在IE和Notes中都顯示資料庫的幀結構集?
答:這需要設置資料庫的啟動屬性,在notes啟動時設置為幀結構集,在IE中啟動時也設置為幀結構集。

7、如何在IE中實現文檔保存后返回視圖?
答:要在IE中實現文檔保存后返回視圖需要作到兩點:
一、在表單的「保存」操作中實現公式: @If(@Command();@Command();@Return(""))
二、在表單中增加一個隱藏的保留域:$$return,其屬性設置為計算文本。其值用公式實現為"[/" + @Subset(@DbName;-1)+"/"+"v_make_nowdept"+"?OpenView]" 其中v_make_nowdept是個某個視圖名。這樣就能返回視圖v_make_nowdept了。當然可以用@subset(@ViewTitle;-1)來取得打開某個文檔時視圖名字。但是當我們這樣做時發現:在視圖的「創建」操作進入表單時@ViewTitle的值卻總是不能返回,這個問題還有待於進一步解決。
8、我使用了幀結構集,並且是雙幀結構,左邊是大綱,右邊是視圖,但我在點左邊的大綱項時,右邊相應的大綱項沒有刷新,並且在IE中的創建內容在notes中不能完全顯示出來,在notes中創建的內容也不能完全在IE中顯示出來,這是為什麼?
答:你肯定在大綱的屬性中設置了「使用java小程序」的選項,當使用「使用java小程序」選項時可以使大綱在IE中顯示出和notes中一樣的效果。而使用「使用HTML 」選項時,Domino將忽略大綱的「展開」圖表,和大綱的背景而僅顯示大綱的文本,但使用「使用java小程序」時,Domino在右邊視圖的刷新和「與notes保持同步」方面都不能正確處理,從而出現上述錯誤。所以建議目前使用大綱時其屬性還是設置為「使用HTML "為好。
9、我怎樣使得每次雙擊某個文擋時都讓文擋在右面幀中顯示?
答:你應該在表單的屬性中設置啟動時在指定的幀中顯示。
10、我怎樣在閱讀文檔時隱藏表單的「保存」「發布」操作?
答:你應該在表單操作的安全屬性頁中設置當公式為真時隱藏操作,其公式一般為:!@IsDocBeingEdited|status="1"
11、我怎樣在按某個視圖打開文檔后,用戶按「返回」操作能返回相應的視圖?
答:當你從某個視圖打開文檔后,相應的視圖的名字就保存在公式@viewtitle中,所以返回相應的使徒只需要讓「返回」按紐「運行相應的打開視圖的公式如:@Command(;@If(@ViewTitle="";"v_make_nowdept";@Subset(@ViewTitle;-1)))其中v_make_nowdept是某個視圖的名字,你需要把他改成你的某個視圖名字。
按理說IE和notes都支持公式,但實際上上述公式在IE中使用時沒有問題,但在notes中使用時,有時會不能正確返回。
如果用javascript則只要簡單的一句 history.back()即可實現返回,但javascript不被notes支持。即只能在IE中用。
如果使用公式 if(@Command();@Command();@Return(""))
則可以在notes中正確實現返回,但這個公式在IE中有時不能正確返回,綜上所述,要既能在IE中實現準確返回和在notes中實現準確返回則必須創建兩個「返回」操作其中一個使用javascript,並在notes中隱藏。一個使用公式,並在IE中隱藏。
12、為什麼我每次修改表單時,表格的相對位置都要從新調?
答:這是因為表格設置為自動后,系統在你每次修改表單是從新給出表格的大小,所以需要每修改一次表單都要從新調一下表格的相對位置。
13、我不想在IE中顯示視圖的名稱,我該怎麼辦?
答:你在建立視圖時,要同時賦予該視圖名稱和別名,在所有工作作好以後,你如果不想在IE中顯示該名稱,則你應該用空格來取代原來視圖的名稱,Domino回自動尋找別名來匹配的。如果你不去掉名稱的話,在IE中瀏覽時Domino會自動把名稱顯示在視圖的上方的。
14、我如何控制設計元素在IE中顯示時,附加一些其他風格?
答:如果Domino允許該種元素在IE中瀏覽時附加其他風格,則在設計時在該種元素的屬性裡面會給你一個HTML屬性頁,你可以在該屬性頁裡面添加其他HTML屬性。
15、為什麼我一點擊某一大綱項,我的大綱就全沒有了,取而代之的是一些沒有層次的視圖名稱?
答:這種情況肯定是你的大綱所在幀的目標幀沒有設置,你應該把他設置為你想要連接的那個幀,比如:一般情況下右邊的 content 幀。
16、為什麼我的RTF域在IE中瀏覽時看不到其中的內容?
答:有可能你把這個域放在表格中了吧!,如果放在表格中在IE中瀏覽時是看不到其中的內容的解決辦法是把它放在表格外邊即可。也有可能你在該RTF域中設置了「使用java applet "的屬性,但沒有設置HTML屬性,因為默認的HTML屬性是RTF域的長、寬都為0,這樣在瀏覽時是看不到的,所以你應該把它的HTML屬性設置一下,比如:"HEIGHT=\"120\" WIDTH=\"600\""。
17、我怎樣設計表單來跟蹤文檔的作者?
答:你可以在表單上加一個隱藏的共享域,其名字可以為 from 運行公式為:@If(@IsNewDoc ; @UserName; From),這樣這個域就記錄了這片文檔的作者了。
18、我怎樣設計表單來跟蹤文檔是否已經發布?
答:你可以在表單上加一個隱藏的域,其名字可以為 status 類型為單選按紐,初試值設置為」0「。在你的表單的發布操作中加上一句 status="1"即可來表示此文擋已經發布。
19、我怎樣控制文擋的操作許可權?
答:對已經存在的文擋來說,許可權分為編輯和閱讀兩種,你可以給表單增加一個」修改「操作用以修改文檔,(其運行公式為: @Command())並設置該操作的隱藏屬性為當公式為真時隱藏,這樣你就可以設置當文檔已經發布、目前的用戶不是本文檔的作者、用戶不具備發布角色等任何一個條件滿足時隱藏該操作,從而實現對文檔修改許可權的控制。典型的公式如:@IsDocBeingEdited|!@IsMember("[發布公告]";@UserRoles)|status="1"|from!=@UserName
20、我如何在IE裡面實現notes中的 對話框列表?(即可以添加新的項目的列表框)
答:在notes中這種列表框是系統自身就有的,實現起來比較容易,但這個功能不被IE所支持,要在IE中實現該功能只能是採用另一種方式來仿效這種效果。在IE中實現時,首先要把對話框列表的屬性設置為不可添加新內容。(否則在IE中不能顯示為列表框,而是編輯框),其次再增加一個文本編輯域。這個域用來輸入新的項目,那麼怎麼才能讓新的項目加入到列表框中去呢?這裡用到一個小技巧,這個技巧首先被NOtes開發人員所使用:列表框中的項目要動態的從一個視圖中提取它的一個已經分類的列,這個列實際上就是你的新輸入項目所間接存取的域。
具體操作方法是:
一、對應於要在IE中實現的某個對話框列表域name,你再建一個對話框列表域web_name,但要把它的屬性設置為不可添加新內容。
二、再建一個文本編輯域web_new_name。在name的屬性設置中你要設置為「為選項使用公式」並把公式寫為:@If(!@IsNewDoc & @IsDocBeingLoaded;@Unavailable;@DbColumn("":"nocache"; ""; "視圖名字";1))
三、在name的 input translation事件中 輸入公式 @If(@ClientType = "Notes";@Trim(name); if(@Trim(web_new_name)="";@Trim(Web_name);@Trim(web_new_name)))
四、在web_name的屬性設置中你要設置為「為選項使用公式」並把公式寫為@DbColumn("":"nocache"; ""; "v_bulletin_classsel";1)
五、在notes中隱藏web_name和web_new_name域。
21.在NOTES中建多資料庫索引的方法
---- 學習NOTES的過程中,有些人在多庫索引功能的實現上往往要花些工夫,兩個人都
參照書中的提示做了同樣的工作,但一個可以做成功,而另一個卻怎麼也實現不了,誰
也說不清楚。筆者經過自己實驗,發現有些資料上寫的步驟不夠清晰和全面,故而往往
在此出問題。總結了以下幾步供大家參考。

---- 1. 對要搜索的多個目的資料庫
---- a. 允許跨資料庫索引。這一步可以在「文件/工具/伺服器管理」中選擇「資料庫
工具」執行,也可以通過選擇資料庫屬性中「包含在多個資料庫索引中」實現。
---- b. 對每一目的資料庫建立全文索引。

---- 2. 在伺服器(或工作站)上利用SRCHSITE.NTF模板資料庫創建一全局搜索數據
庫。

---- 3. 確認當前用戶在該全局搜索資料庫的存取控制列表中具有"searchsiteadmin"
的角色。

---- 4. 在全局搜索資料庫配置搜索範圍。選擇菜單上「創建/搜索範圍配置」項即
可。需要注意的是,如果要指定某幾個資料庫做為搜索的範圍,必須對一個資料庫建一
個文檔。

---- 5. 對該全局搜索資料庫建立全文索引。注意這一步應在搜索範圍配置完成後進
行。

---- 6. 在伺服器控制台鍵入

---- LOAD UPDALL 該全局搜索資料庫名

---- 更新全局搜索資料庫。

---- 7.建立個人搜索並進行查詢。

---- 如果你參照上述步驟及順序進行操作,你也可以順利地實現多資料庫索引。

22.在NOTES中利用表單實現對視圖的分頁列印
摘 要 本文討論了將視圖內容用表單以表格形式輸出的方法並給出具體實例,為在
NOTES中實現分頁列印提供了切實有效的辦法。

關鍵詞 視圖,表單

隨著計算機應用的不斷深入和普及,利用網路進行數據交換,開發計算機文檔管理系統
是目前計算機應用行業所面臨的一項重要課題。1989年蓮花發展公司發布的群件產品-
-LOTUS NOTES,由於它結合了企業級電子郵件、分散式文檔資料庫與快速應用開發等
到三位一體的強大技術、完全集成了INTERNET技術,提供給用戶完整的,以網路為中心
的應用技術平台,是目前最優秀的用於管理非結構化信息的工具,被廣泛應用於開發辦
公自動化系統。

視圖是NOTES資料庫中的文檔以表格形式給出的目錄清單。每個視圖以不同的方式選
擇、排序或組織文檔的清單,它是我們對文檔處理的必然途徑,是NOTES一個基本的組
成要素。雖然NOTES本身能夠對視圖進行列印,但我們在實際工作中仍感到這種列印還
遠遠不能滿足用戶多方面的需求;如不能以表格方式輸出,不能分頁列印,不方便用戶
操作等等... 為此筆者嘗試用表單來模擬實現對視圖的列印。

下面給出在NOTES中實現的具體操作方法:

創建資料庫:通過創建一個空白資料庫來實踐來例。
在NOTES工作台中,依次選擇「文件」→「資料庫」→「新建」;
選擇本地伺服器;
鍵入「PAGEPRINT」作為標題;
選擇「空白」作為模板;(若要看伺服器上的模板,可以選擇「模板伺服器」並從列表
中選擇一個伺服器。);
不選擇「繼承未來的設計變化」選項;
單擊「確定」完成新資料庫的建立。
製作表單:表單是資料庫的核心,提供了數據輸入和輸出的「框架」。域、操作、靜態
文本和區段等是表單的基本構成要素。在本例中,表單的作用主要有三個:一是用於將
視圖以表格形式輸出的「列印表單」;一個是用於構造視圖的「基本表單」;通過對這
兩個表單的設計來實現分頁列印;另一個是用來保存一些中間過渡數據。
①打開「PAGEPRINT」資料庫,單擊菜單「創建」→「設計」→「表單」進入表單設計
區域后即可對錶單進行設計了;下面分步介紹:

*「列印表單」(名為:qqqq)的設計:

域:a1、a2、a3、a4、a5(存放作者)

a1_1、a1_3、a1_5、a1_7、a1_9、a1_11(書名) page、total (分別存放分頁數和總
頁數)

 

操作:

第一頁
script(click)
Sub Click(Source As Button)
Dim workspace As New notesuiworkspace
Dim uidoc As notesuidocument
Set uidoc=workspace.currentdocument
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim view As notesview
Dim collection As notesdocumentcollection
Dim r As Integer
Dim i As Integer
Dim char As Variant
Set db=session.currentdatabase
Set view=db.getview("圖書基本情況表")
Set doc=view.getfirstdocument 『從第一個文檔開始

r=0
i=1
Do Until doc Is Nothing
r=r+1 『計算文擋總數
Set doc=view.getnextdocument(doc)
Loop
Set doc=view.getfirstdocument

If ( r>;5) Then 『超過一頁

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))

Call uidoc.fieldsettext("total",Cstr((r-1)\6+1))

Else

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))

i=i+1

If (i<r+1) Then

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))

End If

Call uidoc.fieldsettext("total",Cstr(1)) 『顯示總頁數

End If

Call uidoc.fieldsettext("page",Cstr(1)) 『顯示分頁數

uidoc.refresh

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Dim item As notesitem

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

『以下保存頁碼信息

Set item=doc3.replaceitemvalue("zys",Cstr((r-1)\6+1))

Set item=doc3.replaceitemvalue("fys",Cstr(1))

Set item=doc3.replaceitemvalue("number",Cstr(r))

Call doc3.save(False,True)

End Sub

上一頁

script(click)

Sub Click(Source As Button)

Dim db As notesdatabase

Dim document As notesdocument

Dim workspace As New notesuiworkspace

Dim uidoc As notesuidocument

Set uidoc=workspace.currentdocument

Dim session As New notessession

Dim doc As notesdocument

Dim doc1 As notesdocument

Dim view As notesview

Dim view1 As notesview

Dim collection As notesdocumentcollection

Dim rr As Variant

Dim ii As Variant

Dim jj As Variant

Dim char2 As Variant

Dim r As Integer

Dim i As Integer

Dim j As Integer

Dim item As notesitem

Set db=session.currentdatabase

Set document= New notesdocument(db)

Set view=db.getview("圖書基本情況表")

Set view1=db.getview("ymst")

Set doc=view1.getfirstdocument

rr=doc.getitemvalue("fys")

ii =doc.getitemvalue("number")

jj=doc.getitemvalue("zys")

r%=rr(0)

i%=ii(0)

j%=jj(0)

If (r>;1)Then

Set doc=view.getnthdocument((r-1)*6-5)『上一頁第一個文檔

If ((r-1)*6-5>;0) Then

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char2(0)))

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r-1))

Else

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r-1))

End If

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

Set item=doc3.replaceitemvalue("fys",Cstr(r-1))

Call doc3.save(False,True)

Else

Messagebox("這已經是第一頁了!")

End If

uidoc.refresh

End Sub

隱含條件:page="1"|page=""

下一頁

script(click)

Sub Click(Source As Button)

Dim workspace As New notesuiworkspace

Dim uidoc As notesuidocument

Set uidoc=workspace.currentdocument

Dim session As New notessession

Dim db As notesdatabase

Dim doc As notesdocument

Dim doc1 As notesdocument

Dim view As notesview

Dim view1 As notesview

Dim collection As notesdocumentcollection

Dim rr As Variant

Dim ii As Variant

Dim jj As Variant

Dim char3 As Variant

Dim r As Integer

Dim i As Integer

Dim j As Integer

Dim h As Integer

Dim item As notesitem

Set db=session.currentdatabase

Set view=db.getview("圖書基本情況表")

Set view1=db.getview("ymst")

Set doc=view1.getfirstdocument

rr=doc.getitemvalue("fys")

ii =doc.getitemvalue("number")

jj=doc.getitemvalue("zys")

r%=rr(0)

i%=ii(0)

j%=jj(0)

Set doc=view.getnthdocument(r*6+1) 『下一頁第一個文檔

If (r<j)Then

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r+1))

h=r*6+1

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char3(0)))

h=h+1

If (h<i+1) Then

Set doc=view.getnthdocument(i)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a2","")

Call uidoc.FieldSetText( "a1_3","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(i)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a3","")

Call uidoc.FieldSetText( "a1_5","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a4","")

Call uidoc.FieldSetText( "a1_7","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a5","")

Call uidoc.FieldSetText( "a1_9","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a6","")

Call uidoc.FieldSetText( "a1_11","")

End If

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r+1))

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

Set item=doc3.replaceitemvalue("fys",Cstr(r+1))

Call doc3.save(False,True)

Else

Messagebox("這已經是最後一頁了!")

End If

uidoc.refresh

End Sub

隱含條件:total=page

列印(公式) @Command(;"";"";"";"";"qqqq")

列印設置(公式) @Command()

頁面設置(公式) @Command()

退出(公式) @Command();

@PostedCommand()

「基本表單」 (名為:biaodan)的設計
域: book(存放書名); name(存放作者名)

操作:

繼續登陸(公式)

@PostedCommand();
@PostedCommand();
@PostedCommand(;"biaodan")

退出(公式)

@Command();
@PostedCommand()

「輔助表單」(名為:ymjl)的設計
域:zys(總頁數) fys(分頁數) number(總文檔數)

視圖製作:簡單地說視圖就是將表單按照一定規則排列。本例子使用了兩個視圖:一個
是基本顯示視圖;另一個是輔助視圖。
「基本視圖」(名為:圖書基本情況表)
列名:作者(域為name)書名(域為book)

視圖選項:SELECT ((Form = "biaodan"))

操作按鈕:@Command(;"qqqq")

「輔助視圖」(名為:ymst)
列域名:zys、fys、number

至此,該例設計基本完成,使用時只需打開資料庫,進入「圖書基本情況表」視圖,左
鍵單擊「產生表格」操作,在表單內點擊相應的操作即可完成分頁列印功能。本例給出
的代碼及思路具有通用性只需稍加修改就可應用於具體程序中。

以上方法已在機器上調試通過,運行環境為:WINDOWS98,LOTUS NOTES CLIENT4.61,
Legend PⅡ 400,32M內存。

參考文獻

1中國水利水電出版社,LOTUS NOTES函數和命令編程參考,北京義馳美迪技術開發有限
責任公司編,1997;

2中國水利水電出版社,LOTUS NOTES類庫編程參考,北京義馳美迪技術開發有限責任公
司編,1997;

3中國水利水電出版社,精通LOTUS NOTES編程技術,北京義馳美迪技術開發有限責任公
司編,1997。
《解決方案》

LOTUS 學習技巧 連載

支持
《解決方案》

LOTUS 學習技巧 連載

樓主辛苦了。
《解決方案》

LOTUS 學習技巧 連載

好貼好貼,頂一下先。。。。。
這裡真冷清啊。這麼好貼沒幾個人頂捏

我先頂再說,順便收下了。。。。嘿嘿
《解決方案》

LOTUS 學習技巧 連載

支持!
《解決方案》

LOTUS 學習技巧 連載

不錯.




[火星人 via ] LOTUS 學習技巧 連載已經有314次圍觀

http://www.coctec.com/docs/service/show-post-27602.html