PDA调用RFC

原本计划在PDA中直接调用RFC,结果试了半天发现不行。网上寻找发现:

you cannot use .NET Connector from Compact framework as it uses unmananged code that cannot run on a PDA. But you have two alternatives:
If your SAP server is 6.20 or higher, you can use native Soap support with MS "Add web reference" feature. Details about native Soap support can be found in service.sap.com/connectors.

Else you need a "Middleware". The middleware can use the .NET Connector. For communication between the middleware and PDA you can use any protocol of your choice like WebServices or .NET Remoting.

As long as JCo is not fully "pure Java" and uses native methods from a DLL or EXE, it will not work.

 

总部服务器不让开SAP  CONSOLE,只能借助与中间件了..

无线PDA+Web Services+RFC

 

由于SAP.Net Connector 2.0 目前只支持.net framework 1.X,而预定的PDA为WINCE5.0。在网上找到可以用VS2003生成一个DLL,VS2005中调用。

 

最后效果也还不错,只是速度比较慢。太频繁的操作会严重影响性能。

可能只有通过PDA暂存数据、批量传到外挂表、批量执行。但这样如果中间有笔交易出错,如何处理?

### SAP 异步 RFC 调用概述 SAP 提供了多种方式来实现异步 Remote Function Call (RFC),其中一种常见的方式是通过 aRFC(Asynchronous RFC)机制[^3]。aRFC 的核心在于它能够在后台启动新的对话进程,并在完成后触发回调函数,从而实现在不阻塞主线程的情况下执行耗时操作。 以下是关于如何在 SAP 中实现异步 RFC 调用的具体说明: --- ### 实现步骤与代码示例 #### 1. 开启新任务 使用 `STARTING NEW TASK` 关键字创建一个新的对话进程。此命令会将请求发送至后台队列进行处理。 ```abap CALL FUNCTION 'Z_MY_ASYNCHRONOUS_FUNCTION' STARTING NEW TASK 'MY_TASK_NAME' DESTINATION IN GROUP 'DEFAULT' " 或者指定特定服务器组 PERFORMING CALLBACK_ROUTINE ON END OF TASK. ``` 在此代码中: - `'Z_MY_ASYNCHRONOUS_FUNCTION'` 是要调用的 ABAP 函数名称。 - `'MY_TASK_NAME'` 定义了一个唯一的任务名,用于区分不同的异步任务。 - `DESTINATION IN GROUP 'DEFAULT'` 表明该任务将在默认可用的 AS Instance 上运行;如果需要更精确控制,可以替换为具体的服务器组名称。 - `PERFORMING CALLBACK_ROUTINE ON END OF TASK` 指定了当异步任务完成时应调用的回调方法。 --- #### 2. 接收结果 一旦异步任务完成,可以通过以下语句获取其返回值: ```abap RECEIVE RESULTS FROM FUNCTION 'Z_MY_ASYNCHRONOUS_FUNCTION'. ``` 这一步骤负责捕获由后台任务产生的输出参数或其他相关信息。 需要注意的是,在某些情况下可能还需要额外检查错误条件或异常情况下的行为逻辑。 --- ### 示例程序结构 下面给出一个完整的例子展示整个流程是如何工作的: ```abap REPORT z_asynchronous_rfc_example. DATA: lv_task_name TYPE string VALUE 'ASYNC_RFC_DEMO'. " Step 1 - Start Asynchronous Task CALL FUNCTION 'Z_LONG_RUNNING_PROCESS' STARTING NEW TASK lv_task_name DESTINATION IN GROUP 'DEFAULT' PERFORMING on_end_of_task ON END OF TASK. WRITE: / 'Task started successfully! Waiting for completion...'. " Optional Delay to Simulate Other Operations During Wait Time WAIT UP TO 5 SECONDS. " Step 2 - Retrieve Results After Completion RECEIVE RESULTS FROM FUNCTION 'Z_LONG_RUNNING_PROCESS'. on_end_of_task. ENDOF TASK. FORM on_end_of_task USING et_return TYPE TABLE. WRITE: / 'Callback executed after task finished.'. LOOP AT et_return INTO DATA(ls_result). WRITE: / ls_result-message_text. ENDLOOP. ENDFORM. ``` 在这个实例里,“Step 1”部分展示了怎样发起一项异步作业;而在“Step 2”,我们演示了怎么取回最终成果以及定义相应的反馈动作。 --- ### 注意事项 尽管 aRFC 非常强大,但在实际部署前仍需考虑一些潜在风险因素,比如资源消耗、并发限制等问题。因此建议合理规划好每项任务所需时间长度及其优先级设置等细节方面的工作[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值