"Monitoraggio" di Virtual Table

Salve,

e scusate la domanda da Absolute Beginner.

E’ possibile “monitorare” una Virtual Table (VT) ?

Con monitorare intendo dire:

  • intercettare in maniera ASINCRONA tutte le letture, tutte le scritture e/o modifiche di tale tabella?

Faccio un esempio:

la Form 565 (Code Coverage) ha una variabile globale così fatta: Name:Object, DataType:Record SubType:Object

Da quello che intuisco la variabile in questione punta a una tabella virtuale (Object) che in quanto tale non espone al programmatore i propri trigger.

Come fare per capire

  1. se tale tabella viene modificata (write)?

  2. se viene “guardata” (read) , per eventualmente decidere se è il caso di modificarla (write)?

  3. Come capire QUANDO questo accade?

Se la tabella non fosse virtuale, oltre a lavorare sui suoi trigger, mi verrebbe in mente di stabilire un’opportuna politica di accesso stabilendo, ad hoc, i permessi, ma con una tabella virtuale direi che è impossibile perchè chi vi accede in r/w è " Il Sistema".

Grazie,ciao

Wutangklan

La tua domanda è chiarissima. Purtroppo io non so rispondere, ma una domanda mi sorge spontanea: perché ti serve una funzionalità del genere? Può darsi che lo stesso scopo si possa raggiungere con altri mezzi.

Beh, la mia è, ripeto, una domanda da Absolute Beginner, e anche un po’ da pigro; ammetto di non aver spulciato e riflettuto su tutta la documentazione.

Le mia domanda nasce dalla seguente osservazione:

sarebbe comodo ottenere nelle fasi di analisi (dello standard o di customizzazioni esterne) / design & debugging un tool di più alto livello rispetto a quanto già offre NAV, che permetta di ottenere un diagramma di sequenza degli oggetti invocati.

Una cosa simile, ma non un diagramma di sequenza, è ottenibile col Code Coverage ma i risultati prodotti sono:

  1. una lista di tutti gli oggetti chiamati e raggruppati per tipo (senza nessuna indicazione su “chi chiama chi”)

  2. il codice effettivamente eseguito dagli oggetti richiamati

Una prima soluzione (una prima idea abbozzata anzi) potrebbe esser quella di esaminare in maniera automatica/sistematica il codice effettivamente eseguito con un tool ad hoc (mi viene in mente il Perl, particolarmente adatto alla costruzione di strumenti pe l’analisi del testo), ma mi vengono in mente dei casi, che qui per brevità tralascio, in cui si verificano situazioni indecidibili/ambigue (comunque un passo avanti, chi analizza dovrebbe poi metterci un po’ del suo ma partendo da una base decisamente superiore)

La seconda idea che mi viene in mente è analizzare cosa effettivamente fa NAV quando un oggetto ne invoca un altro: mi sembra che tali informazioni possano essere raccolta analizzando come e quando “Il Sistema” (lo so’, è una definizione abbastanza nebulosa) interagisce con la tabella Object.

Esempio: invocato un oggetto? allora guarda la Tab. Virt. Object per vedere se in essa è già presente, se non lo è lo inserisce; tali informazioni saranno poi utili al Code Coverage per prospettare la lista degli oggetti invocati.

Ecco da cosa nasce la mia domanda, ma non mi stupirei se qualcosa esistesse già, magari non ho cercato abbastanza ( io ho solo trovato dei diagrammi di classi ma che danno informazioni di natura “statica” e non “dinamica”)

Il mio interesse sarebbe quindi costruire un tool simile (ogni collaborazione-critica-consiglio è più che ben accetta :slight_smile: )

Naturalmente qualcuno potrebbe obbiettare da subito: “Ma quello che cerchi esiste già, svegliati: IL DEBUGGER ! ! ! !”

Beh vabbe’, ma allora buttiamo a quel paese l’ingegneria, torniamo all’assembler e alle valvole termoioniche che sono solo un po’ più lente e grosse degli attuali transistor.

E’ vero che tutto questo si può fare col debugger, ma in certe situazioni è come disossare un dinosauro con un taglia-unghie.

Fatemi sapere, e grazie comunque

Ottima definizione del debug! [:D]

Non so se esista un modo per ottenere quello che cerchi. Sarebbe un bellissimo strumento, ma non ho idea di come si potrebbe realizzare. Hai provato a fare qualche ricerca nel forum internazionale?

Col mio inglese scritto faccio prima a costruire il tool (e lo farò, non subito ma lo farò) piuttosto che tradurre la mail [:D]

Ciao

Secondo me non è possibile farlo.

In primis perchè il code coverage non è visibile nell’object designer pertanto non puoi provare ad aggiungerci trigger sperando che il client li onori. Inoltre sono tabelle temporanee gestite localmente dal client, pertanto non puoi nemmeno collegarci trigger SQL se il DB fosse su tale motore.

L’unica soluzione efficace che ho visto è partire dal fob del client monitor version list DEBUGW13.10.01 e svilupparci sopra le proprie statistiche.

Matteo

Certamente.

Ecco il client monitor è una di quelle cose su cui, come detto, non ho spulciato e riflettuto abbastanza (son pigro e al momento sono solo idee/proposte quelle di cui parlo) ma su cui credo sia il caso di approfondire a riguardo.

Vorrei però precisare una cosa:

nel mio secondo intervento ipotizzavo 2 possibili " metodi d’attacco" (analisi del sorgente & sorveglianza della VT Object) che comunque non sono mutuamente esclusivi ma, anzi, possono collaborare (magari anche con l’ausilio del debugger, aiuto ridotto al minimo perchè sennò vale la mia osservazione precedente).

Mi spiego meglio, ma comunque molto sinteticamente, tralasciando i molti dettagli:

il monitoraggio della VT, dato che un simile approccio si attuerebbe in fase di analisi/sviluppo/debug in cui l’efficenza non ha quasi importanza, potrebbe anche essere affidato alla forza bruta: si cicla periodicamente su tale tabella per vedere se ci son state delle write.Ammetto che il mio requisito di A-sincronicità, almeno per il momento, si perde.

Per quanto riguarda le (possibili) read sulla VT si può ricorrere all’analisi (automatizzata) del sorgente (gli oggetti non “nascono” a caso).

Discorso analogo per le write, recuperando, forse, il requisito di A-sincronicità.

Ovviamente a tali strumenti ne va’ aggiunto un 3°: l’analista (che però partirebbe da delle basi decisamente più elevate: lo scopo ultimo è questo)

Infine, c’è un’ulteriore possibilità (non trascurabile): sono andato a infilarmi in un caso impossibile :smiley: (ma non credo, o comunque non credo che non si possa far proprio nulla per migliorare almeno un po’ la situazione).

Ciao

Ciao, non è possibile realizzare quello che dici. I trigger e le chiamate sono gestite dal client Navision al quale tu non hai accesso se non come eseguibile. Se hai voglia di sbatterti a capire di più puoi sempre aprire il database Navision creato in SQL e spulciare in giro alla ricerca di trigger…ma non credo che comunque ti porti molto lontano.

Anche la codeunit 1 è interessante. Potresti vederti come viene gestito il log modifiche (granulo di Navision che inserisce un log ad ogni modifica dei record).

Marco

Ciao, da ignorante in materia ho semplicemente fatto una ricerca e ho trovato questo:

http://www.navitools.com/samplesProcess.html

Forse è quello che stai cercando?|

c’è una versione dimostrativa gratuita scaricabile. Non so quanto costi e non ho provvigioni [:(]