分享

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

 一骑当千_30 2018-09-22

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

这里先说AL11吧.


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


AL11的目录                                                                                                                  


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

  1. CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_XXX'
  2. 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语句去这个目录建一个文件时, 是不会成功的, 代码如下:

  1. DATA: lv_file TYPE string VALUE 'E:\zerotest2\ZZERO.TXT'.
  2. TYPES: BEGIN OF ty_luke,
  3. key1 TYPE zluke-key1,
  4. year1 TYPE zluke-year1,
  5. month1 TYPE zluke-month1,
  6. test TYPE zluke-test,
  7. END OF ty_luke.
  8. DATA: lw_luke_temp TYPE ty_luke.
  9. OPEN DATASET lv_file FOR OUTPUT
  10. IN TEXT MODE
  11. ENCODING DEFAULT.
  12. IF sy-subrc = 0.
  13. CLEAR: lw_luke_temp.
  14. lw_luke_temp-key1 = '1'.
  15. lw_luke_temp-year1 = '1999'.
  16. lw_luke_temp-month1 = '01'.
  17. lw_luke_temp-test = 'Zerot'.
  18. TRANSFER lw_luke_temp TO lv_file.
  19. IF sy-subrc = 0.
  20. BREAK-POINT ID z_zero_test.
  21. ENDIF.
  22. CLOSE DATASET lv_file.
  23. ENDIF.


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

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

  1. DATA: lv_file TYPE string VALUE 'C:\windows\zrobin.TXT'.
  2. TYPES: BEGIN OF ty_luke,
  3. key1 TYPE zluke-key1,
  4. year1 TYPE zluke-year1,
  5. month1 TYPE zluke-month1,
  6. test TYPE zluke-test,
  7. END OF ty_luke.
  8. DATA: lw_luke_temp TYPE ty_luke.
  9. OPEN DATASET lv_file FOR OUTPUT
  10. IN TEXT MODE
  11. ENCODING DEFAULT.
  12. IF sy-subrc = 0.
  13. CLEAR: lw_luke_temp.
  14. lw_luke_temp-key1 = '1'.
  15. lw_luke_temp-year1 = '1999'.
  16. lw_luke_temp-month1 = '01'.
  17. lw_luke_temp-test = 'Zerot'.
  18. TRANSFER lw_luke_temp TO lv_file.
  19. IF sy-subrc = 0.
  20. BREAK-POINT ID z_zero_test.
  21. ENDIF.
  22. CLOSE DATASET lv_file.
  23. 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

  1. DATA: command1(64) TYPE c.
  2. DATA: BEGIN OF tabl OCCURS 0,
  3. line(200),
  4. END OF tabl.
  5. DATA: lt_string TYPE STANDARD TABLE OF string,
  6. lv_strin TYPE string.
  7. COMMAND1(9) = 'mkdir -p '.
  8. COMMAND1 9(55) = 'e:\zerotest'.
  9. CALL 'SYSTEM' ID 'COMMAND' FIELD COMMAND1
  10. ID 'TAB' FIELD TABL-*SYS*.
  11. 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: 测试代码:

  1. TYPE-POOLS: z07tp.
  2. DATA: gw_rec TYPE z07tp_rec,
  3. gt_rec TYPE STANDARD TABLE OF z07tp_rec.
  4. CONSTANTS: cn_fname(8) TYPE c VALUE 'CUST07AD'.
  5. CONSTANTS: cn_path(20) TYPE c VALUE '\\Laoxiang\zerotest\'.
  6. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
  7. PARAMETERS: pr_file(40) TYPE c.
  8. SELECTION-SCREEN END OF BLOCK blk1.
  9. INITIALIZATION.
  10. pr_file = cn_fname.
  11. START-OF-SELECTION.
  12. CONCATENATE cn_path pr_file INTO pr_file.
  13. OPEN DATASET pr_file IN TEXT MODE FOR INPUT ENCODING DEFAULT.
  14. IF sy-subrc <> 0.
  15. WRITE:/ text-002.
  16. EXIT.
  17. ENDIF.
  18. DO.
  19. READ DATASET pr_file INTO gw_rec.
  20. IF sy-subrc <> 0.
  21. EXIT.
  22. ENDIF.
  23. APPEND gw_rec TO gt_rec.
  24. ENDDO.
  25. END-OF-SELECTION.
  26. CLOSE DATASET pr_file.
  27. LOOP AT gt_rec INTO gw_rec.
  28. WRITE:/ gw_rec-kunnr, gw_rec-name1, gw_rec-sortl,gw_rec-ort01,
  29. gw_rec-pstlz, gw_rec-land1, gw_rec-spras.
  30. 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客户机...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约