Etiquetado: obsolete, recreate, schemaupdate
- Este debate tiene 4 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 4 años, 8 meses por
BETEA.
Eliminacion de campo en tabla nueva
-
BETEAParticipanteBETEABuenos dias,
Estoy pasando a extension un desarrollo que tenemos. Entre otras cosas, he tenido que crear una tabla nueva. He publicado la extension sobre nuestro docker, y hasta ahi todo “bien”. He conseguido que compile en AL el codigo traido desde el object designer, y ahora toca pulirlo y arreglaro para hacer un estandar.
El problema ha venido al quitar 2 campos de la tabla nueva que he creado, y re-publicar la extension:
[2019-01-10 17:55:08.54] Sending request to http://beteabc:7049/NAV/dev/metadata
[2019-01-10 17:55:46.79] Sending request to http://beteabc:7049/NAV/dev/apps?SchemaUpdateMode=synchronize
[2019-01-10 17:56:04.78] The request for path /NAV/dev/apps?SchemaUpdateMode=synchronize failed with code 422. Reason: Table Disp. producto por Almacen:: Unsupported field change. Field:Inventario X; Change:Remove
Table Disp. producto por Almacen:: Unsupported field change. Field:Inventario Y; Change:Remove
Como veis, parece que no le gusta que haya quitado lso campos. He despublicado la extension, he reiniciado el docker, incluse he ido al SQL manager y he borrado fisicamente la nueva tabla creada, pero me sigue dando error… Parece que queda algo por ahi. Existe alguna forma de publicar la extension haciendo una especie de “Force”?
Muchas gracias
11 enero 2019 a las 09:04 #7757
Laura NicolàsSuperadministradorLaura NicolàsHola,
En el launch.json tienes que añadir el parámetro “schemaUpdateMode”: “Recreate”
Con esto el sistema recrea todo el esquema de datos por lo que te permite eliminar tablas y campos creados, o cambiar de tipo de datos los campos. Ojo, también pierdes todos los datos de prueba que hayas generado.
Esto lo puedes hacer mientras estés en un entorno de desarrollo, pero no lo podrás hacer en un entorno de producción, porque en PROD no puedes permitirte perder los datos! En PROD tendrías que gestionar el tema de los datos con una codeunit de Upgrade.
Si la app la publicas en el cloud (ya sea en la AppSource, o una personalización de cliente), no vas a poder eliminar los campos nunca. En su lugar, tendrías que marcarlos como obsoletos, y gestionar los datos con una codeunit de upgrade. Te dejo alguna documentación: https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/upgrade/deprecated-fields
Salut!
Laura Nicolàs11 enero 2019 a las 09:44 #7759
BETEAParticipanteBETEAMuchas gracias Laura!
Con el recreate parece que no me da ya ese fallo, aunque me sale esto:
[2019-01-11 09:54:42.45] Sending request to http://beteabc:7049/NAV/dev/metadata
[2019-01-11 09:55:06.75] Sending request to http://beteabc:7049/NAV/dev/apps?SchemaUpdateMode=recreate
[2019-01-11 09:55:08.21] The request for path /NAV/dev/apps?SchemaUpdateMode=recreate failed with code 422. Reason: The following SQL error was unexpected:
No item by the name of ‘”dbo”.”CRONUS ES$Sales Line$7d27f5f1-6084-471d-8b5a-770eefbfe6a1″‘ could be found in the current database ‘FinancialsES’, given that @itemtype was input as ‘(null)’.Como andube borrando tablas de SQL sin pensar demasiado, se habra quedado alguan dependencia por ahi… Al ser un entorno nuestro propio, me puse a borrar cosas sin miedo, y al final pasa lo que pasa… Intentare depurar un poco el SQL, y si me lelva demasiado, borrar docker, crear uno nuevo, y adelante.
De todas formas lo dicho, el recreate parefe haberme solucionado el tema de los campos borrados.
Muchas gracias!
11 enero 2019 a las 10:01 #7762
Laura NicolàsSuperadministrador11 enero 2019 a las 10:27 #7766
Debe iniciar sesión para responder a este tema.