request().stringFormValueForKey("name")
On Mar 30, 2011, at 11:42 AM, Andrew Kinnie wrote:
> OK, dumb question, how would I do that here? (sorry the deadline is looming,
> and I don't generally have to think in terms of what the url the client needs
> use to get the proper results. I've not even done much with direct actions)
>
>
> On Mar 30, 2011, at 11:34 AM, David LeBer wrote:
>
>>
>> On 2011-03-30, at 11:28 AM, Mike Schrag wrote:
>>
>>> you can also just use regular query parameters if you really want ... to
>>> hell with purists.
>>
>> +1 :-)
>>
>>>
>>> ms
>>>
>>> On Mar 30, 2011, at 11:21 AM, Andrew Kinnie wrote:
>>>
>>>> OK. I'm now in a bit of time crunch, so I just want to get something
>>>> working.
>>>>
>>>> assuming I have a route
>>>>
>>>> new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/{name:String}",
>>>> ERXRoute.Method.Get, NoteTypeController.class, "fetchByName")
>>>>
>>>> What is the url I need to actually pass in a string using this
>>>> fetchByNameAction?
>>>>
>>>> If I do /ra/NotificationType/fetchByName I get 0 objects (because name ==
>>>> null)
>>>>
>>>> How do I pass in a string? What is the url I need to use for this?
>>>> (every rest tutorial I have looked at either doesn't apply at all, or
>>>> doesn't help)
>>>>
>>>> Thanks
>>>>
>>>> On Mar 30, 2011, at 11:12 AM, Mike Schrag wrote:
>>>>
>>>>> admittedly i've only sort of half-read this thread, but i would think you
>>>>> could make a custom NodeTypeRestDelegate that has your own implementation
>>>>> of createObjectOfID that checks to see if there already is one and just
>>>>> returns it ... maybe. there are a bunch of ways you can do things by
>>>>> hooking into those delegates. you can also probably do some tricks by
>>>>> using key filter delegates.
>>>>>
>>>>> ms
>>>>>
>>>>> On Mar 30, 2011, at 10:58 AM, Andrew Kinnie wrote:
>>>>>
>>>>>> Sorry about all this, Pascal. Didn't mean to make you write your
>>>>>> session early. :-) I guess I'm just dense about this stuff, never
>>>>>> having used Rest before, ERRest in particular, or, for that matter, ever
>>>>>> had to deal directly with HTTP response codes. This seems to suggest
>>>>>> that you can't, from within a controller for a given entity (in this
>>>>>> case "Device"), create a method with, based on a passed in String, fetch
>>>>>> an object of a different entity ("DeviceNoteType") which points to (via
>>>>>> a to-one) a NoteType object with the name passed in as a variable?
>>>>>>
>>>>>> Basically I want to do this:
>>>>>> - create a single action method (in my DeviceController) which allows
>>>>>> the client to pass in a String variable "noteTypeName", then
>>>>>> - uses that String to fetch a DeviceNoteType object where the noteType
>>>>>> has that noteTypeName, and the device is the current device
>>>>>> --> If there is, set the status to active,
>>>>>> --> if not, create a new DeviceNoteType
>>>>>>
>>>>>> The issue I am having is that the passed in string ("noteTypeName") is
>>>>>> not a key on Device, but is rather used for fetching a different object
>>>>>> of a different entity. I am always getting null from the
>>>>>> routeObjectForKey method.
>>>>>>
>>>>>> I would really rather not have the client make two requests, and have to
>>>>>> figure out http return calls. I'd rather have them be able to simply
>>>>>> call the addNoteType action and pass in a typeName (and eventually, be
>>>>>> able to do this with an array of typeNames)
>>>>>>
>>>>>> __________________________________________
>>>>>>
>>>>>> I am willing to make the client call several action methods via curl if
>>>>>> needed.
>>>>>>
>>>>>> In any event, I don't seem to know how to actually call the route you
>>>>>> mentioned in your post. In my Application class I added the route:
>>>>>>
>>>>>> routeRequestHandler.addRoute(new ERXRoute(NoteType.ENTITY_NAME,
>>>>>> "/NoteType/{name:String}", ERXRoute.Method.Get,
>>>>>> NoteTypeController.class, "fetchByName"));
>>>>>>
>>>>>> Thing is, I have no idea at all how to call this from the command line
>>>>>> to see if it returns anything. (and I have no idea how the http
>>>>>> response codes would appear)
>>>>>>
>>>>>> I tried:
>>>>>>
>>>>>> curl -X GET
>>>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/[name='alert'].json
>>>>>> (curl: (3) [globbing] error: bad range specification after pos 80)
>>>>>> curl -X GET
>>>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/'alert'.json
>>>>>> (- Unable to get contents of file
>>>>>> '/Library/WebServer/Documents/cgi-bin/WebObjects/ra/NoteType/alert.json'
>>>>>> for uri: /cgi-bin/WebObjects/ra/NoteType/alert.json)
>>>>>> curl -X GET
>>>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/'alert'
>>>>>> (no alertAction method)
>>>>>>
>>>>>> And various other things. I've tried to find rest tutorials to indicate
>>>>>> what the syntax is supposed to be, but everything seems to be assuming
>>>>>> you're passing in an id, which, obviously, I don't have.
>>>>>>
>>>>>> Assuming I eventually get this basic bit of syntax down, it looks like
>>>>>> the client would need to call the create on the DeviceNoteType and pass
>>>>>> in fully formed json representations of the NoteType and the Device?
>>>>>> Presumably they would do this by getting the json from the response?
>>>>>>
>>>>>> Sorry for not getting this stuff.
>>>>>>
>>>>>> Andrew
>>>>>>
>>>>>>
>>>>>> On Mar 29, 2011, at 4:21 PM, Pascal Robert wrote:
>>>>>>
>>>>>>>
>>>>>>> Le 2011-03-29 à 16:03, Andrew Kinnie a écrit :
>>>>>>>
>>>>>>>> Thanks for the tip on using create that way. I didn't know you could
>>>>>>>> do that. In any event, that's the problem. NoteType is basically a
>>>>>>>> lookup table. I would want to fetch an existing noteType based on
>>>>>>>> some unique attribute, such as "typeName" (which ensure is unique in
>>>>>>>> the EO class) I don't want to create a new noteType, I want to create
>>>>>>>> the intervening object (DeviceNoteType) which has a to-one to NoteType
>>>>>>>> and a to-one to Device. AND (here's the tough part - for me at least)
>>>>>>>> I want to only create a new one if one doesn't already exist. So I
>>>>>>>> need to fetch first, and I want to fetch based on the value passed in
>>>>>>>> for the name key
>>>>>>>
>>>>>>> So you will do:
>>>>>>>
>>>>>>> new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/{name:String}",
>>>>>>> ERXRoute.Method.Get, NoteTypesController.class, "fetchByName");
>>>>>>>
>>>>>>> public WOActionResults fetchByNameAction() {
>>>>>>> String typeName = routeObjectForKey("name");
>>>>>>> NoteType type = NoteType.fetchNoteType(editingContext(),
>>>>>>> User.NAME.eq(typeName));
>>>>>>> return response(type, yourerxkeyfilter());
>>>>>>> }
>>>>>>>
>>>>>>> If fetchByNameAction didn't find an object, ERRest will return the HTTP
>>>>>>> code 404, so your client can know that the object was not found, and
>>>>>>> call:
>>>>>>>
>>>>>>> new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/", ERXRoute.Method.Post,
>>>>>>> NoteTypesController.class, "create"); // If you called
>>>>>>> addDefaultRoutes for the NoteType entity, that route already exist)
>>>>>>>
>>>>>>> public WOActionResults createAction() {
>>>>>>> NoteType type = create(NoteType.ENTITY_NAME, yourerxkeyfilter());
>>>>>>> editingContext().saveChanges();
>>>>>>> return response(type, yourerxkeyfilter());
>>>>>>> }
>>>>>>>
>>>>>>> If you get a response with HTTP code in the 20x range, the object was
>>>>>>> created and now you can create your DeviceNoteType with a route like
>>>>>>> this:
>>>>>>>
>>>>>>> new ERXRoute(DeviceNoteType.ENTITY_NAME, "/DeviceNoteType",
>>>>>>> ERXRoute.Method.Post, DeviceNoteTypesController.class, "create");
>>>>>>>
>>>>>>> When you call POST /cgi-bin/WebObjects/MyApp.woa/ra/DeviceNoteType, you
>>>>>>> will have to pass the a Device and a NoteType object in JSON as the
>>>>>>> body of the request.
>>>>>>>
>>>>>>> I feel like I'm writing my WOWODC session in real-time :-P
>>>>>> _______________________________________________
>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>> Webobjects-dev mailing list ([email protected])
>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.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:
>>> http://lists.apple.com/mailman/options/webobjects-dev/dleber_wodev%40codeferous.com
>>>
>>> This email sent to [email protected]
>>
>> ;david
>>
>> --
>> David LeBer
>> Codeferous Software
>> 'co-def-er-ous' adj. Literally 'code-bearing'
>> site: http://codeferous.com
>> blog: http://davidleber.net
>> profile: http://www.linkedin.com/in/davidleber
>> twitter: http://twitter.com/rebeld
>> --
>> Toronto Area Cocoa / WebObjects developers group:
>> http://tacow.org
>>
>>
>>
>>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]