qhg_007 发表于 2003-11-5 16:51:00

[原创]长事务处理

ObjectARX中关于长事务处理
AcDbIdMapping errorMap;
acapLongTransactionManagerPtr()->checkOut(transId,objIdArray,id,errorMap);
......
acapLongTransactionManagerPtr()->checkIn(transId,errorMap);
每个函数实现什么功能、所用的参数具体是什么意思?

muzi 发表于 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方式打开则返回多种开启错误信息,包括它是否不再为激活或已被删除。

// ****************
   知道了吗?
页: [1]
查看完整版本: [原创]长事务处理