Newsgroup: it.comp.lang.vo-clipper
Titolo: [VO] UserName su Rlock

Ciao a tutti.
Sono un utente 'giovane' di VO (1 anno), ma sono già al sesto progetto, e
studiare mentre si tenta di produrre è drammatico. Si riscrivono le stesse
cose 100 volte...
Nel frattempo non sono riuscito a trovare il modo di sapere il nome utente
(NT4) di chi ha Rlock(ato) un record, in modo da avvisare l'utente con un
messaggio tipo "Telefona a GIORGIO, è lui che sta bloccando la scheda
fornitore che ti serve!" (la rete NT è dislocata su 2 piani).
Qualche idea (API) che scluda "file semaforo"?
Ciao
Massimo

Massimo... per quale motivo fai bloccare il record ? per evitare questi
inconvenienti devi bloccare il record per lo stretto tempo necessario a
scrivere i dati (pochi millisecondi). un buon "posto" dove fare questa
operazione e nel classico bottone di Ok dove salvi i dati. A tal proposito
tempo fa ho scritto un articolo su DEV di Infomedia (che spero tu legga !!!)
nella rubrica di VO il numero è il 58 del Dicembre 1998 che puoi richiedere
a Infomedia
Spero di esserti stato di aiuto
Ciao
Enio Donci

 wrote in message
8ladkk$aqk$1...@nslave2.tin.it...


 utenti che dovessero aver aperto lo stesso record...
Certo ... questo è ovvio, ad esempio io ho spezzato il record in gruppi di
campi
che riguardano dati dello stesso gruppo ... es.   Cod. -Cognome- nome- data
nasc.- indirizzo .... ecc  in un DBF    e  Part.iva - modal. di pagam.
ecc... in un altro DBF .    Penso che raramente un utente cambia il cognome
nome ecc...,
ancora meno probabile che lo faccia in contemporanea ad un altro... Tuttavia
è difficile gestire situazioni di questo tipo (aggior. dati) dipende un pò
(secondo me!) dal tipo di applicazione e dal cliente, se è una grossa
azienda il problema si complica, ma se sono tre o quatro utenti è più
semplice.
Una soluzione al tuo caso potrebbe essere di aggiungere due campi al
database. Uno che ti serve da flag per bloccare il record e l'altro per
memorizzare il nome utente che ha bloccato il record. nel messaggio di
avvertimento che manderai all'utente che vuole modificare il record
bloccato, gli spedisci anche il nome dell'altro.
spero di esserti stato utile
Ciao
Enio


 memorizzare il nome utente che ha bloccato il record
Questa era la vecchia soluzione che avevo adottato, ma scrivere sul file uno
o più flag semaforo porta un piccolo vantaggio (rlock solo per un istante)
ed un grande svantaggio: se cade la WorkStation io cado nell'annoso problema
del rollback, e devo occuparmi di scrivere funzioni bruttissime per
sbloccare questi flag su file.
La procedura è vasta, e durante una qualunque operazione, le "anagrafiche"
che "donano" i loro dati alla funzione, sono in linea per l'utente, e
modificabili.
L'esempio dei fornitori non è casuale: 3 utenti in ufficio acquisti per gli
ordini, 4 utenti in amministrazione, 6 utenti in Planning produzione
(svincolano le attività di produzione sulla consegna dei fornitori...)
ecc....
A suo tempo Visual Basic è stato scartato perchè non garantiva un sistema di
locking sufficientemente controllabile, ed ora sono discretamente sicuro con
quello che adotto.
... siamo un po' fuori tema parlando di tecniche di programmazione?
Coinvolgere altri sul tema del rollback?
Oppure resto con la mia incognita: come posso leggere su NT il nome
dell'utente che ha effettuato un Rlock?
Grazie per i preziosi consigli
Ciao
Massimo

 tempo fa ho scritto un articolo su DEV di Infomedia (che spero tu legga !!!)
Io non la leggo. In effetti non compro più da diverso tempo riviste di
informatica ma mi sono buttato su libri e documentazione varia che trovo
su Internet. L'ultima che compravo era Computer Programming ma poi non
mi ha soddisfatto più in quanto divenuta troppo al servizio del mercato,
esattamente come tutte le altre. DEV cos'ha di buono? Forse l'avrò
guardata una volta ma non mi aveva entusiasmato.
EMG

 piani di distanza?
Direi di si. Non c'è alcun motivo di farlo. E ce ne sono invece molti
per non farlo.
EMG


-----------------------------
Fabio Cresta
EDP Consultant & VO/Jasmine developer ITALY
President of Clipper/Visual Objects/Jasmine User Group Italy
e-mail: 
fcr...@tin.it
 
fcr...@windevs.com
web: 
http://www.windevs.com
------------------------------

 dell'utente che ha effettuato un Rlock?
Purtroppo su questo non posso aiutarti.
EMG

Grazie a tutti per le ottime opinioni in merito, soprattutto grazie a Fabio
che ha esposto il metodo che più mi ha convinto, perchè lascia all'utente la
scelta sul da farsi senza nascondere nessuna operazione come "scontata".
Non sono molto lontano dall'implementarlo, in mezzora la funzione di
validazione è fatta.
Grazie a tutti.
Quando volete filosofeggiare di ROLLBACK....
Ciao
Massimo

       Cosa vuoi fare?
Ti sei ricordato di sbloccare il record prima di mostrare tale
messaggio? Altrimenti rimarrebbe bloccato fin quando l'utente non
risponde. Poi lo dovresti ribloccare in caso di risposta affermativa.
Però non mi piace molto perché questo impedisce di assicurare qualche
tipo di integrità che si potrebbe rendere necessaria in quanto spezza in
due un'operazione che dovrebbe essere atomica dal punto di vista del
lock.
EMG

On Sat, 22 Jul 2000 13:19:54 GMT, 
fcr...@tin.it
 (Fabio Cresta - Italy) wrote:
Un sistema alternativo e' quello descritto del libro di Rick Spence
"Programmare in Clipper"
Praticamente sostituisce il confronto di tutti variabili
con le corrispondenti salvate nell'array con un campo
SIGLA (numerico) da aggiungere alla struttura della tabella.
Ogni volta che viene scritto il record il campo viene incrementato.
Per chi non ha il libro riporto l'esempio in pseudocodice:
Apre database
scritto:=falso
interrotto:=falso
Do while !scritto and. !interrotto
       scarica il record su variabili  // lettura rilettura
       salva il campo SIGLA             //in pratica fatto dalla parte sopra
       edita le variabili                        // modifica eccetto SIGLA
       blocca il record
       confronta la variabile SIGLA con SIGLA del record corrente
       if uguali
          incrementa SIGLA
         scrive i dati                               //incluso SIGLA
         sblocca il record
         scritto=vero
      else
          sblocca il record
          interrotto = al_box("impossibile aggiornare, riprovare"=No_Button
       endif
enddo
my 2 cent
Eugenio Belli.
 

 Ogni volta che viene scritto il record il campo viene incrementato.
Personalmente non mi piace dover aggiungere campi di questo tipo alle
tabelle. Ma č piů una reazione istintiva che un'obiezione basata su
fatti concreti. Io perň ho imparato, negli anni, a fidarmi dei mio
istinto. :-)
EMG



In realta', nella libreria, ho due modi di funzionamento:
1. prima eseguo il controllo per vedere quali campi eventualmente
hanno il problema,(quindo a record sbloccato), faccio decidere
all'utente cosa fare e, alla fine, quando non ho piu' conflitti,
blocco il record, scrivo e sblocco. Ogni volta che l'utente prende una
decisione, ricomincio dall'inizio il test per evitare che nel
frattempo qualcuno abbia modificato altri campi. 
2. Uso un timer, ossia blocco il record ed eseguo i controllo. Se,
dopo un certo tempo, l'utente non da conferma, do una serie di avvisi
(3) e, alla fine sblocco il record e ripristino a video i valori
originali
Ciao
-----------------------------
Fabio Cresta
EDP Consultant & VO/Jasmine developer
President of Clipper/Visual Objects/Jasmine User Group Italy
fcr...@tin.it
http://www.windevs.com
ITALY
------------------------------

          scrive i dati                               file://incluso SIGLA
