科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道集成 Macromedia Flash 和 IBM Lotus Notes/Domino:基于 Domino 解决方案的基于 Flash 的 UI

集成 Macromedia Flash 和 IBM Lotus Notes/Domino:基于 Domino 解决方案的基于 Flash 的 UI

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

利用基于 Macromedia Flash 的视图来呈现 Domino 视图的内容和合并 Domino 视图的设计。利用此解决方案,可以快速地为 Web 用户展示标准的 Domino 视图并方便地为 Lotus Notes 和 Web 客户机更新单个 Domino 视图的设计。

作者:www.ibm.com 来源:www.ibm.com 2007年9月15日

关键字: lotus IBM MACROMEDIA FLASH Office

  • 评论
  • 分享微博
  • 分享邮件

本文介绍如何基于平面 Domino 视图并在其中进行控制,将 IBM Lotus Domino 视图内容呈现在 Macromedia Flash 中。通过这种方法,只要更改 Domino 视图即可在 Lotus Notes 和 Flash 用户界面 (UI) 中维持相同的设计和内容。

通过采用此解决方案,不再需要在附加的视图中插入内联的 HTML 或 XML,就可以使用相同的方法在 Lotus Notes UI 和 Flash UI 中格式化内容。相反,创建这样一个 Domino 视图,它包括应用到列标题或行的格式化方法,例如字号、字体和字体灰度,UI 就可以共享相同的格式化方法。利用此方法在 Web 客户机中使用 Flash,可以将 Domino 视图的字体嵌入到 Flash 影片中,可以在 Web 客户机中完美地呈现。

本文描述名为 FlashNotesView 的 Flash 解决方案。它读取纯 Domino 视图的内容和设计,将其应用到 Flash UI 中(如图 1 所示)。本文假设您是有经验的 Flash 开发人员,具有 ActionScript 语言的知识,并熟悉 Lotus Notes/Domino 应用程序开发。

注意:本文的代码存放在名为 FlashNotesView.as 的外部 ActionScript 文件中。如果没有安装 Macromedia Flash,可以在文本编辑器中查看此代码。


图 1. FlashNotesView 最终结果预览
FlashNotesView 最终结果预览

创建 UI 组件

Macromedia Flash 带有一个预定义的 UI 组件集。当然也可以使用 Macromedia Flash Exchange 添加更多组件。只需将这些组件拖放到一个平台上,或者使用代码在运行时创建某些类的实例,即可在 Macromedia Flash 中创建 UI。

假设您想在 Macromedia Flash 中创建类似平面 Lotus Notes 视图的视图。为此,请使用名为 DataGrid 的 UI 组件。要在运行时创建组件,必须在 Flash 影片开始时为 3 个 UI 组件导入类。这些类是 Label、List 和 DataGrid,导入它们的命令如下:


import mx.controls.Label;
import mx.controls.List;
import mx.controls.DataGrid;


导入所需的类之后,可以使用下面的 createClassObject 方法在运行时创建新的类实例:


lblSelectView = createClassObject(Label, "lblSelectView", 
			getNextHighestDepth()); lstSelectView= createClassObject(List,"lstSelectView", 
			getNextHighestDepth()); dgridView = createClassObject(DataGrid, "dgridView", 
			getNextHighestDepth());







回页首


准备数据提供程序

数据提供程序是在组件(如 List 和 DataGrid)中查看的数据的模型,理论上只是一个对象数组。使用 Array 类的 push 方法可以将新对象添加到数据提供程序中。该数组中的每个对象也称为数据提供程序中的项,每项在 List 或 DataGrid 组件中以单独的行显示。要定义显示在 List 组件中的数据,请使用以下代码:


var arrSelectViewDP = new Array();
arrSelectViewDP.push({label:"IBM Lotus software: Lotus Documentation",
data:"http://www.lotus.com/ldd/notesua.nsf/Date"});


在本文中,我们使用 Lotus Documentation site database (notesua.nsf) on developerWorks Lotus 中的 Domino 视图。





回页首


指定数据提供程序

List 组件的实例具有名为 dataProvider 的属性。要为 List 实例指定数据提供程序模型,请使用以下命令:


lstSelectView.dataProvider = arrSelectViewDP;

此命令将数据提供程序模型中的项填充到 List 组件中。现在,您已经设置好了 Flash 影片第一次运行时显示给用户的一切内容。在下面几节中,您将添加检索用户在 Flash 影片中的 List 组件中所选择的 Domino 视图的内容和设计所需的代码。(该 List 组件显示在图 1 中的 “Select view” 框中。)





回页首


以 XML 格式获取 Domino 视图的内容和设计

首先,必须检索 Domino 视图的内容。Lotus Domino 中有几个 URL 命令可用于此任务。例如,?OpenView、?OpenDocument、?OpenPage 和 ?ReadForm。但 ?ReadViewEntries 和 ?ReadDesign 是首选 URL 命令。

检索 Domino 视图的内容

使用 ?ReadViewEntries 可以用 XML 格式而不是预设格式检索视图中的内容。此检索的 URL 语法如下:


http://www.lotus.com/ldd/notesua.nsf/Date?ReadViewEntries

URL 结果如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Lotus-Domino (Release 7.0.1 - January 17, 2006 on Windows NT/Intel) --> 
<viewentries toplevelentries="690">
  <viewentry position="1" unid="E1EFAB2B58C8B68785257145005A41FC" noteid="86B6"
    siblings="690">
    <entrydata columnnumber="0" name="Date_Update">
      <datetime>20060403</datetime>
    </entrydata>
    <entrydata columnnumber="1" name="Titles">
      <text>Real-time access and data management for the intelligent
        enterprise</text>
    </entrydata>
    <entrydata columnnumber="2" name="Language">
      <text>English</text>
    </entrydata>
  </viewentry>
...
</viewentries>

检索 Domino 视图的设计

在这里向开发人员提供一条新闻:基本上未归档的 URL 命令 ?ReadDesign 允许您不仅检索视图的内容,还以 XML 格式检索视图的设计,即如何格式化视图列标题和行。检索设计的 URL 语法如下:


http://www.lotus.com/ldd/notesua.nsf/Date?ReadViewEntries

下面是 URL 结果:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Lotus-Domino (Release 7.0.1 - January 17, 2006 on Windows NT/Intel) --> 
<viewdesign rowlines="3" direction="0" spacing="1" columns="3"
    totalscolor="#808080">
    <column columnnumber="0" width="80" name="Date_Update" title="Last updated"
      sort="true" sortdescending="true" resortascending="true" format="2"
      listseparator="none">
      <cfont style="r" size="7" color="#000000" face="Helvetica" />
      <hfont style="b" size="7" color="#000000" face="Helvetica" />
      <numberformat digits="0" format="general" />
      <datetimeformat show="date" date="yearmonthday" time="hourminutesecond"
        zone="never" />
    </column>
...
</viewdesign>

通过检索 Domino 视图的设计,就在 Lotus Notes 中具有了良好格式化的视图,并且字体设置和其他格式化也出现在 Flash UI 中。





回页首


创建 XML 对象

在 Macromedia Flash 中处理 XML

可以在 Macromedia Flash 中使用 XML 类来忽略 XML 中的空白,并在完成从 data.xml 文件加载 XML 内容时显示一条消息。为此,请使用此脚本:

var xml = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(success) {
  if(success) trace("XML has successfully been loaded.");
}
xml.load("data.xml");

如何将 Domino 视图中获取的 XML 加载到 Macromedia Flash 中的 DataGrid 组件中呢?首先,必须有一个 XML 对象,用于通信和对发送到服务器的请求的响应进行处理。xmlView XML 对象包含服务器响应的 XML;由于不需要用户阅读所需的 XML 格式,所以您可以要求此对象忽略空白(参见侧栏 “在 Macromedia Flash 中处理 XML”)。

另外,还指定了一个当您从服务器获取 XML 结果时要执行的函数,如下所示:

var xmlView = new XML();
xmlView.ignoreWhite = true;
xmlView.onLoad = onXMLViewLoad;




回页首


检索视图内容

检索视图设计

创建一个与名为 xmlViewDesign 的 xmlView 类似的附加 XML 对象。此对象具有从所选视图的设计中获得的 XML:


xmlViewDesign.load(strView+"?ReadDesign");

将此行添加到 XML 处理程序函数 xmlView 中,以便成功加载视图内容后加载设计。

在 Macromedia Flash 中加载 UI 时,调用 XML 对象的加载方法,初始化用户所选视图中的 XML 内容的加载, 如下所示:


xmlView.load(strView+"?ReadViewEntries");

strView 变量具有当前所选视图的 URL。












回页首


在 DataGrid 中填充视图内容

当收到 Domino 视图的 XML 内容时,后面的两个代码清单由于已放在 onXMLViewLoad 函数中而会执行。当您遍历结果时,可以使用一个临时数组来保存 XML 节点。


var arrView = arrViewRows=arrViewCols=[];

下一个代码清单遍历 XML 节点并创建一个临时的 objRow 对象,该对象由 Domino 视图每行的列内容填充。然后,objRow 对象附加到 DataGrid 组件的 dataProvider 属性中。


arrViewRows = xmlView.firstChild.childNodes;
for (var row = 0; row<(arrViewRows.length); row++) {
  if (arrViewRows[row].nodeName == "viewentry") {
  arrViewCols = arrViewRows[row].childNodes;
  var objRow = new Object();
  for (var col = (arrViewCols.length); col>=0; col--) {
    if (arrViewCols[col].nodeName == "entrydata") {
    objRow[arrViewCols[col].attributes.columnnumber] =
      arrViewCols[col].firstChild.firstChild;
    }
  }
  arrView.push(objRow);
  }
}
dgridView.dataProvider = arrView;
// Clear datagrid column headers
for (var col = 0; col<(dgridView.columnCount); col++) {
  var column = dgridView.getColumnAt(col);
  column.headerText = "";
}


要获得清晰的表示,DataGrid 的列标题在此处被清除,并在以后应用视图设计时填充。





回页首


将视图设计应用于 DataGrid

要应用视图的设计设置,必须将此处显示的代码添加到 onXMLViewDesignLoad 函数中,获取 ?ReadDesign 命令的内容时将执行该函数。同样,遍历结果时使用一个临时数组来保存 XML 节点。


var arrViewCols = [];
arrViewCols = xmlViewDesign.firstChild.childNodes;
for (var col = 0; col<(arrViewCols.length); col++) {
  if (arrViewCols[col].nodeName == "column") {
  var column = dgridView.getColumnAt(col);
  column.headerText = arrViewCols[col].attributes.title;
  column.width = int(arrViewCols[col].attributes.width);
  column.resizable = Boolean(arrViewCols[col].attributes.resize);
  column.setStyle("fontSize",
    int(arrViewCols[col].firstChild.nextSibling.attributes.size));
  column.setStyle("fontFamily",
    arrViewCols[col].firstChild.nextSibling.attributes.face);
  column.setStyle("color",
    arrViewCols[col].firstChild.nextSibling.attributes.color);
  }
}
dgridView.redraw();


此代码遍历 XML 中定义的每一列,并将设置应用于 DataGrid 组件的列。它通过使用 setStyle 属性设置适当的层叠样式表 (CSS) 值来完成此操作。

此代码支持的视图设计的设计属性包括:

  • 列标题文本
  • 列宽
  • 列是否可以调整大小
  • 列字体大小

当然,通过添加代码以支持更多视图设计的属性,可以轻松地扩展此列表。





回页首


在新解决方案中实现 FlashNotesView.as

要在新 Flash 影片(例如 FlashNotesView_clean.fla 中包括的影片)开始时使用 FlashNotesView.as,可以在 Flash 影片的 Actions 窗格的第 1 帧中添加此行:


#include "FlashNotesView.as"

FlashNotesView 解决方案的局限性
在当前状态下,提供的 FlashNotesView 版本不支持分类视图。此情况的一种解决方案是使用 TreeList 组件以层次结构显示文档。

接下来,将 Label、List 和 DataGrid 从 Components 窗格中拖动到平台上,然后删除平台上新创建的实例。这告诉您的 Flash 影片在将 Flash 文件编译成 Macromedia Flash Player 可播放的 ShockWave Flash (SWF) 格式时包括这些新添加的组件。由于实际代码位于外部 FlashNotesView.as ActionScript 文件中,因此以上是您在 Macromedia Flash 中需要做的所有事情。





回页首


自定义 FlashNotesView 解决方案

除更改 FlashNotesView.as 之外,必须使用 Macromedia Flash 将 Flash (FLA) 文件编译成 Macromedia Flash Player 可以播放的 SWF Flash 影片。首先,尝试自定义用户可选择的视图列表。可以轻松地在代码中更改此过程。例如,要从 Bob Balaban (Looseleaf) Forum 添加视图,只需添加以下代码即可,其中数据提供程序定义在开始部分:


arrSelectViewDP.push({label:"Bob Balaban (Looseleaf) Forum",
data:"http://www.looseleaf.net/Looseleaf/Forum.nsf/
8178b1c14b1e9b6b8525624f0062fe9f"});


注意:URL 必须排除任何现有 URL 命令,所以您在从 Web 复制您自己的 URL 时请从初始的 URL 删除 ?OpenView。

当您熟悉自定义此解决方案时,请考虑创建一个自定义类,用于扩展包含首选方法和属性的 DataGrid。





回页首


安全

如果测试提供的 FlashNotesView_final.swf Flash 影片时出现安全消息,请按照显示的指示以允许本地的 SWF 文件与外部地址通信。

随着 Macromedia Flash Player 8 的发布,有了更高的安全级别,即只允许 Flash 影片与同一域中的后台系统通信。要避免此问题,可以在后台服务器上创建一个 Flash 影片能与之通信的文本文件(叫做策略文件)。然后,将应该允许与当前服务器通信的域添加到该文本文件。

下面是一个位于 backendhost.com(它接受来自 clienthost.com 的请求)中的策略文件的示例:


<cross-domain-policy>
<allow-access-from domain="clienthost.com" />
</cross-domain-policy>


该策略文件的文件名是 crossdomain.xml。有关 Macromedia Flash Player 8 中增强的安全模型的详细信息,请参考 Adobe 文章 “Security Changes in Flash Player 8”。





回页首


结束语

这几年来,富 Internet 应用程序(即具有可以结合视频和声音的桌面应用程序的能力的基于 Flash 的 UI)已成为 Flash 开发的热门话题。这类应用程序也很可能与后台系统连接,向用户传递内容。

您可以将 Lotus Domino 服务器作为基于 Flash 的 UI 的后台系统,可以将用于 Domino 数据库的 HTML 文件中的 Flash 应用程序嵌入不同平台上的客户机计算机中。还可能将 Flash 应用程序编译成独立的可执行文件,管理员可以刻光盘并分发这些文件。光盘中的 Flash 应用程序保留了它与后台 Domino 服务器的连接,可在客户机计算机上通过 HTTP 来访问。这是 Macromedia Flash 用作基于 Domino 的解决方案中的单独表示层的一个优点。如果需要,可以轻松地将 Flash 应用程序应用到其他后台系统。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章