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]> wrote:

>> On Feb 5, 2015, at 1:38 PM, Theodore Petrosky <[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( 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]> 
>> wrote:
>> 
>>> ERXExistsQualifier to the rescue!
>>> 
>>>> On Jan 29, 2015, at 9:12 AM, Theodore Petrosky <[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( 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( 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.
> 

 _______________________________________________
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