zoukankan      html  css  js  c++  java
  • DXL之通过程序修改Domino的设计

    Domino R6中,可以将设计元素导出并产生一个DXL(Domino XML)文档,导出以后,我们可以通过程序代码将DXL文档进行修改,再将修改后的代码导入到Domino数据库。这种方式可以修改设计元素中的任何代码(比如:添加/删除表单中插入的子表单、修改代理中的代码、增加删除视图中的列等)。

    需要注意以下几点
    1、代理重新导入后
    a)打开设计时,会提示代理没有签名,无法打开,在Web上运行代理的时候,服务器立即宕机。解决方法:用程序打开设计元素文档,并对其进行签名。
    b)若原代理设置了两个名字(如:“保存代理|AG_SaveDoc”),导入后代理的名字会被修改为“保存代理 | AG_SaveDoc”,在设计页面中,代理的英文名前面自动加了一个空格,但这样并不影响代理的调用,只是在KOA的接口中无法正常获取到该设计。解决方法:用程序打开设计元素文档,修改$Title域。

    2、视图重新导入后,若视图的名称(注意,不是别名)产生有冲突,导入的视图会自动被重命名为“原视图名字”+“/”+“当前用户账号”(如:“按部门”会被修改为“按部门/CN=雪浪狐/O=Dev”),若被重命名后的名字仍然有冲突,这样,在导入的程序中就报DXL导入失败的错误。解决办法:用程序打开设计元素文档,修改$Title域。

    3、当导出的设计代码比较多的时候,导出代码到内存的时候,会有一定的延缓,若后续的代码直接访问内存中的变量的时候,往往容易发生错误。解决方法:将导出的代码先放到一个临时的文件中,然后在从文件中读取内容到内存中。

    代码样例片断

    导入代码程序

     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

    导入代码程序

     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
  • 相关阅读:
    SSM-Spring-02:Spring的DI初步加俩个实例
    python自动华 (五)
    python自动华 (三)
    python自动华 (四)
    python自动华 (二)
    python自动华 (一)
    java 下拉控件 转自 http://www.cnblogs.com/lhb25/p/form-enhanced-with-javascript-three.html
    java 正则《转载》
    jQuery 操作一览表
    JAVA多线程和并发基础面试问答
  • 原文地址:https://www.cnblogs.com/hannover/p/3502015.html
Copyright © 2011-2022 走看看