• ABAP Help Document(26):11.5 ABAP File Interface


    11.5 ABAP File Interface

              Physical and Logic file Name,使用默认定义Tcode:RZ11,DIR_HOME默认文件路径;

    Tcode:FILE,定义Non-client-specific logical file names;

    使用Function: FILE_GET_NAME,获取logic file name;

    使用Function: FILE_LOGFILE_ALIAS_PBO, FILE_LOGFILE_ALIAS_PAI, and FILE_LOGFILE_ALIAS_F4,输入输出框,以及F4帮助;

    类CL_ABAP_FILE_UTILITIES,提供应用服务器文件信息;

    以下Statements组成ABAP文件接口:

    1.OPEN DATASET

    语法:

    OPEN DATASET dset FOR access IN mode [position] [os_additions] [error_handling].

    access: INPUT | OUTPUT | APPENDING | UPDATE

    input打开文件读取,output打开文件写入,appending打开文件追加,不存在就创建,update打开文件修改;

    mode:

    {BINARY MODE}
    | {TEXT MODE encoding [linefeed] }
    | {LEGACY BINARY MODE [{BIG|LITTLE} ENDIAN] [CODE PAGE cp]}
    | {LEGACY TEXT MODE [{BIG|LITTLE} ENDIAN] [CODE PAGE cp] [linefeed]} ... .

    模式,二进制或文本模式;

    encoding:编码;

    ENCODING { DEFAULT
                 | {UTF-8 [SKIPPING|WITH BYTE-ORDER MARK]}
                 | NON-UNICODE } ... .

    linefeed:行尾标记;

    1. WITH NATIVE LINEFEED,根据操作系统,行尾标记; 

    2. WITH SMART LINEFEED,

    3. WITH UNIX LINEFEED,"LF"作为行尾标记;

    4. WITH WINDOWS LINEFEED ,"CRLF"作为行尾标记;

    [position]:

    AT POSITION pos ... .

    [os_additions]:

    [TYPE attr]
    [FILTER opcom] ... .

    If attr contains the value "NT", the end-of-line is marked by "CRLF".

    If attr contains the value "UNIX", the end-of-line is marked by "LF".

    [error_handling]:

    [MESSAGE msg]
    [IGNORING CONVERSION ERRORS]
    [REPLACEMENT CHARACTER rc]

    MESSAGE:信息;

    IGNORING CONVERSION ERRORS:忽略转换错误;

    REPLACEMENT CHARACTER:替换字符;

    示例:

    FORM f_file_interface_1.
      DATA:lv_file TYPE string VALUE `test.dat`.
      DATA:lv_result TYPE string.
      DATA:lv_mess TYPE string.
      "打开dataset,写模式
      OPEN DATASET lv_file FOR OUTPUT
        IN TEXT MODE
        ENCODING DEFAULT
        WITH SMART LINEFEED.
      TRANSFER `1234567890` TO lv_file.
      "关闭dataset
      CLOSE DATASET lv_file.
    
      "更新模式
      OPEN DATASET lv_file FOR UPDATE
        IN TEXT MODE
        ENCODING DEFAULT
        WITH SMART LINEFEED
        AT POSITION 2.
      TRANSFER `ABCD` TO lv_file.
      CLOSE DATASET lv_file.
    
      "读模式
      OPEN DATASET lv_file FOR INPUT
        IN TEXT MODE
        ENCODING DEFAULT
        WITH SMART LINEFEED
        MESSAGE lv_mess.
      WHILE sy-subrc = 0.
        READ DATASET lv_file INTO lv_result.
        WRITE:/ lv_result.
      ENDWHILE.
      CLOSE DATASET lv_file.
    ENDFORM.

    2.TRANSFER

    语法:

    TRANSFER dobj TO dset [LENGTH len]  [NO END OF LINE].

    len小于等于0不传输任何字符字节;

    以文本方式打开,写入默认添加行尾标记;

    len大于dobj字符字节,添加空白或十六进制0;

    示例:

    FORM f_file_interface2.
      DATA:lv_file TYPE string VALUE `test.dat`.
      DATA:lt_sflight TYPE TABLE OF sflight.
      DATA:ls_sflight LIKE LINE OF lt_sflight.
      FIELD-SYMBOLS:<fs_hex> TYPE x.
      DATA:lv_x TYPE x LENGTH 1024.
      "写入二进制
      OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE.
      SELECT SINGLE * FROM sflight INTO ls_sflight.
      ASSIGN ls_sflight TO <fs_hex> CASTING.
      TRANSFER <fs_hex> TO lv_file.
      "TRANSFER <fs_hex> TO lv_file LENGTH 100 NO END OF LINE.
      CLOSE DATASET lv_file.
    
      "读取二进制
      OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
      WHILE sy-subrc = 0.
        READ DATASET lv_file INTO lv_x.
        WRITE:/ lv_x.
      ENDWHILE.
      CLOSE DATASET lv_file.
    ENDFORM.

    3.READ DATASET

    语法:

    READ DATASET dset INTO dobj [MAXIMUM LENGTH mlen] [[ACTUAL] LENGTH alen].

    示例:

    FORM f_file_interface3.
      DATA:lv_file TYPE string VALUE `test.dat`.
      FIELD-SYMBOLS:<fs_hex> TYPE sflight.
      DATA:lv_hex TYPE x LENGTH 1024.
      DATA:lv_maxlen TYPE I.
    
      DESCRIBE FIELD <fs_hex> LENGTH lv_maxlen IN BYTE MODE.
      ASSIGN lv_hex TO <fs_hex> CASTING.
      "读取二进制
      OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
      DO.
        READ DATASET lv_file INTO lv_hex MAXIMUM LENGTH lv_maxlen.
        IF sy-subrc = 0.
          WRITE:/ lv_maxlen,<fs_hex>-carrid,<fs_hex>-connid,<fs_hex>-fldate.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      CLOSE DATASET lv_file.
    ENDFORM.

    4.GET DATASET

    语法:

    GET DATASET dset [POSITION pos] [ATTRIBUTES attr].

    pos当前位置

    attr,Type Group:DSET,结构体dset_attributes,包含两项:fixed and changeable;

    fixed结构:

    indicator

    Structure whose components mode, access_type, encoding, filter, and linefeed in attr contain the value "X" if the identically named components of the structure fixed are significant for the current file.

    mode

    Storage mode. "T":text files; "LT":legacy text files; "B":binary files;  "LB":legacy binary files.

    access_type

    Access mode. "I":reading; "O":writing; "A":appending; "U": editing.

    encoding

    Character format. "NON-UNICODE", "UTF-8".

    filter

    filter

    linefeed

    linefeed

    changeable结构:

    Component

    Meaning

    indicator

    Structure whose components repl_char, conv_errors, code_page, endian, and linefeed_mode contain the value "X" in attr if the identically named components of the structure changeable are significant for the current file.

    repl_char

    相当于REPLACEMENT CHARACTER

    conv_errors

    相当于IGNORING CONVERSION ERRORS

    code_page

    相当于CODE PAGE

    endian

    "B":BIG ENDIAN; "L" :LITTLE ENDIAN;

    linefeed_mode

    "N":WITH NATIVE LINEFEED;

    "S":WITH SMART LINEFEED;

    "U": WITH UNIX LINEFEED;

    "W":WITH WINDOWS LINEFEED;

    示例:

    FORM f_file_interface4.
      DATA:lv_file TYPE string VALUE `test.dat`.
      DATA:lv_attr TYPE dset_attributes.
      DATA:lv_pos TYPE I.
      "读取二进制
      OPEN DATASET lv_file FOR INPUT
        IN TEXT MODE
        ENCODING UTF-8
        WITH NATIVE LINEFEED.
      GET DATASET lv_file POSITION lv_pos ATTRIBUTES lv_attr.
      WRITE:/ lv_attr-fixed-mode,
              lv_attr-fixed-access_type,
              lv_attr-fixed-encoding,
              lv_attr-fixed-linefeed.
      CLOSE DATASET lv_file.
    ENDFORM

    5.SET DATASET

    语法:

    SET DATASET dset [POSITION {pos|{END OF FILE}}] [ATTRIBUTES attr].

    设置dset参数。

    6.TRUNCATE DATASET

    语法:

    TRUNCATE DATASET dset AT {CURRENT POSITION}|{POSITION pos}.

    在指定位置截断文件;

    7.CLOSE DATASET

    语法:

    CLOSE DATASET dset.

    关闭dataset;

    8.DELETE DATASET

    语法:

    CLOSE DATASET dset.

    删除dataset;

    11.6 Data Consistency

              数据一致性,SAP通过LUWS保持数据一致性。1.Database LUWS通过,Database Locks保证数据一致性;2. SAP LUWS通过SAP locks保证数据一致性。

    Database LUWS,可以显示或隐式Commit,Rollbace work;

    SAP LUWS:

    1. CALL FUNCTION ... IN UPDATE TASK,本地同步或异步function;

    语法:

    CALL FUNCTION update_function IN UPDATE TASK
    [EXPORTING p1 = a1 p2 = a2 ...]
    [TABLES t1 = itab1 t2 = itab2 ...].

    2. CALL FUNCTION ... IN BACKGROUND TASK|UNIT,远程异步function;

    3. PERFORM ... ON COMMIT,注册子程序在不同进程执行;

    语法:

    PERFORM subr ON { {COMMIT [LEVEL idx]} | ROLLBACK }.

    控制SAP LUWS:每一个internal session都有一个SAP LUW;

    1.COMMIT WORK

    2.ROLLBACK WORK

    3.SET UPDATE TASK LOCAL

    语法:

    SET UPDATE TASK LOCAL.

    打开本地更新。

    Database Locks:共享锁(Shared lock),允许创建其他共享锁,不能创建独占锁。独占锁(Exclusive lock),不允许创建其他锁。

    这些OPEN SQL:SELECT SINGLE FOR UPDATE, INSERT, UPDATE, MODIFY, and DELETE创建独占锁。

    隔离等级(isolation level):Uncommitted read (or dirty read)脏读,读取时不加共享锁,可能读取到未更新数据;Committed read,读取时加上共享锁,然后马上释放,保证读取到已更新数据;

    所有数据库锁都将在下一次数据库提交或回滚之前释放。

    SAP Locks:使用Tcode: SM12,可以查看SAP中央锁表。

    参考Locks function:ENQUEUE_EDEMOFLHT,DEQUEUE_EDEMOFLHT。

    Function重要参数:

    Parameter

    Meaning

    MODE_dbtab

    锁类型, "S" :共享锁;"E":独占锁;

    "X" :拓展独占锁,只可以请求一次;

    "O":乐观锁,开始类似共享锁,但可以转换为独占锁;

    key_fields

    键值栏位,可以定义某个键对应值锁住,如果没有指定值,锁住所有行

    _SCOPE

    SAP LUW锁定时间. "1":处理同一程序锁; "2" :锁传递给更新程序;"3":处理同一程序锁或更新程序的锁;

    Authorizations

              SAP权限检查。

    权限Activity表:TACT;

    用户定义Activity表:TACTZ;

    维护权限字段Tcode:SU20;

    维护权限对象Tcode:SU21;

    生成权限对象及用户关系Tcode:PFCG;

    显示权限对象及用户关系Tcode:SU03;

    权限文件Tcode:SU02,PFCG;

    用户主档Tcode:SU01;

    权限检查:AUTHORITY-CHECK;

    语法:

    AUTHORITY-CHECK OBJECT auth_obj [FOR USER user]
                            ID id1 {FIELD val1}|DUMMY
                           [ID id2 {FIELD val2}|DUMMY]
                           [ID id10 {FIELD val10}|DUMMY].

  • 相关阅读:
    Visual Studio 进行单元测试时如何附加被测试文件的方法总结
    PowerDesigner实体模型CDM中关于建立Entity之间关系的备忘
    【转帖】C# 与 C++ 数据类型对照
    【转帖】解决继承窗体或用户控件时“visual继承当前被禁用,因为基类引用设备特定的组件或包含 p/invoke”问题
    【Winform窗体控件开发】之五 实现类型转换器TypeConverterAttribute
    SQL 使用CONVERT函数 格式化日期
    【转帖】const 与 readonly 的区别
    【转帖】C#与C Windows API数据类型对应关系
    【.Net Compact Framework开发】 使用 Visual Studio 对移动项目进行Unit Testing的方法总结
    【部署】Visual Studio 2008 打包部署.Net Framework 2.0 应用程序提示需要安装.Net Framework 3.5的解决方法
  • 原文地址:https://www.cnblogs.com/tangToms/p/14696778.html
Copyright © 2020-2023  润新知