On Nov 28, 2012, at 11:07 AM, Pascal Robert wrote:

> 
> Le 2012-11-28 à 10:40, Roger Perryman <[email protected]> a écrit :
> 
>> Hi All!
>> 
>> I am still getting my feet wet with ERRest. Does anyone have an example of a 
>> REST call to a custom method on an EO that is not a model property and that 
>> takes parameters? All of the examples that I have found use model properties 
>> and just "automagically" work. The framework extracts the parameters and 
>> updates modeled properties. The only example of a non-model property was 
>> derivedCurrentTime but it doesn't use any parameters.
> 
> If the custom method is part of the EO class, you just need to add a ERXKey 
> and add it to the keys for the response or request.

If I understand you, you are saying to add these to my custom EO class:
        public static final String LIST_PRACTICES_KEY = "listPractices";
        public static final ERXKey<com.xeotech.resttest.datamodel.Practice> 
LIST_PRACTICES = new 
ERXKey<com.xeotech.resttest.datamodel.Practice>(LIST_PRACTICES_KEY);

I still don't see how to retrieve the parameters to pass to this method. Also, 
based on a comment below, I assumed this method would live in the controller, 
not the EO.

>> For example, given an address (or latitude / longitude coordinates) and a 
>> distance, find all Practices within the specified distance from the address. 
>> I'm unclear on how to extract the parameters and use them in a custom method.
>> 
>> Another example: I need to fetch all Practices that a Physician is 
>> associated with. I can get the list of Practices and I can get the list of 
>> Physicians. What is not clear is how to retrieve the Practices for the 
>> Physician. There is a relationship defined between Physicians and Practices. 
>> I'm sure it will end up requiring me to tweak my route setup.
>> 
>> This is from the ERRestRouteExample.
>> 
>> routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, 
>> "/Person/{person:Person}", ERXRoute.Method.Get, PersonController.class, 
>> "show"));
>> 
>> Would I change it to 
>> 
>> routeRequestHandler.addRoute(new ERXRoute(Physician.ENTITY_NAME, 
>> "/Physician/{physician:Physician}/{practices:Practice}", 
>> ERXRoute.Method.Get, PhysicianController.class, "show"));
>> 
>> It doesn't seem to work. Also, is "show" the proper choice? This is being 
>> sent to a client as data for a list and not displayed directly.
> 
> "show" is ok, as long as you have a "show" or "showAction" in 
> PhysicianController. But for naming purposes, if you want to get a list of 
> practices for a physician, I would call the method "listPractices".

So in the example above, practices is the name of a method inside my 
controller, not a relationship or attribute defined in the model? I can't find 
it now, but I seem to recall reading somewhere that if the framework cannot 
find a method, it check other places. Would the method without the final 
argument be more appropriate? And since I don't need to specify the Practice, 
how do I specify no parameters?

routeRequestHandler.addRoute(new ERXRoute(Physician.ENTITY_NAME, 
"/Physician/{physician:Physician}/{listPractices:null}", ERXRoute.Method.Get, 
PhysicianController.class));

>> Is it OK to use addDefaultRoutes and also define additional routes? Or do I 
>> need to manually add all the routes if I need to customize any?
> 
> Yes it is ok.

 _______________________________________________
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