调用事务码

If Wscript.Arguments.Count = 1 Then
 
 Dim i_pernr
 i_pernr = Wscript.Arguments(0)
 
 WScript.Echo i_pernr
 
     If Not IsObject(application) Then
        Set SapGuiAuto  = GetObject("SAPGUI")
        Set application = SapGuiAuto.GetScriptingEngine
     End If
     If Not IsObject(connection) Then
        Set connection = application.Children(0)
     End If
     If Not IsObject(session) Then
        Set session   = connection.Children(0)
     End If
     If IsObject(WScript) Then
        WScript.ConnectObject session,     "on"
        WScript.ConnectObject application, "on"
     End If
     session.findById("wnd[0]").maximize
     session.findById("wnd[0]/tbar[0]/okcd").text = "/nzhrphoto"
     session.findById("wnd[0]").sendVKey 0
     session.findById("wnd[0]/usr/ctxtP_PERNR").text = i_pernr
     session.findById("wnd[0]/usr/ctxtP_PERNR").caretPosition = 0
     session.findById("wnd[0]/tbar[1]/btn[8]").press
     session.findById("wnd[0]/usr/lbl[0,2]").setFocus
     session.findById("wnd[0]/usr/lbl[0,2]").caretPosition = 0
    
     Dim msg01
    
     msg01 = session.findById("wnd[0]/sbar").text
    
     If msg01 = "OK"  Then
      WScript.Quit 1
     End if
    
     If msg01 = "!" Then
      WScript.Quit 0
     End If
  Else
         Rem 没有输入参数
         WScript.Quit 2
End If

### 非事务方法调用事务方法的最佳实践与问题 当非事务方法调用带有`@Transactional`注解的方法时,在Spring框架中可能会遇到一些意外行为。这种情况下,理解声明式事务管理的工作原理至关重要[^1]。 #### 默认代理机制下的影响 默认情况下,Spring使用JDK动态代理来实现接口级别的代理,这意味着只有外部对目标对象的调用才会触发事务管理逻辑。如果是在同一个类内部进行自我调用,则不会启动新的事务上下文,因为这相当于绕过了代理层。为了确保事务能够正常工作,应该避免在同一类内直接调用带`@Transactional`标注的方法;相反,应当重构代结构或将此类操作移至其他服务组件中执行。 #### 解决方案建议 一种常见的解决方案是利用自定义切面编程(AOP),即创建独立的服务bean负责处理业务逻辑中的事务部分,并由这些专门设计好的beans来进行相互之间的协作。这样不仅可以保持职责分离原则,还能有效规避因内部调用而导致的事务失效问题[^3]。 ```java @Service public class MyService { @Autowired private AnotherService anotherService; public void nonTransactionalMethod() { // 这里是非事务环境 // 正确做法:通过依赖注入的方式间接调用另一个具有事务属性的服务 anotherService.transactionalOperation(); // 错误示范:直接在本类中调用标记有@Transactional的方法会忽略其事务特性 // internalTransactionalMethod(); } @Transactional protected void internalTransactionalMethod(){ // 实际上这里的事务控制可能无法按预期生效 } } ``` 另一种方式则是采用AspectJ编译期织入技术替代运行时期基于代理的传统模式,从而允许更灵活地应用横切关注点到程序的不同层次上去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值