¿Como proteger el código de ciertos paquetes?
Buenos días.
Queremos distribuir y proporcionar desarrollos, para Partners y Clientes, con los puedan configurar sus producciones creando Operaciones y Servicios de Negocio basados en Clases Base que ya hemos desarrollado y empaquetado, ellos luego podrán incluir sus propios mapeos, rutas y demás en sus producciones, pero sin poder acceder a la implementación de esas clases base que nosotros proporcionamos. Sería el equivalente a ofrecer una librería con objetos compilados en C y el archivo .H con sus interfaces, pero no el código.
Hemos leído que si sería posible hacer algo así, si a un namespace se asignan varias bases de datos, y una de ellas es la que está cifrada y contiene esas clases, protegidas de alguna forma, y luego esos paquetes de clases se mapean sobre la producción, pero no sabemos como se implementar esta solución.
Muchas gracias de antemano.
Hola @Miguel Ángel Jiménez Santana puedes echar un vistazo al deployed mode:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...
Esta documentación os puede resultar también interesante:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...
Hola Miguel Angel,
Lo que buscas se hace muy facil con lo que llamamos "deployed classes" o "deployed mode". Este es el método que usan la mayoría de clientes que quieren evitar tener el código visible y que se puedan modificar.
En modo desplegado o deployed mode, el código de los métodos se eliminan y quedan en su forma compilada. Las clases en este modo no se pueden exportar ni compilar, pero sus subclases sí, siempre que no estén desplegadas.
https://docs.intersystems.com/iris20233/csp/docbook/DocBook.UI.Page.cls?...
Écha un vistazo a la documentación y comprueba si os sirve. El método que comentas de las bases de datos encriptadas sería también posible, pero lo veo más enrevesado.
¿Qué tal @Miguel Ángel Jiménez Santana , te resultaron de utilidad los enlaces que te enviamos?
Muchas gracias a todos por sus respuestas.
Han sido de gran utilidad los artículos, muy interesantes y aclaratorios.
Mil gracias
¡Genial! Ya sabes, cuando tengas cualquier duda aquí estamos.
💡 Esta pregunta se considera una Pregunta Clave. Más detalles aquí.
Hola, estoy haciendo pruebas con la exportación del proyecto usando el DeployToFile, pero tengo problemas con los BusinessProcess.
Al exportarlo con DeployToFile, me añade las siguientes clases:
Pero al intentar importarlo en otro Namespace, me da error porque son clases del paquete Ens:
Solo me pasa con los BusinessProcess, con otras clases (mensajes, servicios, reglas...) funciona.
Creo que es por la recursividad. He probado a exportar sin recursividad (aunque no sé si estoy poniendo bien el flag), invocando do p.DeployToFile("C:\test.xml", "/norecursive", 1) pero sigue exportando esas clases.
Qué puedo hacer?
Buenas @Laura Blázquez García , ¿has intentado añadir las clases del proyecto manualmente para que no te coja las clases del core?
; deployexample set p=##class(%Studio.Project).%New() do p.AddItem("Sample.Customer.cls") do p.AddItem("Sample.Person.cls") do p.DeployToFile("c:\test\myglobal.xml",,1)
Sí, lo he probado, y me sigue exportando las clases del core.
Siendo un XML, ¿has probado a editarlo y borrar dichas clases?
Sí, lo estoy intentando, pero no es sencillo, porque el archivo tiene un montón de nodos, y no sé cuáles son referentes a esas clases.
Acabo de conseguir encontrar las referencias a las clases. Al abrir el XML, buscando "<Sub>CLS</Sub>" los siguientes 4 nodos son las 4 clases que no quiero que importe:
Eliminando estos 4 nodos, ya puedo importar el archivo deploy en otro servidor.
----------------------------------------
Aunque ahora tengo otro problema: un BusinessProcess con código funciona bien, pero un BusinessProcess con BPL, no funciona. Creo que es porque el BPL genera un XData, así que tendré que cambiar el BPL por un proceso con código. Pero por lo menos ahora puedo añadir al archivo Deploy los BusinessProcess :)