sap tcode用法
/nXXXX 中断当前事务并开始新事务XXXX。(在当前会话中)
/n 中断当前事务,一般用于相应F12 键,返回。
/nend 关闭所有会话,退出系统 (用于相应- Logoff)。(类似于点 SAP GUI 右上角的关闭按钮,或者菜单“系统-退出系统”)
/nex 关闭所有会话,并立即退出系统(没有警告提示)。(类似于用 Windows 任务管理器结束 SAPLogon 进程)
/oxxxx 开始一个新的会话,并执行事务XXXX。(在新的会话中)
/o 列出所有会话,允许删除或新建一个会话。
/i 关闭当前会话。
/i1,/i2,... 关闭指定的会话。(当某个会话被对话框锁死,无法退出时可以使用。一般出现在开发中的屏幕逻辑错误,我今天也是因为这个原因才搜到这篇文章的。)
 
 
SAP 登录方式全收集
SAP 为用户提供了多种登录并操作系统的方法,包括 Windows GUI,Java GUI,Web GUI 等等,下面就各个方法分别简要介绍。
Windows GUI,最常用和标准的登录方式,能够百分之百的使用 SAP 的所有功能,只能在 Windows 平台下运行。现在常用的有两个版本,分别是 640 和 710,可以到ftp://ftp.sap.com/pub/sapgui/win/ 目录下下载,平时也应该经常到相应的 patch 目录下下载最新的补丁。
JAVA GUI,是针对 JAVA 用户的登录方式,能够使用大部分 SAP 功能,打印功能较弱,能够兼容各种操作系统,比如 Unix、Linux、Solaris、Mac OS 等等,当然在 Windows 系统安装了 Java 虚拟机后也可以运行。现在的版本是 710,可以到 ftp://ftp.sap.com/pub/sapgui/java 目录下下载,一般下载最新版本即可。JAVA GUI 的连接设置方法跟 Windows GUI 略有不同,可以参考 Manual 中的说明。
Web 方式的 JAVA GUI,这是 JAVA GUI 的一种变形,主要好处是能够简化客户端的安装,使不熟悉系统安装的用户也能够快速上手。使用 Web 方式的 JAVA GUI 需要有一台专用的 Web 服务器放置安装文件和连接文件,具体的设置方法请参考网站 http://blog.sina.com.cn/s/blog_4f9d7c7a01009qx7.html
Web GUI,是把 Web 浏览器当成 SAP 客户端的一种方式,它的好处就是客户端无需安装任何 SAP 软件,只要有浏览器就能使用。在 SAP R/3 4.x 中,需要单独安装 ITS 服务器才可以使用 Web GUI,而且这种方式很少有人使用,所以大家不必再关心了。到了 SAP NetWeaver 时代后,Web 登录方式已经集成到了应用服务器平台上,通过几步简单的设置,就可以开启 Web GUI 登录。相关的事务码是 SICF,具体用法可以 google。
 
 
为IDES471 激活中文
相信很多朋友都下载安装过 verycd 上发布的那个 SAP IDES 4.71 了,但是估计会有人跟我一样,无法激活中文。明明可以看到中文包已经加载,并且正确导入,但是按照相关操作手册的方法就是无法激活。最近经过摸索,终于成 功激活了中文包,其实只是缺少了一个很小的步骤,这里跟大家介绍一下。

首先,使用事务码 SMLT,打开语言管理功能,这时可以看到,已安装的语言都已经列出,中文也在其中。双击 Chinese 行,打开中文语言的详细信息屏幕,这里我们可以看到第四行 Degree of Translation 的值为 0,这表明中文在 SAP 的翻译级别里是完全不受支持的非标准语言;第六行 Supplementation Language 的值为空,我们要修改的最关键点就是这里,要指定一个支持语言,这样可以确保 SAP 系统在遇到没有翻译的文本时能够使用支持语言来显示。点击该屏幕下方中间的修改按钮,这时,Supplementation Language 就变成可选择的下拉列表,并且修改按钮变成了保存按钮,我们选择 English 做为支持语言,再按保存按钮,这样 Chinese 的基本配置才算完整了。
然后,使用菜单“Language-Supplement Language”,打开支持语言激活屏幕,会出现语言不匹配的提示,忽略它,按 Yes 按钮继续。然后输入一个 Description 描述,比如 English for Chinese,然后点右面的 Execute 按钮。出现确认对话框,选择 Yes 继续,稍微等待一会儿,SAP 会安排一个后台作业来执行支持语言激活的任务。我们可以通过事务码 SM37 来查看执行情况,打开 SM37 后不需要改动屏幕上的信息,直接点工具栏左边的钟表按钮,查看后台作业,可以看到一个名为 SAP-LANGUAGE-SUP ZH 的任务,状态为 Active,可以按工具栏左边的刷新按钮查看运行情况,当状态变为 Finished 之后,进行下面的步骤。
然后,使用事务码 SA38,打开报表执行功能,运行一个语言激活程序 RSCPINST,选中中文,点激活按钮,完成激活后退出。
然后,使用事务码 RZ10,打开参数文件管理功能,由于这是个新系统,还没有任何参数文件,我们需要从本地导入。点击菜单“Utilities-Import profiles-Of Active Servers”,系统会自动查找本地的参数文件并导入,在导入完成后,退出信息显示界面,回到初始界面,选择类型为 Instance profile 的参数文件(命名规则为<sid>_DVEBMGS00_<hostname>),选择单选按钮 Extended maintenance,再点击 Change 按钮。接下来需要创建两个新的参数,点击创建参数 Parameter 按钮,输入参数名 zcsa/installed_languages,值为 ED1(E 和 D 必须大写),表明安装了英文、德文和中文三种语言,然后退出保存;再点击创建参数 Parameter 按钮,输入参数名 install/codepage/appl_server,值为 8400,表明应用服务器的代码页是 8400,然后退出保存;再点击创建参数 Parameter 按钮,输入参数名 install/codepage/db/transp,值为 8400,表明数据库访问的代码页是 8400,然后退出保存;再点击创建参数 Parameter 按钮,输入参数名 zcsa/system_language,值为 1,表明默认的登录语言是中文,然后退出保存。最后再保存参数文件并退出,再退出,系统会提示激活参数文件,选 Yes 激活。
最后,停止 SAP 服务器,并重新启动,就会发现使用 GUI 打开的界面已经是中文的了,登录后也都显示为中文。

总结:
跟网上的的操作手册相比,我发现以前最大的问题就出在 Supplementation Language 设置上。操作手册的前提都是尚未导入中文语言包,需要创建中文语言,而创建时就同时指定了 Supplementation Language,而在 IDES 4.71 上,中文已经导入并且没有指定 Supplementation Language,造成按手册操作时无法继续。
另外,操作手册都是让大家直接修改硬盘上的参数文件,我认为这并不合适,强制修改如果参数名或者值录入出错,很可能影响系统正常启动。而使用事务码 RZ10 来管理参数文件,则可以使用搜索帮助来选择参数名称,避免录入造成的错误,而且在参数值不符合要求时,还会出现警告提示,避免错误的参数值影响系统正常启 动。
 
 
使用 sapdba 命令来管理数据库
此功能应用于 Oracle 数据库。
首先进入命令行方式,“开始-运行-输入cmd-确定”。
然后输入命令 sapdba,开始数据库管理。
使用数据库管理,可以执行下列功能:
启动/关闭数据库实例
查看数据库实例信息
管理表空间(查看、添加、扩展)
重组织(表空间、表、索引等)
导出/导入
附加功能(执行 SQL 语句、数据库优化)
备份数据库
备份离线重做日志
恢复/还原数据库
数据库检查/校验
查看参数文件
管理用户和权限
所有管理都是菜单向导式的,使用比较方便,详细操作就不再一一说明了。
 
 
SAP 中的用户类型
在使用 SU01 维护用户时,在登录数据选项卡中会要求选择用户类型,一般我们都选择第一项 Dialog,但是其他几个选项有什么作用呢?下面我们就一一解释。
对话用户
顾名思义,就是需要通过 SAP GUI 与 SAP 系统进行交互的用户。
在对话用户登录时,系统会检查用户的有效期和初始密码,并且要求修改密码。
重复登录时,系统会给出提示。
系统用户
系统用户主要用来执行系统中无需会话交互的应用(例如 RFC)或者是执行后台处理。
这种用户不允许使用 SAP GUI 登录。
这种用户类型没有密码有效期。只有用户管理员才能使用事务码 SU01 来修改密码。
通讯用户
使用通讯用户来处理系统间不需要会话操作的通讯(各种使用 RFC 服务的应用程序,例如 ALE、工作流、TMS)。
不允许使用 SAP GUI 登录。
服务用户
类型为服务用户的是一个匿名的大分组用户。通常它应该受到非常严格的授权。
例如,服务用户用于通过 ITS 服务来匿名访问系统。一旦验证通过,使用服务用户开始的匿名会话就可以向使用会话用户登录的个人会话一样执行。
在登录时,系统不检查有效期和初始密码,只有管理员可以修改密码。
允许重复登录。
参考用户
跟服务用户类似,参考用户用于通用用户,不指定到特定人。不能使用参考用户登录。参考用户只用来指定附加的权限。它用于互联网上相同授权的用户。
在角色选项卡,可以为会话用户指定参考用户来添加附加权限。一般来说,应用控制参考用户的分配。可以用事务码 SU_REFUSERVARIABLE 来维护参考用户和会话用户的对应。
这种分配主要用户 CUA 场景的所有系统。如果被分配的参考用户不存在于某个 CUA 子系统,则分配被忽略。
 
 
如何查找用户的角色、事务码、参数文件、用户组等权限信息
SAP 的信息系统是个很好的东西,它包含了 SAP 开发的很多对各种信息的查询,其中用户维护的信息系统就包含了跟用户和权限相关的各种查询。
在 ECC 5.0 里,用户维护的信息系统的菜单路径为:“工具-系统管理-用户维护-信息系统”,区域菜单(事务码)为:AUTH。
其中,如果要查询用户对应的角色、事务码、参数文件的话,就使用它的下级菜单“用户-User by Complex Selection Criteria-User by Complex Selection Criteria”,或者事务码:S_BCE_68001400。
这个菜单下还有很多其他的查询功能,都要靠你自己发掘了。
 
 
如何在后台配置中找到某个具体配置的事务码
经常有人问到,在定制后台配置(事务码 SPRO)中,如何根据某个配置项目找到其对应的事务码。
实事上,并非所有后台配置项目都对应的有事务码。但是,我们可以根据 SAP 的命名规范找到其中的一些。
操作很简单,在“显示 IMG”屏幕中,点击菜单“附加的信息-附加的信息-显示关键字-属性”,就会在定制树型结构的右面增加一列“Additional Information”,在这列中显示了相应项目的关键字,这个关键字的后四个字符,往往就是它的事务码。
不过要着重声明,并非所有配置项目都能通过此方法找到事务码。我发现,以 SIMG_CFMENU 开头的关键字,最后四个字符都是对应项的事务码,而其他开头的关键字一般都无此规律。
另外,紧接着 SIMG_CFMENU 之后的四个字符一般是描述了它的分类,比如 SAPC、ORK1、OLSD 等等,我们对此不需要太关心。
 
 
如何修改 SAP 登录后的背景图片(事务码 SMW0,SM30)
SAPgui 提供了丰富的界面风格设定功能,跟 Windows 桌面主题一样,可以任意设定自己喜欢的颜色风格。不过美中不足,它的背景图片却比较单调,天天看惯了正式系统的蔚蓝水池或者 IDES 系统的小小图标,是不是想换个图片看看呢?下面就教你如何更换系统登录后的背景图片,比如换成公司的 Logo 或者平面广告等。
第一步是上传我们自己的图片。
首先:用事务码 SMW0 或者通过菜单“Tools  -> Web Development -> Web Repository”(中文系统“工具 -> Web 开发 -> Web 资源库”),打开 Web 资源库管理功能。
然后:选择Binary Data(二进制数据),然后回车或执行。接下来再按执行。也可以连续按两次键盘上的“F8”键。这样就打开了 Web 资源库中的对象列表。
然后:上传图片,点击应用工具栏的“Create(创建)”按钮或按键盘 F5 键,打开对象属性输入框,输入对象名字(名字必须遵守 SAP 的知识库对象命名规范,用 Y 或 Z 开头;另外,由于系统允许上传任何类型的文件,为了便于以后使用,对象名字最好包含对文件类型的说明,比如在最后加上扩展名)和描述信息,然后点左下角的 “Import(导入)”按钮。接下来就是选择本机图片,点击“打开”按钮上传文件。
然后会要求选择上传对象的开发类,如果需要传输给其他服务器,就选择一个开发类,如果仅需要在本机使用,使用本地对象就可以了。
上传成功后会自动在对象列表中新增一个条目,说明我们的图片已经上传到服务器上,可以使用了。
 
 第二步,把刚才上传的图片设置为登录首页的背景。
首先,用事务码 SM30 打开表视图维护功能。我没有找到相应的菜单路径,如果你知道,请告诉我。
然后,输入表名 SSM_CUST,这是 SAP 提供的修改登录后主界面的设置表。然后点击“Maintain(维护)”,这时会出现一个提示,说明它是个跨 Client 的表,就是说对它所做的修改会应用于所有 Client。
我们看到了 SSM_CUST 表的内容,有很多条目,跟我们设置背景图片相关的有三条记录,分别是:HIDE_START_IMAGE、RESIZE_IMAGE、 START_IMAGE,下面一一介绍。
HIDE_START_IMAGE,值为“YES”表示登录后不显示背景图片,“NO”表示登录后显示背景图片,我们这里当然要填“NO”。
RESIZE_IMAGE,值为“YES”表示自动缩放图片以适应窗口大小,“NO”表示图片尺寸保持原始值不变。如果图片以横竖线条为主,建议使用 “NO”,因为系统自动缩放能力很差,变形严重。而如果图片较大或者是照片的话,用“YES”比较好。
START_IMAGE,就填入我们刚才第一步所建立的对象名字。
接下来保存一下就可以了,会要求挂一个请求号,只管挂上就行了。
再打开个新窗口看看,刚才上传的图片是不是已经出现了?
 
 
 
如何修改 SAP 登录界面的文字(事务码SE61)
 我们使用 SAP 的时候,经常会觉得登录那个界面太简单了,诺大一个屏幕上,只有左面那个角落放了客户端、用户、口令、语言这几个输入框,其他地方都空荡荡的。
而安装过 miniSAP 后会发现,除了左面那些输入框外,系统右边的空白处多了一些说明文字:
客户端:800
用户名:ddic
密码:19920706
这是怎么出来的呢?我们一般的 SAP 系统是不是也能显示一些自己的说明文字呢?
回答是肯定的,SAP 以比较贴近技术人员的方式给出了维护登录界面说明文字的方法。所谓比较贴近技术人员的方式,就是说 SAP 的用户友好性实在太差了……SAP学习笔记_SAP
当然,SAP 是很值得尊重的,至少它想到了这些很细节的问题,虽然没有专门开发一个称为“系统设置”的功能,不过毕竟用系统的通用功能为我们提供了相应操作的可能性。 下面就来详细说说。
方法很简单,只需要用下面几个步骤就行了。
首先:输入事务码 SE61,或者通过菜单“Tools -> ABAP Workbench -> Utilities -> Documentation”(中文系统“工具 -> ABAP 工作台 -> 实用程序 -> 文档”。我用的是 ECC5,其他版本的菜单路径可能略有不同)打开文档维护的初始界面。
然后:填写下列必要参数
Document Class(文档类):选择 General Text(常规文本),选择时的 ID 为“TX”。
Language(语言):这里需要一定注意,语言必须选择登录页面显示的语言,而不是用户个人设置里面指定的登录后使用的语言。这个语言是 BASIS 在系统参数里面设置的。如果语言不对,界面上就无法显示。
Name(名称):填写“ZLOGIN_SCREEN_INFO”,必须是这个名字,不能变。
然后:根据实际情况按“Create(创建)”或“Change(更改)”按钮——反正如果没有创建过按了更改或创建过后按了创建都会有相应的错误 提示,不会搞错的——来编辑文档。
接下来:有可能会遇到一个问题,编辑界面是一个 RichTextFormat 窗口,就是跟 Windows 自带的写字板一样,这个界面可以为文本添加很多格式,但是缺点是,这些格式没法用在我们的登录界面上SAP学习笔记_休闲_02。有兴趣的朋友可以自己试试看会出现什么结果。我们只需要一个纯文本的编辑器,怎么办?当然有办法!到菜 单里面找,“Goto -> Change Editor”(中文系统“转到 -> 修改编辑器”),就可以在 RTF 编辑器和纯文本编辑器之间切换了。
按照 SAP Notes 205487 的说明,文本最多 16 行,每行 45 个等宽字符,而根据我的实践,可以输入无数(反正我回车到手酸了也没到头,已经超过 1000 行了)行文本,登录屏幕上最多显示到第 17 行。每行最多可以输入 72 个英文字符或 36 个中文字符,以及它们的任意组合(70个英文+1个汉字……),而在屏幕上显示的文字则根据系统所使用字符集的不同而变化,由于在这个文本里面用的不是等 宽字体,一般来说,英文能够显示 52 个字符,而中文能显示 30 个半。SAP 还是很体贴的,如果字符数量超过显示宽度,则鼠标移动到相应行的时候,会出来一个小提示栏,显示完整的一行文本。
改变字符集的方法是,在登录界面上按“Alt + F2”或者系统工具栏最右面那个图标下的“字符集”来选择,不过每种语言只能使用自己的字符集,否则就会显示乱码。
罗嗦了这么多,总算可以保存了。不过不要忘记了 SAP 中经常需要激活才能使用的基本原则,文档对象也是需要激活的。保存激活时会要求选择开发类,如果不需要把登录文本传输给其他系统,就指定为本地对象,否则 的话,选择合适的开发类。如果用了开发类,则还需要指定传输请求号。都指定以后,这个登录界面的文字就会显示出来。
附加一个说明,在每行的开头,可以用字段符号指定一个小图标,而这时就很有意思了,原来无法完全显示的文字行就会不受宽度限制,完整的显示出来。用 @<CODE>@来指定图标,其中<CODE>是两个字符的图标代码,字符范围是数字和字母,例如:00、01、……、09、 0A、0B、……、0Z、10、……一直排下去,有好几百个。
可以用 SE38 运行程序 RSTXICON 来查看所有图标。
 需要说明的是,事务码 SE61 的功能不这么简单,它可以维护整个系统里中各种各样的文档,修改登录界面文字只是其中很小的一个应用,更多功能都需要各位自己去发掘了。
 
 
给SAP系统安装联机帮助(事务码SR13)
新安装好的SAP系统,联机帮助是不能用的,通过菜单中的“帮助-应用程序帮助” 和“帮助-SAP库”都打不开任何帮助页面。这并不是因为 SAPgui安装不完整,而是因为SAP的帮助系统本身就不包含在GUI中,而是需要单独配置的功能。
使用事务码SR13,打开“更改视图"管理:显示SAP库"”功能。可以看到里面有四个选项卡,我们只需要使用其中第二个—— PlainHtmlHttp,这是通过Web服务器访问SAP帮助的方法。
由于SAP的官方网站提供了联机帮助站点 http://help.sap.com/ ,我们可以直接通过连接这个站点来访问联机帮助。
点“新条目”按钮,下面的内容栏就可以填写了,按照下面规则填写:
变式:任意的唯一名字
平台:WN32
区域:IWBHELP
服务器名称:help.sap.com,SAP的官方帮助站点
路径:根据你的SAP版本,在 http://help.sap.com/ 里面找,我用的是ECC5,所以路径为 saphelp_erp2004/helpdata
语言:EN,因为SAP只提供了英语和德语,我们只好选英语了。
缺省值:勾上,这就是缺省的联机帮助设置。
然后保存即可。
再用菜单中的“帮助-应用程序帮助”看看,可以定位到当前操作的帮助页面了!
 
 
 
如何自己生成 Solution Manager Key
 
今天偶然得到一个程序,是用来生成 Solution Manager Key 的,有了它,以后装 ECC 版的 SAP 软件就不用到处找人了。
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*& Report  ZSLMKEY
SAP学习笔记_笔记_03*&
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*&
SAP学习笔记_笔记_03*&
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03REPORT  ZSLMKEY.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03types: begin of dswpclientkey,
SAP学习笔记_笔记_03         INSTNO type num10,
SAP学习笔记_笔记_03         DBID(3),
SAP学习笔记_笔记_03         BUNDLE_ID(8),
SAP学习笔记_笔记_03         SERVICE_KEY(40),
SAP学习笔记_笔记_03       end of dswpclientkey.
SAP学习笔记_笔记_03*data: dswpclientkey_w type standard table of dswpclientkey.
SAP学习笔记_笔记_03DATA: P_VALUE(10),
SAP学习笔记_笔记_03      P_INSTNO(10).
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03PARAMETERS: P_SID(3),
SAP学习笔记_笔记_03             P_SYSNO(2),
SAP学习笔记_笔记_03             P_SERVER(15).
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03START-OF-SELECTION.
SAP学习笔记_笔记_03  PERFORM GET_SP_VALUE USING P_SID
SAP学习笔记_笔记_03                             P_SYSNO
SAP学习笔记_笔记_03                             P_SERVER
SAP学习笔记_笔记_03                             P_INSTNO
SAP学习笔记_笔记_03                    CHANGING P_VALUE.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03END-OF-SELECTION.
SAP学习笔记_笔记_03  WRITE P_VALUE.
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*&      Form  get_sp_value
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*       text
SAP学习笔记_笔记_03*----------------------------------------------------------------------*
SAP学习笔记_笔记_03*      -->P_PF_SID  text
SAP学习笔记_笔记_03*      -->P_PF_SYSNO  text
SAP学习笔记_笔记_03*      -->P_PF_SERVER  text
SAP学习笔记_笔记_03*      <--P_PF_VALUE  text
SAP学习笔记_笔记_03*----------------------------------------------------------------------*
SAP学习笔记_笔记_03FORM get_sp_value USING    P_PF_SID
SAP学习笔记_笔记_03                           P_PF_SYSNO
SAP学习笔记_笔记_03                           P_PF_SERVER
SAP学习笔记_笔记_03                           P_PF_INSTNO
SAP学习笔记_笔记_03                  CHANGING P_PF_VALUE.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  CONSTANTS: lc_part_len TYPE i VALUE 5,
SAP学习笔记_笔记_03             lc_pw_len   TYPE i VALUE 10,
SAP学习笔记_笔记_03             lc_allowed_chars(38) TYPE c VALUE
SAP学习笔记_笔记_03             '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_'.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  data: lf_string(20)        type c,
SAP学习笔记_笔记_03        lf_key               type i,
SAP学习笔记_笔记_03        ls_key               type dswpclientkey,
SAP学习笔记_笔记_03        lf_part(lc_part_len) type c,
SAP学习笔记_笔记_03        lf_finalf(lc_pw_len) type c,
SAP学习笔记_笔记_03        lf_finalx            type xstring,
SAP学习笔记_笔记_03        lf_xbuffer           type xstring,
SAP学习笔记_笔记_03        lf_opf(10)           type c,
SAP学习笔记_笔记_03        lf_langu             like sy-langu,
SAP学习笔记_笔记_03        lf_subrc             like sy-subrc,
SAP学习笔记_笔记_03        lf_len               type i,
SAP学习笔记_笔记_03        lo_conv_to_x         TYPE REF TO cl_abap_conv_out_ce.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  clear: lf_string, lf_finalx, lf_opf.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  concatenate p_pf_sid p_pf_sysno p_pf_server into lf_string.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03* Large letters only
SAP学习笔记_笔记_03  translate lf_string to upper case.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  lf_langu = sy-langu.
SAP学习笔记_笔记_03  SET LOCALE LANGUAGE 'E'.
SAP学习笔记_笔记_03  lo_conv_to_x = cl_abap_conv_out_ce=>create( encoding = '1100' ).
SAP学习笔记_笔记_03  lf_len = STRLEN( lf_string ).
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  IF lf_string(lf_len) CN lc_allowed_chars.
SAP学习笔记_笔记_03  else.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03* Fold the input string to a lc_part_len long string
SAP学习笔记_笔记_03    WHILE lf_len > 0.
SAP学习笔记_笔记_03      lf_part = lf_string(lc_part_len).
SAP学习笔记_笔记_03      SHIFT lf_string BY lc_part_len PLACES.
SAP学习笔记_笔记_03      lf_len = STRLEN( lf_string ).
SAP学习笔记_笔记_03      CALL METHOD lo_conv_to_x->reset.
SAP学习笔记_笔记_03      CALL METHOD lo_conv_to_x->write( data = lf_part n = -1 ).
SAP学习笔记_笔记_03      lf_xbuffer = lo_conv_to_x->get_buffer( ).
SAP学习笔记_笔记_03      lf_finalx = lf_finalx BIT-XOR lf_xbuffer.
SAP学习笔记_笔记_03    ENDWHILE.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03    lf_key = 12.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03    PERFORM scramble USING      lf_finalx
SAP学习笔记_笔记_03                                lf_key
SAP学习笔记_笔记_03                                lc_part_len
SAP学习笔记_笔记_03                       CHANGING lf_finalf
SAP学习笔记_笔记_03                                lf_subrc.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03    if not lf_finalf is initial.
SAP学习笔记_笔记_03      p_pf_value = lf_finalf.
SAP学习笔记_笔记_03      ls_key-dbid        = p_pf_sid.
SAP学习笔记_笔记_03      ls_key-instno      = p_pf_instno.
SAP学习笔记_笔记_03      ls_key-bundle_id   = 'SM_KEY'.
SAP学习笔记_笔记_03      ls_key-service_key = lf_finalf.
SAP学习笔记_笔记_03      if not p_pf_instno is initial.
SAP学习笔记_笔记_03*        insert dswpclientkey_w from ls_key.
SAP学习笔记_笔记_03        if sy-subrc <> 0.
SAP学习笔记_笔记_03*          update dswpclientkey_w from ls_key.
SAP学习笔记_笔记_03        endif.
SAP学习笔记_笔记_03      endif.
SAP学习笔记_笔记_03    else.
SAP学习笔记_笔记_03      clear p_pf_value.
SAP学习笔记_笔记_03    endif.
SAP学习笔记_笔记_03  endif.
SAP学习笔记_笔记_03ENDFORM.                    " get_sp_value
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*&      Form  scramble
SAP学习笔记_笔记_03*&---------------------------------------------------------------------*
SAP学习笔记_笔记_03*       text
SAP学习笔记_笔记_03*----------------------------------------------------------------------*
SAP学习笔记_笔记_03*      -->P_LF_FINALX  text
SAP学习笔记_笔记_03*      -->P_LF_KEY  text
SAP学习笔记_笔记_03*      -->P_LC_PART_LEN  text
SAP学习笔记_笔记_03*      <--P_LF_finalf  text
SAP学习笔记_笔记_03*      <--P_LF_SUBRC  text
SAP学习笔记_笔记_03*----------------------------------------------------------------------*
SAP学习笔记_笔记_03FORM scramble USING    iv_xstring TYPE xstring
SAP学习笔记_笔记_03                       iv_key TYPE i
SAP学习笔记_笔记_03                       iv_src_len TYPE i
SAP学习笔记_笔记_03              CHANGING lf_finalf
SAP学习笔记_笔记_03                       lf_subrc LIKE sy-subrc.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  CONSTANTS: lc_max_len    TYPE i VALUE 20,
SAP学习笔记_笔记_03             lc_mask(4)    TYPE x VALUE '0000003F',
SAP学习笔记_笔记_03             lc_random(64) TYPE x VALUE
SAP学习笔记_笔记_03                      'F0ED53B83244F1F876C67959FD4F13A2' &
SAP学习笔记_笔记_03                      'C15195EC5483C234774943A27DE26596' &
SAP学习笔记_笔记_03                      '5E5398789A17A33CD383A8B829FBDCA5' &
SAP学习笔记_笔记_03                      '55D702778413ACDDF9B83116610E6DFA'.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  DATA: lv_key_index(4)  TYPE x,
SAP学习笔记_笔记_03        lv_rand_index(4) TYPE x,
SAP学习笔记_笔记_03        lv_xkey(4)       TYPE x,
SAP学习笔记_笔记_03        lv_xkey_shl_1(4) TYPE x,
SAP学习笔记_笔记_03        lv_xkey_shr_5(4) TYPE x,
SAP学习笔记_笔记_03        lv_scramble_byte TYPE x,
SAP学习笔记_笔记_03        lv_dest(lc_max_len) TYPE x,
SAP学习笔记_笔记_03        lv_index         TYPE i,
SAP学习笔记_笔记_03        lv_len           TYPE i.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  CLEAR lf_subrc.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  IF iv_src_len EQ 0. EXIT. ENDIF.
SAP学习笔记_笔记_03  lv_len = XSTRLEN( iv_xstring ).
SAP学习笔记_笔记_03  IF iv_src_len GT lc_max_len OR
SAP学习笔记_笔记_03     iv_src_len GT lv_len.
SAP学习笔记_笔记_03    lf_subrc = 2.
SAP学习笔记_笔记_03    EXIT.
SAP学习笔记_笔记_03  ENDIF.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  lv_xkey       = iv_key.
SAP学习笔记_笔记_03  lv_xkey_shl_1 = iv_key * 2.
SAP学习笔记_笔记_03  lv_xkey_shr_5 = iv_key DIV 32.
SAP学习笔记_笔记_03  lv_rand_index = lv_xkey BIT-XOR lv_xkey_shr_5 BIT-XOR lv_xkey_shl_1.
SAP学习笔记_笔记_03  lv_rand_index = lv_rand_index BIT-AND lc_mask.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  lv_index = 0.
SAP学习笔记_笔记_03  DO iv_src_len TIMES.
SAP学习笔记_笔记_03    CATCH SYSTEM-EXCEPTIONS compute_int_times_overflow = 1.
SAP学习笔记_笔记_03      lv_key_index = ( iv_key * lv_index * lv_index ) - lv_index.
SAP学习笔记_笔记_03    ENDCATCH.
SAP学习笔记_笔记_03    IF sy-subrc <> 0.
SAP学习笔记_笔记_03      lf_subrc = 1.
SAP学习笔记_笔记_03      EXIT.
SAP学习笔记_笔记_03    ENDIF.
SAP学习笔记_笔记_03    lv_scramble_byte = lc_random+lv_rand_index(1) BIT-XOR
SAP学习笔记_笔记_03                       lv_key_index+3(1).
SAP学习笔记_笔记_03    lv_dest+lv_index(1) = iv_xstring+lv_index(1) BIT-XOR
SAP学习笔记_笔记_03                          lv_scramble_byte.
SAP学习笔记_笔记_03    lv_index = lv_index + 1.
SAP学习笔记_笔记_03    lv_rand_index = lv_rand_index + 1.
SAP学习笔记_笔记_03    lv_rand_index = lv_rand_index BIT-AND lc_mask.
SAP学习笔记_笔记_03  ENDDO.
SAP学习笔记_笔记_03  IF lf_subrc <> 0.
SAP学习笔记_笔记_03    EXIT.
SAP学习笔记_笔记_03  ENDIF.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03  WRITE lv_dest(iv_src_len) TO lf_finalf.
SAP学习笔记_笔记_03
SAP学习笔记_笔记_03ENDFORM.                    " scramble