顯示具有 Lotus Notes 標籤的文章。 顯示所有文章
顯示具有 Lotus Notes 標籤的文章。 顯示所有文章

2011年1月6日 星期四

[Lotus script] -Word匯出.改

續匯出Wpord程式
再多一個匯出「圖像」∼ 從Richtext中取出並轉到Word裡面..

2011年1月5日 星期三

NotesSQL ∼萬惡的"system error code 126"

其他的程式語言若想要存取IBM Lotus Notes的NSF檔資料
可以透過IBM自家出的NotesSQL這個工具來達成。
但你的本地端必須有安裝Note相關軟體(Client || Domino || Designer 要有其中一種)
當然還有具備足夠權限的ID檔 而且...
...
Notes.ini 的位置一定、絕對要放在C:\Lotus\Notes\ 裡面
若否,則必須自行設定系統「環境變數」給它
如圖
∼在"path"後面再加入:

;C:\Program Files\IBM\Lotus\Notes\

p.s.要以";"作為分隔。

之後就可以用一般的 Select ... 語法來存取NSF檔了!
EX:存取Names.nsf
Select FullName From People ~

FullName = 欄位名稱
People = 視界名稱

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年12月23日 星期四

[Lotus script]-Word 出出出

'將Notes資料輸出並套用至Word範本檔裡面
1.首先建立一個Word的範本檔
使用「插入」、「功能變數」設定欄位作為資料儲存體

使用「插入」、「書籤」設定書籤作為插入位置

2.NOTES表單中對應匯出程式如下:

Sub WordOutOutOut( M_To As String, M_DY As String, M_DM As String, M_DD As String, M_NO As String, M_SP As String, M_SEC As String,M_AH As String,M_Sub As String,M_Body As String,M_MAIN As String,M_BEND As String)
    Dim session As New NotesSession
    Set db=session.CurrentDatabase
    Set wdoc=session.DocumentContext   
   
    DefDocPath="C:\missive_out_sample.dot" '設定路徑
   
    Set oWord = CreateObject("Word.Application")
    oWord.Application.Visible = True
    oWord.documents.Add DefDocPath, False
    Set WordDoc = oWord.activedocument
    '=======Go to bookmark=======
    WordDoc.Bookmarks("TO").Select
    Call oWord.Selection.TypeText(M_To)
    WordDoc.Bookmarks("YY").Select
    Call oWord.Selection.TypeText(M_DY)
    WordDoc.Bookmarks("MM").Select
    Call oWord.Selection.TypeText(M_DM)
    WordDoc.Bookmarks("DD").Select
    Call oWord.Selection.TypeText(M_DD)
    WordDoc.Bookmarks("NO").Select
    Call oWord.Selection.TypeText(M_NO)
    WordDoc.Bookmarks("SPEED").Select
    Call oWord.Selection.TypeText(M_SP)
    WordDoc.Bookmarks("SECURE").Select
    Call oWord.Selection.TypeText(M_SEC)
    WordDoc.Bookmarks("ATTACH").Select
    Call oWord.Selection.TypeText(M_AH)
    WordDoc.Bookmarks("SUBJECT").Select
    Call oWord.Selection.TypeText(M_Sub)
    WordDoc.Bookmarks("BODY").Select
    Call oWord.Selection.TypeText(M_BODY)
    WordDoc.Bookmarks("MAIN").Select
    Call oWord.Selection.TypeText(M_MAIN)
    WordDoc.Bookmarks("BEND").Select
    Call oWord.Selection.TypeText(M_BEND)
   
    ''==========================
    'oWord.documents(1).SaveAs "c:\Tmp\WM20101223.doc"
End Sub

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月25日 星期四

看到想到-Important Notes files to save or backup

Important Notes files to save or backup
The following is a list of Notes files that you may want to save or backup in case you ever need to uninstall Notes and then reinstall it at another time. Note You may not have all of these files.
File nameLocationComments
BOOKMARK.NSFNotes\Data directoryContains your saved bookmarks and Welcome Page information.
BUSYTIME.NSFNotes\Data directoryContains your local free time information.
DESKTOP6.NDKNotes\Data directoryThis is your Workspace that maps to your bookmarks.
HEADLINE.NSFNotes\Data directoryContains your Database Subscriptions information.
INSTALL.LOGNotes program directoryContains the configuration information based on the options available when you install Notes. This file is used for comparison when you upgrade to new versions of Notes.
INTERNET.NSFNotes\Data directoryContains information from your newsgroup subscriptions (NNTP).
NAMES.NSFNotes\Data directoryContains your contacts, connections, locations, and Personal Address Book information.
NOTES.ININotes program directory Contains the information you provide when you set up Notes, including the options you select in User Preferences. May also contain information created by your administrator. This file gets deleted when you uninstall Notes.
PERWEB.NSFNotes\Data directoryThis is your Personal Web Navigator database that contains Web browser information.
USER.DICNotes\Data directoryContains all of the words you have added to your personal dictionary through the "Add to Dictionary" option in the Spell Checker.
*.NSFNotes\Data directoryLocal databases that you create are stored in the Data directory.
<yourname>.NSF (local copy)Notes\Data directoryContains your Mail, Calendar, and To Do list. This only shows up in the Data directory if you have a local replica of your Mail file.
<yourname>.IDNotes\Data directoryThis is your User ID file. You need this to access Notes.


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月22日 星期一

Domino指令手冊

[Domino  服務器常用命令大全 ]

Broadcast message                  向該服務器的用戶廣播消息
Broadcast message usernames        向該服務器的某一用戶廣播消息
Dbcache Flush                      關閉當前在數據庫高速緩存中打開的所有數據庫。
Drop "username"                    關閉在指定用戶名下運行的當前會話
Drop " username1 " " username2 "   關閉在用戶username1和 username2下運行的會話
Drop All                           關閉所有服務器會話
Exit /Quit                         關閉服務器
Hangup portname                   掛斷指定端口
Help                              顯示服務器命令列表,
     
Load  命令列表
                                   
Load Fixup                       加載並運行 Fixup 服務器任務
Load Object Info Object.nsf      加載並運行共享郵件管理者
Load http                        加載 web服務
Load decs                        加載外部數據連接服務
Load calconn                     加載日曆管理器
Load event                       加載事件管理器
Load sched                       加載日程安排管理器
Load stats                       加載統計信息收集管理器
Load maps                        加載路由表(路由拓撲結構)管理器
Load Router                      加載郵件路由管理器
Load Replica                     加載複製管理器
Load Update                      加載更新管理器
Load Amgr                        加載代理管理器
Load AdminP                      加載管理進程
 
Pull  和 Push  命令 :     
 
Pull servername                   強制與指定服務器進行單向僅拉入複製。
Pull servername databasename      強制從指定服務器單向僅拉入複製指定數據庫文件。
Push servername                   強制與指定服務器進行單向僅推出複製。
Push servername databasename      強制將指定數據庫文件單向僅推出複製到指定服務
器。
 
Replicate  命令:                                                                                        

 初始化與指定服務器之間的雙向複製強制在兩個服務器之間進行複製。發起複製的服務
器(也就是當前正在使用的服務器)首先將其他服務器上的更改拉入進來,然後讓將它的更
改推出到其他服務器。使用該命令可以快速傳遞數據庫的更新,或者解決複製或通訊疑難問
題。     
 
Replicate servername 
在本地服務器和指定服務器之間發起複製。服務器控制台顯示指明複製進行的起始時間的信
息。
 
Replicate servername databasename    
 
在本地服務器和指定服務器之間發起,指定數據庫文件的複製。 
   
Restart server          禁用當前服務器,然後在短暫延遲後重新啟動服務器。
 
Restart Port portname   
禁用指定端口上的事務(或消息)然後在短暫延遲後重新啟動端口。此命令使您不用停止
Domino 服務器就可以停止並啟動端口。
 
Route servername          使用特定服務器發起郵件路由。初始化與指定服務器的待發郵
件的未安排郵件傳送。
Set Configuration setting    在 NOTES.INI 文件中增加或更改設置。
Set Secure currentpassword  
 
口令保護 Domino 服務器控制台如果不輸入口令,則無法使用 Load、Tell、Exit、Quit 和 Set
Configuration 服務器命令,也無法使用那些不是通過「Domino 目錄」中的「程序」文檔
或 NOTES.INI 文件來自動運行的程序。除非使用相同口令再次輸入 Set Secure 命令來清
除口令,否則控制台的安全性將保持有效。
 
Set Secure abracadabra  
若當前沒有有效口令,請設置口令保護控制台。在本例中新口令為「abracadabra」。
如果控制台已經受口令 (這裡為 「abracadabra」)保護,請再次輸入帶有此口令的 Set Secure
命令,來清除該口令。
Set Secure abracadabra sesame    將現有口令「abracadabra」更改為「sesame」。
Set Statistics statisticname        重設累計的統計信息。Statisticname 是命名待重
設的統計信息所需參數。此參數不能使用通配符 (*)。

Show命令列表 :     
 
Show Cluster               顯示所有群集成員及其狀態的列表
Show Config                顯示 Notes.ini文件中參數設置的值
Show Database              顯示指定數據庫的文檔和視圖信息
Show Directory             在 Notes 目錄中顯示每個數據庫的信息
Show Disk                  顯示全部服務器驅動器的磁盤釋放統計信息
Show Memory                顯示此數據庫的內存統計信息
Show Performance           觸發性能統計信息的一分鐘顯示
Show Allports              顯示服務器上的所有啟用或禁用端口的配置。
Show Port                  顯示指定端口的信息
Show Schedule              顯示安排但未執行的命令
Show Server                僅顯示核心服務器狀態信息
Show Tasks                 顯示運行在服務器上的所有任務的狀態信息
Show UserS                 顯示所有活動會話的使用信息
Stop Port Portname          
禁用端口禁用指定端口的事務(或消息)。此命令允許更改端
口,而且不用停止 Domino server 就可以立即生效。
 
Stop Port TCP              禁用名為 TCP 的端口。
Start Port portname        啟用指定端口的事務(或消息)。
Start Port TCP             啟用名為 TCP 的端口
 
 
Tell 命令列表:     
     
Tell serverprogram          將命令串發送給任務。
Tell Router Quit           只關閉 Router 任務。服務器上其他所有任務繼續運行。
Tell Adminp Process All    處理所有新的和更改過的立即、時間間隔、每天和延遲的請
求。
Tell Adminp Process Daily    
處理下列請求:所有新的和更改過的每日請求,以更新「Domino 目錄」中的「個人」文檔。
 
Tell Adminp Process Delayed 
 處理所有新的和修改過的延遲請求。這些請求通常依照「服務器」文檔中的「開始執行日
期」和「開始執行時間」設置運行。
 
Tell Adminp Process Interval        
處理所有立即請求,以及所有依照「服務器」文檔中的「時間間隔」設置執行的請求。
 
Tell Adminp Process New      處理所有新請求。
Tell Adminp Process People    處理所有新的和修改過的請求,以更新「Domino 目錄」
中的「個人」文檔。 By: Freeman Luo    QQ:308226397    Date: May 17, 2008
╰ ╰╰ ╰相約 相約 相約 相約 Domino╮ ╮╮ ╮QQ: 59905501
自由之翼我心飛翔 自由之翼我心飛翔 自由之翼我心飛翔 自由之翼我心飛翔, ,, ,Domino  原來可以這樣 原來可以這樣 原來可以這樣 原來可以這樣。 。。 。
 
Tell Adminp Process Time      處理所有新的和修改過的請求來刪除未鏈接的郵件文件。
Tell Adminp Show Databases  
 顯示 (並在服務器的日誌文件中記錄)下列信息:特定的管理服務器更新的數據庫。 在
所更新數據庫中更新了「讀者」和「作者」域的位置。沒有為其指定管理服務器的數據庫。
Tell Adminp Quit        關閉服務器的 Administration Process。
Tell Amgr Pause         暫停代理的日程安排。
Tell Amgr Resume        繼續代理的日程安排。
 
Tell Amgr Schedule 
 顯示預定在當天運行所有代理的時間安排表。此外,該命令也顯示代理觸發類型、代理預
定的運行時間、代理名稱和代理運行於其上的數據庫名稱。檢查 Agent Manager 的日程安
排表可查到代理是否在 Agent Manager 隊列中等候。
Agent Manger 隊列:
E = 能夠運行的代理  S = 預設運行的代理   V = 等待事件發生的事件觸發代理
觸發類型:
S = 預設運行的代理  M = 新郵件觸發代理    U = 新建 / 更新文檔觸發代理
 
Tell Amgr Status        
快速顯示 Agent Manager 隊列並且在「服務器」文檔中顯示「代理管理器」的設置。
 
Tell Amgr Quit          關閉服務器的 Agent Manager。
 
Tell Clrepl Log         
立即在服務器日誌 (LOG.NSF) 中記錄信息,而不是等待下一個日誌時間間隔。
 
Tell Clrepl Quit      
  關閉服務器上 Cluster Replicator 的所有實例。為了防止 Clrepl 任務在以後的會話中
運行,那麼請刪除 NOTES.INI 文件的 ServerTasks 設置中所有 Clrepl 任務實例。禁用服
務器的 Clrepl 任務只能防止此服務器到其他服務器的複製,而不防止其他群集服務器向此
服務器進行複製。
 
Tell NNTP Newgroup groupname         新建一個新聞組,使用此命令創建在新聞事務期
間沒被自動創建的新聞組。
Tell NNTP Newgroup Delete group_name(s) 刪除指定新聞組。
Tell NNTP Newgroup groupname pathname   提醒 NNTP 將帶有指定群組名和路徑名的群組
添加到它的當前高速緩存列表。通過模板創建群組時使用此命令。
 
Tell NNTP print cache list              打印當前 NNTP 討論群組和相應 Notes 數據
庫的列表。
Tell NNTP Print config               打印當前 NNTP 配置變量和他們的值的列表。
Tell NNTP Quit                         終止 NNTP 任務。
 
 By: Freeman Luo    QQ:308226397    Date: May 17, 2008
╰ ╰╰ ╰相約 相約 相約 相約 Domino╮ ╮╮ ╮QQ: 59905501
自由之翼我心飛翔 自由之翼我心飛翔 自由之翼我心飛翔 自由之翼我心飛翔, ,, ,Domino  原來可以這樣 原來可以這樣 原來可以這樣 原來可以這樣。 。。 。
 
Tell NNTP Show Config              顯示 NNTP 服務器配置設置,此設置在「服務器」
文檔的 NNTP 區段中進行指定。
Tell NNTP Show Groups              顯示服務器的新聞組的名稱和路徑。
Tell LDAP reloadschema             更新 LDAP 服務器上的目錄模式以反映由定製
「Domino 目錄」而引起的更改。
Tell LDAP exportschema             建立或更新 Domino LDAP Schema 數據庫。
Tell Router Delivery Stats         顯示 Router 郵遞的統計信息。
Tell Router Compact               壓縮 MAIL.BOX 並清理開放的 Router 隊列。
Tell Router Show Queues           顯示發向指定服務器的傳送隊列中的郵件。
Tell Router Exit                  終止服務器上的 Router 任務。
Tell Router Use databasename        
創建指定的共享郵件數據庫,並將 NOTES.INI 的 Shared_Mail 的值設置為 2,這樣就能為
了將郵件傳送和郵遞到該服務器而啟用共享郵件數據庫。
Tell Router Quit                   關閉服務器的 Router 任務。
Tell Sched Stats                  顯示空閒時間數據庫中預定和約會的總數。
Tell Sched Show username      在服務器控制台上顯示指定用戶的時間安排。使用此命令
來調查空閒時間數據庫中存在的問題。
Tell Sched Validate               立即校驗服務器上的空閒時間數據庫。
Tell Sched Validate username      校驗指定用戶的信息。
Tell Sched Quit                   關閉服務器上的 Schedule Manager 任務。
Tell Collector Collect            在所有指定服務器上運行統計信息收集,並生成統計
信息報告。
Tell Collector Quit              關閉服務器的 Collect 任務。
Tell Web Help                    列出所有的 Web Navigator 服務器控制台命令。
Tell Web Refresh                 刷新所有的 Web Navigator 的全局設置。
Tell Web Quit                    停止所有運行 Web Navigator 的複本。 
Tell HTTP Restart               更改下列各項中的設置來刷新 Web 服務器的更改。
Tell HTTP Show File Access        顯示計算機及虛擬服務器上有關文件系統保護的信息。
Tell HTTP Show Security 
顯示關於 SSL 和服務器密鑰集文件的信息(包括關於服務器是否啟動 SSL 的信息)。如果
在計算機上設置了虛擬服務器,則會顯示有關虛擬服務器的 SSL 信息。
 
Tell HTTP Show Users               顯示使用基於會話驗證進行用戶驗證的用戶名、IP
地址和會話的過期時間,基於會話的驗證只使用基本驗證。
 
Tell HTTP Show Virtual Servers   顯示運行於計算機上的虛擬服務器的列表。
Tell HTTP Quit                   關閉 Web Server 任務。
Trace servername                 使用 Trace 命令測試與服務器的連接。

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月9日 星期二

Xpage-計算欄位使用HTML

Xpage對於計算欄位控制項中的HTML標記,會當作普通文字。若要使其顯示為HTML則要將「內容」→「基本」→「escape」屬性設為"false".

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月2日 星期二

Xpage-網頁間的資料傳遞?

網頁間傳遞資料最常用的就是Post或者Get,但今天卻突然發現自己不知道Xpage裡面要怎麼做!趕緊查了一下Xpage wiki。
總是有好心人會提供範例:

q = facesContext.getExternalContext().getRequest().getQueryString();
k="UXID";
v=0;
if (q.indexOf(k+"=")>-1) {
    v = q.substring(q.indexOf(k+"=")+k.length()+1, q.length());
    v = (v.indexOf("&")>-1?v.substring(0,v.indexOf("&")):v2);
}
if (v == "insert") return '1';

利用" facesContext"來取得QueryString
然後再用程式去解析字串∼上例是取出"UXID="後面到"&"之前的字串。
因為我是用來做隱藏條件,所以再加一行判斷式若是"insert"則傳回1,表示「可見的!」
 
--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月24日 星期三

Notes-Web化的苦痛:時間選擇器

在Notes還沒有Xpage的時代裡,要將應用程式Web化有幾個特別痛苦的地方。
1.人員名錄選擇器
2.時間選擇器
3.日期選擇器

(↑依照痛苦指數排名)
日期、時間網路上到還有JavaScript的解決方案可以選。
只是要放在Nsf裡面需要一些技巧。而人員名錄就真的只能硬Code了。
自己做子表單、嵌入視界、用JS抓勾選欄位的UNID、再用代理程式撈資料回來…
十分麻煩。雖然之前已經有前輩所作的模組,不過要搬過來要遷就它反而麻煩。
這一部份有空再來整理。先講一下「時間選擇器」搬進Notes裡面的方法。

引用:暗黑執行緒的這篇
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/09/04/code-javascript-time-picker.aspx
以及所使用的Timepicker模組。

Timepicker模組有兩部份:圖片、JS檔
1.JS檔的部份把程式碼Copy出來,放到Script程式庫然後再於表單的JS表頭引用即可
2.圖片的話必須注意配合放置的路徑。放到NSF檔中的"資源/圖片"裡要引用實在是很
痛苦,而且各AP之間無法共用。所以我是放到"data\domino\icons"下面。
將ImagesPath目錄設為:"/icons/"即可被抓到。
3.在表單中加入這行:
<script type="text/javascript">afa_ExtendTimePicker("AwayTime");</script>
並選取文字~透過HTML即可。

p.s.AwayTime是欄位名稱
完成後如下:

p.s.2
Web開發時,ID不要漏掉。JavaScript很依賴他的!

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月21日 星期日

Xpage - 視圖 -自訂超連結

在XPage裡面我們可以很方便的取用視圖內容,呈現在網頁上。
而只要設定幾個步驟就可以用連結的方式開啟文件。那、如果是要開啟自訂的超連結呢?
假設我的世圖中有一欄位DBPath是放電子表單資料庫路徑、eFormName是名稱。
請將來源視圖中的欄位作如下設定:
"[<a href=\\" + DBPath + " target=_blank >"+eFormName+"</a>]"

然後Xpage的視圖直欄作如圖之設定:1.選HTML,2.不要勾產生連結∼

p.s.加前後"中括號"是為了相容傳統Web方式。
--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月13日 星期六

Notes-如何在Notes client中要求使用者再次輸入密碼

一般在使用Notes client的時候,都是在一開始的時候就輸入ID密碼驗證身份。進入系統後開啟每支AP時,由AP本身的設定去檢查該名使用者是否有權限可以進入或是讀寫…
最近客戶Boss丟了這個問題出來:希望可以在開啟某支AP時要求該名使用者再次輸入一次密碼。乍聽之下有點怪,明明Notes已經有良好的權限控管機制了?不過再代入角色想一下,大概是覺得怕自己已經登入使用中的電腦,被別人偷用。利用他的ID進入存取資料∼好的…那Soluction?

目想到的是利用Lotus Script執行讀取ID的方式來達成:

Sub Postopen(Source As Notesuiview)
'------------------測試強制切換ID-----------------------------
Dim w As New NotesUIWorkspace
Dim s As New NotesSession
Dim uidb As NotesUIDatabase
Dim myID As notesID
Dim CurrentUserName As String
Dim IsAllow As Boolean
Set uidb = w.CurrentDatabase
fNames = w.OpenFileDialog( False, "請選擇ID檔",, "D:\lotus\NotesID")

If Not(Isempty(fNames)) Then
'On Error Goto ErrorHandler
CurrentUserName =s.UserName
Set myID = New notesID( fNames(0) )
If (CurrentUserName = myID.userName ) Then
msgStr$ = "OK!"
IsAllow = True
Else
msgStr$ = "No good!"
IsAllow = False
End If
msgStr$ = msgStr$ & Chr(10) & myID.userName
msgStr$ = msgStr$ & Chr(10) & myID.commonname
msgStr$ = msgStr$ & Chr(10) & myID.internationalPublicKey
'msgStr$ = msgStr$ & Chr(10) & myID.internationalPrivateKey
'ProgEnd:
Else
IsAllow = False
End If
Msgbox msgstr$

If Not ( IsAllow) Then
Call uidb.Close
End If

'ErrorHandler:
'Msgbox "Error:" & Err & "__ID:" & fNames(0)
'Call uidb.Close
End Sub

這是網路上找到的讀取ID檔Class。
NotesID Class
利用它存取ID檔並觸發密碼驗證,之後再比對是否與現行ID相符以達成身份驗證的目的。
p.s.1.寫在postopen中是因為DB必須先開啟,才能用UI去Close
p.s.2.要調用myID.internationalPublicKey才會觸發密碼驗證。

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月12日 星期五

Xpage上要如何調用CGI變數

Notes傳統開發Web的時候,可以將欄位名稱設CGI變數名稱,以取得CGI變數資料。
例如使用者IP、HTTPS狀態、Server Name等。
但我們在Xpage上無法再用設定欄位名稱的方式來取得CGI變數資料。
而computeWithForm = both的方式只能用在@Formula上。
所幸我們有現成的程式庫可以達成這需求:
1.到Demo Discussion(討論區範本)中把程式庫:xpCGIVariables搬回來。
2.在程式中我們用Server端的JavaScript去呼叫並取用它:
facesContext.getExternalContext().getRequest().getRemoteAddr());
而我則是把它作成一個「自訂控制項」來方便取用這些CGI資訊
類似傳統上作成「子表單」的方式。


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月10日 星期三

Xpage_檔案上傳救星

從前Notes Web的檔案上傳真是一場惡夢!
現在Xpage來救你了!

在表單中準備好一個"有錢的"欄位檔作存放區。


然後把上傳元件、下載元件都繫結過去就OK啦!


如下:



--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月4日 星期四

Notes(NSF檔)中調用圖片及CSS




放在Notes中的圖片要調用
將一般路徑:images/img01.gif
改成: ./img01.gif


Xpage中的空白字元代碼:&#160;


網路上寫好的CSS檔要拿到Notes裡面使用。由於使用Xpage的「自訂控制項」放入Xpage裡面後ID會被改掉,所以CSS檔裡面ID宣告法(用"#"做開頭的定義),必須改為Class(用"."做開頭的定義)的方式。而原本頁面中引用ID的地方,必須再去指定他的Class。
選擇器 {
屬性:設定值;
...
}
p.s.1.頁面中原先使用id宣告的部份若是有多層,則設定Class時也必須手動上層的Class定義加進來。
p.s.2.注意!在修改ID成Class時不要用「全部尋找/取代」的方式,不然會把色彩設定的#也改到。



當使用Xpage出現「未授權檢視此網頁」時,除了注意ACL中
Anonymous是否有加入並給予權限。
另外也檢查一下是否使用正確的ID建立Nsf檔!


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2009年7月9日 星期四

[Lotus Script]-Fwd: Notes、Richtext欄位中- 附件檔案位置控制

End Function將文件中的附件檔案抓到硬碟裡,經過壓縮後要再放回去。
嵌入檔案的位置都會跑掉。
為此花了兩天的時間再尋求解決之道∼終於找到搭配NotesRichTextNavigator來定位附件檔案的位置了!

附加檔放回原位:使用 NotesRichTextNavigator

Set rtnav = item.CreateNavigator
If Not rtnav.FindLastElement(RTELEM_TYPE_FILEATTACHMENT) Then
Msgbox "此份文件中沒有附件"
Exit Sub
Else
Call rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT)
Do
'CtrNav = CtrNav +1
Loop While rtnav.FindnextElement(RTELEM_TYPE_FILEATTACHMENT)
'Msgbox CtrNav
End If
略…

Call rtnav.FindNthElement(RTELEM_TYPE_FILEATTACHMENT,"計數器")
Call item.BeginInsert(rtnav,False)
進行附加檔嵌入作業…
Call item.EndInsert
Call doc.Save(True,False)

略…

…萬事OK!


--
---- 書本上查的到的東西 ---- 不用去背他 ----

[Lotus Script]-在Notes裡面抓取「Windows系統路徑」

<<宣告WinAPI>>

Declare Function GetSystemDirectory Lib "kernel32" Alias _
"GetSystemDirectoryA" (Byval lpBuffer As String, _
Byval nSize As Long) As Long

<<使用: >>

DirTmp =Environ$("temp") & "\"

∼得到值:d:\tmp\ ←我自己設到D去的

參數對照:
number envstring
1 ALLUSERSPROFILE
2 APPDATA
3 CLIENTNAME
4 CommonProgramFiles
5 COMPUTERNAME
6 ComSpec
7 FP_NO_HOST_CHECK
8 HOMEDRIVE
9 HOMEPATH
10 LOGONSERVER
11 NUMBER_OF_PROCESSORS
12 OS
13 Path
14 PATHEXT
15 PROCESSOR_ARCHITECTURE
16 PROCESSOR_IDENTIFIER
17 PROCESSOR_LEVEL
18 PROCESSOR_REVISION
19 ProgramFiles
20 SESSIONNAME
21 SystemDrive
22 SystemRoot
23 TEMP
24 TMP
25 USERDOMAIN
26 USERNAME
27 USERPROFILE
28 windir

--
---- 書本上查的到的東西 ---- 不用去背他 ----

2009年7月7日 星期二

[Lotus Script]-附件、壓縮

找到了一個可以壓ZIP的DLL檔,可以不用看WinRAR跟7zip的臉色了。

說明:
1.附檔解壓縮後,將該DLL檔放到C:\Windows\ 目錄底下。
2.代理程式使用方式:
※在「Delarations」裡輸入下列程式碼來引用VCZIPSUP.DLL:

Declare Function Zip Lib "VCZIPSUP.DLL" (_
Byval pstrInputDirectory As String, _

Byval pstrFileWildCardSpec As String, _

Byval pstrOutputZipFilename As String, _

Byval iIncludeSubDirs As Integer, _

Byval iKeepFolderStructure As Integer, _

Byval pstrOptions As String) As Long


※在代理程式程式裡呼叫:
Sub Initialize
Dim lRc As Long

lRc = Zip("D:\Temp\Files","*.*", "D:\Temp\MyFirstZipFile.zip",1, 0,"")

End Sub


一、來源路徑
二、來源檔名 (輸入 *.* 可以將該目錄下所有檔案打包壓縮)
三、輸出路徑及檔名
四、未知
五、未知
六、未知

壓縮完成、lRc會返回"0"

==================================================================

另附上修改後的程式。

Sub Initialize
Dim ss As New notessession
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim Arcobj As NotesEmbeddedObject
Dim doc As NotesDocument
Dim Newitem As Variant, item As Variant
Dim RarPath As String, RarDirName As String, RarFileName As String
Dim result As Integer, RarFinal As String,oName As String,lRc As Long

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document

RarPath = "D:\Tmp\ZIP\"

If doc.HasEmbedded Then
RarDirName = Format$(Now(), "hhnnss")
Mkdir RarPath & RarDirName
RarFinal = RarPath & RarDirName

If Not uidoc.EditMode Then uidoc.EditMode = True
Call uidoc.Save

Set item = doc.GetFirstItem("Body")
Forall embobj In item.EmbeddedObjects
oName= embobj.name
Call embobj.ExtractFile( RarFinal & "\\" & oName)
Call embobj.remove
End Forall
Call doc.save(True, False)

%REM
result = Shell("C:\Program Files\7-Zip\7z.exe a " & RarFinal & ".zip" & " " & RarFinal , 1)
Dim ii As Long
For ii = 1 To 10000000
Next
%END REM
lRc = Zip(RarFinal,oName,RarFinal & ".zip",1, 0,"")

Set Newitem = doc.GetFirstItem("Body")
Set Arcobj = Newitem.EmbedObject(EMBED_ATTACHMENT, "", RarFinal & ".zip")
'Set Arcobj = Newitem.EmbedObject(EMBED_ATTACHMENT, "", "D:\Tmp\ZIP\À£.zip")
Call doc.Save( True, True )
Call uidoc.Save

Dim newdoc As New notesdocument( ss.CurrentDatabase )
Set newdoc = doc
Call uidoc.Close
Call workspace.EditDocument(True, newdoc)

Kill RarFinal & ".zip"
'Rmdir RarFinal
Else
Print Now()+" No Embedded Object"
End If
End Sub




--
---- 書本上查的到的東西 ---- 不用去背他 ----

2009年7月2日 星期四

[Lotus Script]_Word轉轉轉!

開啟Word檔、並插入自訂浮水印。
                                                                

Sub Initialize
'(WORD開開開)|agWordOpen
Dim session As New NotesSession
Dim db As NotesDatabase
Dim wdoc As NotesDocument
Dim pdoc As NotesDocument
Dim PrintHeadFlag As Integer
Dim DefWMStr As String,DefDocPath As String
Set db=session.CurrentDatabase
Set wdoc=session.DocumentContext

DefWMStr = "日期:" & Cstr(Today) & " // 作者:Signally" '設定水印文字
DefDocPath="D:\t1.dot" '設定路徑

Set oWord = CreateObject("Word.Application")
oWord.Application.Visible = True
oWord.documents.Add DefDocPath, False

'=======Insert Watermark======
oWord.ActiveDocument.Sections(1).Range.Select
oWord.ActiveWindow.ActivePane.View.SeekView = 9 'wdSeekCurrentPageHeader
oWord.Selection.HeaderFooter.Shapes.AddTextEffect(PowerPlusWaterMarkObject1,DefWMStr, "標楷體", 1, False, False, 0, 0).select
oWord.Selection.ShapeRange.Name = "PowerPlusWaterMarkObject1"
oWord.Selection.ShapeRange.TextEffect.NormalizedHeight = False
oWord.Selection.ShapeRange.Line.Visible = False
oWord.Selection.ShapeRange.Fill.Visible = True
oWord.Selection.ShapeRange.Fill.Solid
oWord.Selection.ShapeRange.Fill.ForeColor.RGB = 30 '色彩?
oWord.Selection.ShapeRange.Fill.Transparency = 0.6 '透明度
oWord.Selection.ShapeRange.Rotation = 315 '角度(依照頂端指向)
oWord.Selection.ShapeRange.LockAspectRatio = True
oWord.Selection.ShapeRange.Height =240 'CentimetersToPoints(4.13) '高
oWord.Selection.ShapeRange.Width = 270 'CentimetersToPoints(16.52) '寬
oWord.Selection.ShapeRange.WrapFormat.AllowOverlap = True
oWord.Selection.ShapeRange.WrapFormat.Side = wdWrapNone
oWord.Selection.ShapeRange.WrapFormat.Type = 3
oWord.Selection.ShapeRange.RelativeHorizontalPosition = 0 'wdRelativeVerticalPositionMargin '基準點
oWord.Selection.ShapeRange.RelativeVerticalPosition = 0 'wdRelativeVerticalPositionMargin '基準點
oWord.Selection.ShapeRange.Left = wdShapeCenter
oWord.Selection.ShapeRange.Top = wdShapeCenter
oWord.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
'==========================
oWord.documents(1).SaveAs "d:\TryWM20090702.doc"
End Sub


--
---- 書本上查的到的東西 ---- 不用去背他 ----