热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SAP接口编程RFC系列07:通用的数据库表读取

实现通用的数据库表读取功能上一篇讲的是调用RFC_READ_TABLE查看SAPtable的数据。为了方便查看数据,我们可以写一个通用的表查看程序。使用起来比SAP
实现通用的数据库表读取功能

上一篇讲的是调用 RFC_READ_TABLE 查看 SAP table 的数据。为了方便查看数据,我们可以写一个通用的表查看程序。使用起来比 SAP SE11 或 SE16N 方便点。

本篇没有关于 RFC 调用新的知识点。主要说明函数调用后,VBA 如何处理这些数据并在 Excel 中显示。不熟悉 VBA 的读者可以参考。由于 VBA 本身数据结构的限制,处理过程还是蛮啰嗦的。后续用C#调用的代码会方便很多。

不多说,上代码:

Option ExplicitPublic Sub test()Call LogonCall ReadTable("T030", Sheet1)Call Logoff
End Sub''''''''''''''''''''''''''''''''''''''''''''''
'读取tableName的数据,写入inSheet这个工作表
''''''''''''''''''''''''''''''''''''''''''''''
Private Sub ReadTable(tableName As String, inSheet As Worksheet)Dim functions As SAPFunctionsSet functions &#61; New SAPFunctionsDim fm As SAPFunctionsOCX.Function&#39; RFC_READ_TABLE的三个table型参数Dim optionsTable As SAPTableFactoryCtrl.TableDim dataTable As SAPTableFactoryCtrl.TableDim fieldsTable As SAPTableFactoryCtrl.TableDim delimeter As Stringdelimeter &#61; "~" &#39;长度只能为1If sapConnection Is Nothing Then Exit SubSet functions.Connection &#61; sapConnectionIf sapConnection.IsConnected &#61; tloRfcConnected Then&#39;FM加到functions collectionSet fm &#61; functions.Add("RFC_READ_TABLE")&#39;------------------------&#39;填充Import parameters&#39;------------------------&#39;QUERY_TABLE是要查找的表名fm.Exports("QUERY_TABLE").Value &#61; tableName &#39;Table name&#39;DELIMITER是输出时字段的分割符fm.Exports("DELIMITER").Value &#61; delimeterSet optionsTable &#61; fm.Tables("OPTIONS") &#39;OPTIONS是筛选条件Set fieldsTable &#61; fm.Tables("FIELDS") &#39;FIELDS表示要输出的列Set dataTable &#61; fm.Tables("DATA") &#39;DATA为输出的数据fm.Call&#39;如果有Exception,说明有错误产生If fm.Exception <> "" ThenDebug.Print fm.ExceptionExit SubEnd If&#39; 存储fields信息的数组Dim fields() As Variantfields &#61; ItabToArray(fieldsTable)&#39; 存储data信息的数组Dim data() As Variantdata &#61; ItabToArray(dataTable)&#39; 将data分割Dim splittedData() As VariantsplittedData &#61; splitData(data, delimeter)&#39; 为了Excel显示需要&#xff0c;将数据加上"&#39;", Excel显示为字符型Dim r As LongDim c As LongFor r &#61; 1 To UBound(splittedData, 1)For c &#61; 1 To UBound(splittedData, 2)splittedData(r, c) &#61; "&#39;" &#43; splittedData(r, c)NextNext&#39; 将field name, field text和data整合到一个工作表显示Call WriteData(fields, splittedData, Sheet1)End If
End Sub&#39; 将itab转换成数组
Private Function ItabToArray(itab As SAPTableFactoryCtrl.Table) As VariantDim arr() As Variantarr &#61; itab.dataItabToArray &#61; arr
End FunctionPrivate Function splitData(data() As Variant, delimeter As String) As VariantDim dataSplitted() As Variant &#39;返回值Dim rowcount As Longrowcount &#61; UBound(data, 1)&#39; 列数需要计算Dim testcol As Varianttestcol &#61; Split(data(1, 1), delimeter) &#39;根据第一个数据来确定列数Dim colcount As Longcolcount &#61; UBound(testcol) &#43; 1ReDim dataSplitted(1 To rowcount, 1 To colcount)Dim line As VariantDim r As LongDim c As LongFor r &#61; 1 To rowcountline &#61; Split(data(r, 1), delimeter) &#39; line 从0开始For c &#61; 1 To colcountdataSplitted(r, c) &#61; line(c - 1)NextNextsplitData &#61; dataSplitted
End FunctionPrivate Sub WriteData(fields() As Variant, data() As Variant, inSheet As Worksheet)&#39; Clear firstinSheet.Cells.ClearContentsDim fieldname() As VariantDim fieldtext() As VariantDim rowcount As Integerrowcount &#61; UBound(fields, 1)ReDim fieldname(1 To rowcount)ReDim fieldtext(1 To rowcount)Dim r As IntegerFor r &#61; 1 To UBound(fields, 1)fieldname(r) &#61; fields(r, 1) &#39; 第一列为fieldnamefieldtext(r) &#61; fields(r, 5) &#39; 第五列为fieldtextNext&#39; fieldname和fieldtext写入工作表&#39; 第一行fieldnameDim fieldNameRange As RangeSet fieldNameRange &#61; inSheet.Range("A1")fieldNameRange.Resize(1, UBound(fieldname)).Value &#61; fieldname&#39; 第二行fieldtextDim fieldTextRange As RangeSet fieldTextRange &#61; inSheet.Range("A2")fieldTextRange.Resize(1, UBound(fieldname)).Value &#61; fieldtext&#39; 从第三行开始&#xff0c;将splitted data写入工作表Dim dataRange As RangeSet dataRange &#61; inSheet.Range("A3")dataRange.Resize(UBound(data, 1), UBound(data, 2)).Value &#61; data
End Sub


推荐阅读
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
author-avatar
手机用户2502892543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有