Let's see.

Sent from my iPad

> On Nov 17, 2013, at 1:23 PM, Dan Haywood <[email protected]> 
> wrote:
> 
> OK, to summarise the stuff below, we have entities:
> 
> public class Party {
>    id;
> }
> 
> public class Transaction {
>    party;
>    transactionDate;
>    transactionType;
>    faceValue;
> }
> 
> and you've defined a class that specifies the aggregated data (I'm omitting
> the "ViewModel" suffix.
> 
> public class DailySalesTotalForParty  {
>   party;
>   transactionDate;
>   totalAmount;
> }
> 
> There are two ways to address this
> 
> 1. (as you've done) define a SQL view and use JDO @PersistenceCapable on
> DailySalesTotalForParty.  So far as Isis is concerned, this class is just
> an entity, and so you can define a domain service and query for it in the
> usual way).  In this case there's NO NEED (I think) for this class to
> implement Isis' ViewModel interface.
> 
> 2. alternatively, you can NOT use a SQL view, and instead only use an Isis
> ViewModel.   Here the view models are instantiated by a domain service, and
> JDO doesn't know anything about them.  You can see examples of this in the
> todo app [1], [2].
> 
> Put another way, in (1) the view is defined in the database layer, in (2)
> the view is done in the domain layer.
> 
> ~~~
> In your other email you said you want to show the daily sales for a given
> party.  So:
> 
> a) add a JDO Query so that you can filter the
> DailySalesTotalForPartyViewModel by partyId:
> @Query(name="dailySales", query= "select from
> DailySalesTotalForPartyViewModel  where partyId = :partyId)
> 
> b) write a domain service that exposes this:
> 
> public class DailySalesTotalForPartyService {
> 
>    @NotContributed(As.ACTION)  // ie contributed as a collection
>    public List<DailySalesTotalForParty> dailySales(Party party) {
>        return allMatches(new QueryDefault("dailySales", "party", party));
>    }
> }
> 
> This "dailySales" action should then appear as a contributed collection, ie
> as if there's a "dailySales" collection of Party itself.
> 
> ~~~
> 
> If you want to go use an Isis view model, then you don't need the
> @PersistenceCapable annotation or SQL VIEW, but you will need to replicate
> aggregation logic in a domain service.  That is, you'd still have a service:
> 
> public class DailySalesTotalForPartyService {
> 
>    @NotContributed(As.ACTION)  // ie contributed as a collection
>    public List<DailySalesTotalForParty> dailySales(Party party) {
>        ...
>    }
> }
> 
> but what does in the implementation would be similar to [1].
> 
> HTH
> Dan
> 
> 
> [1]
> https://github.com/apache/isis/blob/5e9d586a3a1dcb9e4cf23470f6cb4ef43ebae06d/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/app/ToDoItemAnalysis.java
> [1]
> https://github.com/apache/isis/blob/5e9d586a3a1dcb9e4cf23470f6cb4ef43ebae06d/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/app/ToDoItemsByCategoryViewModel.java

Reply via email to