ASP鏈接LOTUS數據庫

Domino R6中,能夠將設計元素導出併產生一個DXL(Domino XML)文檔,導出之後,咱們能夠經過程序代碼將DXL文檔進行修改,再將修改後的代碼導入到Domino數據庫。這種方式能夠修改設計元素中的任何代碼(好比:添加/刪除表單中插入的子表單、修改代理中的代碼、增長刪除視圖中的列等)。

須要注意如下幾點
一、代理從新導入後
a)打開設計時,會提示代理沒有簽名,沒法打開,在Web上運行代理的時候,服務器當即宕機。解決方法:用程序打開設計元素文檔,並對其進行簽名。
b)若原代理設置了兩個名字(如:「保存代理|AG_SaveDoc」),導入後代理的名字會被修改成「保存代理 | AG_SaveDoc」,在設計頁面中,代理的英文名前面自動加了一個空格,但這樣並不影響代理的調用,只是在KOA的接口中沒法正常獲取到該設計。解決方法:用程序打開設計元素文檔,修改$Title域。jquery

二、視圖從新導入後,若視圖的名稱(注意,不是別名)產生有衝突,導入的視圖會自動被重命名爲「原視圖名字」+「/」+「當前用戶帳號」(如:「按部門」會被修改成「按部門/CN=雪浪狐/O=Dev」),若被重命名後的名字仍然有衝突,這樣,在導入的程序中就報DXL導入失敗的錯誤。解決辦法:用程序打開設計元素文檔,修改$Title域。數據庫

三、當導出的設計代碼比較多的時候,導出代碼到內存的時候,會有必定的延緩,若後續的代碼直接訪問內存中的變量的時候,每每容易發生錯誤。解決方法:將導出的代碼先放到一個臨時的文件中,而後在從文件中讀取內容到內存中。服務器

代碼樣例片段dom

導入代碼程序ide

 Dim exporter As NotesDXLExporter
 Dim stream As NotesStream
 
 Set view = db.GetView("SYS_VH_DesignByName")
 Set doc = view.GetDocumentByKey(elemName, True)
 If Not doc Is Nothing Then
  Set stream = ss.CreateStream
  Call stream.Open("c:\$$lksdesigninfo.dxl", "UTF-8")     '導出文件爲了解決前面說起的緩衝問題
  stream.Truncate      '清空文件中原有的內容
  Set exporter = ss.CreateDXLExporter(doc, stream)
  Call exporter.Process    '將代碼導出到文件中
  stream.Close
  Set stream = ss.CreateStream
  Call stream.Open("c:\$$lksdesigninfo.dxl", "UTF-8")
  elementCode= stream.ReadText      '讀取文件內容
'如下代碼獲取該設計元素的XML片段
  elemType = Strrightback(rtnVal, "</")
  elemType = Strleft(elemType, ">")
  elementCode = "<" & elemType & " " & Strright(elementCode, "<" & elemType & " ")
  elementCode = Strleftback(elementCode, ">")
  If elementCode <> "" Then
   elementCode = elementCode & ">"
  End If
  Call stream.Close
  Kill "c:\$$lksdesigninfo.dxl"
 End If

導入代碼程序post

 Dim stream As NotesStream  Dim importer As NotesDXLImporter    codeTxt = {<?xml version='1.0' encoding='utf-8'?>} & Chr(10)  codeTxt = codeTxt & {<!DOCTYPE database SYSTEM 'xmlschemas/domino_6_5_3.dtd'>} & Chr(10)  codeTxt = codeTxt & {<database xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='3.0'>} & Chr(10)  codeTxt = codeTxt & elementCode     '將前面獲取的元素代碼XML片段加入  codeTxt = codeTxt & "</database>" & Chr(10)  Set view = db.GetView("SYS_VH_DesignByName")  Set stream = ss.CreateStream  Call stream.WriteText(codeTxt)     '在流中寫入代碼信息  Set importer = ss.CreateDXLImporter(stream, objDb)  importer.DesignImportOption = DXLIMPORTOPTION_CREATE    '設置以新增的方式導入設計  Call importer.Process   '導入  Call stream.Close  If Isarray(newList) Then    'newList中保存了剛導入的全部設計元素的名稱   newList = Com_UniqueTrim(newList)   Forall o In newList    Set doc = view.GetDocumentByKey(o, True)    If doc Is Nothing Then     Set doc = view.GetDocumentByKey(" " & o, True)    '代理中的元素名稱中可能會被添加了空格    End If    If Not doc Is Nothing Then     If doc.HasItem("$TITLE") Then        '修改設計元素中的$TITLE域      title = doc.GetItemValue("$TITLE")      hasChg = False      If Instr(title(0), " | ")>0 Then       title(0) = Com_ReplaceSubstring(title(0), " | ", "|")       hasChg = True      End If      If Instr(title(0), "/CN=")>0 Then       tmpStr = Strright(title(0), "/CN=")       If Instr(tmpStr, "|") Then        title(0) = Strleft(title(0), "/CN=") & "|" & Strright(tmpStr, "|")       Else        title(0) = Strleft(title(0), "/CN=")       End If       hasChg = True      End If      If hasChg Then       Call doc.ReplaceItemValue("$TITLE", title)      End If     End If     Call doc.Sign           '對設計進行簽名     Call doc.Save(True, True)    End If   End Forall  End If
相關文章
相關標籤/搜索