Hi Brian,

As a workaround, you could try surfacing the underlying Id as a regular
(derived) property.  Something like this will work for all persistent
entities:

    @Property(editing = Editing.DISABLED)
    public String getId() {
        Object objectId = JDOHelper.getObjectId(this);
        if (objectId == null) {
            return "";
        }
        String objectIdStr = objectId.toString();
        final String id = objectIdStr.split("\\[OID\\]")[0];
        return id;
    }

Admittedly, you would need to dig a little deeper if its a view model being
represented.

Does that help?

Dan



On Fri, 31 Aug 2018 at 23:36 Brian K <[email protected]> wrote:

> Hi Andi,
>
> Thanks for opening the ticket.  I don't know that the hidden attributes
> would cause an error in the generated client; I haven't gotten as far as
> testing it because I couldn't get code that sufficed.  The generated client
> just doesn't have access to the object id that is required for invoking an
> object's actions.
>
> As for a work-around - I don't see where I'd get the object id from, so I
> can't readily put it in a read-only property.  If you can point me to where
> I'd get, for example, "i_1" from an object with a single integer primary
> key, then I could make such a property.  Otherwise, it'll be a bit more of
> a kludge to code the property to return "i_" + this.id or have a
> DomainService action that takes the primary key among its arguments.
>
> Thanks again!
> Brian
>
> On Tue, Aug 28, 2018 at 9:45 PM Andi Huber <[email protected]> wrote:
>
> > We are tracking this issue [1] now.
> >
> > [1] https://issues.apache.org/jira/browse/ISIS-1975
> >
> > On 2018/08/24 08:38:12, Johan Doornenbal <[email protected]>
> > wrote:
> > > Hi Brian,
> > > Ah, sorry for responding to quickly. I clearly missed your point.Indeed
> > all the
> > > $$xxx properties are not in the example response like you
> > indicate.However, at
> > > the moment I am not aware of the reason why it is implemented this
> > way...(My
> > > guess would be the different representation types)
> > > Maybe somebody else has thoughts on this?
> > > grtz Johan
> > >
> > >
> > >
> > >
> > >
> > > On Thu, Aug 23, 2018 10:57 PM, Brian K [email protected]
> wrote:
> > > Hi Johan,
> > >
> > >
> > >
> > >
> > > Thanks for the reply. In using the REST API from a csharp application,
> I
> > >
> > > want to be able to generate a client stub and code to that. This is
> what
> > >
> > > Swagger Codegen is made for. For the Apache Isis REST implementation, I
> > >
> > > notice the following:
> > >
> > >   1. All the domain object actions are represented by REST operations
> > >
> > > that take the object's instanceId as the first argument. This is a
> string
> > >
> > > that for an integer primary key is something like "i_1". I see this in
> > the
> > >
> > > REST response as either the property "$$instanceId" or the JSON
> property
> > >
> > > "instanceId" above the "members" property.
> > >
> > >   2. This instanceId is not in the Swagger specification generated by
> > >
> > > Isis. When I load the specification (from the prototyping menu) into
> > >
> > > https://editor.swagger.io/, the response example it creates for the
> > action
> > >
> > > does not include the $$instanceId property that is there when I call
> that
> > >
> > > endpoint on the Isis application. This is true for each schema I
> download
> > >
> > > (public, private, private with prototyping).
> > >
> > > Therefore, the client generated by codegen is not useable without
> falling
> > >
> > > back to looking directly at the JSON of the REST operation response.
> > >
> > >
> > >
> > >
> > > It may be a good idea to include the instanceId in the generated
> > >
> > > specification so that these actions can be called from generated
> clients.
> > >
> > > I could add a read-only property to return the instanceId, but I am
> > hoping
> > >
> > > there is a better way.
> > >
> > >
> > >
> > >
> > > Thanks,
> > >
> > > Brian
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > On Wed, Aug 22, 2018 at 10:48 PM Johan Doornenbal <[email protected]>
> > >
> > > wrote:
> > >
> > >
> > >
> > >
> > > > Hi Brian,
> > >
> > > > The restful objects viewer implemented in Apache Isis and exposed by
> > >
> > > > swagger-ui
> > >
> > > > implements the restful objects spec 1)
> > >
> > > > The basic idea is that you can 'discover' the domain.In the case of
> > simple
> > >
> > > > app:
> > >
> > > > you can start out with
> > >
> > > > curl -X GET --header 'Accept: application/json' --header
> > 'Authorization:
> > >
> > > > Basic
> > >
> > > > c3ZlbjpwYXNz'
> > >
> > > >
> > >
> > > >
> > >
> >
> '[YOUR_BASE_URL]/restful/services/simple.SimpleObjectMenu/actions/listAll/invoke'
> > >
> > > > That will give you among others the oid's.
> > >
> > > > Then update name can be done by
> > >
> > > > curl -X PUT --header 'Content-Type: application/json' --header
> 'Accept:
> > >
> > > > application/json' --header 'Authorization: Basic c3ZlbjpwYXNz' -d '{
> \
> > >
> > > > "name" :
> > >
> > > > { \ "value" : "some new name" \ } \ }'
> > >
> > > >
> > >
> > > >
> > >
> >
> '[YOUR_BASE_URL]/restful/objects/simple.SimpleObject/0/actions/updateName/invoke'
> > >
> > > >
> > >
> > > > Grtz Johan
> > >
> > > >
> > >
> > > > 1) http://isis.apache.org/guides/ugvro/ugvro.html#__ugvro
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > On Wed, Aug 22, 2018 11:15 PM, Brian K [email protected]
> wrote:
> > >
> > > > Hello,
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > I see by using the Swagger-UI that the REST view is usable by
> > inspecting
> > >
> > > >
> > >
> > > > the JSON. For instance, I can get an object via the GET url, and then
> > >
> > > >
> > >
> > > > execute an action on it by looking at the "$$instanceId" member to
> > fill in
> > >
> > > >
> > >
> > > > the action string argument that is needed for its actions:
> "objectID".
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > But, swagger-codegen seems to ignore this attribute. Maybe it's
> > because it
> > >
> > > >
> > >
> > > > starts with $$ and is not a part of the generated swagger
> > specification.
> > >
> > > >
> > >
> > > > Using a generated client stub (I tried both "java" and "csharp"
> > >
> > > >
> > >
> > > > generators), I don't see a way of finding out the objectID string
> > needed to
> > >
> > > >
> > >
> > > > execute the object's actions.
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > Has anyone been able to execute actions from a REST client generated
> by
> > >
> > > >
> > >
> > > > swagger codegen? For instance, in SimpleApp archetype, can you
> execute
> > the
> > >
> > > >
> > >
> > > > UpdateName action of SimpleObject? Is there a basic piece I'm
> missing?
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > Thank you,
> > >
> > > >
> > >
> > > > Brian
> >
>
-- 
DISCLAIMER: This e-mail is from Haywood Associates Ltd (Registered Number
3525455) and it and its attachments may be confidential and are intended
solely for the use of the individual to whom it is addressed.  Any
unauthorised use or dissemination of this communication is strictly
prohibited. Any information provided to Haywood Associates Ltd shall be
retained and used in accordance with our Privacy Statement at
http://www.haywood-associates.co.uk/privacy.  If you have received this
communication in error, please immediately notify the sender by return
e-mail message and delete all copies of the original communication.

Reply via email to