明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3064|回复: 1

[原创]长事务处理

[复制链接]
发表于 2003-11-5 16:51:00 | 显示全部楼层 |阅读模式
ObjectARX中关于长事务处理
AcDbIdMapping errorMap;
acapLongTransactionManagerPtr()->checkOut(transId,objIdArray,id,errorMap);
......
acapLongTransactionManagerPtr()->checkIn(transId,errorMap);
每个函数实现什么功能、所用的参数具体是什么意思?
发表于 2003-11-6 08:51:00 | 显示全部楼层
// 创建长事务管理器实例, 并调出外部数据库的实体
AcDbIdMapping errorMap;
acapLongTransactionManagerPtr()->checkOut(transId,objIdArray,id,errorMap);
// ***************************************
AcApLongTransactionManager::Checkout函数
virtual Acad::ErrorStatus
checkOut(
AcDbObjectId& transId,
AcDbObjectIdArray& objList,
AcDbObjectId toBlock,
AcDbIdMapping& errorMap,
AcDbObjectId lockBlkRef = AcDbObjectId::kNull) = 0;

transId
返回刚建立的AcDbLongTransaction对象的ID

objList
输入要登出的对象数组;它们必须驻留在同一个BlockTableRecord中

toBlock
对象要克隆至的块表记录的对象ID,必须是模型空间或布局空间块;不能是用户自定义的块

errorMap
未公布

lockBlkRef
输入最外层块参考的对象ID,它将在登出时被临时被放置在一个锁定的层上。它是可选的,且必须驻留在目标块中


这个函数建立一个新的长事务并登出已给列表中的对象。它将自动决定建立长事务的类型(kSameDb, kXrefDb或 kUnrelatedDb)。

第二个参数AcDbObjectIdArray& objList包含一个被用作标记的,值为AcDbObjectId::kNull的AcDbObjectId。在标记后的所有对象的ID不能被克隆,但将被添加到workSet。如果第一个对象ID是null,则列表中的对象都不会被克隆。如果对象ID不为null,则列表中的所有对象都将被克隆。

注意:拥有未被克隆的对象是非常高级的特征。只能用于非常复杂对象,克隆这些对象可能损害checkOut()的执行。同样,应用程序必须负责在块中编辑这些对象。否则应用程序就不需要这个特征。

可能返回的值:

Adesk::eInvalidInput

如果objList(对象列表)是空的,或pToDb是NULL。

Adesk::eWrongDatabase

如果pToDb是Xref数据库. 只能登出当前或临时的数据库.如果原数据库是Xref则同样会返回,但不是pToDb的活动Xref。

Adesk::eNotAnEntity

只能登出AcDbEntities。

Adesk::eWrongDatabase

如果在对象列表中的所有对象不是来自同一个数据库。

Adesk::eInvalidOwnerObject

如果在对象列表中的所有对象不是属于同一个BlockTableRecord。

Various Open errors

在对象列表中的对象必须能被kForRead打开。

Various Cloning errors

从任何使用的深度克隆方法返回, 取决于事务类型。
// ****************
AcApLongTransactionManager::checkIn函数
virtual Acad::ErrorStatus
checkIn(
AcDbObjectId transId,
AcDbIdMapping& errorMap,
bool keepObjs = false) = 0;

transId
为长事务登入对象的ID

errorMap
未公布

keepObjs
输入布尔值,表示是否在目标块中保留workset对象


这个函数将登入之前登出的长事务。如果keepObjs是true,workset对象将保留在目标块中;如果keepObjs是false,workset对象将被清除,除非它们在事务数据库中正被其它对象引用。

如果AcDbLongTransaction不能以AcDb::kForWrite方式打开则返回多种开启错误信息,包括它是否不再为激活或已被删除。

// ****************
   知道了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:28 , Processed in 0.159623 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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