Query dinamiche in Instant Developer Cloud

Nel caso io debba utilizzare una query complessa e dinamica su Instant Developer Cloud, quindi se deve avere delle clausole where condizionate da codice e che non riesco a replicare mediante i filtri in una datamap, come posso fare?

Mi viene in aiuto il metodo prepare del database, che insieme a filterBy e orderBy, mi permette di realizzare una query dinamica efficace.

Nel metodo prepare posso scrivere la parte principale della query in modo strutturato, così viene parsata correttamente dal framework, e poi inserire le condizioni aggiuntive nella where.

Faccio un banale esempio:

  let empployeeID = 2;
  let dm = new App.DataMap(app);
  dm = App.Nwind.prepare(app," \
    select          \
      *             \
    from            \
      Orders        \
  ");
  //
  dm.filterBy("EmployeeID = " + empployeeID);
  dm.orderBy = "OrderDate desc";
  yield dm.load();
  console.log("PG - dm :", dm);

In esecuzione questa è la query che viene eseguita:

select
  OrderID,
  CustomerID,
  EmployeeID,
  OrderDate,
  RequiredDate,
  ShippedDate,
  ShipVia,
  Freight,
  ShipName,
  ShipAddress,
  ShipCity,
  ShipRegion,
  ShipPostalCode,
  ShipCountry
from
  Orders
where
  EmployeeID = 2
order by
  OrderDate last desc

L’esempio è molto semplice ma serve essenzialmente a farvi capire la potenza della prepare.

4 Mi Piace

Paolo,
avevo provato ad usare tempo fa il filterBy anche se non con prepare in quanto noi utilizziamo maggiormente datamap legate a tabelle di un datamodel. Il problema che avevo riscontrato è che una volta applicato il filterBy non poteva essere rimosso (come fai con clearFilters(“nomefiltro”) o clearFilters()) per cui il comportamento che ottenevo era onload della view applicavo un filterby prima del load della dm ma poi se le condizioni del filterby cambiavano non riuscivo ad applicare un filterBy diverso. Sai se questa cosa è stata risolta? o magari usando le query (e prepare) per caricare le dm il problema non c’è.

1 Mi Piace