CyberArticle的资料,都保存在一个一个的书籍中。一个书籍,对应于一个数据库。CyberArticle的书籍,分为本地书籍和远程书籍。
- 本地书籍:使用桌面数据库系统,例如Access,SQL Server Express或者SQLite数据库。书籍的文件,保存在安装CyberArticle的电脑上面。每一个书籍,对应一个(Access/SQLite)或者多个书籍文件(SQL Server Express)。
- 远程书籍:使用大型数据库,例如SQL Server,MySQL数据库。数据保存在数据库服务器上面(当然也可以保存在本机)。
CyberArticle通过OLEDB方式连接这些数据库。同样,您也可以使用其它软件,例如各种数据库软件的管理工具,来打开相应的数据库。
CyberArticle通过ICABook对象,来封装了各种数据库的链接,打开和关闭等操作。使用ICABook,您不需要关心不同数据库之间的区别,甚至您根本不需要关心数据库。
ICABookCollection对象
CyberArticle把所有的书籍的一些数据库信息,都保存在Books.xml文件里面(数据库连接串被加密,以防用户名,密码等信息泄露)。同时,CyberArticle提供了ICABookCollection这个对象来访问这个文件。
下面的代码,创建了一个ICABookCollection对象,然后通过循环,显示了书籍列表里面,每一个书籍的名称。将下面的脚本保存成*.js文件,然后双击运行,就可以看到效果。
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”); //ICABookCollection
for (var i = 0; i < objBookCollection.Count; i++)
{
var bookname = objBookCollection.BookName(i); //获得书籍名称
jsAlert(bookname);
}
通过ICABookCollection对象,您可以获得每一个书籍的相关信息,例如GUID(用来标示每一个书籍),数据库连接串,书籍名称,书籍文件名(如果有的话),图标索引,分类等信息。
同时,通过ICABookCollection,你还可以添加书籍和删除书籍。具体功能,请参看开发人员手册。
ICABook对象
ICABook对象,提供了大量的属性和方法,主要有以下几类:
- 打开和关闭书籍
- 书籍属性,例如GUID,名称,图标索引
- 节点信息,例如获得根节点,回收站,创建文件夹,文章,获得某一个指定的节点,获得某一类节点等等
- 搜索书籍
- 获得书籍内其它的元素,例如附件,图标,标签等等
- 其它操作,例如压缩,备份等等
打开和关闭书籍
下面的代码,演示了如何打开书籍。通过循环,获得每一个书籍的GUID,然后调用ICABook对象的Open函数来打开书籍。如果无法打开,则显示一个对话框,提示不能打开某一个书籍。
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
获得书籍属性
下面的代码,可以显示每一个书籍的名称:通过ICABook对象获得,而不是在Books.xml文件里面保存的书籍名称(ICABookCollection)。
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
jsAlert(objBook.Name);
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
节点信息
下面的代码,显示了每一个书籍的节点数量,同时在每一个书籍的根节点下面,创建了一个叫做 “I love CyberArticle”的文件夹。
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
//…
jsAlert(objBook.Nodes.Count);
var objNewNode = objBook.CreateFolder(objBook.RootNode, “I love CyberArticle”); //在书籍根节点下面,创建一个新的节点。
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
搜索书籍
下面的代码,在每一个书籍中,搜索”CyberArticle”,然后显示出搜索结果的一个节点标题(如果有的话):
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
//…
var objResult = objBook.Search(“CyberArticle”, 1 + 2, 100); //搜索书籍
if (objResult && objResult.Count > 0) //如果搜索到
{
jsAlert(objResult.Item(0).Title); //显示第一个节点的标题
}
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
获得书籍其它元素信息
下面的代码,可以显示出,每一个书籍里面,附件的数量。如果有附件的话,显示第一个附件的名称。
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
//…
var objAttachments = objBook.Attachments; //获得书籍内所有附件
if (objAttachments)
{
jsAlert(objAttachments.Count); //显示书籍数量
if (objAttachments.Count > 0)
{
jsAlert(objAttachments.Item(0).Name); //显示第一个附件的名称
}
}
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
压缩/备份书籍
下面的代码,可以压缩每一个书籍
var objShell = new ActiveXObject(“WScript.Shell”);
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
//…
objBook.Compress();
//…
objBook.Close();
}
catch (e)
{
var bookname = objBookCollection.BookName(i); //打开失败
jsAlert(“不能打开书籍:” + bookname);
}
}
从上面的例子可以看出,只要获得了ICABook对象,您可以对书籍做任何操作。关于书籍的其它操作,请参考开发人员手册。
最近评论