反饋已提交

網絡繁忙

當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

D08-02 10.0SAP資料集

一、概述

  1. 使用者SAP系統整合時,只能通過程式資料集或者是 ETL 工具進行取數,實現起來非常麻煩。

  2. 安裝該插件後,在FineReport8.0 及後續版本中,可在伺服器資料連線處新增資料連線型別 SAP 資料連線,在資料集中新增 SAP 資料集型別。

  3. 與 SAP 系統進行連線,需要匯入 SAP  API包和本地庫,並確保執行的 JVM 能夠找到API包和本地庫。

  4. 插件安裝方式,可參考A11-18伺服器-插件管理

二、環境準備

1
Windows系統伺服器。
  1. 如果資料連線失敗,可以嘗試將 sapjco3.dll 檔案放置在系統 jre 的 bin 目錄下,例如:%JAVA_HOME%\jre\bin。

  2. Windows Server 2003 和 Windows XP 的系統在連線 SAP 時,需要下載安裝 Microsoft Visual C++ 2005 SP1。

JDK位數
JDK版本檔案包SAP檔案匯入位置

32

JDK1.8 且小版本需在JDK 8u102 以上

sapjco3_windows_32bit.rar


sapjco3.jar 放在%TOMCAT_HOME%\lib路徑

sapjco3.dll 放在C:\Windows\System32路徑

64

JDK 1.8 且小版本需在 JDK8u102 以上

sapjco3_windows_64bit.rar

2
Mac OS系統伺服器。
  1. 將驅動檔案解壓後放置在…/FineReport/lib下。

  2. 開啟設計器 bin 目錄,右擊designer,選擇顯示包內容,開啟 vmoptions.txt 檔案,在檔案中寫入:-Djava.library.path=/Applications/FineReport10.0/lib(所放置的檔案路徑)。

22.png

libsapjco3.zip

3
Linux系統伺服器。
JDK位數
檔案包SAP檔案匯入位置

32位

sapjco3_linux_32bit.rar


sapjco3.jar 放在%TOMCAT_HOME%\lib路徑下

libsapjco3.so 放在%JAVA_HOME%\jre\bin路徑下

libsapjco3.so 放在usr\lib資料夾下,若 Linux 為 64 位,放到usr\lib64路徑下

64位

sapjco3_linux_64bit.rar


sapjco3.jar 放在%TOMCAT_HOME%\lib路徑下

libsapjco3.so 放在%JAVA_HOME%\jre\bin路徑下

libsapjco3.so 放在usr\lib64路徑下

4
本地設計器。
  1. 根據安裝的設計器位數,下載 Windows 系統下對應位數的 JDK1.6 版本的 SAP 檔案包。

設計器位數
檔案包SAP檔案匯入位置

32位

sapjco3_windows_32bit (1).rar


sapjco3.jar 放在%FR_HOME%\lib路徑

sapjco3.dll 放在%FR_HOME%\jre\bin路徑

64位

sapjco3_windows_64bit (1).rar


sapjco3.jar 放在%FR_HOME%\lib路徑

sapjco3.dll 放在%FR_HOME%\jre\bin路徑

三、屬性設定-新增資料集

1
新增SAP資料連結。
  1. 點選【伺服器】→【定義資料連結】→【+】,選擇【SAP】。

  2. 輸入資料庫連結資訊,點選【測試連結】,連結成功後點擊確定即可。

31.gif

2
連結資訊說明。
  1. 【主機名】區域網中已配置的 SAP 的主機名稱,也可以寫此機器的 IP 地址,不是資料庫伺服器的主機名。

  2. 【SAP系統名】SAP 系統中設定的屬性,用於互動的埠號,一般來說是 00。

  3. 【客戶端】SAP 系統管理的業務和資料的最大有效集合,也是 SAP 系統的一個屬性。

  4. 【使用者】連線 SAP 時使用的賬號的使用者名稱,不是資料庫使用者名稱。

  5. 【密碼】連線 SAP 時使用的賬號的密碼,不是資料庫密碼。

  6. 【連結池屬性】SAP 系統中的容量和最大連結數。

32.png

3
新增SAP資料集。
  1. 在範本資料集設定處,點選【+】按鈕,選擇【SAP資料集】,進入SAP資料集配置介面。

  2. 資料集名稱可自訂修改。

  3. SAP取數有三種方式:自訂、簡單通用查詢和通用查詢。

  4. 【自訂】取數就是直接呼叫 ABAP Function 獲取資料。

  5. 【簡單通用查詢】取數是通過 open SQL 語句,從某張表中讀取出某些欄,並列出資料需要滿足的一些條件。

  6. 【通用查詢】取數較之簡單通用查詢,增加了表間關聯的能力,支援多表查詢。

  7. 點選【331.png】按鈕,可預覽資料集。

33.gif

四、屬性設定-自訂取數

1
函式選擇。
  1. 【Function】下拉框選擇【自訂】,點選後面的【設定】按鈕,進入函式獲取介面。

  2. 輸入需要獲取的函式名稱的一部分,點選搜尋,進行模糊查詢。

  3. 選定函式後,點選【確定】按鈕。

41.gif

2
參數輸入。
  1. 輸入是指參數輸入,即所選函式的參數輸入列表。

  2. 【參數名稱】ABAP 函式中的參數名稱,不可更改,直接從ABAP函式中刷新出來的,可以刪除,選中某一個參數,點選刪除按鈕即可,如果想恢復該參數,點選重新整理按鈕。

  3. 【SAP 資料型別】ABAP 函式中參數的資料型別,不可更改,直接通過函式重新整理出來。

  4. 【傳回集】如果參數是一個結構體參數的一部分,傳回集顯示這個結構體的名稱。

  5. 【資料型別】指該參數在 FR 報表中對應的參數資料型別。

  6. 【對應參數】指該參數在 FR 報表中對應的參數名稱,可手動編輯。

  7. 【參數預設值】指該參數在 FR 報表中參數的預設值,可手動編輯。

42.gif

3
結果輸出。
  1. 輸出就是所選函式的輸出結果集。

  2. 【SAP 欄名】ABAP 函式輸出結果集中的資料欄名稱,不可編輯,直接從 ABAP 函式中結果集中讀取出來,可以刪除,選中某欄,點選刪除即可,如果想恢復該欄,點選重新整理按鈕。

  3. 【SAP 資料型別】ABAP 函式輸出結果及中資料欄對應的 SAP 資料型別,不可編輯,直接通過函式結果集重新整理出來。

  4. 【資料型別】FR 報表中資料欄對應的資料型別。

43.gif

五、屬性設定-簡單通用查詢取數

1
選擇表和欄。
  1. 【Function】下拉框選擇【簡單通用查詢】,手動輸入表名稱。

  2. 點選【選擇欄】後的【設定】按鈕,彈出選擇欄介面,選擇需要輸出的欄。

  3. 點選【確定】,【選擇欄】後面的文字框中會列出所選擇的幾個欄。

51.gif

2
過濾條件。
  1. 【過濾條件】後的文字框中用 open SQL 語句編寫輸出資料需要滿足的條件。

  2. 點選後面的【格式說明】按鈕,可查看 open SQL 的基本格式。

  3. 如果條件的值是動態變化的,則可用參數來實現,參數以${para}的形式展現。

  4. 點選下方的521.png按鈕,可將參數重新整理展示,給參數設定一個預設值。

52.gif

六、屬性設定-通用查詢取數

1
新增ABAP Function。
  1. 將EXTRACT_TABLE_DATA函式新增到SAP系統中。

FUNCTION EXTRACT_TABLE_DATA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      FIELDS STRUCTURE  ZSQL_CLAUSE_ELEMENTS
*"      FROMCLAUSE STRUCTURE  ZSQL_CLAUSE_ELEMENTS
*"      WHERECLAUSE STRUCTURE  ZSQL_CLAUSE_ELEMENTS
*"      DATA STRUCTURE  ZTABLEROWS
*"----------------------------------------------------------------------

*"----------------------------------------------------------------------
*" Copy selected fields from QUERY_TABLE to DATA_STRUCTURE
*"----------------------------------------------------------------------
  TYPE-POOLS: abap.
  DATA:
        columnName TYPE SO_TEXT, 
        fieldDataDescrRef  TYPE REF TO abap_componentdescr, 
        numberFields TYPE i, 
        fieldDescr TYPE abap_componentdescr, 
        fieldname TYPE string, 
        fieldDescrTab TYPE abap_component_tab,
        rowStructDescr TYPE REF TO cl_abap_structdescr, 
        rowReference TYPE REF TO data, 
        returnRowString TYPE string, 
        dataFieldString TYPE string, 
        dataline LIKE data, 
        fromClauseRow TYPE ZALBUS_STRUCT_WHERECLAUSE,
        fromClauseString TYPE string,
        whereClauseRow TYPE ZALBUS_STRUCT_WHERECLAUSE,
        whereClauseString TYPE string,
        fieldsRow TYPE ZALBUS_STRUCT_WHERECLAUSE.
  FIELD-SYMBOLS:
          <datarow> TYPE ANY, 
          <datafield> TYPE ANY. 

* CREATE DataStructure with field names 
* Datatypes are read from fieldnames of FIELDS input table
  DESCRIBE TABLE FIELDS LINES numberFields.
  LOOP AT FIELDS INTO fieldsRow.
    fieldname = SY-TABIX.
* names need to be unique and must start with a char
    CONCATENATE 'string' fieldname INTO fieldname.
    CONDENSE fieldname.
    fieldDescr-name = fieldname.
* for dictionary lookup we need to change columnnames from Open SQL
* to dictionary notation
    columnName = fieldsRow-TEXT.
    REPLACE FIRST OCCURRENCE OF SUBSTRING '~' IN columnName WITH '-' RESPECTING CASE.

    fieldDescr-type ?= cl_abap_typedescr=>describe_by_name( columnName ).
    APPEND fieldDescr TO fieldDescrTab.
  ENDLOOP.

  rowStructDescr = cl_abap_structdescr=>create( fieldDescrTab ).

* now we create the actual data structure in memory
  create data rowReference type HANDLE rowStructDescr.
* finally we assign it to the Field-symbol used by the select statement
  ASSIGN rowReference->* TO <datarow>.
* End Create DataStructure

* to simplify calls we concatenate from and whereclause into strings
* this way caller doesn't need to check word wrappings
  fromClauseString = ''.
  LOOP AT FROMCLAUSE INTO fromClauseRow.
    CONCATENATE fromClauseString fromClauseRow-TEXT INTO fromClauseString.
  ENDLOOP.

  whereClauseString = ''.
  LOOP AT WHERECLAUSE INTO whereClauseRow.
    CONCATENATE whereClauseString whereClauseRow-TEXT INTO whereClauseString.
  ENDLOOP.

* Now start actual select operation
  SELECT (FIELDS) FROM (fromClauseString) INTO <datarow> WHERE (whereClauseString).
* we read all fields of the current row, cast it to string and
* concatenate it into a dataline with division chars.
    CLEAR: returnRowString.
    DO numberFields TIMES.
      ASSIGN component sy-index of structure <datarow> to <datafield>.
      dataFieldString = <datafield>.
      CONCATENATE returnRowString '^' datafieldstring INTO returnRowString.
    ENDDO.
    dataline = returnRowString.
* finally dataline is added to the return table.
    INSERT dataline INTO TABLE data.
  ENDSELECT.

ENDFUNCTION.
2
Select-欄設定。
  1. 【Function】下拉框選擇【通用查詢】。

  2. Select即選擇所需欄,使用open SQL ,格式為表~欄。

  3. 這邊設定為KNA1~NAME2,KNVV~KUNNR,KNA1~LAND1。

62.gif

3
From-表設定。
  1. From即將兩張表關聯起來,open SQL 語句中關聯表,用 inner join on 格式。

  2. 這邊設定為KNA1 INNER JOIN KNVV ON KNA1~KUNNR = KNVV~KUNNR。

63.gif

4
Where-條件設定。
  1. Where設定選擇條件,可使用參數。

  2. 這邊設定為KNA1~NAME2 <>'' AND KNA1~LAND1 = '${land}'。

64.gif

附件列表


主題: 插件應用
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉