Re: Binding query variables (EOF Fetch Spec Qualifier) under IB

Ryan Poling <[email protected]> Tue, 1 Mar 2005 08:11:53 -0800
Newsgroups gmane.comp.web.webobjects.eof
Message-ID <[email protected]>
Hi,

Maybe I'm missing what your problem is, but I've been successful 
binding interface items to use for queries in Interface Builder.  I'm 
building a Java Client App, but I think it would be the same for you.

Here's what I do:

- Control drag and connect from text field to EODisplayGroup in IB main 
window.
- From EOTextAssociation in the inspector, choose 'value'.
- The query variables are at the bottom of the list if you scroll down 
- things like '@query=', '@query>', etc.

 From what I've seen - it's possible to bind the fields in two ways.

1.  You can have fields dedicated only to queries - bind them up as 
described above.  These will form a query whenever you send the display 
group the qualifyDataSource message (you can bind this up through a 
button for example).  I'm only using this in one place, but it seems to 
work okay.

2.  You can use the same text fields for display as for query.  This is 
mostly what we do - connect up a button and have it send the 
enterQueryMode message to your display group.  When in query mode, the 
text fields will act as qualifiers for your query - when in edit mode, 
they display data from the currently selected EOEnterpriseObject in 
your display group.  This has worked fairly well for us.

Another thing that may help you - I've seen similar error messages to 
yours when I tried to hook up a query field to an instance variable in 
my EO subclass which wasn't actually present in the EOModel.  So I 
think you can only do queries on fields that are in the EOModel.

Hope that helps.

-Ryan


On Mar 1, 2005, at 1:14 AM, Ryu wrote:

>
> I'm using OSX, and up to now Cocoa/EOF, but it's ok me for me
> to use Java and make a Java Client Application. (Anyway, up to
> Now I don't have a line of code, so I think it doesn't change anything
> if using ObjC or Java)
>
> Hence, I use EOBuilder to build my database, and Interface builder
> To build my interface.
>
> It is quite frustrating because I'm sure we can do the bindings 
> graphically
> under IB, exactly like it is shown under WebObjectBuilder (there are 
> even
> Screenshots in the docs! And they say it's the same under IB).
>
> PS: in my last mail, I said:
>
>>> code. I already successfully wrote a front end that can browse all
>>> elements,
>>> and add/remove/modify an entry with writing code.
>
> I wanted to say that I could do this WITHOUT writing anycode, and that
> I expected to do so for such a simple think as binding Query Variables
> Of my Qualifier to interface elements (NSTextFied)
>
>
>
> New point:
>
> As I couldn't find "how to" bind my query variables to my interface
> Objects (TextFields...) using InterfaceBuilder, I tried to make it
> Programmatically using Objc, but it seems there are some pbs :-(
>
> my fetch spec looks like
>
>      (name = $name)
>
> And the code:
>
>     fetch = [[displayGroup dataSource] fetchSpecification];
>     qual = [fetch qualifier];
>     bindings = [NSMutableDictionary new];
>     [bindings takeStoredValue: @"Baka" forKey: @"name"];
>
> And
>
>     q2 = [qual qualifierWithBindings: bindings : NO];
>
> Makes:
>
> 2005-02-25 11:52:26.206 Baka[808]
> com/webobjects/foundation/NSKeyValueCoding$UnknownKeyException:
> <com.apple.cocoa.foundation.NSMutableDictionary 0xbf47df> 
> valueForKey():
> lookup of unknown key: 'name'.
> This class does not have an instance variable of the name name or 
> _name, nor
> a method of the name name, _name, getName, or _getName
>
> The same way,
>
>      fetch = [fetch fetchSpecificationWithQualifierBindings: bindings];
>
> Or
>
>     [[displayGroup dataSource] setQualifierBindings: bindings];
>
> Make exactly the same error!
>
> I was said the was a Javabridge problem, but I just don't know ...
> I think I'm gonna try to make excatly the same code in Java using
> a Java Client Application to compare ...
>
>
> Any help is greatly appreciated!!!
>
> Regards,
>
>     Ryu
>
>
> On 28/02/05 18:13, "Ricardo Strausz" <[email protected]> wrote:
>
>> Hola Ryu!
>> can you be more specific... which platform are you using?
>> You mentioned Interface Builder; are you trying Java Client? or
>> Cocoa/EOF?
>>
>> Dino
>>
>> On Feb 21, 2005, at 10:28 AM, Ryu wrote:
>>
>>>
>>>
>>>
>>> Hi there,
>>>
>>> I want to write a front end to a DB, that has a search form, WITHOUT
>>> writing
>>> code. I already successfully wrote a front end that can browse all
>>> elements,
>>> and add/remove/modify an entry with writing code.
>>>
>>> To avoid loading all the table that has 2 millions entries (hence not
>>> "in
>>> memory" filtering with EOPickTextAssociation), I have to make a
>>> specific SQL
>>> query.
>>>
>>> Under EOBuilder, I have added a Fetch Spec to my table Entity
>>> In this Fetch Spec, I have added the Qualifier "(name = $myName)"
>>>
>>> But once under Interface Builder, I just can't find how to bind user
>>> interface (NSField, NSForm) to my Query Variable (nyName).
>>> There is no @queryBindings->myName (or @bindings->myName) in the
>>> inspector
>>> (Inspector/Connections/EOTextAssociation) when binding to the
>>> EODisplayGroup
>>> that has my FetchSpec (like they talk about in the docs)
>>>
>>> Though, I have @query= (which seems to be the WOBuilder's
>>> @queryMatch). I
>>> was able to make a "simple search form", by binding my NSField to
>>> @QueryMatch->name. But the request which is made is case insensitive,
>>> and
>>> not exact match, and I want to be able to execute complex sql request
>>> as
>>> made in EOBuilder Fetch Spec.
>>>
>>> Does anyone know where are the "Query Variables"/@queryBidings in the
>>> Interface Builder, how to bind them to interface elements, so that I
>>> can
>>> execute a request without writing code ?
>>>
>>> Regards,
>>>     Ryu
>>>
>>>
>>> _______________________________________________
>>> EOF mailing list
>>> [email protected]
>>> http://www.omnigroup.com/mailman/listinfo/eof
>>
>
>
> _______________________________________________
> EOF mailing list
> [email protected]
> http://www.omnigroup.com/mailman/listinfo/eof