SAP 介面程式設計之 RFC系列(14) : C# 版獲取 DDIC 的資料欄位
使用 SAPFunctions.CreateStructure()
方法獲取 DDIC (SAP data dictionary) 的欄位資訊。
本篇主要演示 C# 呼叫的語法,VBA 版有相關知識點介紹,請參考之前的博文。
首先定義一個儲存 DDIC 資訊的結構:
public struct DDICInfo
{
public String ColumnName;
public String ColumnType;
public int ColumnLength;
}
另外,CreateStructure()
返回的是 SAPFunctionsOCX.Structure
型別,因為 Structure
是一個 COM 型別結構,所以轉換成List<DDICInfo>
方便後續處理。
private List<DDICInfo> Convert(SAPFunctionsOCX.Structure sapFunStruct)
{
var ddicFields = new List<DDICInfo>();
var ddicItem = new DDICInfo();
for (int i = 1; i <= sapFunStruct.ColumnCount; i++) {
ddicItem.ColumnName = sapFunStruct.get_ColumnName((short) i);
ddicItem.ColumnType = sapFunStruct.get_ColumnSAPType(i).ToString();
ddicItem.ColumnLength = sapFunStruct.get_ColumnLength(i);
ddicFields.Add(ddicItem);
}
return ddicFields;
}
完整程式碼:
using System;
using System.Collections.Generic;
using SAPLogonCtrl;
using SAPFunctionsOCX;
using ConnectionProvider;
namespace SAPRfcCall
{
public struct DDICInfo
{
public String ColumnName;
public String ColumnType;
public int ColumnLength;
}
public class DDICStructure
{
private Connection connection;
public List<DDICInfo> GetDDICDemo()
{
var ddicFields = new List<DDICInfo>();
bool isSuccessful = SAPConnection.SilentLogon(
"192.168.65.100", "D01", 00, "001", "STONE", "sappwd", "ZH");
if (isSuccessful) {
connection = SAPConnection.Connection;
ddicFields = GetFieldsFrom("SKB1");
SAPConnection.Logoff();
}
return ddicFields;
}
// get table structure
public List<DDICInfo> GetFieldsFrom(String tableName)
{
var ddicFields = new List<DDICInfo>();
if (connection == null
|| connection.IsConnected != CRfcConnectionStatus.tloRfcConnected) {
return null;
}
SAPFunctions functions = new SAPFunctions();
functions.Connection = connection;
SAPFunctionsOCX.Structure ddic = functions.CreateStructure(tableName);
ddicFields = this.Convert(ddic);
return ddicFields;
}
private List<DDICInfo> Convert(SAPFunctionsOCX.Structure sapFunStruct)
{
var ddicFields = new List<DDICInfo>();
var ddicItem = new DDICInfo();
for (int i = 1; i <= sapFunStruct.ColumnCount; i++) {
ddicItem.ColumnName = sapFunStruct.get_ColumnName((short)i);
ddicItem.ColumnType = sapFunStruct.get_ColumnSAPType(i).ToString();
ddicItem.ColumnLength = sapFunStruct.get_ColumnLength(i);
ddicFields.Add(ddicItem);
}
return ddicFields;
}
}
}
單元測試:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SAPRfcCall;
using System.Collections.Generic;
namespace UnitTestProject
{
[TestClass]
public class TestGetDDIC
{
[TestMethod]
public void Test_GetDDIC()
{
DDICStructure ddic = new DDICStructure();
List<DDICInfo> fields = ddic.GetDDICDemo();
foreach (DDICInfo item in fields) {
Console.WriteLine(String.Format("{0}\t{1}\t{2}",
item.ColumnName ,
item.ColumnType,
item.ColumnLength));
}
}
}
}
相關文章
- 資料庫設計之欄位冗餘資料庫
- SAP ABAP DDIC 結構欄位的一些技術限制條件
- ASP獲取資料庫表名,欄位名以及對欄位的一些操作 (轉)資料庫
- python獲取、修改mysql資料庫欄位屬性PythonMySql資料庫
- SAP MM 物料主資料利潤中心欄位之修改
- 資料庫設計——冗餘欄位資料庫
- 全面剖析C#介面程式設計之定義介面C#程式設計
- SAP定價的合計欄位的程式碼照抄
- 利用Visual Basic開發SAP介面程式初探-RFC
- 獲取sql server資料庫中所有庫、表、欄位名的方法SQLServer資料庫
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- pydantic 欄位的預設值設定獲取當前時間
- ODI基於源表時間戳欄位獲取增量資料時間戳
- 獲取天氣介面資料
- SAP主資料的欄位長度(ECC6.0)
- 獲取表的結構、欄位描述等
- ms sql 獲取表欄位的屬性SQL
- 位運算-設計資料庫表的多選狀態欄位資料庫
- SAP CRM和Cloud for Customer的擴充套件欄位後設資料Cloud套件
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- lambda方法引用獲取欄位屬性
- java動態獲取實體類的欄位Java
- MYSQL資料庫欄位命名及設計規範MySql資料庫
- SAP 電商雲登入介面如何增添新的欄位
- 資料庫系列:高併發下的資料欄位變更資料庫
- 智慧手環圍欄資料API獲取API
- SAP MM 物料主資料'Industry Sector'欄位不可修改
- 獲取SQL資料庫中某個表中的所有欄位名稱的通用方法SQL資料庫
- SAP MM 物料主資料裡的‘Packaging Material Type'欄位
- 備忘錄:C#獲取微信小程式的雲資料庫中資料C#微信小程式資料庫
- 資料處理之欄位合併
- mysql資料表插入資料後,獲取自增欄位值的方法MySql
- 獲取評論相關的欄位值一段php程式碼PHP
- 教你如何使用API介面獲取資料!API
- C# 資料操作系列 - 14 深入探索SqlSugarC#SqlSugar
- 如何獲取java類中的欄位修飾符?Java
- 好程式設計師大資料教程Scala系列之類程式設計師大資料
- sql2005 獲取表欄位資訊和檢視欄位資訊SQL