Como forzar la generación de los SDT en GeneXus X Ev1

Un error muy molesto que ocurre (por suerte no muy a menudo), es que no se generan correctamente los SDT.

No se bien cuales son los motivos, pero los procesos sospechosos son:
* Renombrar un SDT
* Renombrar un objeto que es Business Component.
* Alterar la estructura de un SDT
y algunos otros

La solución mas intuitiva es generar los fuentes de dichos SDT, pero estos objetos no son especificables y no se pueden generar directamente.

La otra es hacer ver las referencias de los objetos que hacen referencia y regenerarlos. CREO que debería hacerse un Rebuild del objeto, porque si no es forzado, no se vuelve a generar el SDT.

Esto hace que no sea trivial encontrar un objeto que pueda regenerarse que use dicho SDT.

En modelos chicos es posible hacer un Rebuild de todo el modelo, pero en modelos grandes es muy poco practico.

Estuve evaluando hacer una extensión para poder solucionar el problema, de forma de forzar la generación del codigo de los SDT de forma facil. Mientras pensaba eso, encontré una solución mucho mas ORDINARIA, pero bastante efectiva que fue la de crear un procedure main, que tenga variables basadas en todos los SDT del sistema.
La forma mas fácil de lograrlo, es abrir una ventana con el Work with Objects y seleccionar los objetos del tipo SDT.
En otra ventana, crear un procedure, ponerle main, y arrastrar todos los SDT a las variables de dicho procedure.

Luego, haciéndole un REBUILD a dicho procedure se generan todos los fuentes del SDT!!!

PD: Se buscan soluciones mas elegantes... si alguien tiene se agradece que la pase..

Comentarios

  1. nooooooooooooo.......... años metiendole espacios a las descripciones para que los dichosos sdt se generen bien!! y bastaba con esto! Que generador generoso!

    ResponderBorrar
  2. Muy buena la técnica del Drag & Drop!!!

    Desde GX 8 uso la técnica del Proc Main con variables SDT's, pero es engorroso (y el callers al SDT para detectar cuales regenerar también).

    Es una forma "fácil" de regenerar los SDT's, pero el problema es más complicado. si un SDT cambia (nombre elementos o estructura) se debería de regenerar los programas que lo usan para reflejar los cambios (y ver si ad+ no genera efectos colaterales).

    Misma situación debería suceder con tablas, cambio un atributo de nombre o estructura de la pk, tengo que regenerar todo programa en donde acceso a datos mediante ese o esos atributos.

    Algo que falta en GeneXus es un analizador de impacto sobre los cambios, que detecte y muestre la "traza" de los efectos de un cambio.
    Toco algo... todo esto es lo que afecta. ¿Desea regenerar? ;-)

    ResponderBorrar
  3. Alejandro:
    Todos los dias se aprende algo nuevo..

    David:
    Lo que planteas, es un Analisis de Impacto Ampliado, que no solo te diga que tablas se ven afectadas, sino que atributos/objetos y demas va a ser regenerado.

    Con GX X, ya hay un buen trabajo en generar todo lo necesario sin necesidad de hacer un build all, pero no hay una forma de verlo en forma anticipada. Estaria bueno que pudiera verse por anticipado cuantos y cuales objetos van a necesitar regenerarse para poder calibrar si puedo seguir con ese cambio.

    Gracias por los comentarios.

    ResponderBorrar
  4. En la 9 pasa... Yo abro el sdt, agrego un campo x, guardo, borro el campo y vuelvo a guardar. Así funciona. Igual es mas simple la de Alejandro.

    ResponderBorrar
  5. Lo que me pasa en gx 9 con los SDT es que si creo uno nuevo y lo utilizo en un webpanel no me genera el fuente del SDT.
    Tengo que incluirlo en un procedimiento para que se genere.

    ResponderBorrar
  6. Javier:
    Viendo que somos muchos los que sufrimos que los SDT no se generen, creo que seria bueno tener algun mecanismo que no fuera demasiado pesado, que permita regenerar los fuentes del SDT en un solo paso.

    A mi me gustaria que se pudieran especificar como cualquier objeto y que el fuente se genere.

    En la X creo que se puede hacer una extension para lograrlo, pero en la 9.0 creo que puede hacerse un procedimiento como explico en el POST.

    Otra seria que Artech lo incluya como una opcion en el menu de Tool/Advanced/Generate SDT code/

    En fin.. cualquier forma sirve para ahorrar tiempo en el desarrollo.

    ResponderBorrar
  7. yo tengo un problema con las sdts.. pero nose si sea el mismo error que me ocasiona a mi, les explico todo surge al momento de especificar o compilar.. ya que no se puede saber en cual de las 2 es.. el caso es que después de especificar compilamos los objetos afectados.. entonces eh ahí donde empiezan a salir errores de sdts.. para ser especifico solo son las sdts de los ww entonces.. espero a que termine de compilar y pruebo en el explorador ya que mi aplicación es web al momento de entrar a un trabajar con sale el siguiente error: GeneXus.Programs.SdtWW-Nombre de la sdt-
    espero puedan ayudarme y encontrar una solución para todos si es que les ocurre el mismo error.

    ResponderBorrar
    Respuestas
    1. Anonimo:
      No me queda claro cual es el problema, porque no pusiste el error completo que te sale.
      Lo que podes probar el metodo para generar forzado el SDT y luego volver a compilar.

      Borrar
  8. No lo puse completo ya que el error me ha salido un par de veces.. y lo que hago para poder solucionarlo es especificar todos los objetos y compilarlos.

    Me podrías explicar como realizar paso a paso el forzado SDT... espero tu respuesta y grx enrique por tu repuesta.
    Ojala ese metodo me funcione ya que mi KB tarda al rededor de 10 hrs en especificar y compilar y es mucho tiempo perdido.

    ResponderBorrar
    Respuestas
    1. Cuando salta el error de compilacion que no encuentra un SDT en el output de GeneXus, lo que hago es esto:

      1) Creo un nuevo procedure main (no importa el nombre porque lo voy a borrar). Tiene que ser Win o Web, dependiendo de cual es el objeto que no compila.
      2) Defino variable basadas en el SDT que no encuentra.
      3) Genero el procedure con REBUILD.
      4) Hago un build del objeto que no compilaba al principio.
      5) Si todo compilo bien, borro el procedure creado en 1)

      Espero que te sirva. Siempre pienso que deberia hacer una extension para hacer esto automatico, pero nunca me decido, esperando que en una proxima version de GX se solucione.

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.