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

DXL之通过程序修改Domino的设计的更多相关文章

  1. IBM应该请我去做Domino产品设计架构师

                                  作者: 亓锋                         2012年11月19日16:56  来源: 速途专栏              ...

  2. 实验五 含有控制信号的计数器VHDL设计

    一.实验目的 学习计数器的设计.仿真和硬件测试,进一步熟悉VHDL设计技术. 二.实验仪器与器材 计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套. 三.实验 1. 基本命题 在 ...

  3. 如何开发Domino中的WebService

    在domino中写webservice可以使用LotusScript,也可以使用java,由于LotusScript API提供的功能多数都是操作domino数据库中文档的,在web service中 ...

  4. [搜片神器]使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)

    谢谢园子朋友的支持,已经找到个VPS进行测试,国外的服务器:http://www.sosobta.com   大家可以给提点意见... 出售商业网站代码,万元起,非诚勿扰,谢谢. 联系h31h31 a ...

  5. 【Chromium中文文档】Chrome/Chromium沙箱 - 安全架构设计

    沙箱 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox.ht ...

  6. C#WinCE程序(.NET Compact Framework 3.5)项目重构面向抽象设计

    重构关注点 遵循开闭原则 面向抽象设计 实现设备程序端可动态配置 重构的需求 领导想省事提出需求,将现有PDA程序修改为支持PC端由电器工程师根据实际的生产流程可配置,PDA程序在读取配置文件后动态生 ...

  7. [LeetCode] Domino and Tromino Tiling 多米诺和三格骨牌

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...

  8. [转载]资深程序员点评当前某些对Lotus Domino 的不实评论

    实现机关办公自动化工作需要计算机技术的支持,在计算机软件范围中,有网络操作系统软件.数据库软件和开发工具等基本系统软件,在此基础上开发出适合本单位使用的应用软件.对如何选用系统软件,笔者没有发言权,但 ...

  9. Domino(群组工作软件)

    ylbtech-Miscellaneos: Domino(群组工作软件) “Domino”是一种群组工作软件.使用了Domino的服务器就叫Domino服务器Domino的功能强大,界面丰富,主要用于 ...

随机推荐

  1. Java NIO 的前生今世 之四 NIO Selector 详解

    Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一 ...

  2. Spearman Rank(斯皮尔曼等级)相关系数

    转自:http://blog.csdn.net/wsywl/article/details/5859751 1.简介 在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希 ...

  3. nfd指令的详细说明

    在eterm上执行NFD:SHAPEK/CA*OW指令,返回如下: LN CXR OW RT FBC/TC RBD MIN/MAX TRVDATE R 01 CA 450.00 U U 00D/00D ...

  4. %date~0,4%和 %time~0,2%等用法详解(转)

    比如在windowscmd命令行窗口执行date命令后这个环境变量的值为当前日期:2014-09-01 星期六 或2014/09/01 周六那么如下的各个操作的意义如下:%date:~0,4% 表示从 ...

  5. go语言之进阶篇Ticker的使用

    Ticker是一个定时触发的计时器,它会以一个间隔(interval)往channel发送一个事件(当前时间),而channel的接收者可以以固定的时间间隔从channel中读取事件. 1.Ticke ...

  6. android动手写控件系列——老猪叫你写相机

    前记:Android这个开源而自由的系统,为我们带来开发便利,同时也埋下太多的深坑.例如调用系统自带的相机就会出现照片丢失,或者其他各种各样的问题.因此,看来自定义一个相机十分的必要. 要自定义相机我 ...

  7. Android -- setWillNotDraw()

    干货 处理onDraw()方法不被执行的解决方法: setWillNotDraw(false); 官方文档的解释: If this view doesn't do any drawing on its ...

  8. TSQL:判断某较短字符串在较长字符串中出现的次数。

    给定一个较短字符串shortStr='ab',和一个较长字符串longStr='adkdabkwelabwkereabrsdweo2342ablk234lksdfsdf1abe': 判断shortSt ...

  9. PHP跨页面传递时session失效

    一直都是使用wamp作为本地的PHP集成开发环境 今天遇到一个很奇怪的问题,就是在跨页面传递时session竟然失效了,而之前从来没有出现过这种问题 因为使用的是开源的php框架为了测试方便就新建了两 ...

  10. 如何对 GIT 分支进行规划?

    项目背景: 该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统 该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务 于是他们 ...