Nos están implantando un SB1 (HANA) y una de las cosas que vamos a necesitar es cierta flotabilidad en las licencias, no queremos perder la funcionalidad nominal y por otro lado no tiene mucho sentido comprar tres licencias para un mismo puesto de trabajo que cubren tres personas que van a turnos de mañana/tarde/noche. La consultora no nos da otra opción que un superusuario acceda a la gestión de licencias, las reasigne y aplique los cambios, lo cual evidentemente funciona.
Investigando un poco he visto que el fichero B1Upf.xml almacena las asignaciones pero si lo modifico los cambios no se ven en SAP, para que eso suceda tengo que reiniciar el servicio sapb1servertools, una vez hecho eso ya en SAP sí se muestran las nuevas asignaciones. Mediante una pequeña app todo eso se hace automático y en pruebas está funcionando pero tengo un par de dudas:
No me hace mucha gracia tener que reiniciar el servicio servertools por completo ya que tampoco tengo claro qué cubre ese servicio, en la versión no-hana he visto que hay un servicio específico de licencias pero en HANA no lo he visto. ¿O quizá no tenga mayor importancia reiniciarlo?
Si hago la asignación desde dentro de SAP solo tengo que pulsar en “actualizar” y las licencias se reasignan en el momento, por tanto me pregunto si hay alguna manera (a través por ejemplo de la REST License API o similar) de decirle a SAP que recargue el fichero B1Upf.xml y que aplique los cambios.
Es un placer saber que cada vez somos más en esta comunidad. No olvides pasar por #presentaciones para poder conocerte un poco más.
Aquí algunos comentarios:
1.- Los usuarios no los crees con el nombre del empleado, mas bien nombrarlas por el área de trabajo (Ej. Finanzas, Produccion, Ventas, etc. etc)
2.- Existen la forma que los documentos de marketing estén firmados, ahora si, por el nombre de empleado.
3.- Otra forma en caso de ser necesario es usar un campo de usuario para que cada quien firme sus transaccciones.
4.- MUY IMPORTANTE, no te recomiendo estar reiniciando a cada momento el SERVER TOOLS, muchos otros servicios se cuelgan de él, y el estar reiniciando te puede causar problemas y mas si tienes usuarios conectados.
5.- HANA es un ambiente de trabajo muy delicado.
6.- Otra opción, si lo que quieres es que cada usuario tenga su propia licencia, es evaluar licencias limitadas, dependiendo de la función que vayan a realizar esos usuarios dentro de SAP B1.
Espero poder darte un norte o que alguien más pueda dar mas ideas.
Crear los usuarios por departamento hace que pierdas las trazabilidad de quién hace qué, ya lo valoramos en su momento y quizá tengamos que llegar a ese punto, pero vamos a intentar evitarlo.
Yo tampoco quiero andar reiniciando el Server Tools cada vez que un usuario flotante vaya a iniciar sesión pero es la única manera que he encontrado de momento de “simular” lo que hace SAP cuando lo hacemos a mano. Tengo la opción de generar un script de automatización de modo que la asignación de licencias se haga a través de una sesión abierta de SAP que aplique los cambios del B1Upf, será un poco lío pero así no tendría que reiniciar el servicio.
Lo de comprar licencias para todos no es una opción, el sistema de licenciamiento de SAP es un despropósito para cualquier centro de producción, hasta las aplicaciones más simples llevan sistemas de flotabilidad, no se trata de no comprar, sino de comprar lo que se necesita. Si yo tengo 30 puestos de trabajo que rotan en tres turnos no tiene sentido que la propuesta de SAP es que les compre 30 licencias o que les entregue usuarios genéricos (por cierto, prohibido por ley por temas de RGPD en según qué secciones).
Sobre el REST API, ¿alguien lo ha usado? He visto algunos ejemplos de código pero las explicaciones sobre sus funciones no las localizo, me da la impresión de que ese API solo sirve para consulta, pero igual tiene algo que me pueda servir para aplicar los cambios del B1UPF.
Por REST API no está el método para cambiar licencias de usuarios
Por DI API si existe un metodo, por lo que puedes crear una aplicacion en .NET que lo haga.
Try
Dim oCompanyService As SAPbobsCOM.CompanyService
oCompanyService = oCompany.GetCompanyService
Dim oUserLicenseParam As SAPbobsCOM.UserLicenseParams
' Set parameters
oUserLicenseParam = oCompanyService.GetDataInterface(SAPbobsCOM.CompanyServiceDataInterfaces.csdiUserLicenseParams)
oUserLicenseParam.UserName = "manager"
oUserLicenseParam.LicenseKeyType = SAPbobsCOM.LicenseKeyTypeEnum.lktdIdirect
oUserLicenseParam.LicenseUpdateType = SAPbobsCOM.LicenseUpdateTypeEnum.ultAssign
' Update user's license
oCompanyService.UpdateUserLicense(oUserLicenseParam)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Interesante. He visto ese código en otra web pero no consigo que eso funcione.
Creo un proyecto con .NET 2019, agrego la referencia al COM DI API V10, pero el código no se puede compilar porque SAPbobsCOM no parece ser la versión adecuada.
De hecho la propiedad LicenseKeyTypeEnum tampoco me aparece, ¿es una versión diferente del DI API la que tengo que referenciar?
He probado con los proyectos de ejemplo del SDK y me pasa lo mismo, no puedo ejecutar ni uno, siempre por lo mismo.
Para hacer funcionar los códigos de ejemplo debes reemplazar la DI API y/o UI API por la actual, ya que vienen referenciando una versión antigua de la misma.
Respecto al metodo de actualizar licencias, está en la documentacion SDK
He probado con al DI API en todas sus versiones (yo debería usar solo la 10) y ese código no puede funcionar porque hay métodos que no existen en algunos objetos, por ejemplo SAPbobsCOM.LicenseKeyTypeEnum, pero lo voy a tomar como base a ver qué hasta dónde llego. Me falta entender el objeto oCompany que tampoco está definido en es ejemplo y entiendo además que en algún momento tendré que introducir dónde está mi servidor, luego habrá que hacer alguna conexión previa. Quién tuviera tiempo
Más o menos tengo claro el proceso desde el punto de vista de desarrollo pero como nunca me he metido con esta API de SAP (con nada de SAP en general) tengo mucho que leer y poco tiempo para realizar. Mañana le voy a dedicar unas horas a ver qué sale, gracias por tu atención, postearé si finalmente consigo realizarlo