How recent is your Wonder? The exists qualifier  is relatively new (past couple 
years). 

If you give me a stack track trace I might be able to further diagnose it.

Thanks!

Dave

> On Feb 6, 2015, at 9:03 AM, Theodore Petrosky <[email protected]> wrote:
> 
> before I beat myself up too much. I have ERExtensions in the class path. Why 
> would I get this error:
> 
> java.lang.UnsupportedOperationException: Unknown qualifier type 
> 'er.extensions.eof.qualifiers.ERXExistsQualifier’.
> 
> 
> On Feb 5, 2015, at 4:51 PM, David Avendasora <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>>> On Feb 5, 2015, at 1:38 PM, Theodore Petrosky <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> David,
>>> 
>>> I am deliberately not responding to the list. Would you be interested in 
>>> helping me get my head around this? If yes, what I can do, is when we are 
>>> complete with this part, I will document it and submit it to the wiki docs.
>>> 
>>> What do you think, I can create a concrete example. The goal would be to 
>>> add the static EOQualifier methods and create the rules that access them.’
>> 
>> I help with what I can. I’m pretty busy, but qualifiers are kinda my thing. 
>> :-)
>> 
>>  I would really like it if you also posted this to the list as that is where 
>> a lot of people search.
>> 
>>> like this guy a static method on Person:
>>> 
>>> Person <->> PersonInstrument <<-> Instrument <->> InstrumentBook <<-> Book
>>> 
>>> Then:
>>> public static synchronized EOQualifier thatAreForPersonByInstrument(Person 
>>> person) {
>>>     return Book.INSTRUMENT_BOOKS.containsAnyObjectSatisfying( 
>>>            InstrumentBook.INSTRUMENT.dot( 
>>>            Instrument.PERSON_INSTRUMENTS.containsAnyObjectSatisfying( 
>>>            PersonInstrument.PERSON.is <http://personinstrument.person.is/>( 
>>> person ) ) ) );
>>> }
>>> 
>>> how would you create a rule to access use this.
>> 
>> When I’ve done D2W stuff where I don’t want the full list of values for a 
>> relationship, I used the “restrictedChoiceKey"
>> 
>> 90 : ((pageConfiguration like 'Create*' or pageConfiguration like 'Edit*') 
>> and (propertyKey = 'book')) => restrictedChoiceKey = "object.availableBooks" 
>> [com.webobjects.directtoweb.Assignment]
>> 
>> You specify the regular relationship key of the relationship you want to set 
>> in this case "(propertyKey = 'book’)" , but set the rule’s key to 
>> "restrictedChoiceKey” and point it to a different keypath that contains the 
>> qualified (and sorted, if needed) list of valid values, in this case 
>> “object.availableBooks”.  (the “object” in the binding keypath just means to 
>> look on the same object that the “propertyKey” binding is for. 
>> 
>> In the code below, I’m assuming “Person” is also the class that has the 
>> “book” propertyKey, if it isn’t you’ll just have to change how you get the 
>> person object.
>> 
>> The method would look something like this:
>> 
>> public NSArray<Book> availableBooks() {
>>      NSArray<Book> allBooks = [however you get the list of all books from 
>> the DB];
>>      EOQualifier thatAreAvailableToPerson = 
>> Book.thatAreForPersonByInstrument(this);
>>      MSArray<Book> availableBooks = ERXQ.filtered(allBooks, 
>> thatAreAvailableToPerson);
>>      return availableBooks;
>> }
>> 
>> That’s really about it.
>> 
>> I hope this helps, and please do post this back to the list in some form!
>> 
>> Dave
>> 
>>> 
>>> Ted
>>> 
>>> On Feb 5, 2015, at 9:09 AM, David Avendasora <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>>> ERXExistsQualifier to the rescue!
>>>> 
>>>>> On Jan 29, 2015, at 9:12 AM, Theodore Petrosky <[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> 
>>>>> The Person has an instrument. The Book has an instrument. so the popup 
>>>>> list should be only those books with the same instrument.
>>>> 
>>>> To match instances of book that are for an instrument that is related to a 
>>>> given person:
>>>> 
>>>> If this is your model:
>>>> Person <<-> Instrument <->> Book
>>>> 
>>>> Then:
>>>> public static synchronized EOQualifier thatAreForPersonByInstrument(Person 
>>>> person) {
>>>>    return 
>>>> Book.INSTRUMENT.dot(Instrument.PERSONS.containsAnyObjectSatisfying( person 
>>>> ) );
>>>> }
>>>> 
>>>> OR If this is your model (seems more likely):
>>>> 
>>>> Person <->> PersonInstrument <<-> Instrument <->> InstrumentBook <<-> Book
>>>> 
>>>> Then:
>>>> public static synchronized EOQualifier thatAreForPersonByInstrument(Person 
>>>> person) {
>>>>    return Book.INSTRUMENT_BOOKS.containsAnyObjectSatisfying( 
>>>>           InstrumentBook.INSTRUMENT.dot( 
>>>>           Instrument.PERSON_INSTRUMENTS.containsAnyObjectSatisfying( 
>>>>           PersonInstrument.PERSON.is <http://personinstrument.person.is/>( 
>>>> person ) ) ) );
>>>> }
>>>> 
>>>>> But one layer deeper. a Person is assigned to one or many Shows. the 
>>>>> Books belong to a show. So if Person 1 only play one show and plays viola 
>>>>> (I know its a handicapped Person), the popup list only shows that one 
>>>>> book as available to assign.
>>>> 
>>>> Person <->> ShowPerson <<-> Show <->> Book
>>>> 
>>>> public static synchronized EOQualifier thatAreForPersonByShow(Person 
>>>> person) {
>>>>    return Book.SHOW.dot( 
>>>>                Show.SHOW_PERSON.containsAnyObjectSatisfying( 
>>>>           ShowPerson.PERSON.is <http://showperson.person.is/>( person ) ) 
>>>> );
>>>> }
>>>> 
>>>> And to combine them together:
>>>> 
>>>> public static synchronized EOQualifier thatAreForPerson(Person person) {
>>>>    return Book.thatAreForPersonByInstrument( person )
>>>>               .and( thatAreForPersonByShow( person ) );
>>>> }
>>>> 
>>>> By making these static methods, not only can you use that in your fetch 
>>>> specification, but you can also use it to check to see if a book is 
>>>> available to a person (for example, in validateForSave, or wherever else):
>>>> 
>>>> public boolean isVisibleTo(Person person) {
>>>>    return thatAreForPerson(person).evaluateWithObject(this);
>>>> }
>>>> 
>>>> Dave
>>>> 
>>>> 
>>>> —————————————————————————————
>>>> WebObjects - so easy that even Dave Avendasora can do it!™
>>>> —————————————————————————————
>>>> David Avendasora
>>>> Senior Software Abuser
>>>> Nekesto, Inc.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>> 
>> 
>> —————————————————————————————
>> WebObjects - so easy that even Dave Avendasora can do it!™
>> —————————————————————————————
>> David Avendasora
>> Senior Software Abuser
>> Nekesto, Inc.
>> 
> 


—————————————————————————————
WebObjects - so easy that even Dave Avendasora can do it!™
—————————————————————————————
David Avendasora
Senior Software Abuser
Nekesto, Inc.





 _______________________________________________
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