我已经在下面添加了测试代码.
TestClass
在自身内部有BUFFER
个变量,在执行它的CONSTRUCTOR
之后可用.
在代码执行任何UNDO
或(UNDO, THROW...
)之前,一切都运行正常.在此之后,类实例在其他方面保持不变,只是BUFFER
变量现在是NOT AVAILABLE
.
有什么方法可以阻止Progress
做这件事吗?
在下面的测试代码中,第二个iValue = oTestClass:Value.
将抛出错误,因为BUFFER
是UNAVAILABLE
.
我使用的是Progress 11.7.5.
test.p:个
DEF VAR oTestClass AS CLASS TestClass NO-UNDO.
DEF VAR iValue AS INT NO-UNDO.
DO TRANSACTION:
oTestClass = TestService:Singleton:Find().
iValue= oTestClass:Value.
UNDO.
END.
DO TRANSACTION:
oTestClass = TestService:Singleton:Find().
iValue = oTestClass:Value.
UNDO.
END.
TestClassService.cls:个
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS TestService:
DEF PUBLIC STATIC PROPERTY Singleton AS CLASS TestService NO-UNDO
GET:
IF TestService:Singleton = ? THEN TestService:Singleton = NEW TestService().
RETURN TestService:Singleton.
END.
PROTECTED SET.
DEF PRIVATE VAR oTestClass AS CLASS TestClass NO-UNDO.
CONSTRUCTOR PROTECTED TestService(): END.
METHOD PUBLIC CLASS TestClass Find():
IF oTestClass = ? THEN DO:
oTestClass = NEW TestClass(TO-ROWID("0x000000000017c201")).
END.
RETURN oTestClass.
END.
END.
TestClass.cls:个
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS TestClass:
DEF PRIVATE BUFFER MyTable_This FOR MyTable.
DEF PUBLIC PROPERTY Value AS INT NO-UNDO
GET:
RETURN MyTable_This.Value.
END.
CONSTRUCTOR PUBLIC TestClass(i_rROWID AS ROWID):
FIND FIRST MyTable_This WHERE ROWID(MyTable_This) = i_rROWID NO-LOCK.
END.
END.