现在的位置: 首页 > 综合 > 正文

AL11的目录配置和open dataset访问共享文件的权限

2013年10月11日 ⁄ 综合 ⁄ 共 3851字 ⁄ 字号 评论关闭

最近准备学习open dataset, 之前项目也遇到了一个共享目录的权限问题, 所以我决定先学习一下AL11和共享目录的问题,

这里先说AL11吧.

AL11里面有很多目录, 有些是安装了SAP后就已经存在了, 有些是人为地加上去的.


AL11的目录                                                                                                                  


对于已经存在的目录, AL11通过下面代码逐个获取它们的路径, 例如: DIR_HOME, DIR_GEN                                        

  CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'DIR_XXX'
                     ID 'VALUE' FIELD searchpoints-dirname.



对于人手维护的目录, 它们保存在表user_dir里面, 这个表还是maintenance allowed                                                       



AL11的user_dir创建                                                                                                     


Step 1: 点configure

Step 2: 点Save保存, Create这个键没什么用, 有兴趣的可以看看代码

Step 3: 查看结果

AL11的目录是否存在的问题                                                                                          


在AL11有纪录, 但实际上不存在的目录                                                                                                                            

Step 1: DIR_ZEROLI2在服务器上其实是不存在的, 当我们双击它, 会有error message抛出



Step 2: 当我们用open dataset语句去这个目录建一个文件时, 是不会成功的, 代码如下:

DATA: lv_file TYPE string VALUE 'E:\zerotest2\ZZERO.TXT'.

TYPES: BEGIN OF ty_luke,
  key1 TYPE zluke-key1,
  year1 TYPE zluke-year1,
  month1 TYPE zluke-month1,
  test TYPE zluke-test,
  END OF ty_luke.

DATA: lw_luke_temp TYPE ty_luke.

OPEN DATASET lv_file FOR OUTPUT
                     IN TEXT MODE
                     ENCODING DEFAULT.

IF sy-subrc = 0.
  CLEAR: lw_luke_temp.
  lw_luke_temp-key1 = '1'.
  lw_luke_temp-year1 = '1999'.
  lw_luke_temp-month1 = '01'.
  lw_luke_temp-test = 'Zerot'.

  TRANSFER lw_luke_temp TO lv_file.
  IF sy-subrc = 0.
    BREAK-POINT ID z_zero_test.
  ENDIF.

  CLOSE DATASET lv_file.
ENDIF.

在AL11没有纪录, 但实际上存在的目录                                                                                                                            

Step 1: 测试系统的服务器是windows系统, 所以c:\windows是存在的, 我们用代码建一个文件

DATA: lv_file TYPE string VALUE 'C:\windows\zrobin.TXT'.

TYPES: BEGIN OF ty_luke,
  key1 TYPE zluke-key1,
  year1 TYPE zluke-year1,
  month1 TYPE zluke-month1,
  test TYPE zluke-test,
  END OF ty_luke.

DATA: lw_luke_temp TYPE ty_luke.

OPEN DATASET lv_file FOR OUTPUT
                     IN TEXT MODE
                     ENCODING DEFAULT.

IF sy-subrc = 0.
  CLEAR: lw_luke_temp.

  lw_luke_temp-key1 = '1'.
  lw_luke_temp-year1 = '1999'.
  lw_luke_temp-month1 = '01'.
  lw_luke_temp-test = 'Zerot'.

  TRANSFER lw_luke_temp TO lv_file.
  IF sy-subrc = 0.
    BREAK-POINT ID z_zero_test.
  ENDIF.

  CLOSE DATASET lv_file.
ENDIF.

Step 2: 我们把c:\windows挂上AL11, 查看我们的结果

在服务器上建文件夹                                                                                                     


方法1: SM69 or SM49                                                                                                                                                      

Step 1: 在SM69建一条命令, 支持dos或unix命令, 先保存再执行, 这里当然是建文件夹的命令, /c代表command

Step 2: 查看AL11结果



方法2: CALL 'SYSTEM'                                                                                                                              
                     

用C的函数system来调用system command

DATA: command1(64) TYPE c.

DATA:  BEGIN OF tabl OCCURS 0,
        line(200),
       END OF tabl.

DATA: lt_string TYPE STANDARD TABLE OF string,
      lv_strin TYPE string.

COMMAND1(9)    = 'mkdir -p '.
COMMAND1+9(55) = 'e:\zerotest'.

CALL 'SYSTEM' ID 'COMMAND' FIELD COMMAND1
              ID 'TAB'     FIELD TABL-*SYS*.

BREAK-POINT ID z_zero_test.

Open dataset访问共享文件的权限(Windows)                                                           


工作组的共享文件                                                                                                                                                           

Step 1: 测试环境: A机Laoxiang: XP系统(共享文件夹所在机); B机Lupkid: Win7系统(SAP gui所在机); C机Vmecc: Win2003(装在B机的VMware, 同时C机也是SAP服务器).

保证AB相互ping通, AC相互ping通

Step 2: 测试代码:

TYPE-POOLS: z07tp.

DATA: gw_rec TYPE z07tp_rec,
      gt_rec TYPE STANDARD TABLE OF z07tp_rec.

CONSTANTS: cn_fname(8) TYPE c VALUE 'CUST07AD'.

CONSTANTS: cn_path(20) TYPE c VALUE '\\Laoxiang\zerotest\'.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: pr_file(40) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.

INITIALIZATION.
  pr_file = cn_fname.

START-OF-SELECTION.
  CONCATENATE cn_path pr_file INTO pr_file.
  OPEN DATASET pr_file IN TEXT MODE FOR INPUT ENCODING DEFAULT.
  IF sy-subrc <> 0.
    WRITE:/ text-002.
    EXIT.
  ENDIF.
  DO.
    READ DATASET pr_file INTO gw_rec.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    APPEND gw_rec TO gt_rec.
  ENDDO.

END-OF-SELECTION.
  CLOSE DATASET pr_file.
  LOOP AT gt_rec INTO gw_rec.
    WRITE:/   gw_rec-kunnr, gw_rec-name1, gw_rec-sortl,gw_rec-ort01,
              gw_rec-pstlz, gw_rec-land1, gw_rec-spras.
  ENDLOOP.


Step 3: 源文件


Step 4: 读取效果


Step 5: C机的截图



Step 6: 去掉A机共享文件夹的Everyone权限



Step 7: C机无法访问zerotest



Step 8: 同时程序也没法访问共享文件



其实我更想测试的是: 是否可以通过限制启动SAP的这个用户的访问文件夹权限就能限制open dataset读取共享文件的权限, 但工作组模式没法做到这点测试, 因为工作组模式只能限制本地的账号和everyone的访问权限...



所以我也在2003开启了域控制器来测试, 因为域的共享模式可以很好地控制每台机子的权限, 域中所有的用户都属于域, 而不属于某台计算机, 但当我配好一切后, 却发现SAP无法登陆, 估计是某个端口被占用了... 有机会我再找三台独立的物理机子来测试看看吧, 一台作为域控制器, 一台SAP服务器, 一台GUI客户机...

抱歉!评论已关闭.