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]