BAPI_GOODSMVT_CREATE

客户用BAPI_GOODSMVT_CREATE批量创建物料移动凭证,报M7 022错误。Note 369518说是Buffer的原因。我不是开发,也不懂什么是roll area。不过Note也提出了一个挺特别的解决方案,对这个BAPI是可行的,能否作用在其他场景呢?或者值得一试。

[code]
Example:
————————————————————————
Program Test.

LOOP.
….
CALL FUNCTION func1 DESTINATION ‘NONE’.
CALL FUNCTION RFC_CONNECTION_CLOSE.
….
ENDLOOP.
————————————————————————
FUNCTION func1.
….
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’.

IF ‘no errors’.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
ENDIF.

ENDFUNCTION.

[/code]

另外对这个BAPI感兴趣的可以参考SCN Wiki: How To Goods Movements with BAPI

CO27拣配的内容

经常被问到,CO27拣配清单包含了哪些组件?显然,可用于拣配的组件。问题是,哪些组件用于拣配呢?这……其实我们可以看看源代码,程序DBIOC_FILL_IOOPCOMP_TAB里头,是这样定义拣配内容的:

* only components that can be picked
SELECT * FROM resb
  INTO TABLE resb_tmp
  FOR ALL ENTRIES IN ioheader_rsnum_idx_tab
  WHERE rsnum = ioheader_rsnum_idx_tab-rsnum
  AND matnr IN lr_matnr
  AND werks IN lr_werks
  AND lgort IN lr_lgort
  AND bdter IN lr_bdter
  AND xfehl IN lr_xfehl
  AND xwaok = yx " goods movement allowed
  AND xloek = space " not deleted
  AND dbskz = space " no direct procurement
  AND dumps = space " no phantom
  AND rgekz = space " no backflush
  AND kzear = space " not final issued
  AND schgt = space " bulk material
* AND kzkup = space " co-product (SHKZG = 'S')
  AND shkzg <> 'S' " not for receipt goods
  AND splkz <> '1' " no batch total records
  AND bdart <> 'BB' " no 'part provided'
  AND txtps = space " text position
  AND erfmg > 0.

除了CO27,MB26也可用于拣配。

地址数据

因为业务上出了些问题,需要了解地址数据的存放。有四个表是值得关注的:

  • BUT000 – BP: General data I
    可获得PERSNUMBER
  • BUT020 – BP: Addresses
    可获得ADDRNUMBER
  • ADRC – Addresses (Business Address Services)
    客户的地址数据
  • ADCP – Person/Address Assignment (Business Address Services)
    用户(如雇员)的地址数据

Business Partner Roles for Web-based User Management

标题是CRM IMG中的一项配置,路径:CRM -> ECO -> Basic Setting -> Internet User -> Web-based User Management,用于在Web界面的用户管理中按角色检索系统现有客户,以提高检索速度。

得出这个后台配置,还真费了一番功夫。缘起在我们的测试系统中,网上用户管理(E-Selling User Management)只能检索出一个客户来,而在生产系统中,却能检索出所有客户。仔细对比,发现连客户的检索界面都有差异:测试系统按角色检索客户,但只有一种角色可选,生产系统之间就是检索客户,无角色可选。真不知道是谁动了这块奶酪。

起初怀疑是XCM配置有误,无他的,毕竟是网上用户管理,运行在J2EE引擎上。可是isauseradm中并没有找到相关配置。后来思路转到在CRM上找原因,问题的突破口在找到FM: CRM_ISA_SEARCH_SOLDTOS,就是这个函数组读取CRM中的客户数据并传递给网上用户管理。在函数组上设置个外部断点,Debug,很快就找到Table: CRMC_ISA_BPROLES,进而找到View: CRMV_ISA_BPROLES,最后根据View的名称,找到了后台配置的路径。

以上是解决问题的思路。其实我个人是不建议通过调试的手段解决操作、配置上的问题,但是本问题苦于找不到资料,只好“曲线救国”了。不过我也发现提交到SAP的问题,往往也是通过这种方式去发现问题的。所以个人感觉很好,与大家分享。

参考Note: 904612,Internet Sales的用户管理,检索分类为:CRM-ISA-UM

权限检查(AUTHORITY-CHECK)的小把戏

注意:本文纯为技术研究,风险自负!

CRM中 Maintain Sales Transaction(T-CODE: CRMD_BUS2000115)的创建、更改、查看权限是由授权对象CRM_ORD_PR中的授权字段ACTVT控制的。若然你只有查看权,又想改改的话……CRM_ORD_PR这个授权对象的权限检查由FM: CRM_ORDER_CHECK_AUT_CRM_ORD_PR控制,所以你只需要在120行,AUTHORITY-CHECK OBJECT ‘CRM_ORD_PR’语句打上断点,接下来的事情不用我教了吧。:)

又若然你连T-CODE: CRMD_BUS2000115的权限都没有,还是想过把订单瘾,这样的要求不过分吧?由于这个事务的权限检查点很多,我只介绍最关键的,如何通过T-CODE的权限检查。

  1. FM: AUTH_CHECK_TCODE,第25行,call ‘AUTH_CHECK_TCODE’语句打上断点;
  2. 新开一个窗口,菜单->系统->实用程序->调试系统,系统将提示调试激活;
  3. 输入事物码,调试启动。不出意外的话,程序将运行到AUTH_CHECK_TCODE停止,如果是新开发界面的话需先按<F8>。

该方法对同样适用于R/3环境。

Update:

  • 2007/03/14 – 有些程序用这个FM做事物码的权限检查AUTHORITY_CHECK_TCODE。

二说SAP VMC

前文《SAP Virtual Machine Container》粗略的写了一下SAP VMC的内容,这几天查看相关文档,对它有了更清晰的认识。简单而言:

The SAP VM Container is an application server framework that uses a new paradigm of Process Attachable Virtual Machines (PAVMs) to combine high scalability with strong isolation between user sessions.

由于自己对Basic和J2EE都不甚了解,想深入理解技术原理甚为困难。只好贴图如下:

1、VM Pool中有一些VM,需求时会attach到Work Processes中,用完会detach。
vmc-container

2、实现PAVMs的关键是对内存的管理。Shared Classes,Shared Closures(含User Sessions信息)在Shared memory中。也减小对系统资源的占用。

vmc-sharedmemory

3、最后看看SAP NetWeaver 2004s Application Server的架构。留意到AS ABAP中,增加了Java VM,并且和ABAP VM在同一个WP中,这是VMC的体现。另外,AS JAVA继续保留,因为SAP VMC中的VM并不适用于所有场合,只适用于企业服务环境(Enterprise server environments)。

From a most general point of view, enterprise servers can be characterized as request processing engines, serving large numbers of (typically small) user requests that belong to user sessions. The actual request processing involves running user code (e.g. Servlets, EJBs) in a virtual machine. Request throughput is the main objective for scalability, which is traditionally achieved with thread pool based architectures.

nw2004s

Class: CL_GUI_FRONTEND_SERVICES

The class CL_GUI_FRONTEND_SERVICES contains static methods for the following areas:

  • File functions
  • Directory functions
  • Registry
  • Environment
  • Write to / read from clipboard
  • Upload / download files
  • Execute programs / open documents
  • Query functions, such as Windows directory, Windows version, and so on
  • Standard dialogs (open, save, directory selection)

网上看了个例子,CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE,在 ABAP中调用Java程序。

via: SDN – Let ABAP speak!