CyberArticle二次开发手册 – 4、CyberArticle 节点
CyberArticle书籍内最重要的元素就是节点(ICANode)。无论是文件夹还是文章,都是一个节点。
节点的主要属性和方法
- ID:节点的ID。书籍内每一个节点都有一个唯一的ID。
- ParentID:节点的父节点ID。除了根节点,每一个节点,都有一个父节点。
- ParentNode:节点的父节点。除了根节点,每一个节点,都有一个父节点。
- Type:节点类型:0是文件夹,1是文章
- Pos:位置。在同一级别的节点位置,按照从小到大排序。
- DateCreated:创建时间
- Color:文字颜色
- BgColor:背景颜色
- IconIndex:图标索引。>=0,是系统图标;<0:自定义图标
- Title:标题
- Owner:节点所有者。就是创建节点的CyberArticle所在的计算机的名称。
- MoveTo:移动节点到另外一个节点。父节点,回收站不能移动。
- MoveToRecycleBin:移动节点到回收站。如果节点已经在回收站,则彻底删除。
- Delete:删除
- GetPrevSiblingNode:获得当前节点的前一个同级别节点。
- GetNextSiblingNode:获得当前节点的下一个同级别节点。
- Attribute:扩展属性。可以用来存储任何数据。属性名称长度最大为50个字符,属性值的最大长度为255个字符。
- Book:获得节点所在的书籍。
- Size:文章或者文件夹的大小。
- IsIn:可以判断一个节点是否在另外一个节点内。
文件夹独有的属性和方法
- Children:获得文件夹的子节点。
- FindChildNode:通过标题查找一个子节点。
文章独有的属性和方法
- DateModified, DateAccessed:最后一次修改,访问文章时间。
- Unread:文章是否未读
- FileType:文件类型。对于保存的网页,是.htm,对于导入的文件,则是.doc, .pdf等等,保存了文件的扩展名。
- Author:作者
- Keywords:关键字
- Label1, Label2, Label3, Label4, Label5:标签1-5
- URL:文章的网址,或者导入的文件原始路径
- Coments:注释
- Text:文章里面的文字。如果是网页,则保存的网页里面的文字内容。
- Article:获得文章对象(ICAArticle)。
- Attachments:文件附件。(ICAAttachmentCollection)
- InitArticle:设置文章内容。可以通过一个HTML字符串和一个网址,来初始化或者修改文章内容。
- AddAttachment:添加附件。
书籍内的重要节点
- 根节点。任何一个书籍都有一个根节点。在创建书籍的时候,系统会自动创建根节点。根节点的名称就是书籍的名称,根节点的ID为0。
- 回收站。任何一个书籍都有一个回收站。在创建书籍的时候,系统会自动创建回收站。回收站的ID为-1。
关于节点对象的详细定义,请参考开发人员手册。
书籍内创建节点,创建文件夹和文章,并且给文章设置内容。
下面是一个例子,用来打开每一个书籍,然后在根节点下面,查找 “I love CyberArticle” 这个文件夹。如果没有找到,则建立这个文件夹。然后在这个文件夹下面创建一个文章,并且用一段HTML文字来设置文章内容。
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); //打开书籍
}
catch (e)
{
continue;
}
//…
var nodeRoot = objBook.RootNode;
//
var nodeILoveCyberArticle = null;
try
{
nodeILoveCyberArticle = nodeRoot.FindChildNode(“I love CyberArticle”); //根节点下面查找文件夹
}
catch (e)
{
//如果找不到,会有一个异常,我们在这里捕获这个异常。
}
//
if (!nodeILoveCyberArticle || nodeILoveCyberArticle.Type != 0) //如果没有找到,后者不是文件夹
{
nodeILoveCyberArticle = objBook.CreateFolder(nodeRoot, “I love CyberArticle”); //创建一个新的文件夹
}
if (nodeILoveCyberArticle)
{
var nodeArticle = objBook.CreateArticle(nodeILoveCyberArticle, “My First SDK Article”);//创建文章
//文章html
var htmlText = “<html><head><title>My First SDK Article</title></head><body><h1>My First SDK Article</h1><p>Test text…</p><img src=http://www.wizbrother.com/screenshots/cyberarticle.png></img></body></html>”;
//创建一个profile
var objProfile = new ActiveXObject(“CyberArticleBook.CAProfile”);
objProfile.Name = “Test”;
objProfile.IncludeImages = true;
objProfile.DownloadItems = true;
//使用html文字设置文章内容
nodeArticle.InitArticle(htmlText, “”, objProfile);
}
//…
objBook.Close();
}
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); //打开书籍
}
catch (e)
{
continue;
}
//…
var nodeRoot = objBook.RootNode;
//
var nodeILoveCyberArticle = null;
try
{
nodeILoveCyberArticle = nodeRoot.FindChildNode(“I love CyberArticle”); //根节点下面查找文件夹
}
catch (e)
{
//如果找不到,会有一个异常,我们在这里捕获这个异常。
}
//
if (!nodeILoveCyberArticle || nodeILoveCyberArticle.Type != 0) //如果没有找到,后者不是文件夹
{
nodeILoveCyberArticle = objBook.CreateFolder(nodeRoot, “I love CyberArticle”); //创建一个新的文件夹
}
if (nodeILoveCyberArticle)
{
var nodeArticle = objBook.CreateArticle(nodeILoveCyberArticle, “My First SDK Article”);//创建文章
//文章html
var htmlText = “<html><head><title>My First SDK Article</title></head><body><h1>My First SDK Article</h1><p>Test text…</p><img src=http://www.wizbrother.com/screenshots/cyberarticle.png></img></body></html>”;
//创建一个profile
var objProfile = new ActiveXObject(“CyberArticleBook.CAProfile”);
objProfile.Name = “Test”;
objProfile.IncludeImages = true;
objProfile.DownloadItems = true;
//使用html文字设置文章内容
nodeArticle.InitArticle(htmlText, “”, objProfile);
}
//…
objBook.Close();
}
从上面的例子可以看到如何通过书籍获得根节点,然后在节点下面查找文件夹,创建子文件夹和文章,并且用一段HTML文字来初始化文章。HTML里面可以用用图片等等资源,CyberArticle会自动将图片也保存到书籍中,就和在浏览器内保存网页是一样的效果。
结果如下图:

通过这种方式,如果定义好一个模板,只需要输入一些文字,然后格式化成HTML文件,保存到书籍里面,我们就可以非常容易的批量的生成大量格式相同的文章,例如公文等等。而且由于HTML本身的公开和易用,使得控制格式,也非常简单。如果用C#或者其它高级语言编写一个这样的程序,用于生成公文之类的文章,相信应该非常有用。同时利用CyberArticle WebShare组件,将文章发布出去,就是一个简单易用的文档生成和发布系统。
最近评论