No07.使用API獲取SAP S/4 HANA Cloud中的憑證行專案(二)

藝多不養身發表於2021-01-03


上述介面測試完成以後,在整個系統整合上具備了技術的可行性,因為日常工作用的比較多的就是Excel,在此處我們用VBA展示一下呼叫ODATA API的部分程式碼。

一 設定滿足需求的URL字串

,例如我們要查詢2020-12-01到2020-12-31日會計科目為6001010000、6001020000、6001030000、6002010000、6002020000、6002030000的程式碼為1310公司,程式碼為1310F1001工廠的所有資料。因為欄位比較多,我們只顯示其中的部分欄位。
下面展示一些 內聯程式碼片

https://myXXXX.saps4hanacloud.cn/sap/opu/odata/sap/API_GLACCOUNTLINEITEM/GLAccountLineItem/?$filter= (GLAccount eq '6001010000' or GLAccount eq '6001020000'  or GLAccount eq '6001030000'or GLAccount eq '6051010000' or GLAccount eq '6051020000' or GLAccount eq '6051030000')   and Ledger eq '0L'   and PostingDate ge datetime'2020-12-01T00:00:00' and PostingDate le datetime'2020-12-31T00:00:00' and ProfitCenter eq '1310F001' and CompanyCode eq '1310' &$orderby=PostingDate&$select=CompanyCode,GLAccount,ReferenceDocument,AccountingDocument,AccountingDocumentType,PostingDate,PostingKey,AmountInCompanyCodeCurrency,TaxCode,ClearingAccountingDocument,ProfitCenter,Segment,DocumentItemText,AccountingDocumentItem,OffsettingAccount,Product,AssignmentReference,SoldProductGroup,Customer

把上述URL複製到Postman中進行測試,測試通過成功,證明我們拼接的URL地址是正確的!注意其中過濾條件的寫法。
在這裡插入圖片描述

&$filter=後面顯示的是過濾條件,例如日期欄位描述採用 PostingDate ge datetime‘2020-12-01T00:00:00’
指的是建立日期大於2020-12-01日. PostingDate le datetime‘2020-12-31T00:00:00’指的是建立日期小於2020-12-01日.

&$select=後面顯示的是需要列示的欄位,因為欄位比較多,只選擇需要的。

二 VBA中建立http請求

在這裡插入圖片描述
在這裡插入圖片描述
看程式碼

下面展示一些 內聯程式碼片


    Dim req As WinHttp.WinHttpRequest
    Set req = CreateObject("WinHttp.WinHttpRequest.5.1")
    req.SetTimeouts 60000, 60000, 60000, 60000
    
    req.Open "GET", url, False

    req.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.SetRequestHeader "Username", "ODATAUSER"
    req.SetRequestHeader "Password", "XXXXXXXXXX"
    req.SetRequestHeader "Authorization", "Basic T0RBXXXXXXXXXXXXXXXXXXX="
    req.SetRequestHeader "Accept", "application/json"
    
    req.Send
    getDataOfficial = req.ResponseText

三 使用正規表示式處理返回結果

  '定義正規表示式,並清除其中的無用字元
    Dim regexp As New regexp
    Dim brr
    
    With regexp
        .Global = True
        str1 = Trim(strJSON)
        pt = """" & "([\s\S]+?)" & """" & ":" & """" & "([\s\S]*?)" & """"
        .Pattern = pt
        Set Match = .Execute(str1)
    End With

四 小結

在接下來就是針對每條資料進行處理,包括欄位的列表顯示、修改顯示的格式、把UNIX時間戳格式轉為字元時間等。在此處就不再展示。
總之,利用Excel表中的VBA開發對接的介面,對於資料量不大的報表或業務單據的開發,開發速度和優勢是明顯的。

相關文章