It is currently 8 June 2025, 23:03 Advanced search

Salvataggio altre classi DO in after save

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

Salvataggio altre classi DO in after save

Postby d.termini » 19 July 2021, 6:42

InDe Cloud 21.0.5

Ho 2 classi DO, quando la classe A viene salvata deve salvare anche una classe B, non sono relazionate tra loro, è una sorta di log.
Ho implementato questo salvataggio nell'evento onSave della classe A quando la fase è afterSave, ma ottengo SEMPRE questo warning: "transaction is closed unexpectedly".
Il salvataggio della classe B lo fa con yield.

C'è qualcosa che posso fare per evitare questo warning (anche spostare il salvataggio se necessario)? Mi sta riempiendo i log per niente.
d.termini
 
Posts: 1656
Joined: 13 November 2017, 8:41

Re: Salvataggio altre classi DO in after save

Postby majinbu » 19 July 2021, 12:20

Ciao,
avevo riscontrato un problema simile ma, non avendo ne tempo ne la necessità di usare per forza la classe DO per salvare il documento B, nell'onSave del primo documento phase 'afterSave' lancio una brutale query di update della tabella collegata al documento B e in questo caso essendo un'altra transazione non mi da alcun problema.

Detto ciò nell'esempio "doc-design-patterns" c'è questo codice che francamente non ho provato a replicare esattamente..vale la pena di confrontarlo secondo me, e vedere se seguendolo esattamente, il problema persiste ;)

[
Code: Select all
App.NWBE.Product.prototype.onSave = function (options)
{
  // When a document is saved, the onSave event is fired five times, one for each save phase.
  // The options.phase property contains the number of the actual phase.
  // 1) App.Document.savePhases.beforeSave ->
  //    before any database operation, used to adjust the document data
  // 2) App.Document.savePhases.inserting ->
  //    the document in "inserted" state are actually inserted into the database
  // 3) App.Document.savePhases.updating ->
  //    the document in "updated" state are actually updated into the database
  // 4) App.Document.savePhases.deleting ->
  //    the document in "deleted" state are actually deleted from the database
  // 5) App.Document.savePhases.afterSave ->
  //    after any database operation, used to adjust related documents
  //
  // Check for "after save" phase
  if (options.phase === App.Document.savePhases.afterSave) {
    // If unit price has changed...
    if (this.UnitPrice !== this.getOriginalValue(App.NWBE.Product.UnitPrice)) {
      //
      // Load a collection of related order details
      var c = yield App.NWBE.OrderDetail.loadCollection(app, {ProductID : this.ProductID});
      //
      // Update unit price
      c.find(undefined, {UnitPrice : this.UnitPrice});
      //
      // Save the collection (using the same database transaction)
      yield c.save();
    }
  }
};
majinbu
 
Posts: 34
Joined: 4 June 2020, 8:15

Re: Salvataggio altre classi DO in after save

Postby d.termini » 19 July 2021, 14:19

majinbu wrote:Ciao,
avevo riscontrato un problema simile ma, non avendo ne tempo ne la necessità di usare per forza la classe DO per salvare il documento B, nell'onSave del primo documento phase 'afterSave' lancio una brutale query di update della tabella collegata al documento B e in questo caso essendo un'altra transazione non mi da alcun problema.


Ciao, grazie per il suggerimento, all'inizio era partito tutto con gli eventi per l'aggiornamento automatico dell'interfaccia e quindi abbiamo usato le classi DO a pioggia, ma effettivamente essendo solo un log non è che mi serva proprio usare le classi DO per salvare il documento B, provo questa strada intanto.

EDIT: pare funzionare, grazie mille!
d.termini
 
Posts: 1656
Joined: 13 November 2017, 8:41


Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 8 guests

cron