abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上

版本查看路径如下:

 

安装步骤如下:

1. 下载abapgit 独立版本 程序

链接如下:raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap

2.安装开发版本

2.1 在线安装

    前置条件是你首先下载了GitHub 的证书,并且已经上传完成,步骤如下:

   注意:为预防不必要的安全问题发生,要求SAP下载中心的加密图书馆版本尽可能的等级更高

  查看方法如下:STRUST> Environment > Display SSF Version:

   

    ①.下载github的证书

     浏览器中输入 GitHub: Let’s build from here · GitHub

    

     按照顺序依次导出三个证书

     

② STRUST 安装证书

 

都导入成功会会出现中间证书列表。 最后点击保存 

③ SMICM 重启ICM

④ 测试 SSL证书是否安装完成

*&---------------------------------------------------------------------*
*& Report  ZABAPGIT_TEST_SSL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zabapgit_test_ssl.

* See https://docs.abapgit.org

********************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2014 abapGit Contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
********************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK sc_header WITH FRAME TITLE sc_titl1.
  SELECTION-SCREEN SKIP.
  SELECTION-SCREEN COMMENT 1(77) sc_txt1.
  SELECTION-SCREEN SKIP.
  SELECTION-SCREEN COMMENT /1(77) sc_txt2.
  SELECTION-SCREEN COMMENT /1(77) sc_txt3.
  SELECTION-SCREEN COMMENT /1(77) sc_txt4.
SELECTION-SCREEN END OF BLOCK sc_header.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK sc_serv WITH FRAME TITLE sc_titl2.
  PARAMETERS:
    p_url1 TYPE string LOWER CASE DEFAULT 'https://github.com' OBLIGATORY,
    p_url2 TYPE string LOWER CASE DEFAULT 'https://api.github.com',
    p_id   TYPE strustssl-applic DEFAULT 'ANONYM' OBLIGATORY.
* api.github.com is used when pushing code back to github
SELECTION-SCREEN END OF BLOCK sc_serv.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN BEGIN OF BLOCK sc_proxy WITH FRAME TITLE sc_titl3.
* proxy settings, fill if your system is behind a proxy
  PARAMETERS:
    p_proxy TYPE string LOWER CASE,
    p_pport TYPE string LOWER CASE,
    p_puser TYPE string LOWER CASE,
    p_ppwd  TYPE string LOWER CASE.
SELECTION-SCREEN END OF BLOCK sc_proxy.

CLASS lcl_report DEFINITION.

  PUBLIC SECTION.

    METHODS run
      IMPORTING
        iv_url TYPE string.

    METHODS display_response.

    METHODS f4_url
      RETURNING
        VALUE(rv_url) TYPE string.

  PRIVATE SECTION.

    TYPES:
      BEGIN OF ty_server,
        server TYPE w3server,
        url    TYPE w3url,
      END OF ty_server,
      ty_servers TYPE STANDARD TABLE OF ty_server WITH KEY server.

    TYPES:
      BEGIN OF ty_link,
        line     TYPE i,
        response TYPE string,
      END OF ty_link,
      ty_links TYPE STANDARD TABLE OF ty_link WITH NON-UNIQUE KEY line.

    DATA mt_links TYPE ty_links.

    METHODS display_error
      IMPORTING
        iv_text TYPE string.

    METHODS display_messages
      IMPORTING
        iv_response TYPE string.

    METHODS add_response_link
      IMPORTING
        iv_response TYPE string.

    METHODS get_servers
      RETURNING
        VALUE(rt_servers) TYPE ty_servers.

ENDCLASS.

CLASS lcl_report IMPLEMENTATION.

  METHOD run.

    DATA:
      lv_code          TYPE i,
      lv_url           TYPE string,
      li_http_client   TYPE REF TO if_http_client,
      lv_error_message TYPE string,
      lv_reason        TYPE string,
      lv_response      TYPE string.

    IF iv_url IS INITIAL.
      RETURN.
    ENDIF.

    cl_http_client=>create_by_url(
      EXPORTING
        url                 = iv_url
        ssl_id              = p_id
        proxy_host          = p_proxy
        proxy_service       = p_pport
      IMPORTING
        client              = li_http_client
      EXCEPTIONS
        argument_not_found  = 1
        plugin_not_active   = 2
        internal_error      = 3
        OTHERS              = 4 ).

    IF sy-subrc <> 0.
      display_error( 'HTTP Client Create' ).
      RETURN.
    ENDIF.

    IF p_puser IS NOT INITIAL.
      li_http_client->authenticate(
        proxy_authentication = abap_true
        username             = p_puser
        password             = p_ppwd ).
    ENDIF.

    li_http_client->send( ).

    li_http_client->receive(
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        OTHERS                     = 4 ).

    IF sy-subrc <> 0.
      display_error( 'HTTP Client Receive' ).

      li_http_client->get_last_error(
        IMPORTING
          message = lv_response ).

      display_messages( lv_response ).

      WRITE / 'Also check transaction SMICM -> Goto -> Trace File -> Display End'.
      RETURN.
    ENDIF.

* if SSL Handshake fails, make sure to also check https://launchpad.support.sap.com/#/notes/510007

    li_http_client->response->get_status(
      IMPORTING
        code   = lv_code
        reason = lv_reason ).
    IF lv_code = 200.
      WRITE: / iv_url, ': ok'.
    ELSE.
      WRITE: / iv_url, ': Error', lv_code, space, lv_reason.

      lv_response = li_http_client->response->get_cdata( ).

      IF lv_response IS NOT INITIAL.
        add_response_link( lv_response ).
      ENDIF.

      REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN lv_response WITH ``.

      display_messages( lv_response ).
    ENDIF.

  ENDMETHOD.

  METHOD display_error.

    WRITE: / iv_text, '- Error Number:', sy-subrc, /.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      DISPLAY LIKE 'I'
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDMETHOD.

  METHOD display_messages.

    DATA:
      lt_lines TYPE TABLE OF string,
      lv_line  TYPE string.

    SPLIT iv_response AT cl_abap_char_utilities=>newline INTO TABLE lt_lines.

    LOOP AT lt_lines INTO lv_line.
      WRITE / lv_line.
    ENDLOOP.
    SKIP.

  ENDMETHOD.

  METHOD add_response_link.

    DATA lv_link TYPE ty_link.

    WRITE / 'Display Error Response as HTML' COLOR = 6 HOTSPOT.

    lv_link-line     = sy-linno.
    lv_link-response = iv_response.
    APPEND lv_link TO mt_links.

  ENDMETHOD.

  METHOD display_response.

    DATA lv_link TYPE ty_link.

    READ TABLE mt_links INTO lv_link WITH TABLE KEY line = sy-curow.
    IF sy-subrc = 0.
      cl_abap_browser=>show_html(
        html_string = lv_link-response
        check_html  = abap_false ).
    ENDIF.

  ENDMETHOD.

  METHOD get_servers.

    DATA ls_server TYPE ty_server.

    ls_server-server = 'GitHub (Read Access)'.
    ls_server-url    = 'https://github.com'.
    INSERT ls_server INTO TABLE rt_servers.
    ls_server-server = 'GitHub (Write Access)'.
    ls_server-url    = 'https://api.github.com'.
    INSERT ls_server INTO TABLE rt_servers.
    ls_server-server = 'GitLab'.
    ls_server-url    = 'https://gitlab.com/test'.
    INSERT ls_server INTO TABLE rt_servers.
    ls_server-server = 'Azure DevOps'.
    ls_server-url    = 'https://dev.azure.com/<org>'.
    INSERT ls_server INTO TABLE rt_servers.
    ls_server-server = 'Bitbucket'.
    ls_server-url    = 'https://bitbucket.org'.
    INSERT ls_server INTO TABLE rt_servers.
    ls_server-server = 'Assembla'.
    ls_server-url    = 'https://git.assembla.com/<org>'.
    INSERT ls_server INTO TABLE rt_servers.

    SORT rt_servers.

  ENDMETHOD.

  METHOD f4_url.

    DATA:
      ls_server  TYPE ty_server,
      lt_servers TYPE TABLE OF ty_server,
      ls_return  TYPE ddshretval,
      lt_return  TYPE TABLE OF ddshretval.

    lt_servers = get_servers( ).

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'SERVER'
        window_title    = 'Git Server Selection'
        value_org       = 'S'
      TABLES
        value_tab       = lt_servers
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc <> 0.
      display_error( 'Server Value Help' ).
      RETURN.
    ENDIF.

    READ TABLE lt_return INTO ls_return INDEX 1.
    IF sy-subrc = 0.
      READ TABLE lt_servers INTO ls_server WITH KEY server = ls_return-fieldval.
      IF sy-subrc = 0.
        rv_url = ls_server-url.
      ENDIF.
    ENDIF.

  ENDMETHOD.

ENDCLASS.

DATA go_report TYPE REF TO lcl_report.

INITIALIZATION.
  sc_titl1               = 'Description'.
  sc_txt1                = 'This report tests the connection from this system to a Git server'.
  sc_txt2                = 'Select or enter the URL of the Git server and run the report. You can'.
  sc_txt3                = 'test two URLs at the same time, for example, if read and write'.
  sc_txt4                = 'access require different servers.'.
  sc_titl2               = 'Git Server'.
  %_p_url1_%_app_%-text  = 'URL (Read Access)'.
  %_p_url2_%_app_%-text  = 'URL (Write Access)'.
  %_p_id_%_app_%-text    = 'SSL Client Identity'.
  sc_titl3               = 'Proxy Settings (Optional)'.
  %_p_proxy_%_app_%-text = 'Hostname/IP'.
  %_p_pport_%_app_%-text = 'Port'.
  %_p_puser_%_app_%-text = 'Username'.
  %_p_ppwd_%_app_%-text  = 'Password'.

  CREATE OBJECT go_report.

AT SELECTION-SCREEN.
  p_proxy = replace(
    val   = p_proxy
    regex = 'http(s?)://'
    with  = ''
    occ   = 1 ).

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_PPWD'.
      screen-invisible = 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_url1.
  p_url1 = go_report->f4_url( ).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_url2.
  p_url2 = go_report->f4_url( ).

START-OF-SELECTION.
  go_report->run( p_url1 ).
  WRITE: /, '----', /.
  go_report->run( p_url2 ).

AT LINE-SELECTION.
  go_report->display_response( ).

至此 SSL证书安装算是完成了,我们开始在线安装开发版本的abapgit

    (1) 执行ZABAPGIT_STANDALONE 程序然后点击 new online

(2)   输入URL:  https://github.com/abapGit/abapGit/

  输入包名:$ABAPGIT

      如果包不存在,那么就先创建包。再创建连接,最后点击PULL

 2.2 离线安装

然后点击IMPORT ,点击PULL 即可

以上安装完成之后,那么就可以直接执行你的事务代码ZABAPGIT

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值