您的位置:网站首页 > Proe教程

ProE二次开发中PDMLDBStartTransaction函数的使用

时间:2011-02-24 09:39:31 来源:

  本文介绍了ProE二次开发中PDMLDBStartTransaction函数的使用。

  在每个Pro/INTRALINK Toolkit程序中,都离不开PDMLDBStartTransaction和PDMLDBCommitTransaction函数,有以下几点需要注意:

  1)PDMLDBStartTransaction和PDMLDBCommitTransaction这两个函数必须成对使用;

  2)一般情况下,在获得License并正常登录到INTRALINK(也就是正常连接INTRALINK数据库)后,使用PDMLDBStartTransaction(ldb)函数来启动事务,接下来才可以对INTRALINK的W/S进行操作;

  3)在最后释放License之前,处理完所有与INTRALINK相关的操作之后,必须使用PDMLDBCommitTransaction(ldb)函数来提交事务,保存之前所有对INTRALINK数据库的相关操作;

  4)在程序处理过程中,有两种情况无法在启动事务的状态下进行:

  a)使用PDMLDBFetch函数从C/S中检出指定对象到W/S中;

  b)使用ProWorkspaceRegister函数在打开的Pro/ENGINEER中连接指定的一个W/S;

  当出现以上两种情况时,必须先调用PDMLDBCommitTransaction函数提交事务,才可以正常调用以上PDMLDBFetch和ProWorkspaceRegister函数,处理完后如果还需要使用INTRALINK数据库,则需要重新启动事务;

  如以下程序:

  ...

  status = PDMLDBCommitTransaction(g_ldb);

  (status == PDM_SUCCESS)?LogPrint(" PDMLDBCommitTransaction success "):LogPrint(" PDMLDBCommitTransaction failed ");

  curpiv.Localize = 1;

  status = PDMLDBFetch(g_ldb, (PTCSTRING)I_SpaceName, 1, &curpiv, 0, NULL, 1, 1, 0, NULL, 0, NULL, &checkout);

  (status == PDM_SUCCESS)?LogPrint(" PDMWorkspaceFetch success "):LogPrint(" PDMWorkspaceFetch failed ");

  status = PDMLDBStartTransaction(g_ldb);

  (status == PDM_SUCCESS)?LogPrint( " PDMLDBStartTransaction success "):LogPrint(" PDMLDBStartTransaction failed ");

  ...

  5)一旦发生提交事务失败,数据库将自动回滚,自动取消上一次启动事务之后对INTRALINK数据库所有的更改;

  In Pro/INTRALINK Toolkit, no workspace handle is valid outside a workspace transaction. That is, after you close a workspace transaction, you may not be able to access the object using the handles from the previous transactions.

  当重新启动事务后,如果还需要使用工作区的句柄,则需要重新获取,如可以通过工作区的名称重新获取。

  补充以下2点:

  1)当应用程序需要和工作区交换数据之前,必须启动事务;在交换数据完成之后,必须提交事务。

  2)当应用程序直接与公共区进行通信时,不需要启动事务,系统将自动决定启动、提交或取消事务。