Artículo
· 8 ago, 2024 Lectura de 2 min

La exportación XML del proyecto de Studio omite inesperadamente los archivos webapp (CSP) cuando el nombre de la webapp no contiene barras oblicuas

Me encontré con esta peculiaridad al investigar un problema no relacionado que afecta cómo se manejan los proyectos de Studio en VS Code.

Cuando añadís el nivel superior de la webapp a un %Studio.Project, esto inserta un %Studio.ProjectItem con un sufijo .DIR. Por ejemplo, si Studio o VS Code están conectados al espacio de nombres USER y añadís la webapp /csp/user a un proyecto, el nombre del nuevo ProjectItem es "csp/user.DIR".

Cuando exportáis este proyecto a XML desde el menú contextual del proyecto en Studio, o llamando al método de clase %Studio.Project.Export, el archivo contiene la definición del proyecto más todos los archivos en el subárbol de la ruta física de la webapp /csp/user (es decir, todos vuestros archivos CSP, JavaScript, CSS, etc.). Importar esto a un espacio de nombres en otro servidor en el que existe una webapp con el mismo nombre es una forma conveniente de transferir el código de la webapp.

La peculiaridad/error es que si el nombre de vuestra webapp no contiene ninguna barra oblicua (ignorando la barra inicial que comienza todos los nombres de las webapps), entonces el método de clase Export no incluye los archivos de la webapp en su archivo de salida XML.

Por ejemplo, si el espacio de nombres MYAPP aloja una webapp llamada /myapp y creáis un proyecto de Studio que consiste en "myapp.DIR" como su ProjectItem, una exportación de este proyecto no contiene los archivos de vuestra webapp.

Aquí está el porqué de esto:

La línea 871 llama al método Exists de %Library.RoutineMgr con el argumento «myapp.DIR»

El código en la línea 653 de arriba está aparentemente ahí para asegurar que los nombres de los archivos o directorios de la webapp tengan un prefijo "/" antes de ser utilizados en llamadas a $$GetFilename^%apiCSP en la línea 661 (para ítems .DIR) o a ..IsCSPName en la línea 664 (todo lo demás).

Pero para un ítem .DIR sin una barra oblicua dentro de él (por ejemplo, "myapp.DIR" en lugar de "csp/user.DIR"), la línea 653 es ineficaz y Exists("myapp.DIR") devuelve 0.

Esto podría solucionarse moviendo la línea 657 antes de la línea 653, y luego modificando esa línea (ahora 654) para agregar ext="dir" a las condiciones OR existentes. Sin embargo, todo el paquete %Studio ya no aparece en la última Referencia de Clases (también conocida como Documatic), así que creo que las posibilidades de que esto se solucione son bajas, y de que se retrotraiga aún más bajas. Estoy publicando la información aquí por si le resulta útil a alguien más. Una solución alternativa es no usar nombres de webapps que tengan un único componente de ruta.

Comentarios (0)1
Inicie sesión o regístrese para continuar