Debido a que a menudo necesitamos acceder a los datos de operación de SAP, encapsulamos una clase para facilitar la llamada. Las condiciones operativas requieren la instalación del cliente SAP. Una vez instalado, habrá una interfaz COM. Esta interfaz accede a SAP a través de este COM. porque la última etapa de com Debido al problema de enlace, usé vb.net para desarrollarlo y compartirlo con todos.
Características: Asigne directamente las tablas internas entrantes y salientes de SAP a DataTable de dotNet para una fácil operación y proporcione una función de conversión de una lista de campos a una DataTable.
'------------------------------------------------ - --------------
' Copyright (C) 2009
' reservados todos los derechos.
'
'Nombre del archivo: SAP.vb
'Descripción de la función: encapsula el acceso básico a SAP. Esta clase solo proporciona información básica. El acceso específico a las clases RFC de SAP se hereda de esta clase.
'
'Crear logotipo: www.cnblogs.com/81 , 1 de diciembre de 2009
'
'Logotipo modificado: www.cnblogs.com/81 , 9 de diciembre de 2009
'Modificar descripción: Agregar operaciones cerradas para tablas internas entrantes, parámetros salientes, etc.
'------------------------------------------------ - ----------------------
SAP de clase pública
Privado m_sapObject como objeto 'objeto de llamada a función remota de SAP
m_sapFun protegido como función sap del objeto
Privado m_sapConnection como objeto 'Conexión a SAP
''' <resumen>
''' constructor, pasa la información básica de sap
''' </summary>
''' <param name="sapSystem">Sistema SAP, puedes pasar nulo</param>
''' <param name="ApplicationServer">IP del servidor SAP</param>
''' <param name="Cliente">Número de grupo, como 800</param>
''' <param name="SystemNumber">Número de sistema, como 00</param>
''' <comentarios></comentarios>
Sub público nuevo (ByVal sapSystem como cadena, ByVal ApplicationServer como cadena, ByVal Client como cadena, ByVal SystemNumber como cadena)
Me.m_sapObject = CrearObjeto("SAP.Funciones")
Me.m_sapConnection = Me.m_sapObject.Connection()
Si String.IsNullOrEmpty(sapSystem) = False Entonces
Me.m_sapConnection.System = sistema sap
Terminar si
Me.m_sapConnection.ApplicationServer = Servidor de aplicaciones
Me.m_sapConnection.Client = Cliente
Me.m_sapConnection.SystemNumber = Número del sistema
Subtítulo final
''' <resumen>
''' Inicie sesión en SAP, devuelva True si tiene éxito, devuelva False si falla
''' </summary>
''' <param nombre="Usuario">Usuario</param>
''' <param nombre="Contraseña">Contraseña</param>
''' <param name="Language">Idioma, como ZH, EN, etc., puede pasar nulo</param>
''' <returns>Si el inicio de sesión fue exitoso</returns>
''' <comentarios></comentarios>
Función pública ConnectToSAP (usuario ByVal como cadena, contraseña ByVal como cadena, lenguaje ByVal como cadena) como booleano
Me.m_sapConnection.user = Usuario
Me.m_sapConnection.Password = Contraseña
Si String.IsNullOrEmpty(Language) = False Entonces
Me.m_sapConnection.Language = Idioma
Demás
Me.m_sapConnection.Language = "ES"
Terminar si
Me.m_sapObject.AutoLogon = True 'Inicio de sesión automático
Devuelve Me.m_sapObject.Connection.logon(0, True) 'Si el inicio de sesión fue exitoso
Función final
''' <resumen>
''' Establece el nombre de la función sap que se llamará
''' </summary>
''' <param name="sapFuncName">nombre de la función sap</param>
''' <comentarios></comentarios>
Public Sub establece el nombre de la función remota de SAP (ByVal sapFuncName As String)
Me.m_sapFun = Me.m_sapObject.Add(sapFuncName)
Si m_sapFun no es nada entonces
Lanzar nueva excepción ("El nombre de la función remota de SAP no es válido: " + sapFuncName)
Terminar si
Subtítulo final
''' <resumen>
''' Establecer los parámetros de llamada entrante de la función Sap
''' </summary>
''' <param name="paramName">Nombre del parámetro</param>
''' <param name="paramValue">Valor del parámetro</param>
''' <comentarios></comentarios>
Parámetros públicos del subconjunto (ByVal paramName como cadena, ByVal paramValue como objeto)
Dim parámetro como objeto
parámetro = Me.m_sapFun.Exports(nombredelparámetro)
Si param no es nada entonces
Lanzar nueva excepción ("El nombre del parámetro de la función remota de Sap no es válido: " + nombreParam)
Terminar si
parámetro.Valor = parámetroValor
Subtítulo final
''' <resumen>
''' Configure la tabla interna entrante de sap y use dt_value para simular esta tabla interna
''' </summary>
''' <param name="SapTableName">El nombre de la tabla interna pasada por la función SAP</param>
''' <param name="dt_value">La DataTable simulada debe ser coherente con el nombre del campo pasado a la tabla interna</param>
''' <comentarios></comentarios>
Public Sub establece la tabla interna entrante (ByVal SapTableName como cadena, ByVal dt_value como DataTable)
Dim sapdata A medida que el objeto 'sap pasa en la tabla interna
Dim saprow A medida que la savia del objeto pasa en una fila de la tabla interna
Atenuar CC como columna de datos
Índice tenue como entero
sapdata = Me.m_sapFun.Tables(NombreTablaSap)
Para index = 0 A dt_value.Rows.Count - 1 'Recorre la tabla y asigna valores a la tabla interna pasada a sap
saprow = sapdata.Rows.Add() 'Agrega una nueva fila de registros en la tabla interna y asigna valores a los registros en la tabla interna a continuación.
Para cada CC en dt_value.Columns
saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString()
Próximo
Próximo
Subtítulo final
''' <resumen>
''' Una vez completada la configuración de parámetros, ejecute la llamada a la función
''' </summary>
''' <comentarios></comentarios>
Llamada pública a la función Sub Ejecutar()
Si Me.m_sapFun.Call() = Falso Entonces
Lanzar nueva excepción ("Error en la llamada a función remota de SAP") 'Error al obtener datos de SAP, salir de la función
Terminar si
Subtítulo final
''' <resumen>
''' Crear una tabla de datos de campos específicos según la lista de campos (separados por comas)
''' </summary>
''' <param name="fields">Lista de campos (separados por comas)</param>
''' <returns>Tabla vacía</returns>
''' <comentarios></comentarios>
Función pública Crear una tabla vacía (campos ByVal como cadena) como tabla de datos
Dim dt como nueva tabla de datos
Cadenas atenuadas como cadena ()
Atenuar como cuerda
cadenas = campos.Dividir(",")
Para cada s en cadenas
dt.Columnas.Agregar(s.Trim())
Próximo
regresar tiempo
Función final
''' <resumen>
''' Obtener el valor del parámetro saliente de sap
''' </summary>
''' <param name="paramName">Nombre del parámetro saliente</param>
''' <returns>Valor del parámetro saliente</returns>
''' <comentarios></comentarios>
Función pública Obtener parámetros salientes de Sap (ByVal paramName como cadena) como cadena
Dim parámetro como objeto
parámetro = Me.m_sapFun.Imports(nombredelparámetro)
Si param no es nada entonces
Lanzar nueva excepción ("El nombre del parámetro de la función remota de Sap no es válido: " + nombreParam)
Terminar si
Si el valor del parámetro no es nada, entonces
Devolver ""
Demás
Devolver parámetro.Value.ToString()
Terminar si
Función final
''' <resumen>
''' Convertir la tabla interna saliente de la estructura de llamada a la función SAP en una tabla dotNet
''' </summary>
''' <param name="fields">Lista de campos salientes de Sap de la tabla interna, separados por comas</param>
''' <param name="SapTableName">El nombre de la tabla interna saliente de SAP</param>
''' <returns>La tabla dotnet exportada desde la tabla interna de SAP, todos los campos son de tipo cadena</returns>
''' <comentarios></comentarios>
Función pública Obtener datos de la tabla saliente de Sap (campos ByVal como cadena, ByVal SapTableName como cadena, ByVal si se deben eliminar los espacios iniciales y finales como booleanos) Como tabla de datos
'Crear una tabla por lista de campos, la lista de campos en campos está separada por comas
Dim dt como tabla de datos
dt = Yo. Crear tabla vacía (campos)
'Lee los datos de la tabla sap, repite los datos obtenidos en sap y escríbelos en dt
Dim sapdata como objeto
Saprow tenue como objeto
Dim dr As DataRow 'Nueva fila de datos agregada
Atenuar CC como columna de datos
sapdata = Me.m_sapFun.Tables(NombreTablaSap)
Para cada saprow en sapdata.Rows
dr = dt.NuevaFila()
Para cada CC en columnas dt.
Si se deben eliminar los espacios iniciales y finales = Verdadero Entonces
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim()
Demás
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString()
Terminar si
Próximo
dt.Filas.Agregar(dr)
Próximo
regresar tiempo
Función final
''' <resumen>
''' Cerrar la conexión SAP
''' </summary>
''' <comentarios></comentarios>
Sub pública DisConnectSAP()
Yo.m_sapConnection.logoff()
Subtítulo final
Fin de clase