English
Instant Developer Foundation Documentazione
  • Estensibilità
  • Libreria
  • INDE Extension
  • Oggetti
  • Avanzate

Obj Drop

procedura copia link

Scopo

Effettua il drag & drop di un oggetto. L'effetto dell'operazione dipende dal tipo degli oggetti coinvolti e dallo stato dei tasti Control, Shift e Alt, così come accade nel normale utilizzo di IN.DE.

Può essere utilizzata per impostare il legame Master-Detail tra due pannelli, tirando il primo sul secondo con il tasto Shift premuto.

Sintassi

INDE.ObjDrop(id oggetto, id oggetto tirato, stato tasti, id transazione)

Argomenti

ID Oggetto Puntatore dell'oggetto su cui tirare
ID Oggetto Tirato Puntatore dell'oggetto da tirare
Stato Tasti Stato dei tasti Ctrl, Shift e Alt
(vedi la lista valori Tipi Tasto contenuta nell'esempio)
ID Transazione E' un numero opzionale, rappresentante la transazione da usare per effettuare il drop. Se non specificato la modifica avviene fuori transazione.

Esempio di codice

// ****************************************************************************
// Evento notificato al documento quando l'utente esegue una operazione di drop
// di un documento su questo documento, in un albero con drag & drop attivo
// ****************************************************************************

event OggettoBase.OnDrop(
  IDDocument SourceDocument // Documento tirato su questo documento
  boolean ShiftKey          // Vero se l'utente teneva premuto il tasto Sh...
  boolean AltKey            // Vero se l'utente teneva premuto il tasto Al...
  boolean ControlKey        // Vero se l'utente teneva premuto il tasto Co...
  inout boolean Cancel      // Se lo si imposta a True si impedisce l'esec...
)
{
  Transazione trans = null // 
  // 
  try
  {
    Documento doc = null   // 
    OggettoBase obj = null // 
    // 
    obj := OggettoBase.Cast(SourceDocument)
    doc := obj.GetDocument()
    // 
    // Inizio una nuova transazione

    trans := doc.BeginTransaction(FormatMessage(Drop |1 su |2, Nome, obj.
      Nome, ??, ??, ??))
    // 
    // Se gli oggetti sono dello stesso tipo

    if obj.Tipo = Tipo
    {
      // Copio le proprietà dell'oggetto tirato nell'oggetto su cui ho tirato
      EsempiMS.INDE.UpdateObject(Puntatore, obj.Puntatore, trans.ID)
    }
    else
    {
      // Effettuo un D&D tra i due oggetti
      EsempiMS.INDE.ObjDrop(Puntatore, obj.Puntatore, If(ShiftKey, Shift
         , ZERO) | If(ControlKey, Control, ZERO) | If(AltKey, Alt, ZERO),
         trans.ID)
    }
    // 
    trans.Commit()
    // 
    // Aggiorno gli oggetti da INDE

    this.LoadChildrenFromINDE()
    obj := OggettoBase.Cast(obj.Parent)
    obj.LoadChildrenFromINDE()
  }
  catch
  {
    trans.Rollback()
  }
}
  • Le modifiche fatte fuori transazione non cambiano lo stato del documento, quindi se il documento non era modificato prima dell'operazione non lo sarà neanche dopo.
  • Le modifiche fatte fuori transazione non utilizzano il sistema Team Works anche se abilitato per il progetto corrente. Non viene quindi verificato che l'utente possa prendere un lock sugli oggetti modificati dall'operazione.
  • Se uno dei puntatori passato a parametro non appartiene al progetto corrente, viene generata un'eccezione.

Ultima modifica: 05/03/2009 / Validità: da 7.5.3400

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum