头图

源代码:

REPORT znote.

PARAMETERS: note TYPE cwbntkeylg-numm OBLIGATORY DEFAULT '2184333'.
DATA: lv_insta           TYPE cwbntinsta,
      ls_note_key        TYPE cwbntkeylg,
      lv_full_length     TYPE i,
      lt_comp            TYPE abap_compdescr_tab,
      lv_data_bin        TYPE xstring,
      lv_code_delta_bin  TYPE xstring,
      lt_object_data_bin TYPE cwbci_t_objdelta,
      lv_rfcmsg          LIKE scwbrfcmsg-text,
      lv_key             TYPE hash160,
      lv_check_key       TYPE hash160,
      lv_offset          TYPE i,
      lv_max_length      TYPE i,
      lv_data            TYPE xstring,
      lv_chunk_data      TYPE xstring,
      lv_unzipped_size   TYPE i,
      lt_cwbnthead       LIKE cwbnthead OCCURS 0,
      lt_cwbntstxt       LIKE cwbntstxt OCCURS 0,
      lt_cwbntdata       TYPE bcwbn_note_text OCCURS 0,
      lt_cwbntdata_html  TYPE bcwbn_notehtml_text OCCURS 0,
      lt_cwbntvalid      LIKE cwbntvalid OCCURS 0,
      lt_cwbntci         LIKE cwbntci OCCURS 0,
      lt_cwbntfixed      LIKE cwbntfixed OCCURS 0,
      lt_cwbntgattr      LIKE cwbntgattr OCCURS 0,
      lt_cwbcihead       LIKE cwbcihead OCCURS 0,
      lt_cwbcidata       TYPE bcwbn_cinst_delta OCCURS 0,
      lt_cwbcidata_ref   TYPE cwb_deltas,
      lt_cwbcivalid      LIKE cwbcivalid OCCURS 0,
      lt_cwbciinvld      LIKE cwbciinvld OCCURS 0,
      lt_cwbcifixed      LIKE cwbcifixed OCCURS 0,
      lt_cwbcidpndc      LIKE cwbcidpndc OCCURS 0,
      lt_cwbciobj        LIKE cwbciobj OCCURS 0,
      lt_cwbcmpnt        LIKE cwbcmpnt OCCURS 0,
      lt_cwbcmtext       LIKE cwbcmtext OCCURS 0,
      lt_cwbcmlast       LIKE cwbcmlast OCCURS 0,
      lt_cwbdehead       LIKE cwbdehead OCCURS 0,
      lt_cwbdeprdc       LIKE cwbdeprdc OCCURS 0,
      lt_cwbdetrack      LIKE cwbdetrack OCCURS 0,
      lt_cwbdeequiv      LIKE cwbdeequiv OCCURS 0,
      lt_cwbcinstattr    TYPE cwbci_t_attr.

START-OF-SELECTION.
  PERFORM main.
FORM main.

  ls_note_key-langu = 'E'.
  ls_note_key-numm = note.

  CALL FUNCTION 'SLIC_GET_LICENCE_NUMBER'
    IMPORTING
      license_number = lv_insta.

  CALL FUNCTION 'BHREM_SAPNOTE_RFC_GET_CHUNKED' DESTINATION 'SAPSNOTE'
    EXPORTING
      is_note_key_lg        = ls_note_key
      iv_check_status       = 'X'
      iv_insta_cust         = lv_insta
      iv_na_fmt_id          = 3
    IMPORTING
      ev_full_length        = lv_full_length
      ev_chunk_data         = lv_chunk_data
    CHANGING
      cv_key                = lv_key
      cv_chunk_offset       = lv_offset
      cv_chunk_max_length   = lv_max_length
    EXCEPTIONS
      system_failure        = 1 MESSAGE lv_rfcmsg
      communication_failure = 2 MESSAGE lv_rfcmsg
      note_not_exist        = 3
      note_not_released     = 4
      note_langu_not_exist  = 5
      pack_error            = 6
      note_incomplete       = 7
      note_format_error     = 8
      protocol_error        = 9
      OTHERS                = 10.

  IF sy-subrc <> 0.
    WRITE: / 'note download failed: ', lv_rfcmsg.
    RETURN.
  ENDIF.

  WRITE: / 'size ( compressed ):', lv_full_length.

  lv_data = lv_chunk_data.

*  CALL FUNCTION 'CALCULATE_HASH_FOR_RAW'
*    EXPORTING
*      alg            = 'SHA1'
*      data           = lv_data
*    IMPORTING
*      hash           = lv_check_key
*    EXCEPTIONS
*      unknown_alg    = 1
*      param_error    = 2
*      internal_error = 3
*      OTHERS         = 4.
*  IF lv_check_key <> lv_key.
*    WRITE:/ 'note key verification failed.'.
*    RETURN.
*  ENDIF.

  cl_abap_gzip=>decompress_binary( EXPORTING gzip_in   = lv_data
                                   IMPORTING raw_out   = lv_data ).

  CALL TRANSFORMATION id SOURCE XML lv_data
                         RESULT xml_data_bin         = lv_data_bin
                                xml_code_delta_bint  = lv_code_delta_bin
                                xml_object_data_bin  = lt_object_data_bin.

  CALL FUNCTION 'SCWN_NOTE_UNPACK_XML'
    EXPORTING
      iv_data_bin           = lv_data_bin
      iv_code_delta_bin     = lv_code_delta_bin
      it_object_data_bin    = lt_object_data_bin
    IMPORTING
      et_cwbnthead          = lt_cwbnthead
      et_cwbntstxt          = lt_cwbntstxt
      et_htmltext           = lt_cwbntdata_html
      et_cwbntdata          = lt_cwbntdata
      et_cwbntvalid         = lt_cwbntvalid
      et_cwbntci            = lt_cwbntci
      et_cwbntfixed         = lt_cwbntfixed
      et_cwbntgattr         = lt_cwbntgattr
      et_cwbcihead          = lt_cwbcihead
      et_cwbcidata          = lt_cwbcidata
      et_cwbcidata_ref      = lt_cwbcidata_ref
      et_cwbcivalid         = lt_cwbcivalid
      et_cwbciinvld         = lt_cwbciinvld
      et_cwbcifixed         = lt_cwbcifixed
      et_cwbcidpndc         = lt_cwbcidpndc
      et_cwbciobj           = lt_cwbciobj
      et_cwbcmpnt           = lt_cwbcmpnt
      et_cwbcmtext          = lt_cwbcmtext
      et_cwbcmlast          = lt_cwbcmlast
      et_cwbdehead          = lt_cwbdehead
      et_cwbdeprdc          = lt_cwbdeprdc
      et_cwbdetrack         = lt_cwbdetrack
      et_cwbdeequiv         = lt_cwbdeequiv
      et_cwbcinstattr       = lt_cwbcinstattr
    EXCEPTIONS
      corrupt_data_file     = 1
      incompatible_versions = 2
      OTHERS                = 3.

  PERFORM cal_obj_data_bin_size USING lt_object_data_bin CHANGING lv_unzipped_size.
  WRITE: / 'uncompressed size: (byte): ' , lv_unzipped_size.

ENDFORM.

FORM cal_obj_data_bin_size USING it_obj_data TYPE cwbci_t_objdelta CHANGING iv_total_size TYPE i.
  DATA(lo_tab_type) = CAST cl_abap_tabledescr( cl_abap_typedescr=>describe_by_name( 'CWBCI_T_OBJDELTA' ) ).

  DATA(lo_line_type) = CAST cl_abap_structdescr( lo_tab_type->get_table_line_type( ) ).
  lt_comp = lo_line_type->components.
  LOOP AT it_obj_data ASSIGNING FIELD-SYMBOL(<obj_data_bin>).
    PERFORM calculate_line_size USING <obj_data_bin> CHANGING iv_total_size.
  ENDLOOP.
ENDFORM.

FORM calculate_line_size USING is_line_data TYPE cwbciobjdelta CHANGING iv_total_size TYPE i.
  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE is_line_data TO FIELD-SYMBOL(<data>).
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.

    READ TABLE lt_comp ASSIGNING FIELD-SYMBOL(<line_type>) INDEX sy-index.
    CASE <line_type>-type_kind.

      WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_num.
        iv_total_size = iv_total_size + strlen( <data> ) * 2.
      WHEN cl_abap_typedescr=>typekind_xstring.
        iv_total_size = iv_total_size + xstrlen( <data> ).
      WHEN OTHERS.
        ASSERT 1 = 0.
    ENDCASE.

  ENDDO.
ENDFORM.

什么是 SAP note?

在详细讲解 SAP ABAP 系统的 note 之前,我们需要明确一点:在 SAP 生态系统中,note 是一种特殊且重要的文档资源,为 SAP 用户和开发者提供了一个关键的信息来源,尤其是在处理系统错误、进行性能优化、更新系统补丁或者是遵循最佳实践方面。SAP Note 通常由 SAP 的服务支持团队发布,旨在解决特定问题或提供详细的技术指导。

SAP Notes 可以是关于错误修正的说明、新功能的引入、法律更改的适应、系统优化的建议或是安全性相关的更新。每一条 Note 都被赋予了一个唯一的编号,用户可以通过 SAP Note 管理器或是 SAP 支持门户网站进行访问。

为了更好地理解 SAP Note 的作用和重要性,我们可以分析几个实际的应用场景:

例子 1:系统错误修正

假设一个企业在使用 SAP ERP 系统的过程中遇到了一个程序错误,这个错误导致了财务报表无法正确生成。在这种情况下,SAP 的开发支持团队可能会发布一个 Note,其中包含了针对这个特定错误的详细诊断信息、产生原因以及如何通过修正 ABAP 代码或调整配置来解决这个问题的指导。Note 中可能会提供一段修正代码(即所谓的修正指令或 patch),ABAP 开发者可以直接将这段代码应用于他们的系统中,以修复该错误。

例子 2:性能优化

在另一个场景中,可能有用户反映,某个特定的 SAP 应用运行效率低下。针对这类问题,SAP 可能会发布一个专门的 Note,详细描述了如何通过调整 ABAP 程序或数据库查询等方式来提升系统性能。这个 Note 中可能包含了一系列的性能检测结果和优化后的效果对比,以及具体的代码更改建议,帮助开发者理解和实施这些优化措施。

例子 3:法律法规更新

由于法律和行业标准的不断变化,SAP 系统需要定期更新以确保合规。例如,如果一个国家的税法发生了变化,这可能影响到 SAP 系统中财务和会计模块的处理逻辑。SAP 会发布相应的 Note 来描述这一变更对 SAP 系统的影响,提供必要的系统调整指导或代码更改,确保企业能够及时准确地遵守新的法律规定。

通过这些例子,我们可以看到 SAP Note 在维护和优化 SAP 系统中扮演了一个不可或缺的角色。对于 ABAP 开发者来说,熟悉如何查找、解读和应用这些 Note 是一个基本且重要的技能。正确利用 SAP Note 不仅可以帮助解决现有的问题,还能预防未来可能出现的问题,确保系统的稳定性和安全性。

需要注意的是,应用 Note 前应仔细阅读其中的所有说明,确保理解了所有的前提条件和可能的影响。在某些情况下,可能需要与 SAP 的支持团队合作,以确保复杂问题的正确解决。同时,定期访问 SAP 支持门户,关注相关领域的最新 Note,对于保持系统的最新状态和最佳性能同样重要。

综上所述,SAP ABAP 系统的 Note 是一个强大的工具,帮助开发者和用户确保他们的系统能够高效、安全地运行。了解如何有效地使用这些 Note,对于每一个 SAP 专业人员来说都是一项必备的技能。


注销
1k 声望1.6k 粉丝

invalid