首页 > CyberArticle二次开发手册 > CyberArticle二次开发手册 – 3、CyberArticle 书籍

CyberArticle二次开发手册 – 3、CyberArticle 书籍


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对象,您可以对书籍做任何操作。关于书籍的其它操作,请参考开发人员手册。

 


  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

Spam Protection by WP-SpamFree