ABAP 标准培训教程 BC400 学习教程之二:Cross-client 和 Client-specific 的区别

很多 ABAP 初学者通过各种社交平台向我提出这个问题:

ABAP初学者如何系统地学习ABAP编程?

所以我专门写了一篇同名的文章来回答。

文章里提到,我的 ABAP 学习之路,其实并没有阅读过中文的 ABAP 书籍,而是逐一地把 SAP 标准教材里和 ABAP 相关的那些电子版的 PDF 书籍吃透:

而对于 ABAP 初学者来说,最重要的就是 BC400,BC401 和 BC402 三本。

从本文开始,我们踏上 ABAP 标准教材,BC400 学习之路。

本书共有 541页,分为总共 9 个单元来组织。本文介绍第二单元内容:ABAP 开发工具介绍

ABAP Repository(仓库)的概念

顾名思义,ABAP 仓库存放了 ABAP 服务器上所有的程序,函数,数据库表定义等开发对象。ABAP 仓库里包含的内容,如下图所示,是 Cross-Client 的。如何理解这个 Cross-Client 概念呢?

当我们登录 SAP GUI 时,选中一个 ABAP 系统后,下一步需要选择登录该系统的哪一个 Client. Client 有的时候也称为 Tenant,中文翻译成租户。我们一次只能登录某个 ABAP 系统的某一个 client.

如下图所示,这个名为 CRM Infinity Development System 的 ABAP 系统,有 001,002,100,102,110 等多个 Client,每个 Client 都有不同的 用途,比如 001 用于CRM 715 标准开发,002 用于 CRM_PLUS 标准开发,以此类推。

大家可以把 ABAP 服务器想象成大楼,而把 Client 想象成大楼里一层层楼。

所谓 Cross Client,意思是指该 ABAP 对象,在一台 ABAP 服务器所有 Client 都可见, 并且登录每个 Client,看到的该对象内容都完全一致。

看个具体例子。

我们登录 SAP GUI,事物码SE80 打开 ABAP Repository:

下图显示的是用户名 WANGJER 在这台 ABAP 服务器上创建的所有本地 ABAP 对象。不同类型的 ABAP 对象,存放在不同的文件夹里。

因为 ABAP Repository 里的内容是 Cross Client 的,以下面这个名为 CL_JERRY_TOOL 的 ABAP 类为例, 我们登录该 ABAP 系统的任何 Client, 打开这个 ABAP 类,看到的源代码都完全相同。

再回到这张图最下层右边的 Client-specific (翻译成 Client 相关)类型,即 Application Data 和 Customizing Data.

所谓 Application Data,即应用数据。比如销售订单,服务订单,某公司生产的产品,卖给客户的名称等等。所有这些应用数据都存储在 ABAP 数据库表里,并且这些数据库表都有 Client 字段作为主键。

比如我登录 ABAP 系统 的 001 Client,那么我查看所有的数据库表,显然都只能看到主键为 001 对应的记录。这也是一个理所当然的行为。在某些基于 ABAP 的 SAP 云产品,比如 SAP Cloud for Customer,多个客户可能共享同一台服务器,彼此存放的 Application Data 也共享同一张表,通过 Client ID 作为主键来区分。试想这种应用数据的 Client-Specific 特性,如果更改成 Cross Client,岂不是要乱套了,因为那样一来,每个客户可以任意浏览其它客户存在同一张数据库表里的数据,数据隔离(tenant isolation)就无从谈起。

除了 Application Data 之外, Customizing Data 也是 Client Specific 即 Client 相关的。Customizing Data 也和 ABAP 应用相关,但同 Application Data 不同,Customing Data 存放的是影响 ABAP 应用执行流的数据,而非销售订单,服务订单,客户订单这种业务数据。

更多Jerry的原创文章,尽在:"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/14727298.html