欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 文档与手册 / 文章 67

点击:15558[回复顶层] [树状] [简明]


头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 65
二次开发系列之一:日志统计窗

作者: xietao


日志统计窗是dp2circulation前端主菜单“功能”下的第一个统计窗。

这个统计窗涉及到以下手册内容:

1) 在用户手册中要介绍这个窗口的基本操作方法。但这里不要讲太复杂的细节,让用户能进行日常操作,理解一些基本概念就可以了;

2) 因为同属于“统计窗”类型的几个窗口,具有很多共性,集中介绍这些共性,能节省用户手册中介绍这些窗口的章节的篇幅。所以希望在编写手册的过程中,注意抽取这些共性并集中介绍。在具体的每个窗口的介绍中,要处理好引用这些共性的文字和独立介绍的关系  --- 既便于阅读、也节省手册篇幅。

3) 日志统计窗所统计的对象是应用服务器每天不断自动产生的日志(文件中的)记录。

需要在参考手册中详细介绍应用服务器的日志是怎么回事,存储在什么目录下,文件名的命名规则是什么...,等等。对于系统管理员来说,这些知识要系统,要精密,要具有参考价值。然后,在参考手册中要介绍日志文件的XML结构,这种介绍要深入细致,目的是让系统管理员能理解其结构并完全自主开发出利用日志记录的模块。

实际上在前端针对统计窗进行二次开发的时候,主要的任务就是理解各种日志记录的格式,然后能够操纵这些日志记录,统计出想要的数据结果。

这里也涉及到C#脚本代码对XML记录的操作课题。二次开发者除了应当掌握.NET Framework中XmlDocument类和相关类的用法外,参考手册还应当系统全面地介绍DigitalPlatform.Xml中的DomUtil类的函数,这是数字平台公司为了方便操作XmlDom而扩展出来的一些实用函数。这里说的XmlDocument类的操作,在参考手册中用到的时候简单提到即可,不做详细讲解。因为这些知识可以从Microsoft的网站查到,也是一个二次开发者的基本功,参考手册没有必要详细介绍这些知识。

4) 我们需要一同把日志统计窗现有的统计方案的C#脚本代码进行剖析,理解它们。然后在参考手册中一个一个加以比较详细地介绍,让系统管理员能理解这些脚本代码。如果以后因为维护更新的缘故修改了任何统计方案,那么在公司网站上更新统计方案本身的同时,也要同步修改手册中的内容。

5) 根据实际情况,我指定一些课题,我们一起来编写几个新的日志统计窗的统计方案,以达到检验知识掌握程度,考察手册内容是否完满的目的。这些课题覆盖面要广,要关注到用户的具体需求,也就是说统计方案对用户来说要有用,另外也对现有的标配统计方案形成补充。争取能达到这个目标。

 

~~~

后面,我将一点一点细化上述设想,补充各种材料,让设想的过程能顺利进行下去。



发表时间: 2011-11-03 11:30:19





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 66
编目工作量统计是一个很好的实际的例子

作者: xietao


编目工作量统计是一个很好的实际的例子

前一段时间,有客户提出关于编目工作量统计的一些细节要求,当时应用服务器也针对这些要求做了一定的改进。现在是时候修改编写编目工作量统计方案了,正好是对前一段工作的延续和总结。

在这个具体的课题中,我需要将书目记录保存修改删除的相关dp2library API进行详细介绍,这样,一方面可以把这些文字充实到参考手册的描述dp2library API的章节中,另外也提供了日志统计窗二次开发的基础知识。

因为有关书目记录保存修改删除的日志记录XML格式中,我们需要了解这些日志动作是如何发生的,内部原理是什么。当然,不只是书目记录保存需要这么去了解,其他任何日志动作都需要进行这样的了解,编写手册的时候都要问个为什么。

重要的是,最好能够找到关于每种日志记录格式的具体操作的例子,把以前的测试工作单中包含的知识和现在的知识串联起来,章节之间互相对照和印证。

虽然在这里我们主要是关注日志统计窗,但是可能会牵扯出来一些日志操作是如何发生的知识点,可能有必要重新进行一些方面的测试验证,那么我们要记住检查以前的测试工作单,看看有没有遗漏 --- 就是现在把某个方面扯出来但发现以前的测试工作单中居然没有的情况。如果遇到这种情况,就要及时加以补充。因为一个完整的产品中的各部分的知识互相都是牵扯的,都有千丝万缕的联系,如果我们工作方法得当,那么很快会把相关部分的工作加以完善,这样最后的效果可能会超出我们的预想,工作会完成得更好。



发表时间: 2011-11-03 11:40:53





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 3 楼
文章id: 67

作者: xietao


目前正式向用户提供的日志统计窗的统计方案如下:

---

日志统计窗

流通日志统计(分类).projpack

http://dp2003.com/filews/getfile.aspx?username=dp2circulation&filename=projects%5c%e6%b5%81%e9%80%9a%e6%97%a5%e5%bf%97%e7%bb%9f%e8%ae%a1(%e5%88%86%e7%b1%bb).projpack

流通日志统计(工作人员).projpack

http://dp2003.com/filews/getfile.aspx?username=dp2circulation&filename=projects%5c%e6%b5%81%e9%80%9a%e6%97%a5%e5%bf%97%e7%bb%9f%e8%ae%a1(%e5%b7%a5%e4%bd%9c%e4%ba%ba%e5%91%98).projpack

借阅排行.projpack

http://dp2003.com/filews/getfile.aspx?username=dp2circulation&filename=projects%5c%e5%80%9f%e9%98%85%e6%8e%92%e8%a1%8c.projpack

编目、典藏日志统计(工作人员).projpack

http://dp2003.com/filews/getfile.aspx?username=dp2circulation&filename=projects%5c%e7%bc%96%e7%9b%ae%e3%80%81%e5%85%b8%e8%97%8f%e6%97%a5%e5%bf%97%e7%bb%9f%e8%ae%a1(%e5%b7%a5%e4%bd%9c%e4%ba%ba%e5%91%98).projpack

---

这次我们学习后的最低目标,是完善这几个统计方案。而高一点的目标,可以是重新编写出一系列新的统计方案,把这些现有的方案重新设计和编排。这要看我们学习的实际情况了。



发表时间: 2011-11-03 11:52:47





头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复(需要先登录)] [引用(需要先登录)]普通文章第 4 楼
文章id: 68
日志文件的格式(不断校订补充中...)

作者: xietao


日志文件的格式(不断校订补充中...)

以下是目前dp2Library服务器日志文件中日志XML记录的格式汇总解释。

可能不全,需要我们这一段集中精力检测和补充完整。

对于每个具体的日志记录格式,我们都要采用实证的方法来进行观察研究:列出前端软件的哪些操作能导致创建这样的日志记录,具体使用了格式中的哪些结构和元素类型。可能囿于前端软件和具体环境因素,某些设计好的日志记录结构无法或者很难用实际的例子来证实,那么我们可以采用检查软件源代码的方法,来确认所关注的结构是存在的并运作良好。

这里也涉及到一个话题,就是我们所开发出来的软件,是不是需要具备一些设施,不是为了直接满足用户的具体功能需求,而是仅仅为了满足测试和验证的需要。这些辅助设施会方便我们的工作。如果需要,我将增添这些设施。

 

===
borrow 借阅(续借)

API: Borrow()

<root>
  <operation>borrow</operation> 操作类型
  <action>...</action> 具体动作 有borrow renew两种。如果<action>元素缺省,则表示borrow
  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <itemBarcode>0000001</itemBarcode>  册条码号
  <borrowDate>Fri, 08 Dec 2006 04:17:31 GMT</borrowDate> 借阅日期
  <borrowPeriod>30day</borrowPeriod> 借阅期限
  <no>0</no> 续借次数。0为首次普通借阅,1开始为续借
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:31 GMT</operTime> 操作时间
  <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径
 
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
  <itemRecord recPath='...'>...</itemRecord> 最新册记录
</root>

===
return 还回

API: Return()

<root>
  <operation>return</operation> 操作类型
  <action>...</action> 具体动作 有return lost两种
  <itemBarcode>0000001</itemBarcode> 册条码号
  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
  <overdues>...</overdues> 超期或丢失赔款信息 通常内容为一个字符串,为一个或多个<overdue>元素XML文本片断
 
  <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径
 
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
  <itemRecord recPath='...'>...</itemRecord> 最新册记录
  <lostComment>...</lostComment> 关于丢失情况的附注(追加写入册记录<comment>的信息)
</root>

===
changeReaderPassword 修改读者密码

API: ChangeReaderPassword()

<root>
  <operation>changeReaderPassword</operation>
  <readerBarcode>...</readerBarcode> 读者证条码号
  <newPassword>5npAUJ67/y3aOvdC0r+Dj7SeXGE=</newPassword>
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 09:01:38 GMT</operTime>
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
 
</root>

注:如果用工作人员身份调用ChangeReaderPassword() API,则并不检查原密码是否匹配。

===
setReaderInfo 读者信息管理

API: SetReaderInfo()

<root>
 <operation>setReaderInfo</operation> 操作类型
 <action>...</action> 具体动作。有new change delete 3种
 <record recPath='...'>...</record> 新记录
    <oldRecord recPath='...'>...</oldRecord> 被覆盖或者删除的记录 动作为change和delete时具备此元素
 <operator>test</operator> 操作者
 <operTime>Fri, 08 Dec 2006 09:01:38 GMT</operTime> 操作时间
</root>

注: new 的时候只有<record>元素,delete的时候只有<oldRecord>元素,change的时候两者都有

===
reservation 预约

API: Reservation()

<root>
  <operation>reservation</operation> 操作类型
  <action>new</action> 具体动作。有new delete merge split
  <readerBarcode>R0000001</readerBarcode> 读者证条码号
  <itemBarcodeList>0000003</itemBarcodeList> 册条码号列表。用逗号分割
  <operator>R0000001</operator> 操作者 如果<operator>和<readerBarcode>内容一致,表示为读者直接自行预约。
  <operTime>Tue, 12 Dec 2006 09:20:12 GMT</operTime> 操作时间
</root>

===

amerce 交费

API: Amerce()

<root>
  <operation>amerce</operation> 操作类型
  <action>amerce</action> 具体动作。有amerce undo modifyprice expire
  <readerBarcode>...</readerBarcode> 读者证条码号
  <!-- <idList>...<idList> ID列表,逗号间隔 已废止 -->
  <amerceItems>
 <amerceItem id="..." newPrice="..." newComment="..." /> newComment中内容追加或替换原来的注释内容。到底是追加还是覆盖,取决于第一个字符是否为'>'还是'<',前者为追加(这时第一个字符不被当作内容)。如果第一个字符不是这两者之一,则默认为追加
 ...
  </amerceItems>
  <amerceRecord recPath='...'><root><itemBarcode>0000001</itemBarcode><readerBarcode>R0000002</readerBarcode><state>amerced</state><id>632958375041543888-1</id><over>31day</over><borrowDate>Sat, 07 Oct 2006 09:04:28 GMT</borrowDate><borrowPeriod>30day</borrowPeriod><returnDate>Thu, 07 Dec 2006 09:04:27 GMT</returnDate><returnOperator>test</returnOperator></root></amerceRecord> 在罚款库中创建的新记录。注意<amerceRecord>元素可以重复。<amerceRecord>元素内容里面的<itemBarcode><readerBarcode><id>等具备了足够的信息。
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 10:09:36 GMT</operTime> 操作时间
 
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
</root>

<root>
  <operation>amerce</operation>
  <action>undo</action>
  <readerBarcode>...</readerBarcode> 读者证条码号
  <!-- <idList>...<idList> ID列表,逗号间隔 已废止 -->
  <amerceItems>
 <amerceItem id="..." newPrice="..."/>
 ...
  </amerceItems>
  <amerceRecord recPath='...'><root><itemBarcode>0000001</itemBarcode><readerBarcode>R0000002</readerBarcode><state>amerced</state><id>632958375041543888-1</id><over>31day</over><borrowDate>Sat, 07 Oct 2006 09:04:28 GMT</borrowDate><borrowPeriod>30day</borrowPeriod><returnDate>Thu, 07 Dec 2006 09:04:27 GMT</returnDate><returnOperator>test</returnOperator></root></amerceRecord> Undo所去掉的罚款库记录
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
 
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录

</root>

<root>
  <operation>amerce</operation>
  <action>modifyprice</action>
  <readerBarcode>...</readerBarcode> 读者证条码号
  <amerceItems>
 <amerceItem id="..." newPrice="..." newComment="..."/> newComment中内容追加或替换原来的注释内容。到底是追加还是覆盖,取决于第一个字符是否为'>'还是'<',前者为追加(这时第一个字符不被当作内容)。如果第一个字符不是这两者之一,则默认为追加
 ...
  </amerceItems>
  <!-- modifyprice操作时不产生<amerceRecord>元素 -->
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
 
  <oldReaderRecord recPath='...'>...</oldReaderRecord> 操作前旧的读者记录。<oldReaderRecord>元素是modifyprice操作时特有的元素
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录

</root>

2007/12/18 new add
<root>
  <operation>amerce</operation> 操作类型
  <action>expire</action> 以停代金到期
  <readerBarcode>...</readerBarcode> 读者证条码号
  <expiredOverdues> 已经到期的若干<overdue>元素
 <overdue ... />
 ...
  </expiredOverdues>
  <operator>test</operator> 操作者 如果为#readersMonitor,表示为后台线程
  <operTime>Fri, 08 Dec 2006 10:09:36 GMT</operTime> 操作时间
 
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
</root>

2008/6/20 new add
<root>
  <operation>amerce</operation>
  <action>modifycomment</action>
  <readerBarcode>...</readerBarcode> 读者证条码号
  <amerceItems>
 <amerceItem id="..." newComment="..."/> newComment中内容追加或替换原来的注释内容。到底是追加还是覆盖,取决于第一个字符是否为'>'还是'<',前者为追加(这时第一个字符不被当作内容)。如果第一个字符不是这两者之一,则默认为追加
 ...
  </amerceItems>
  <!-- modifycomment操作时不产生<amerceRecord>元素 -->
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
 
  <oldReaderRecord recPath='...'>...</oldReaderRecord> 操作前旧的读者记录。<oldReaderRecord>元素是modifycomment操作时特有的元素
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
</root>


===
devolveReaderInfo 转移读者(借还、超期)信息

API: DevolveReaderInfo()

<root>
  <operation>devolveReaderInfo</operation>
  <sourceReaderBarcode>...</sourceReaderBarcode> 源读者证条码号
  <targetReaderBarcode>...</targetReaderBarcode> 目标读者证条码号
  <borrows>...</borrows> 移动过去的<borrows>内容,下级为<borrow>元素
  <overdues>...</overdues> 移动过去的<overdue>内容,下级为<overdue>元素
  <sourceReaderRecord recPath='...'>...</sourceReaderRecord> 最新源读者记录
  <targetReaderRecord recPath='...'>...</targetReaderRecord> 最新目标读者记录
  <changedEntityRecord recPath='...' attahchmentIndex='.'>...</changedEntityRecord> 所牵连到的发生了修改的实体记录。此元素的文本即是记录体,但注意为不透明的字符串(HtmlEncoding后的记录字符串)。如果存在attachmentIndex属性,则表明实体记录不在此元素文本中,而在日志记录的附件中
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
</root>

===
repairBorrowInfo 修复借阅信息

API: RepairBorrowInfo()

<root>
  <operation>repairBorrowInfo</operation>
  <action>...</action> 具体动作 有 repairreaderside repairitemside
  <readerBarcode>...</readerBarcode>
  <itemBarcode>...</itemBarcode>
  <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
</root>

===
setBiblioInfo 设置书目信息

API: SetBiblioInfo() 和 CopyBiblioInfo()

<root>
  <operation>setBiblioInfo</operation>
  <action>...</action> 具体动作 有 new/change/delete/onlydeletebiblio 和 onlycopybiblio/onlymovebiblio/copy/move
  <record recPath='中文图书/3'>...</record> 记录体 动作为new/change/ *move* / *copy* 时具有此元素(即delete时没有此元素)
  <oldRecord recPath='中文图书/3'>...</oldRecord> 被覆盖、删除或者移动的记录 动作为change/ *delete* / *move* / *copy* 时具备此元素
  <deletedEntityRecords> 被删除的实体记录(容器)。只有当<action>为delete时才有这个元素。
   <record recPath='中文图书实体/100'>...</record> 这个元素可以重复。注意元素内文本内容目前为空。
   ...
  </deletedEntityRecords>
  <copyEntityRecords> 被复制的实体记录(容器)。只有当<action>为*copy*时才有这个元素。
   <record recPath='中文图书实体/100' targetRecPath='中文图书实体/110'>...</record> 这个元素可以重复。注意元素内文本内容目前为空。recPath属性为源记录路径,targetRecPath为目标记录路径
   ...
  </copyEntityRecords>
  <moveEntityRecords> 被移动的实体记录(容器)。只有当<action>为*move*时才有这个元素。
   <record recPath='中文图书实体/100' targetRecPath='中文图书实体/110'>...</record> 这个元素可以重复。注意元素内文本内容目前为空。recPath属性为源记录路径,targetRecPath为目标记录路径
   ...
  </moveEntityRecords>
  <copyOrderRecords /> <moveOrderRecords />
  <copyIssueRecords /> <moveIssueRecords />
  <copyCommentRecords /> <moveCommentRecords />
  <operator>test</operator>
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
</root>

逻辑恢复delete操作的时候,检索出全部下属的实体记录删除。
快照恢复的时候,可以根据operlogdom直接删除记录了path的那些实体记录

===
hire 创建租金记录

API: Hire()

<root>
  <operation>hire</operation> 操作类型
  <action>...</action> 具体动作 有hire hirelate两种
  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
  <overdues>...</overdues> 租金信息 通常内容为一个字符串,为一个或多个<overdue>元素XML文本片断
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
</root>

===
settlement 结算费用

API: Settlement()

<root>
  <operation>settlement</operation> 操作类型
  <action>...</action> 具体动作 有settlement undosettlement delete 3种
  <id>1234567-1</id> ID
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
 
  <oldAmerceRecord recPath='...'>...</oldAmerceRecord> 旧违约金记录
  <amerceRecord recPath='...'>...</amerceRecord> 新违约金记录 delete操作无此元素
</root>


===
passgate 入馆登记

API: PassGate()

<root>
  <operation>passgate</operation> 操作类型
  <readerBarcode>...</readerBarcode> 读者证条码号
  <gateName>...</gateName> 门名字
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
</root>

===
foregift 创建押金记录

API: Foregift()

<root>
  <operation>foregift</operation> 操作类型
  <action>...</action> 具体动作 目前有foregift return (注: return操作时,overdue元素里面的price属性,可以使用宏 %return_foregift_price% 表示当前剩余的押金额)
  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
  <overdues>...</overdues> 押金信息 通常内容为一个字符串,为一个或多个<overdue>元素XML文本片断
  <readerRecord recPath='...'>...</readerRecord> 最新读者记录
</root>

===
setEntity 设置册记录

API: SetEntities

<root>
  <operation>setEntity</operation> 操作类型
  <action>new</action> 具体动作。有new change delete move 4种
  <style>...</style> 风格。有force nocheckdup noeventlog 3种
  <record recPath='中文图书实体/3'><root><parent>2</parent><barcode>0000003</barcode><state>状态2</state><location>阅览室</location><price></price><bookType>教学参考</bookType><registerNo></registerNo><comment>test</comment><mergeComment></mergeComment><batchNo>111</batchNo><borrower></borrower><borrowDate></borrowDate><borrowPeriod></borrowPeriod></root></record> 记录体
  <oldRecord recPath='中文图书实体/3'>...</oldRecord> 被覆盖或者删除、移动的记录 动作为change、delete和move时具备此元素
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 08:41:46 GMT</operTime> 操作时间
</root>

注:1) 当<action>为delete时,没有<record>元素。为new时,没有<oldRecord>元素。
 2) <record>中的内容, 涉及到流通的<borrower><borrowDate><borrowPeriod>等, 在日志恢复阶段, 都应当无效, 这几个内容应当从当前位置库中记录获取, 和<record>中其他内容合并后, 再写入数据库
 3) 一次SetEntities()API调用, 可能创建多条日志记录。
 
===
setOrder 设置订购记录

API: SetOrders()

<root>
  <operation>setOrder</operation> 操作类型
  <action>new</action> 具体动作。有new change delete 3种
  <style>...</style> 风格。有force nocheckdup noeventlog 3种
  <record recPath='中文图书订购/3'><root>...</root></record> 记录体
  <oldRecord recPath='中文图书订购/3'>...</oldRecord> 被覆盖或者删除的记录 动作为change和delete时具备此元素
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 08:41:46 GMT</operTime> 操作时间
</root>

注:1) 当<action>为delete时,没有<record>元素。为new时,没有<oldRecord>元素。
 2) 一次SetOrders()API调用, 可能创建多条日志记录。
 
===
setIssue 设置期记录

API: SetIssues()

<root>
  <operation>setIssue</operation> 操作类型
  <action>new</action> 具体动作。有new change delete 3种
  <style>...</style> 风格。有force nocheckdup noeventlog 3种
  <record recPath='中文期刊期/3'><root>...</root></record> 记录体
  <oldRecord recPath='中文期刊期/3'>...</oldRecord> 被覆盖或者删除的记录 动作为change和delete时具备此元素
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 08:41:46 GMT</operTime> 操作时间
</root>

注:1) 当<action>为delete时,没有<record>元素。为new时,没有<oldRecord>元素。
 2) 一次SetIssues()API调用, 可能创建多条日志记录。

===
setComment 设置评注记录

API: SetComments()

<root>
  <operation>setComment</operation> 操作类型
  <action>new</action> 具体动作。有new change delete 3种
  <style>...</style> 风格。有force nocheckdup noeventlog 3种
  <record recPath='中文图书评注/3'>...</record> 记录体
  <oldRecord recPath='中文图书评注/3'>...</oldRecord> 被覆盖或者删除的记录 动作为change和delete时具备此元素
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 08:41:46 GMT</operTime> 操作时间
</root>

注:1) 当<action>为delete时,没有<record>元素。为new时,没有<oldRecord>元素。
 2) 一次SetComments()API调用, 可能创建多条日志记录。

===
writeRes 写入对象资源

API: WriteRes()

<root>
<operation>writeRes</operation>
<requestResPath>...</requestResPath> 资源路径参数。也就是请求API是的strResPath参数值。可能在路径中的记录ID部分包含问号,表示要追加创建新的记录
<resPath>...</resPath> 资源路径。资源的确定路径。
<ranges>...</ranges> 字节范围
<totalLength>...</totalLength> 总长度
<metadata>...</metadata> 此元素的文本即是记录体,但注意为不透明的字符串(HtmlEncoding后的记录字符串)。
<style>...</style>
<operator>test</operator>
<operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime>
</root>

注:日志记录可能会有一个attachment(附件) 

 



发表时间: 2011-11-03 12:05:05
最后修改时间: 2011-11-03 19:15:46



页 1 / 1
 

在线用户
访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客 (我自己)   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
当前栏目在线用户数 29, 总在线用户数 201