SAP BO. SAP Business One. Importar y exportar autorizaciones mediante Microsoft Excel
Posted On miércoles, 6 de abril de 2011 at en 17:01 by Edgar Avena Vázquez Antes que nada una disculpa por la tardanza ahora retomare de una manera mas seguida el blog. Últimamente hemos estado viendo bastantes ejemplos con código ya sea mediante el UI o el DI API de SAP Business One.
Ahora en este ejemplo vamos a exportar las autorizaciones de un usuario y a su vez poderlas importar dentro de otro usuario cualquiera. Como requisito ocuparemos tener el UI API instalado en nuestro equipo así como el Excel previamente configurado para que ejecute macros, por ultimo vamos a necesitar tener una instancia de SAP Businees One antes de ejecutar cualquier acción.
El objeto SBObob nos permite leer información de una manera fácil y sencilla. Este objeto por lo particular regresa un recordset con la información. En nuestro caso vamos a utilizar los métodos GetSystemPermisson y el método SetSystempermission. Para importar o exportar nuestras autorizaciones vamos a trabajar con la pantalla de "Autorizaciones generales" que esta en la ruta Gestión > Inicializacion de sistema> Autorizaciones > Autorizaciones generales. Ahora bien como trabajaremos con el UI Api recuerden que la forma de accesar a las pantallas de SAP Es mediante un ID en este caso es el "form type 951". Bueno ahora con todos estos detalles escribamos algo de código. Comencemos con el Exportar nuestras autorizaciones a la hoja de Excel.
1. Nos conectamos a la instancia de SAP Business One que hemos abierto.
Dim SboGuiApi As New SAPbouiCOM.SboGuiApi
Dim SBO_App As SAPbouiCOM.Application
Dim oCompany As New SAPbobsCOM.Company
SboGuiApi.Connect ("0030002C0030002C00530041005000420044005F00440061007400650076002C0050004C006F0
06D0056004900490056")
Set SBO_App = SboGuiApi.GetApplication()
Set oCompany = SBO_App.Company.GetDICompany()
2. Vamos abrir la pantalla de autorizaciones.
SBO_App.ActivateMenuItem ("3332")
Dim oForm As SAPbouiCOM.Form
Dim oMatrix As SAPbouiCOM.Matrix
Set oForm = SBO_App.Forms.ActiveForm
If oForm.TypeEx <> "951" Then
MsgBox "Error when opening authorization form"
End
End If
3. Ponemos el nombre a las cabeceras y vamos a expandir todo el árbol de autorizaciones para colocarlo en nuestra hoja de Excel.
ActiveSheet.Cells(1, 1) = "ID"
ActiveSheet.Cells(1, 2) = "Name"
ActiveSheet.Cells(1, 3) = "Level"
ActiveSheet.Cells(1, 4) = "Number of Sons"
oForm.Items.Item("13").Click (ct_Regular)
row = 2
Set oMatrix = oForm.Items.Item("6").Specific
For i = 1 To oMatrix.VisualRowCount
Dim oEditPermCode As SAPbouiCOM.EditText
Dim oEditPermName As SAPbouiCOM.EditText
Dim oEditPermLevel As SAPbouiCOM.EditText
Dim oEditPermNumOfSons As SAPbouiCOM.EditText
Set oEditPermCode = oMatrix.Columns.Item("0").Cells.Item(i).Specific
Set oEditPermName = oMatrix.Columns.Item("1").Cells.Item(i).Specific
Set oEditPermLevel = oMatrix.Columns.Item("7").Cells.Item(i).Specific
Set oEditPermNumOfSons = oMatrix.Columns.Item("6").Cells.Item(i).Specific
ActiveSheet.Cells(row, 1) = oEditPermCode.String
ActiveSheet.Cells(row, 2) = oEditPermName.String
ActiveSheet.Cells(row, 3) = oEditPermLevel.String
ActiveSheet.Cells(row, 4) = oEditPermNumOfSons.String
If oEditPermCode.String = "UP_MAIN_HEADER" Then Exit For
row = row + 1
Next
4. Ahora vamos a leer la lista de usuarios y sus permisos. Para darle claridad a nuestros permisos usaremos el BOPermission Enumerator que tiene los siguientes valores:
- RW acceso total
- RO solo lectura - NO sin autorización
- VA diversas autorizaciones
- ND no definido.
Dim oRsSUers As SAPbobsCOM.Recordset
Dim oSBObob As SAPbobsCOM.SBObob
Set oSBObob = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoBridge)
Set oRsSUers = oSBObob.GetUserList()
col = 5
Do While Not oRsSUers.EOF
ActiveSheet.Cells(1, col) = oRsSUers.Fields.Item(0).Value
row = 2
Do While Not (ActiveSheet.Cells(row, 1) = "" Or ActiveSheet.Cells(row, 1) = "UP_MAIN_HEADER")
If ActiveSheet.Cells(row, 4) = 0 Then
Dim oRsPerm As SAPbobsCOM.Recordset
Set oRsPerm = oSBObob.GetSystemPermission(oRsSUers.Fields.Item(0).Value, i)
Dim s As String
Select Case oRsPerm.Fields.Item(0).Value
Case 1
s = "RW"
Case 2
s = "RO"
Case 3
s = "NO"
Case 4
s = "VA"
Case 6
s = "ND"
Case Else
s = "n.a."
End Select
ActiveSheet.Cells(row, col) = s
End If
row = row + 1
Loop
col = col + 1
oRsSUers.MoveNext
Loop
oCompany.Disconnect
Ahora bien con este sencillo ejemplo si lo ejecutamos vamos a ver como nuestro libro de Excel se llena como en la siguiente imagen.
Por ultimo que utilidad tendría usar esto, pues muy sencillo configuramos por ejemplo las autorizaciones de un usuario del depto. de ventas y todos lo demás usuarios que cumplen con ese mismo perfil importarle esta autorizaciones solamente copiando la columna correspondiente. Y para hacer este trabajo de importación vamos a usar el siguiente método. Lo único que hay que tener en cuenta es que a los super usuarios no se les puede incluir en la hoja de Excel, así que cuidado con este dato.
Dim SboGuiApi As New SAPbouiCOM.SboGuiApi
Dim SBO_App As SAPbouiCOM.Application
Dim oCompany As New SAPbobsCOM.Company
SboGuiApi.Connect ("0030002C0030002C00530041005000420044005F00440061007400650076002C0050004C006F006D0056004900490056")
Set SBO_App = SboGuiApi.GetApplication()
Set oCompany = SBO_App.Company.GetDICompany()
col = 5
Dim oSBObob As SAPbobsCOM.SBObob
Set oSBObob = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoBridge)
Do While ActiveSheet.Cells(1, col) <> ""
UserName = ActiveSheet.Cells(1, col)
row = 2
Do While ActiveSheet.Cells(row, 1) <> "" Or ActiveSheet.Cells(row, 1) <> "UP_MAIN_HEADER"
If ActiveSheet.Cells(row, 4) = 0 Then
Select Case ActiveSheet.Cells(row, col)
Case "RW"
lPermission = 1
Case "RO"
lPermission = 2
Case "NO"
lPermission = 3
Case "VA"
lPermission = 4
Case "ND"
lPermission = 6
Case Else
lPermission = -1
End Select
If lPermission <> -1 Then
Call oSBObob.SetSystemPermission(UserName, ActiveSheet.Cells(row, 1), lPermission)
If oCompany.GetLastErrorCode <> 0 Then
ActiveSheet.Cells(row, col).Color = "123456"
End If
End If
End If
row = row + 1
Loop
col = col + 1
oRsSUers.MoveNext
Loop
oCompany.Disconnect
Espero les se de ayuda a mucha gente que me ha preguntado el como importar fuera del data transfer, en caso de que no sea algo parecido haremos un ejemplo sobre importar algún dato mediante el SDK de SAP. Saludos y promete actualizar mas y mas seguido.
muchas gracias por esto, la verdad me ha quedado un poco grande ejecutarlo ya que nos e si lo ejecuto dentro del excel VB o desde donde?, quisera saber si hay posibilidad de que me envies solo el cuerpo de las autorizaciones sin los usuarios queiro solo exportar todos los valores, te agradeceria si me puedes colaborar con esto ya que veo que lo tienes en excel
gracias
ricardo
Buen dia, soy nuevo en esto y quisiera de tus consejos. necesito crear una aplicacion con otro sistema que al momento de generar orden de compra en el sistema X, me genere una orden de compra en SBO.
que objeto necesito para realizar tal insercion. o si me podes proporcionar algun ejemplo que haga algo similar te estare muy agradecido.
por cierto estoy usando .net 2008
hazme llegar tu correo saludos
Hola, he probado generar el archivo con el código que incluyes pero veo que no funciona correctamente... por ejemplo, en la mayoría otorga RW y en dos usuarios todo lo marca con RO aunque no sea así
Quedo atento a tu respuesta
EStimado Edgar, primero gracias por los aportes de este blog, me han sido de mucha ayuda.
En este caso, cuando dices instancia de SAP Business One a que te refieres?
En que programa se anota todo este código que haz dejado?
Como veras soy neófito en el tema de programación y me gustaría aplicar este ejemplo que me resulta útil para un requerimiento.
Agradezco tu ampliación
Saludos cordiales