Поскольку нам часто требуется доступ к данным операций SAP, мы инкапсулируем класс для упрощения вызова. Условия работы требуют установки клиента SAP. После установки клиента SAP этот интерфейс будет получать доступ к SAP через этот com. потому что более поздняя стадия com. Из-за проблемы с привязкой я использовал vb.net, чтобы разработать его и поделиться им со всеми.
Возможности: Прямое сопоставление входящих и исходящих внутренних таблиц SAP с DataTable dotNet для упрощения работы и предоставление функции преобразования из списка полей в DataTable.
'------------------------------------------------ - --------------
' Авторское право (C) 2009 г.
' все права защищены.
'
'Имя файла: SAP.vb
'Описание функции: инкапсулирует базовый доступ к SAP. Этот класс предоставляет только базовую информацию. Конкретный доступ к классам SAP RFC, унаследованным от этого класса.
'
«Создать логотип: www.cnblogs.com/81 , 1 декабря 2009 г.
'
«Измененный логотип: www.cnblogs.com/81 , 9 декабря 2009 г.
'Изменить описание: добавить закрытые операции для входящих внутренних таблиц, исходящих параметров и т. д.
'------------------------------------------------ - ----------------------
SAP публичного класса
Private m_sapObject As Object 'объект вызова удаленной функции SAP
Защищенный m_sapFun как функция SAP объекта
Частное m_sapConnection как объект «Подключение к SAP»
''' <сводка>
''' конструктор, передать основную информацию о SAP
''' </summary>
''' <param name="sapSystem">Система SAP, вы можете передать значение null</param>
''' <param name="ApplicationServer">IP-адрес сервера SAP</param>
''' <param name="Client">Номер группы, например 800</param>
''' <param name="SystemNumber">Номер системы, например 00</param>
''' <примечания></примечания>
Public Sub New (ByVal sapSystem как строка, ByVal ApplicationServer как строка, ByVal Client как строка, ByVal SystemNumber как строка)
Me.m_sapObject = CreateObject("SAP.Functions")
Me.m_sapConnection = Me.m_sapObject.Connection()
Если String.IsNullOrEmpty(sapSystem) = False Тогда
Me.m_sapConnection.System = SAPSystem
Конец, если
Me.m_sapConnection.ApplicationServer = Сервер приложений
Me.m_sapConnection.Client = Клиент
Me.m_sapConnection.SystemNumber = Системный номер
Конец субтитра
''' <сводка>
''' Войдите в SAP, верните True в случае успеха, верните False в случае неудачи
''' </summary>
''' <param name="User">Пользователь</param>
''' <param name="Password">Пароль</param>
''' <param name="Language">Язык, например ZH, EN и т. д., можно передать ноль</param>
''' <returns>Успешно ли выполнен вход</returns>
''' <примечания></примечания>
Открытая функция ConnectToSAP (пользователь ByVal как строка, пароль ByVal как строка, язык ByVal как строка) как логическое значение
Me.m_sapConnection.user = Пользователь
Me.m_sapConnection.Password = Пароль
Если String.IsNullOrEmpty(Language) = False Тогда
Me.m_sapConnection.Language = Язык
Еще
Me.m_sapConnection.Language = "RU"
Конец, если
Me.m_sapObject.AutoLogon = True 'Автоматический вход
Return Me.m_sapObject.Connection.logon(0, True) 'Успешно ли выполнен вход в систему
Конечная функция
''' <сводка>
''' Задайте имя вызываемой функции SAP
''' </summary>
''' <param name="sapFuncName">имя функции SAP</param>
''' <примечания></примечания>
Public Sub Установите имя удаленной функции SAP (ByVal sapFuncName As String)
Me.m_sapFun = Me.m_sapObject.Add(sapFuncName)
Если m_sapFun ничего, тогда
Выдать новое исключение («Имя удаленной функции SAP недопустимо: « + sapFuncName)
Конец, если
Конец субтитра
''' <сводка>
''' Установка параметров входящего вызова функции Sap
''' </summary>
''' <param name="paramName">Имя параметра</param>
''' <param name="paramValue">Значение параметра</param>
''' <примечания></примечания>
Параметры общедоступного подмножества (ByVal paramName как строка, ByVal paramValue как объект)
Тусклый параметр как объект
параметр = Me.m_sapFun.Exports(имя_параметра)
Если параметр ничего не значит, тогда
Выдать новое исключение («Имя параметра удаленной функции Sap недопустимо: « + paramName)
Конец, если
параметр.Значение = значение параметра
Конец субтитра
''' <сводка>
''' Установите входящую внутреннюю таблицу SAP и используйте dt_value для имитации этой внутренней таблицы
''' </summary>
''' <param name="SapTableName">Имя внутренней таблицы, переданное функцией SAP</param>
''' <param name="dt_value">Имитируемая таблица данных должна соответствовать имени поля, переданному во внутреннюю таблицу</param>
''' <примечания></примечания>
Public Sub устанавливает входящую внутреннюю таблицу (ByVal SapTableName As String, ByVal dt_value As DataTable).
Dim sapdata, когда объект sap передается во внутреннюю таблицу
Dim saprow Поскольку объектный сок проходит в строке внутренней таблицы
Тусклый постоянный ток как столбец данных
Тусклый индекс как целое число
sapdata = Me.m_sapFun.Tables(SapTableName)
For index = 0 To dt_value.Rows.Count - 1 'Зациклить таблицу и присвоить значения внутренней таблице, переданной в SAP
saprow = sapdata.Rows.Add() 'Добавьте новую строку записей во внутреннюю таблицу и присвойте значения записям во внутренней таблице ниже.
Для каждого постоянного тока в dt_value.Columns
saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString()
Следующий
Следующий
Конец субтитра
''' <сводка>
''' После завершения настройки параметров выполнить вызов функции
''' </summary>
''' <примечания></примечания>
Вызов публичной функции Sub Execute()
Если Me.m_sapFun.Call() = Ложь Тогда
Throw New Exception("Ошибка вызова удаленной функции SAP.") 'Ошибка при получении данных из SAP, функция выхода
Конец, если
Конец субтитра
''' <сводка>
''' Создать DataTable из указанных полей на основе списка полей (через запятую)
''' </summary>
''' <param name="fields">Список полей (через запятую)</param>
''' <returns>Пустая таблица</returns>
''' <примечания></примечания>
Открытая функция Создать пустую таблицу (поля ByVal как строку) Как DataTable
Dim dt как новая таблица данных
Тусклые строки как строка()
Dim как строка
strs = поля.Split(",")
Для каждого s в строках
dt.Columns.Add(s.Trim())
Следующий
Возврат времени
Конечная функция
''' <сводка>
''' Получить значение исходящего параметра SAP
''' </summary>
''' <param name="paramName">Имя исходящего параметра</param>
''' <returns>Значение исходящего параметра</returns>
''' <примечания></примечания>
Открытая функция Получить исходящие параметры Sap (ByVal paramName As String) As String
Тусклый параметр как объект
параметр = Me.m_sapFun.Imports(paramName)
Если параметр ничего не значит, тогда
Выдать новое исключение («Имя параметра удаленной функции Sap недопустимо: « + paramName)
Конец, если
Если параметр.Значение не имеет значения, тогда
Возвращаться ""
Еще
Возвращаемый параметр.Value.ToString()
Конец, если
Конечная функция
''' <сводка>
''' Преобразование исходящей внутренней таблицы структуры вызова функции SAP в таблицу dotNet
''' </summary>
''' <param name="fields">Sap список исходящих полей внутренней таблицы, разделенный запятыми</param>
''' <param name="SapTableName">Имя исходящей внутренней таблицы SAP</param>
''' <returns>Таблица dotnet, экспортированная из внутренней таблицы SAP, все поля имеют строковый тип</returns>
''' <примечания></примечания>
Открытая функция Получить данные исходящей таблицы Sap (поля ByVal как строка, ByVal SapTableName как строка, ByVal, удалять ли начальные и конечные пробелы как логические значения) Как DataTable
'Создаем таблицу по списку полей, список полей в полях разделяется запятыми
Dim dt как таблица данных
dt = Me. Создать пустую таблицу (поля).
'Чтение данных из таблицы SAP, зацикливание данных, полученных в SAP, и запись их в dt
Тусклые сапданные как объект
Тусклый Сапроу как объект
Dim dr As DataRow 'Добавлена новая строка данных
Тусклый постоянный ток как столбец данных
sapdata = Me.m_sapFun.Tables(SapTableName)
Для каждого сапрова в sapdata.Rows
др = dt.NewRow()
Для каждого постоянного тока в dt.Columns
Если удалять начальные и конечные пробелы = True Тогда
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim()
Еще
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString()
Конец, если
Следующий
dt.Rows.Add(др)
Следующий
Возврат времени
Конечная функция
''' <сводка>
''' Закройте соединение с SAP
''' </summary>
''' <примечания></примечания>
Публичная подписка DisConnectSAP()
Me.m_sapConnection.logoff()
Конец субтитра
Конечный класс