HCL 中文技术社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8189|回复: 4

源码级解构HCL Domino Volt 低代码工具(一、数据结构)

[复制链接] TA的帖子

124

主题

200

帖子

5403

积分

超级版主

Rank: 8Rank: 8

积分
5403

活跃会员热心会员灌水之王最佳新人

发表于 2020-9-24 13:09:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 qifeng 于 2020-9-24 13:11 编辑

原文网址:
https://mp.weixin.qq.com/s/xUYtNT95Mjao72c3pJ1SZg


今天,我想和朋友们分享一下我们对HCL Domino Volt(以下就简称Volt或者Domino Volt)的研究成果。再次强调:我们不是拿着HCL Domino Volt做为开发工具做离散型敏捷业务应用,我们要从根本上搞懂它的技术细节,完全掌握它的技术原理。
自从Volt发布以后,我们就使用自己的方法对它进行了两个层次的详细研究:第一个层次是“数据结构”,第二个层次是“技术原理”。深度解构Volt是我们最终可以实现与Volt集成的基础。了解了它的数据结构和技术原理以后,我们就可以不再是“Volt使用者”,而是“Volt改造者”。

我要讲述的内容会非常多,有兴趣的读者可以收藏以后慢慢研读。也欢迎朋友们和我们一起探讨和研究Volt,互相学习,共同进步!

一、数据结构

Volt的数据存储分为两种:Volt应用的配置信息和Volt应用的数据。这两种数据都存储在Notes数据库中。这对于熟悉HCL Domino开发的技术人员很容易理解。
下面我们一步一步来挖掘出Volt是如何存储数据的。首先我们要关注的是 volt/VoltBuilder.nsf 这个Notes数据库。这个数据库的重要性在于——它存储着所有Volt应用的列表。每个Volt应用的应用信息都是一个Notes数据库文档记录。

640.png

640 (1).png

别被显示信息欺骗了,这个Notes文档还有很多字段是看不到的,可以使用文档属性来查看每个字段的值。该文档有两个重要字段:Uid和formsJSON。Uid是这个应用的唯一标识,formsJSON存储了一个JSON代码来说明这个Volt应用使用了哪些表单。请记住Uid这个字段,这个字段是一切数据关联的起始点。通过Uid的值,我们可以追查到这个应用的所有数据。另外,status字段存储的是该应用的部署状态,如果这个应用发布了值为:"published"。所以你在系统的首页上可以看到该应用的状态如果是"取消部署"或者“运行”,就是这个字段所标示的。

640 (2).png

先从创建一个Volt离散型敏捷业务应用开始。当我们创建一个新的应用以后,就可以进行表单设计和工作流定义了。
640 (3).png




当创建这个应用以后,当点击保存按钮的时候,该应用的配置信息会被保存到volt/VoltBuilder.nsf中。配置信息包括:表单的UI和数据结构的配置信息,应用所用到的文件(例如图片、Excel文件,PDF文件等)。
此时,该应用的Notes文档记录中,已经自动存储了Uid、formsJSON、status等字段值。此时status的值为“saved”。如下图所示。

640 (4).png

640 (5).png


请注意,在这个应用配置信息的存储了一个附件:application.xml。这个文件是非常重要的,它是一切Volt应用的程序代码的起点,存储着UI结构和数据结构。这个我们在“技术原理”部分会详细地讲一讲。
现在,我们还没有发布这个应用,也就是说,如果应用没有部署之前,所有的配置信息都存储在volt/VoltBuilder.nsf中。如果您已经部署了一个Volt应用,然后你又在修改这个Volt应用了,那么这个应用的最新的设计也存储在volt/VoltBuilder.nsf中。

我在这里总结一下。
  • volt/VoltBuilder.nsf这个数据库存储的是所有Volt应用的列表,包括没有发布的,已经发布但是还在修改的和已经发布的。
  • 应用的发布状态是通过status字段表示的。
  • 每个应用都有一个Uid字段,这个字段是所有数据的关联的起点。
  • Volt应用所用到的一些文件比如图片之类的,也会存储在volt/VoltBuilder.nsf中。
  • 在设计一个Volt应用时,它所有的信息都存储在volt/VoltBuilder.nsf中。
  • volt/VoltBuilder.nsf是整个Volt系统的应用信息的存储库。


当我们发布(或称为“部署”)一个Volt应用时会发生什么呢?这个过程其实也很简单,但是远比我们想象的复杂。
当我们点击“部署”时,系统会完成如下工作:
第一步、创建一个Volt应用数据库,数据库文件路径是:volt/<应用的Uid>.nsf。这就是我为什么说Uid是一切数据关联的起点。一个Volt应用的Uid就是它的数据库的文件名。第二步、在Volt应用数据库中创建Notes设计元素:子表单、表单、视图。视图、子表单和表单的命名规则是Volt设计表单的名称,别名是Volt设计表单的Uid。这个Uid是哪里来的呢?当你用Volt设计工具创建一个表单的时候,系统会给每个元素(表单、页面和字段)都分配一个Uid。这些Uid都可以在application.xml中找到的。这就是我说的application.xml是一切程序代码的起点。第三步、也是最重要的一步,就是下图所示的Notes数据库的“资源-文件”。系统会在Volt应用数据库中存储这个应用运行所需的各种文件:有的文件是配置信息,例如application.xml等,以xml方式存储、有的文件是应用所需的资源文件,比如图片之类的,以desktop/..../<文件>的方式存储、有的文件就是这个应用的Web页面资源,比如js,html和json等。
640 (6).png

所以,当我们去访问一个Volt应用时,系统会通过这些资源文件加载出Volt应用的用户界面。
当我们访问这个Volt应用,填写表单,提交表单,审批表单时,Volt会把我们录入的数据存储在该应用数据库中。"volt/<应用的Uid>.nsf"是一个Volt应用的Notes数据库,里面存储着该应用运行所需的各种资源文件,也存储着该应用的用户数据。这里需要提及一点,那就是在Volt表单上如果有一个表格,这个表格也对应一个Notes表单和一个Notes视图。我们录入的每一行表格数据都存储为该应用数据库的一个Notes文档。表格的Notes数据库文档与表单的关联是通过一个parentID字段实现的——parentID存储着该表格行数据所关联的主文档的UniversalID。例如一个请假单上有一个表格,这个表格我们录入了3行数据,那么Volt应用数据库中就存储了4个Notes文档记录:1个请假单文档,3个表格行Notes文档;3个表格行Notes文档的parentID字段存储的是请假单文档的UniversalID。所以,使用Volt开发应用的时候一定要注意:当你把一个Volt应用数据库进行了“新建拷贝”的操作,表格行和主表单的关联会丢失!

【总结】
  • volt/VoltBuilder.nsf里面存储了两种数据:应用信息(应用列表)和处于开发设计阶段的应用的配置信息。
  • 每一个Volt应用都有一个Uid,这个是所有数据关联的起点。每个Volt应用就是一个Notes数据库:volt/<应用的Uid>/nsf。
  • 每个Volt应用数据库中存储着两种数据:该应用运行时所需的各种配置信息和资源文件(在Notes数据库中以“资源-文件”这种设计元素存储)和用户数据(以Notes文档存储,并有对应的Notes视图进行数据展现)。
  • 使用Volt进行应用设计开发时,每个设计元素都会自动分配一个Uid。这些设计元素包括:表单、页面、工作流步骤、服务、字段、按钮代码,事件等等——这个非常重要!后面讲解技术原理的时候你就会明白这些Uid是做什么的了



今天,我们就先把“数据结构”讲解到这里。后面我们会讲“技术原理”。不要认为读到这里你就掌握了Volt的核心技术原理,早着呢。我在这里先讲数据结构,是为了在后面讲解“技术原理”的时候你能知道Volt的程序代码是怎么展现和操作数据的。





回复

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6

最佳新人

发表于 2020-10-23 14:35:52 | 显示全部楼层
感谢分享
回复

使用道具 举报

32

主题

877

帖子

1851

积分

金牌会员

Rank: 6Rank: 6

积分
1851
发表于 2023-3-25 13:50:18 | 显示全部楼层

proquest publishing x69sao


Reliable advice. Regards.
<a href="https://writinganessaycollegeservice.com/">effective email writing for customer service</a> essay writing service reviews <a href="https://essayservicehelp.com/">what is the best custom essay writing service</a> custom essay writing services canada reviews
argumentative essay writing project manager resume writing service online essay writing services reflective essay writing services
writing a theme essay https://paperwritingservicecheap.com
<a href="https://englishessayhelp.com/">write my essay</a> the college essay guy <a href="https://essaywritinghelperonline.com/">essaytyper</a> helping others essay
回复

使用道具 举报

32

主题

878

帖子

1855

积分

金牌会员

Rank: 6Rank: 6

积分
1855
发表于 2023-3-25 18:26:43 | 显示全部楼层

learning how to write essays n65phs

flytyger ??? 2020-10-23 14:35
**** ???????? ?????? ****


Nicely put, Thank you!
<a href="https://customthesiswritingservice.com/">thesis topic</a> writing a great thesis statement <a href="https://writingthesistops.com/">informational essay thesis</a> counterargument thesis
easy essay writer write a descriptive essay on farming in my town cheap essay writer online help me write a cover letter for my resume
essays for college application https://buyanessayscheaponline.com
<a href="https://domyhomeworkformecheap.com/">can you do my homework</a> should i do my homework <a href="https://domycollegehomeworkforme.com/">do my homework for me</a> i don t want to do my homework
回复

使用道具 举报

32

主题

877

帖子

1851

积分

金牌会员

Rank: 6Rank: 6

积分
1851
发表于 2023-3-25 20:15:55 | 显示全部楼层

buy custom essay online u19hew


This is nicely put! !
<a href="https://domyhomeworkformecheap.com/">why do i always procrastinate my homework</a> should i do my homework right now <a href="https://domycollegehomeworkforme.com/">do my accounting homework</a> find someone to do my homework
writing a scholarship essay best resume writing service for veterans college paper writing service reviews essay writing rules
custom written https://bestpaperwritingservice.com
<a href="https://englishessayhelp.com/">write my essay</a> the college essay guy <a href="https://essaywritinghelperonline.com/">essaytyper</a> helping others essay
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|HCL 中文技术社区 ( 沪ICP备17044822号 )

GMT+8, 2023-5-29 07:16 , Processed in 1.068216 second(s), 31 queries .

快速回复 返回顶部 返回列表