Report 如何在ABAP报告中显示WebDynpro ABAP?

Report 如何在ABAP报告中显示WebDynpro ABAP?,report,abap,sap-gui,webdynpro,function-module,Report,Abap,Sap Gui,Webdynpro,Function Module,我刚开始编写ABAP代码几天,我有一项任务要从transactionSE38调用报告,并且 报告结果显示在WebDynPro应用程序的屏幕上SE80 报告将用户输入(例如:物料编号、物料类型、工厂、销售组织)作为查询条件,因此WebDynPro应用程序必须允许用户输入此参数 在一些相关文章中,他们讨论了使用SUBMIT rep EXPORTING LIST TO MEMORY和调用函数'LIST_FROM_MEMORY',但到目前为止,我真的不知道如何实现它 如有任何答复,将不胜感激。谢谢 您可

我刚开始编写ABAP代码几天,我有一项任务要从transaction
SE38调用报告,并且

报告结果显示在WebDynPro应用程序的屏幕上
SE80

报告将用户输入(例如:物料编号、物料类型、工厂、销售组织)作为查询条件,因此WebDynPro应用程序必须允许用户输入此参数

在一些相关文章中,他们讨论了使用
SUBMIT rep EXPORTING LIST TO MEMORY
调用函数'LIST_FROM_MEMORY'
,但到目前为止,我真的不知道如何实现它


如有任何答复,将不胜感激。谢谢

您可以将其导出为PDF。因此,当用户单击链接时,您将运行转换并在浏览器窗口中显示文件

要执行此操作,请首先使用以下代码创建作业:

  constants c_name type tbtcjob-jobname value 'YOUR_JOB_NAME'.

  data v_number type tbtcjob-jobcount.
  data v_print_parameters type pri_params.

  call function 'JOB_OPEN'
    exporting
      jobname          = c_name
    importing
      jobcount         = v_number
    exceptions
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      others           = 4.

  if sy-subrc = 0.
    commit work and wait.
  else.
    EXIT. "// todo: err handling here
  endif.
然后,您需要获取打印机参数以提交报告:

call function 'GET_PRINT_PARAMETERS'
  exporting
    destination            = 'LP01'
    immediately            = space
    new_list_id            = 'X'
    no_dialog              = 'X'
    user                   = sy-uname
  importing
    out_parameters         = v_print_parameters
  exceptions
    archive_info_not_found = 1
    invalid_print_params   = 2
    invalid_archive_params = 3
    others                 = 4.

v_print_parameters-linct = 55.
v_print_parameters-linsz = 1.
v_print_parameters-paart = 'LETTER'.
现在,您可以使用应用的过滤器提交报告。不要忘记向其添加作业参数,如下代码所示:

  submit your_report_name
         to sap-spool
         spool parameters v_print_parameters
         without spool dynpro
         with ...(insert all your filters here)
         via job c_name number v_number
         and return.

  if sy-subrc = 0.
    commit work and wait.
  else.
    EXIT. "// todo: err handling here
  endif.
然后,关闭作业:

  call function 'JOB_CLOSE'
    exporting
      jobcount             = v_number
      jobname              = c_name
      strtimmed            = 'X'
    exceptions
      cant_start_immediate = 1
      invalid_startdate    = 2
      jobname_missing      = 3
      job_close_failed     = 4
      job_nosteps          = 5
      job_notex            = 6
      lock_failed          = 7
      others               = 8.

  if sy-subrc = 0.
    commit work and wait.
  else.
    EXIT. "// todo: err handling here
  endif.
现在作业将继续,您需要等待它完成。做一个循环。一旦作业完成,您就可以获得它的spool输出并将其转换为PDF

  data v_rqident type tsp01-rqident.

  data v_job_head type tbtcjob.

  data t_job_steplist type tbtcstep occurs 0 with header line.

  data t_pdf like tline occurs 0 with header line.

  do 200 times.

    wait up to 1 seconds.

    call function 'BP_JOB_READ'
      exporting
        job_read_jobcount     = v_number
        job_read_jobname      = c_name
        job_read_opcode       = '20'
      importing
        job_read_jobhead      = v_job_head
      tables
        job_read_steplist     = t_job_steplist
      exceptions
        invalid_opcode        = 1
        job_doesnt_exist      = 2
        job_doesnt_have_steps = 3
        others                = 4.

    read table t_job_steplist index 1.

    if not t_job_steplist-listident is initial.
      v_rqident = t_job_steplist-listident.
      exit.
    else.
      clear v_job_head.
      clear t_job_steplist.
      clear t_job_steplist[].
    endif.

  enddo.

  check not v_rqident is initial.

  call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
    exporting
      src_spoolid              = v_rqident
      dst_device               = 'LP01'
    tables
      pdf                      = t_pdf
    exceptions
      err_no_abap_spooljob     = 1
      err_no_spooljob          = 2
      err_no_permission        = 3
      err_conv_not_possible    = 4
      err_bad_destdevice       = 5
      user_cancelled           = 6
      err_spoolerror           = 7
      err_temseerror           = 8
      err_btcjob_open_failed   = 9
      err_btcjob_submit_failed = 10
      err_btcjob_close_failed  = 11
      others                   = 12.
如果要通过HTTP发送,可能还需要将其转换为BASE64

  field-symbols <xchar> type x.
  data v_offset(10) type n.
  data v_char type c.
  data v_xchar(2) type x.
  data v_xstringdata_aux type xstring.
  data v_xstringdata type xstring.
  data v_base64data type string.
  data v_base64data_aux type string.

  loop at t_pdf.
    do 134 times.
      v_offset = sy-index - 1.
      v_char = t_pdf+v_offset(1).
      assign v_char to <xchar> casting type x.
      concatenate v_xstringdata_aux <xchar> into v_xstringdata_aux in byte mode.
    enddo.
    concatenate v_xstringdata v_xstringdata_aux into v_xstringdata in byte mode.
    clear v_xstringdata_aux.
  endloop.

  call function 'SCMS_BASE64_ENCODE_STR'
    exporting
      input  = v_xstringdata
    importing
      output = v_base64data.

  v_base64data_aux = v_base64data.

  while strlen( v_base64data_aux ) gt 255.
    clear t_base64data.
    t_base64data-data = v_base64data_aux.
    v_base64data_aux = v_base64data_aux+255.
    append t_base64data.
  endwhile.

  if not v_base64data_aux is initial.
    t_base64data-data = v_base64data_aux.
    append t_base64data.
  endif.
字段符号类型x。
数据v_偏移(10)类型n。
数据v_字符类型c。
数据v_xchar(2)类型x。
数据v_xstringdata_辅助类型xstring。
数据v_xstringdata类型xstring。
数据v_base64数据类型字符串。
data v_BASE64 data_aux类型字符串。
在t_pdf循环。
做134次。
v_offset=sy索引-1。
v_char=t_pdf+v_偏移量(1)。
将v_char指定给铸造类型x。
以字节模式将v_xstringdata_aux连接到v_xstringdata_aux。
恩多。
以字节模式将v_xstringdata v_xstringdata_aux连接到v_xstringdata。
清除v_xstringdata_aux。
结束循环。
调用函数“SCMS\u BASE64\u ENCODE\u STR”
出口
输入=vxstringdata
进口
输出=v_base64数据。
v_base64data_aux=v_base64data。
而strlen(v_base64 data_aux)gt 255。
清除t_base64数据。
t_base64data-data=v_base64data\u aux。
v_base64data_aux=v_base64data_aux+255。
追加t_base64数据。
结束时。
如果不是,v_base64数据_aux为初始值。
t_base64data-data=v_base64data\u aux。
追加t_base64数据。
恩迪夫。
你完了


希望能有所帮助。

正如前面的发言者所说,在生产环境中实施这些内容之前,您应该进行广泛的培训。
但是,在报告中调用WebdynPro ABAP可以借助于
WDY\u EXECUTE\u IN\u PLACE
功能模块完成。您应该传递Webdyn Pro应用程序和必要的参数

CALL FUNCTION 'WDY_EXECUTE_IN_PLACE'
 EXPORTING
*   PROTOCOL                     =
    INTERNALMODE                 = ' '
*   SMARTCLIENT                  =
    APPLICATION                  = 'Z_MY_WEBDYNPRO'
*   CONTAINER_NAME               =
    PARAMETERS                   = lt_parameters
    SUPPRESS_OUTPUT              =
    TRY_TO_USE_SAPGUI_THEME      = ' '
 IMPORTING
    OUT_URL                       = ex_url
.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
调用函数“WDY\u就地执行”
出口
*协议=
内部模式=“”
*智能客户端=
应用程序='Z_MY_WEBDYNPRO'
*容器名称=
参数=lt_参数
抑制输出=
尝试使用SAPGUI主题=“”
进口
OUT\u URL=ex\u URL
.
如果sy subrc为0。
*在这里实现适当的错误处理
恩迪夫。

拿一个大的线索棒,“说服”给你分配任务的人:a)这不是一个规范,而是一个相当奇怪的想法;b)在开始使用关键任务ERP/CRM/任何系统之前,你需要接受适当的培训。我认为,除了“接受适当的培训”之外,这个问题无法得到任何回答——通常需要数周的时间来教授和学习必要的基础知识。我完全同意。但不幸的是,我必须从互联网上找到合适的培训,不管是谁给了我这个任务作为练习,我都必须完成它。英雄联盟