AcDbLongTransaction

 

这是包含追踪一个长事务需要的信息的类。AcLongTransactionManager类负责创建和将AcDbLongTransaction对象增加至数据库的类。然后返回对象的AcDbObjectId。此对象的析构由数据库处理(与其他的数据库驻留对象)

注意:AcDbLongTransactions在它们激活时增加至一个数据库,但在事务被删除后被删除,而且不储存在DWGObjectDXF文件中。它们不是持久的。

 

继承自

AcDbObject

 

包含文件

dbltrans.h

 

参见

AcDbLongTransWorkSetIterator, AcApLongTransactionReactor, AcApLongTransactionManager

 

成员

 

AcDbLongTransaction建构器和析构器

AcDbLongTransaction::~AcDbLongTransaction 函数

~AcDbLongTransaction();

默认建构器。

 

AcDbLongTransaction::AcDbLongTransaction 函数

AcDbLongTransaction();

默认建构器。建构由AcLongTransactionManager类处理,而且析构由用于增加对象的AcDbDatabase处理。

 

AcDbLongTransaction编辑函数

AcDbLongTransaction::addToWorkSet 函数

Acad::ErrorStatus

addToWorkSet(

AcDbObjectId id);

id

输入要被增加至工作集的对象的AcDbObjectId

此函数将objectIDid的对象增加至当前的工作集中。对象必须从来自与空间/BTR相同的工作集对象,用于登出(checkout)事务驻留的数据库。

此函数将从目标块或原始块接受对象。来自原始块的对象将不能被克隆,但将作为AcApLongTransactionManager::checkOut()列表中一个空对象ID后的对象。

注意:具有未被克隆的对象是一个很先进的特征,它只能用于很复杂的且克隆将导致对checkOut()的行为有损的对象。同时,应用程序必须假设完全负责编辑块中的对象。否则,应用程序将不需要这个特征。

可能的返回值为:

Acad::eNoActiveTransactions

是否事务未完成登出(checkout)且工作集未建立。换言之,此函数不能被用于在登出(checkout)之前将对象预设至一个工作集中。

Acad::eNullObjectId

是否传递的idNULL

Aacd::eIllegalEntityType

是否传递的实体类型为非法

Acad::eWasErased

是否传递的对象被删除

Acad::eWrongDatabase

是否传递的对象不来自与事务相同的数据库。此函数不能用于登出(checkout)来自于原始数据库的附加对象。

Acad::ePermanentlyErased

是否对象已被删除

Acad::eNotAnEntity

只有实体可被增加至一个工作集中且另一个对象类型被使用。

Acad::eInvalidOwnerObject

是否实体不来自于与工作集对象相同的事务数据库中的空间

AcDbLongTransaction::newWorkSetIterator 函数

Acad::ErrorStatus

newWorkSetIterator(

AcDbLongTransWorkSetIterator*& pNewIter,

bool incRemovedObjs = false,

bool incSecondaryObjs = false) const;

pNewIter

未说明

incRemovedObjs

布尔值,表示遍历器是否还包括已从工作集中清除或删除的对象

incSecondaryObjs

布尔值,表示是否遍历器将包括所有已被克隆至登出(checkout)数据库中的对象

此函数为工作集创建一个遍历器。默认的工作集只包括从传递至checkOut()objList中的原始对象被登出(checkout)的对象,和任何来自于已在后面增加的登出(checkout)数据库的对象。

如果incRemovedObjs参数为true,则遍历器还将包括已从工作集清除或删除的对象。

如果incSecondaryObjstrue,则遍历器将包括已被克隆至登出(checkout)数据库中的所有对象。这表示主对象依赖的以及具有硬参考的对象将被包括。

 

AcDbLongTransaction::removeFromWorkSet 函数

Acad::ErrorStatus

removeFromWorkSet(

AcDbObjectId id);

id

要被删除的对象的AcDbObjectId

此函数将对象从工作集中清除。这个调用的结果是对象成为登出(checkout)数据库的一个永久部分,而且如果它来自于原始数据库,则它的原始对象将在登入(checkIn)时将被更新。

可能的返回值为:

ENoActiveTransactions

是否工作集未被创建或登出(checkout)

eNullObjectId

是否idNULL

EKeyNotFound

是否id在工作集中未找到

AcDbLongTransaction::syncWorkSet 函数

Acad::ErrorStatus

syncWorkSet();

当一个对象被放置在一个工作集中,对象拥有的所有对象也被增加。如果这是一个lUnrelatedDbkXrefDb类型的长事务,所有被参考的对象也被增加。为了性能的目的,这些被参考的对象不总是从removeFromWorkSet()中被删除。因此,此函数将任何对象从一个不再参考的工作集中完全删除。这可以在许多removeFromWorkSet()调用后被调用,且总是在登入(checkin)时由长事务调用。

 

AcDbLongTransaction查询函数

AcDbLongTransaction::activeIdMap 函数

AcDbIdMapping *

activeIdMap();

此函数提供在AcLongTransactionReactor回调期间对克隆IdMap的访问。登出(CheckOut)IdMap与登入(CheckIn)IdMap不同。

对于每个事务类型,不同的克隆技术将被用于每个事务类型的登出/登入的每种类型。在所有情况下,activeIdMap将为用于克隆的IdMap。正如在任何深度克隆操作中,这个IdMap也用于标识另一深度克隆通知的回调。

如果没有任何激活的克隆,则返回当前用于登出/登入的AcDbIdMapping*指针或NULL

 

AcDbLongTransaction::destinationBlock 函数

AcDbObjectId

destinationBlock() const;

此函数返回块表记录的objectID,这个块表记录中对象被克隆。

 

AcDbLongTransaction::getLongTransactionName 函数

Acad::ErrorStatus

getLongTransactionName(

char*& unnamed) const;

unnamed

长事务的名称

返回长事务的名称。为了标识的目的,这通常是原始块的名称。然而,如果原始块是一个Xref,则它返回宿主图形中的Xref块的名称。如果块是一个布局,则它返回布局的名称。

 

AcDbLongTransaction::originBlock 函数

AcDbObjectId

originBlock() const;

返回一个块,实体从这个块中被登出。

 

AcDbLongTransaction::originObject 函数

AcDbObjectId

originObject(

AcDbObjectId id) const;

id

要在工作集中查找的对象的AcDbObjectId

这个函数将确定id标识的对象的原始对象ID

如果对象在工作集中,则它返回原始对象,工作集对象从这个原始对象被克隆。如果对象没有在工作集中找到,则这个函数将返回AcDbObjectId::kNull。如果使用addToWorkSet()将对象增加至工作集中,则它返回与传递的AcDbObjectId相同的对象ID

 

AcDbLongTransaction::type 函数

int

type() const;

此函数将返回在进行中的事务类型。

可能的返回值为:

kSameDb

是否实体已从相同的数据库中的一个正常块登出

kXrefDb

是否实体已从模型空间或一个Xref数据库中的一个Xref块登出

kUnrelatedDb

是否实体已从模型空间或作为相同文件中的一个临时数据库,或另一个文件中的一个数据库的一个数据库中的模型空间或一个块中登出

AcDbLongTransaction::workSetHas 函数

bool

workSetHas(

AcDbObjectId id,

bool bIncErased = false) const;

id

对象ID,用于检查它是否在工作集中

bIncErased

布尔值,表示在工作集中是否包括所有对象,即使它们已被删除

如果对象在工作集中则返回true。如果对象不在工作集中,或bIncErasedfalse且对象在工作集中,但已被删除,则返回false

 

枚举

AcDbLongTransaction::(unnamed) 枚举

(unnamed)

Name

Value

Description

kSameDb

0

 

kXrefDb

1

 

kUnrelatedDb

2