Clave Primaria Tabla

Este debate contiene 5 respuestas, tiene 2 mensajes y lo actualizó  Cristina Nicolàs hace 7 meses, 4 semanas.

Viendo 6 publicaciones - del 1 al 6 (de un total de 6)
  • Autor
    Publicaciones
  • #8087

    Jon Ander (IGN)
    Participante

    Buenas,

    He creado una tabla 50000, y la subi con una clave, pero ahora necesito que la clave primaria sea otra.. al eliminar la clave y ponerle otra me dice que no es posible.

    En la tabla no hay datos ni nada…

    He pensando en cambiar el appId para que me regenere la extensión completamente, pero no si esto hace que los datos ya insertados en otras tablas o campos de mi extensión se elminen.. Sabeis si al cambiar el appId se eliminan los datos de las tablas y/o campos?

    Gracias.

    #8090

    Cristina Nicolàs
    Jefe de claves

    Hola Jon,

    No lo he probado pero estoy casi segura que si.
    Más que nada porque las tablas que se crean en el SQL tienen el Id de la extensión en el nombre de la tabla.
    Si cambias el Id, se crearán nuevas tablas porque el sistema entenderá que es una nueva extensión y no tendrás acceso a los datos que tienes de la extensión antigua.

    Si no quieres perder los datos de la extensión en otras tablas, pero aún así poder hacer un cambio en el esquema de la tabla a la que le quieres cambiar la clave primaria, te tocará gestionar los cambios a través de una codeunit de upgrade.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #8092

    Jon Ander (IGN)
    Participante

    Buenas Cristina,

    Gracias por la respuesta, pero tengo una duda, como gestionas la eliminación de datos o la modificación de una clave en una codeunit de upgrade?

    Tenéis algún ejemplo simple para seguir las pautas?

    Gracias

    #8093

    Cristina Nicolàs
    Jefe de claves

    Hola Jon,

    No, no he hecho ninguna prueba con esta casuística.
    Pero seguramente lo que haría es recorrer toda la tabla de archivo y copiar los datos tal cual en la tabla.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #8094

    Jon Ander (IGN)
    Participante

    Buenas Cristina,

    Gracias, por la respuesta, pero en mi caso, esas tablas las tengo vacias, y aun asi no he podido cambiar la clave.

    Lo que he estado leyendo es utilizar las propiedades «obsolete», pero no entiendo muy bien como funionan, además, tiene pinta de que me voy a tener que crear otra tabla, pero si me creo otra tabla, y elimino el archivo AL de mi extensión, luego podre generar la tabla con el mismo ID, lo comento, para que no me queden saltos en los objetos..

    #8112

    Cristina Nicolàs
    Jefe de claves

    Hols Jon,

    Aunque estén vacías tienes que gestionar en una codeunit de tipo upgrade qué tiene que pasar con los datos.
    Puedes hacerlo recorriendo la tabla de archivo y copiando los datos en la nueva definición de la tabla (que si no hay datos pues no recorrerá nada) y después haciendo un NavApp.DeleteArchiveData(IDdeLaTabla)
    O, como no tienes datos y no tienes nada que perder, haciendo directamente el DeleteArchiveData.

    El tema de marcar la tabla como obsolete es algo completamente distinto.

    En una instalación on-premise puedes llegar a cambiar la estructura de una tabla, sea cual sea:
    * Cambiar la clave primaria
    * Cambiar el nombre de la tabla
    * Cambiar el ID de la tabla
    * Eliminar la tabla
    * Eliminar un campo
    * Cambiar un campo de nombre o de tipo
    * Etc.
    Aún así, tienes que gestionar el cambio a través de una codeunit de upgrade.

    Sin embargo, en el caso de que publiques tu extensión en la AppSource, Microsoft no te permite que hagas ningún cambio destructivo en la estructura de datos.
    Y para eso te dicen: si tienes que cambiar la clave primaria de una tabla (o cualquier otro cambio destructivo), tienes que hacer lo siguiente:
    1. No cambiar nada en la tabla original
    2. Marcar la tabla original como obsoleta
    3. Crear una nueva tabla con la estructura que te interese y cambiar todas las referencias en tu código de la tabla original a la tabla nueva
    4. Mover los datos de la tabla original a la tabla nueva
    5. No eliminar la tabla original. Esta se quedará ahí para siempre

    Esto significa que la nueva tabla no podrá tener el mismo ID que la antigua, ni el mismo nombre. Es una nueva tabla. Y la vieja no la puedes eliminar. Pero como está marcada como obsoleta, tampoco se puede utilizar.

    Todo esto un poco lo digo a nivel teórico por lo que he leído, pero no lo he probado.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

Viendo 6 publicaciones - del 1 al 6 (de un total de 6)

Debes estar registrado para responder a este debate.

Members Currently Active: 0
No users are currently active
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 921, Posts: 2.969, Members: 923
Welcome to our newest member, Estela Alfaraz
Most users ever online was 15 on 5 April, 2019 9:31 am