SAP B1 DI开发中 "事务" 的使用注

作者: BlenderKou | 来源:发表于2019-05-14 10:11 被阅读0次

    SAP,SBO,SAPB1,DI,报错,二次开发。

    --------------------

    前往:http://www.blenderkou.top/contents/10/3211.html

    获取更好的阅读体验。

    ---------------------

    概念

    SAP B1 DI 全局事务:在“全局事务”中,你能执行很多步对象操作,如果某一步的操作失败,那么整个事务的所有对象操作将自动地被迫回滚。使用“全局事务”时,数据库隔离级别保持在最高级别。这意味着所有资源(表,索引,视图等)都将具有独占锁,并且将被其他事务的任何操作阻止。

    如:同时生成销售订单和采购订单,有任意一个失败则两个单据都无法添加。

    要求

    1、必须使用Company对象的StartTransaction EndTransaction指定事务的开始和结束。

    必须将参数传递给EndTransactionendType为SAPBobsCom.BoWfTransOpt),以指示是否要提交或回滚此事务中包含的更改。

    2、官方始终建议在“全局事务”下保持逻辑更少的时间消耗。

    3、如果已经在“全局事务”内部启动了DI API方法,则不要使用UI API方法。

    4、如果您确实需要运行复杂的耗时逻辑,请安排在非生产时间。

    5、确保涉及“全局事务”的处理逻辑中没有等待用户输入的操作。

    6、不要对“全局事务”使用多线程编程,这将导致数据不一致。

    7、除非必要,否则不要使用“全局事务”。

    问题

    当您使用DIAPI时,使用 全局事务start transaction 和end transaction 来处理高并发环境中的操作,有时可能会发生数据库死锁。

    处理方法

    发生死锁时(错误代码-2038),加载项应捕获异常并重试。在大多数情况下,您可以通过重试操作或事务来解决死锁。

    以下程序是死锁处理的示例:

    mainFunc()

    {

    const long DEADLOCK_ERR_CODE = -2038;

    long DeadlockTryTime = 5;

    long i =0;

    int retCode = 0;

    for (i=0; i<DeadlockTryTime; i++)

    {

    try

    {

    company.StartTransaction();

    retCode = DoOperations();

     if (retCode == success)

    {

    company.EndTransaction(SAPbobsCOM.BoWfTransOpt.wf_Commit);

    break;

    }

    else if (retCode == DEADLOCK_ERR_CODE)

    {

    //error code returned by DI object operations

    continue;

    }

    else

    {

    //other error handling

    }

    }

    catch (System.Runtime.InteropServices.COMException ex)

    {

    //exception thrown from DI service operations

    if (ex.ErrorCode == DEADLOCK_ERR_CODE)

    {

    continue;

    }

    else

    {

    //other exception handling

    }

            }

    }

    if (i == DealockTryTime)

    {

    //return error, throw deadlock exception, or other error handling

    }

    }

    int DoOperations()

    {

    //Your logic to perform BO operations.

    }

                                         扫描二维码,关注我的公众号,第一时间获取文章!

    相关文章

      网友评论

        本文标题:SAP B1 DI开发中 "事务" 的使用注

        本文链接:https://www.haomeiwen.com/subject/cvvjaqtx.html