Dynamics NAV SVN Utility

Quando ho iniziato a lavorare con NAV nel 2009, una delle prime cose che mi lasciò sorpreso fu la totale assenza di uno strumento di versioning. Per chi non lo sapesse NAV è un mondo open-source dentro il quale è abitudine del partner o del cliente stesso fare modifiche, anche pesanti, al codice sorgente. Il codice in NAV è ospitato all’interno di oggetti, ciascuno dei quali risiede dentro il database, ed è possibile accedervi esclusivamente tramite un apposito client di sviluppo. In altre parole il codice non è un file che risiede su disco e che può essere “mergiato”!

Prima di fare qualsiasi progetto ho voluto risolvere il problema del versioning. Appurato che all’epoca non esistevano tool di terze parti all’altezza (salvo un MergeTool che però non supportava i nuovi oggetti della versione 2009 RTC) e che Microsoft non ha rilasciato nulla di simile prima della versione 2015, mi sono messo a scrivere una utility per usare il sorgente di NAV con SVN.

L’idea alla base dell’utility è molto semplice:

  • Ogni oggetto in NAV può essere contrassegnato come “modificato”
  • Il contrassegno viene impostato automaticamente dall’ambiente di sviluppo ogni qual volta uno sviluppatore modifica un oggetto
  • Gli oggetti modificati sono quindi quelli che devono essere “committati”
  • L’utility, interrogando la lista di oggetti modificati sul database, richiama una funzione dell’ambiente di sviluppo per esportare l’oggetto in formato testo
  • Il testo viene salvato in un file il cui nome è esplicativo del tipo, numero e descrizione (es. “Codeunit 12 Gen. Jnl.-Post Line.txt”)
  • Ottenuto il file di testo in un’apposita cartella questo può essere “committato” su un server SVN come qualsiasi file sorgente normale
  • Se il commit è andato a buon fine, la spunta di modificato viene rimossa dall’oggetto affinché non possa essere “committato” identico una seconda volta

Gli sviluppatori possono quindi lavorare sul sorgente e, al termine della giornata, commitare le proprie modifiche su un server SVN centrale.

SVN Utility 1

Prima di iniziare i lavori però ogni sviluppatore deve essere sicuro di lavorare sulla versione aggiornata del sorgente:

  • Una tabella nascosta viene aggiunta al database e contiene il numero di versione SVN dell’ultimo commit
  • Un apposito tasto nell’utility controlla se la versione locale è minore rispetto a quella server SVN
  • Se sì, viene fatto un SVN update ed i file modificati (tra una versione e l’altra) vengono importati nel database, richiamando automaticamente la funzione dell’ambiente di sviluppo
  • Se l’update è andato a buon fine la versione locale viene aggiornata, dichiarando il database allineato con il server SVN remoto

Nel corso degli anni abbiamo aggiunto molte funzionalità all’utility:

  • Possibilità di gestire più database per i vari clienti
  • Esportazione totale o parziale degli oggetti
  • Esportazione degli oggetti tramite server FTP per facilitare il deploy remoto sui server dei clienti
  • Merge per Tag-ID

Quest’ultima funzione è senza dubbio la più interessante.

Microsoft ci ha abituato al rilascio di una nuova major release di NAV ogni anno più un aggiornamento cumulativo quasi ogni mese. Le modifiche al sorgente di base sono tali e tante che è impossibile riportarle costantemente sui database dei clienti. Inoltre realizzare una personalizzazione e mantenerla allineata per tutte le possibili versioni è uno sforzo enorme che non si ripaga ed il mercato non ne riconosce il valore. Per il cliente comprendere la differenza tra questo tipo di aggiornamenti e quelli “automatici” del sistema è molto difficile.

In attesa di capire i futuri scenari (mi riferisco alle “extension” di NAV di cui abbiamo visto qualcosa in anteprima nelle versioni 2016 e 2017) il nostro approccio è stato ancora una volta semplice ed economico.

Quando si sviluppa una personalizzazione (su un database modello o direttamente su quello del cliente) questa viene contrassegnata da un numero progressivo. Il numero viene annotato in un registro comune e deve sempre essere riportato nei commenti del codice sorgente.

Esempio:

NAV Code

L’utility tramite regular expression individua questi speciali tag generando automaticamente dei commenti per ciascun commit.

In questo modo è possibile sapere quale commit e quale file sono relativi ad una precisa personalizzazione.

Nel momento in cui deve partire un nuovo database oppure la modifica va riportata presso un cliente esistente, è sufficiente inserire il numero della personalizzazione nell’utility, che individuerà automaticamente i file e proporrà una lista da cui si aprirà il tool di merge.

NAV Merge

Insomma dal merge non si scappa ma questa utility rende le operazioni semplici e veloci ed in poche ore è possibile far partire un database nuovo (dell’ultima versione) con tutte le personalizzazioni necessarie, usando un metodo solido e collaudato.

Download “NAV SVN Utility” NAV-SVN-Utility.zip – Scaricato 29 volte – 2 MB

 

Chiama subito per maggiori informazioni +39 0113473770
oppure lasciaci i tuoi recapiti e sarai contattato il prima possibile:



 

Lascia un commento