源代码:
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 专业人员来说都是一项必备的技能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。