SAP接口编程-RFC系列08 : 获取SAP DDIC的数据字段

获取DDIC的数据字段

如果想获取数据表的字段,使用RFC_READ_TABLE,设置NO_DATA为"X"。也可以使用SAPFunctions.CreateStructure()方法。这个方法更具通用性,能够从DDIC的数据类型中获取相关信息。
以下是示例代码。注意返回的结构是一个复合型结构,每一列包含了诸如列名,数据类型,数据长度,小数位等信息。所以为了直观和调试,使用数组解析和输出。
logon()和logoff()的代码请参考以前博文。

Option Explicit

Public Sub TestGetTableStructure()
    Call Logon
    Call GetTableStructure("SKA1")
    Call logoff
End Sub

Private Sub GetTableStructure(tableName As String)
    If sapConnection Is Nothing Or sapConnection.IsConnected <> tloRfcConnected Then
        Debug.Print "Please connect."
        Exit Sub
    End If
    
    Dim functions As New SAPFunctionsOCX.SAPFunctions
    Set functions.Connection = sapConnection

    Dim ddicFields As SAPFunctionsOCX.Structure ' data dictionary fields
    Set ddicFields = functions.CreateStructure(tableName) ' get fields from tableName
        
    Dim arr() As Variant
    arr = StructToArray(ddicFields)
    
    ' Print structure
    Dim row As Integer
    Dim col As Integer
    For row = 1 To UBound(arr, 1)
        For col = 1 To UBound(arr, 2)
            Debug.Print arr(row, col),
        Next
        Debug.Print  ' new line
    Next
End Sub


Private Function StructToArray(struct As SAPFunctionsOCX.Structure) As Variant
    Dim arr() As Variant
    Dim cols As Integer
    cols = struct.ColumnCount
    ReDim arr(1 To cols, 1 To 3) As Variant ' rowcount is cols ,column count is 3
    
    ' 可以把strcut理解为一个复合结构,每一个元素包括多项内容
    ' 使用二维的array还原成行列格式
    Dim i As Integer
    For i = 1 To struct.ColumnCount
        arr(i, 1) = struct.ColumnName(i)         '第一列为列名
        arr(i, 2) = Str(struct.ColumnSAPType(i)) ' 第二列为类型
        arr(i, 3) = struct.ColumnLength(i)       '第三列为长度
    Next
    
    StructToArray = arr
End Function
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值