abap

ABAP实现Blowfish加密算法

陌路散爱 提交于 2019-12-01 19:26:02
看到SAP社区中有人问 是否存在ABAP实现的Blowfish加密算法 ,无人回答。于是动手实现了一个blowfish-abap。通过blowfish-abap可以在SAP系统中使用Blowfish对数据进行加密。 什么是Blowfish? Blowfish是一种对称密钥分组密码算法,它有实现简单、不需要授权、完全免费、密钥长度可变、加密效率高等特点,在某些领域有所应用。关于这几个特点的具体介绍, 快速。Blowfish在32位微处理器上的加密速度达到每字节26个时钟周期。 紧凑。Blowfish能在容量小于5K的存储器中运行。 简单。Blowfish仅使用了一些简单运算:基于32位的加、异或和查表。它的设计容易分析,且可阻止它的错误实现。 可变的安全性,Blowfish的密钥长度是可变的,且能达到448位。在密钥不需要经常更改的应用中,如通信连接和自动文件加密器, Blowfish是最优秀的一个算法,当在32位具有大内存的微处理器上实现时,其速度比DES快得多。Blowfish不适合于分组交换、经常更换密钥和单向函数中。它需要大的存储器,使得它不能有效地在智能卡应用中实现。 (参考《应用密码学》第二版,14.3 Blowfish算法) 它是由Bruce Schneier提出的: http://www.schneier.com/paper-blowfish-fse.html

Parsing json into data structures with lower case field names

岁酱吖の 提交于 2019-12-01 19:09:41
I am parsing JSON into ABAP structures, and it works: DATA cl_oops TYPE REF TO cx_dynamic_check. DATA(text) = `{"TEXT":"Hello ABAP, I'm JSON!","CODE":"123"}`. TYPES: BEGIN OF ty_structure, text TYPE string, code TYPE char3, END OF ty_structure. DATA : wa_structure TYPE ty_structure. TRY. text = |\{"DATA":{ text }\}|. CALL TRANSFORMATION id OPTIONS clear = 'all' SOURCE XML text RESULT data = wa_structure. WRITE: wa_structure-text , wa_structure-code. CATCH cx_transformation_error INTO cl_oops. WRITE cl_oops->get_longtext( ). ENDTRY. The interesting part is that the CODE and TEXT are case

Add/Change Column Name on Internal Table ALV

风格不统一 提交于 2019-12-01 19:07:35
What I need is to add titles to these two columns (highlighted in yellow) and I don't know how to do that. FORM display_alv. DATA: gr_functions TYPE REF TO cl_salv_functions. DATA: gr_display TYPE REF TO cl_salv_display_settings. DATA: gr_columns TYPE REF TO cl_salv_columns_table. DATA: gr_column TYPE REF TO cl_salv_column_table. DATA: gr_sorts TYPE REF TO cl_salv_sorts. DATA: gr_agg TYPE REF TO cl_salv_aggregations. DATA: gr_selections TYPE REF TO cl_salv_selections. gr_functions = alv->get_functions( ). gr_functions->set_all( abap_true ). gr_display = alv->get_display_settings( ). gr_display

ALV Grid missing toolbar

我的梦境 提交于 2019-12-01 18:29:14
I'm creating a simple ALV grid in SAP. So far i've been able to populate the grid with my data and display the grid after the selection screen no problem. I'm not adding the grid to a custom container on a custom screen. Just viewing the grid full screen. My question is - is there a property of the alv grid object that I need to set in order to view the tool bar that is normally on top of the grid with buttons for filter, sort etc? So far this is what I have: TRY. cl_salv_table=>factory( IMPORTING r_salv_table = gr_alv CHANGING t_table = tbl_data ). CATCH cx_salv_msg. ENDTRY. * initialize the

DATA_BUFFER_EXCEEDED error when calling RFC_READ_TABLE?

别等时光非礼了梦想. 提交于 2019-12-01 16:48:15
My java/groovy program receives table names and table fields from the user input, it queries the tables in SAP and returns its contents. The user input may concern the tables CDPOS and CDHDR . After reading the SAP documentations and googling, I found these are tables storing change document logs. But I did not find any remote call functions that can be used in java to perform this kind of queries. Then I used the deprecated RFC Function Module RFC_READ_TABLE and tried to build up customized queries only depending on this RFC. However, I found if the number of desired fields I passed to this

DATA_BUFFER_EXCEEDED error when calling RFC_READ_TABLE?

故事扮演 提交于 2019-12-01 14:47:56
问题 My java/groovy program receives table names and table fields from the user input, it queries the tables in SAP and returns its contents. The user input may concern the tables CDPOS and CDHDR . After reading the SAP documentations and googling, I found these are tables storing change document logs. But I did not find any remote call functions that can be used in java to perform this kind of queries. Then I used the deprecated RFC Function Module RFC_READ_TABLE and tried to build up customized

SUBMIT标准程序取ALV数据

我与影子孤独终老i 提交于 2019-12-01 13:31:48
示例1: /*--> */ /*--> */ 调用J3RFLVMOBVEDH ,取物料的期初/ 期末庫存数、金额 FORM frm_call_j3rflvmobvedh. DATA: lr_bukrs TYPE RANGE OF bukrs, ls_bukrs LIKE LINE OF lr_bukrs, lr_datum TYPE RANGE OF datum, ls_datum LIKE LINE OF lr_datum. DATA: lo_data TYPE REF TO data. DATA: lv_buper TYPE buper. FIELD-SYMBOLS: <fs_t_data> TYPE ANY TABLE. ls_bukrs-sign = 'I'. ls_bukrs-option = 'EQ'. ls_bukrs-low = p_bukrs. APPEND ls_bukrs TO lr_bukrs. * Caculate the first & last day of the Month lv_buper = |{ gv_gjahr }{ gv_monat }|. ls_datum-sign = 'I'. ls_datum-option = 'BT'. ls_datum-low = gv_start_date. ls_datum-high = gv_end

ABAP 发送邮件的两种方式

血红的双手。 提交于 2019-12-01 12:12:15
CONSTANTS: GC_TAB TYPE C VALUE CL_BCS_CONVERT=>GC_TAB, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB GC_CRLF TYPE C VALUE CL_BCS_CONVERT=>GC_CRLF. "CL_ABAP_CHAR_UTILITIES=>CR_LF DATA: I_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, I_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE, "receivers I_CONTENTS_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "ASCII contents of object and attachments I_CONTENTS_HEX LIKE SOLIX OCCURS 0 WITH HEADER LINE, "Binary contents of object and attachments I_CONTENTS_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH

ABAP OO的八大理由(四)

人走茶凉 提交于 2019-12-01 10:56:53
OO编程优于过程编程的五个原因 下面的部分里我们将着重论述OO编程的主要优点,尽管这里所提到的优点与其他的OO语言(JAVA C++)没有什么太大的区别,我们这里着重在ABAP OO与传统的ABAP程序相比而体现处来的优点。我们将通过实现一个银行账户管理的简单例子来比较两种模式的差别。 原因一:数据封装 将数据和程序封装在一个组件中将使程序变得容易修改。不要把一个应用的所有的数据和功能放在同各超长的程序里,你只需要把你的应用通过组件的稳定的接口把需要的部分包进来即可。如果一个封装的组件有一个好的接口,而这些接口的设计比较完善的话,那么这些接口的内部结构就会被很好的隐蔽起来,对这个部件的内部的修改便不会影响到应用的其他部件。让我们来看看面向过程和面向对象的方式是如何实现封装的。 面向过程模式的封装 在面向过程模式中有两种变量: 全局变量:他在程序的全部分声明,可以在程序的仍何不分应用。 局部变量:他在某个过程(form of function module)中声明也只能在其中应用。 全局变量的生命周期取决于整个程序的生命周期,局部变量的生命周期取决于该过程的生命周期。由于生命周期的限制,局部变量不适合于封装,它是过程中为了达到某个目的而使用的辅助变量。如果没有使用TABLES和COMMON PARTS语句那么程序中所声明的全局变量只能被该程序内部的各个模块调用

ABAP OO的八大理由(四)

◇◆丶佛笑我妖孽 提交于 2019-12-01 10:56:00
OO 编程优于过程编程的五个原因 下面的部分里我们将着重论述OO编程的主要优点,尽管这里所提到的优点与其他的OO语言(JAVA C++)没有什么太大的区别,我们这里着重在ABAP OO与传统的ABAP程序相比而体现处来的优点。我们将通过实现一个银行账户管理的简单例子来比较两种模式的差别。 原因一:数据封装 将数据和程序封装在一个组件中将使程序变得容易修改。不要把一个应用的所有的数据和功能放在同各超长的程序里,你只需要把你的应用通过组件的稳定的接口把需要的部分包进来即可。如果一个封装的组件有一个好的接口,而这些接口的设计比较完善的话,那么这些接口的内部结构就会被很好的隐蔽起来,对这个部件的内部的修改便不会影响到应用的其他部件。让我们来看看面向过程和面向对象的方式是如何实现封装的。 面向过程模式的封装 在面向过程模式中有两种变量: 全局变量: 他在程序的全部分声明,可以在程序的仍何不分应用。 局部变量: 他在某个过程(form of function module)中声明也只能在其中应用。 全局变量的生命周期取决于整个程序的生命周期,局部变量的生命周期取决于该过程的生命周期。由于生命周期的限制,局部变量不适合于封装,它是过程中为了达到某个目的而使用的辅助变量。如果没有使用TABLES和COMMON PARTS语句那么程序中所声明的全局变量只能被该程序内部的各个模块调用