Thanks Ramsey, but...

On 08.07.2013, at 19:49, Ramsey Gurley <[email protected]> wrote:

> It seems like the approach is backwards.
> 
> The problem with querying on Edoc is you need multiple qualifiers (status 
> equals and comment equals and statement equals) to apply to the same related 
> Refs. For a to-one, that's no problem, but Refs is a to-many. I think if you 
> try to fetch against the to many, you just get all the edocs with refs that 
> match any of the qualifiers (status equals or comment equals or statement 
> equals).

Right, that's what's happening (I DO query on Refs)
> 
> Given that is the case, I would fetch Refs instead, prefetching the Edocs and 
> then finding the overlap between them in memory.
> 

That's clear and I know how to do this

> EOQualifer q1, q2; //more as needed
> q1 = Ref.COMMENT.eq('"foo").and(Ref.STATEMENT.eq(s3));
> q2 = 
> Ref.COMMENT.eq("bar").and(Ref.STATUS.eq("baz")).and(Ref.STATEMENT.eq(s10));
> EOQualifier q = ERXQ.or(q1, q2);
> 
> NSArray<Ref> refs = //fetch Refs matching q, prefetch related edocs
> 
> refs1 = //refs matching q1
> refs2 = //refs matching q2
> 
> //If edoc allows null, you'll need to remove null values too
> edocs1 = Ref.EDOC.atUnique().arrayValueInObject(refs1);
> edocs2 = Ref.EDOC.atUnique().arrayValueInObject(refs2);
> 
> minus = ERXArrayUtilities.arrayMinusArray(edocs1, edocs2);
> union = ERXArrayUtilities.arrayMinusArray(edocs1, minus);
> 

Now what? I want to use as much "plain" D2W as possible. So I am looking to 
build a qualifier that I can stuff back into the display group (standard WO 
practice for a property level custom query component). My understanding is that 
for this to work I need one final big complicated EOQualifier.

Another idea was to have a next page delegate that does all the fetching and 
merging etc and then return a standard D2WListPage. But what would I feed to 
the display group? I think the only thing I have at that moment is an NSArray 
of EOs. Does an ArrayDataSource make sense here? Would it work when the user 
wants to edit a record from the displayed list?

> If these are really large arrays of EOs then doing it in memory might not be 
> an option. If that's the case, just give up and become a goat herder on Niue.
> 
What if I don't like goats?

> BTW, never make side effects in your EO's accessor methods. You will regret 
> it.
> 
Yes, I know - and I don't do that. In my case I simply let the WORep do its 
magic and in the setter on the loopvar I register what has been set.

> Ramsey
> 
> <376.jpg>
> 
Nice, I like that one (Tiger on a surfboard in a pool)

> 
> On Jul 8, 2013, at 4:03 AM, Markus Ruggiero wrote:
> 
>> I am not even able to really figure the plain SQL statement :-((
>> 
>> Model:
>> 
>> product <-->> edoc <-->> refs <<-> statement
>> 
>> refs has a comments and a status attribute
>> 
>> An edoc is defined by its assigned statements. Each single assignment can 
>> have a specific status and comment. Which statements out of a pool are 
>> assigned is determined by the type of edoc. Each edoc is product specific 
>> with possibly specific comments and status. Thus the same statement can be 
>> assigned to many edocs (one edoc of a given type per product).
>> 
>> User wants to find edocs of a specific type, thus the list of assigned 
>> statements is already given.
>> 
>> The list of statements for the given edoc type is shown inside a repetition 
>> where the user can specify for each possible ref a comment and a status as 
>> search criteria. I need to build a qualifier to retrieve edocs that have 
>> references to statements and the reference is qualified by status and 
>> comment.
>> The whole thing lives inside D2W. The list is shown with a custom property 
>> level query component in a standard D2WQuery page, the result is then shown 
>> in a standard D2WList page. My intention is to build the display group 
>> qualifier incrementally inside the setComment() and setStatus() accessor 
>> methods in each pass through the WORepetition. D2W will then take care of 
>> any other property level query value on the rest of the query page. This all 
>> works, it's just that I have not yet succeeded in building that particular 
>> qualifier. Either I find too much data or I do not find anything at all.
>> 
>> Example:
>> 
>> Assume the list of assignable statements is S1... S10
>> I show a repetition with 10 items (one item per statement)
>> The users enters "foo" for the comment on line 3 (corresponding to statement 
>> S3) and "bar" on line 10 (corresponding to statement S10)
>> The selection should now return all edocs where the reference to statement 
>> S3 has the comment "foo" AND the reference to statement S10 has the comment 
>> "bar", it must not return edocs where only one condition is met. To make 
>> things even more interesting the user might also throw in some selection on 
>> status, either in combination with a comment or individually. I need all the 
>> edocs that fulfill ALL criteria.
>> 
>> It looks so innocuous but when I try to come up with something it becomes 
>> more and more complicated. Can anyone help?? The 
>> 
>> Thanks a lot
>> ---markus---
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/rgurley%40smarthealth.com
>> 
>> This email sent to [email protected]
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to