Dan
Dan

Reputation: 1000

XPages Dojo Data Grid and REST -- can you point to another application's view?

I would like to use the Dojo Data Grid/REST service architecture in an application I am building. However, I cannot find the property (or code) to have the REST service point to a view in another application outside the current one.

Can I use a Data Context in the view name of the REST Service? Or is there another property to set to point to a view in another application?

Thanks -- appreciate your help!

--------- EDIT 6/24/2013 ---------

I have tried both the viewItemFileService and viewJSONService and I can only get the viewJSONService to work with the other database. The viewItemFileService just displays "Sorry, an error has occurred" where the rows of data should be. Here is the code -- I am not sure where I am making the mistake:

            <xp:panel>
                View JSON<xp:br></xp:br>
                <xe:restService id="restService1">
                    <xe:this.service>
                        <xe:viewJsonService databaseName="voca/vocadatastore.nsf"
                            defaultColumns="true" viewName="InvoicePersonnel" var="entry1"
                            contentType="application/json">
                        </xe:viewJsonService>
                    </xe:this.service>
                </xe:restService>
                <xe:djxDataGrid id="djxDataGrid2" autoHeight="10"
                    storeComponentId="restService1">
                    <xe:djxDataGridColumn id="djxDataGridColumn5"
                        label="Description" field="description" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn6"
                        label="Items" field="items" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn7"
                        label="Cost" field="cost" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn8"
                        label="Total" field="total" width="auto">
                    </xe:djxDataGridColumn>
                </xe:djxDataGrid>
            </xp:panel>
            <xp:br></xp:br>
            <xp:br></xp:br>
            <xp:panel>View Domino<xp:br></xp:br>
                <xe:restService id="restServicePers">
                    <xe:this.service>
                        <xe:viewItemFileService databaseName="voca/vocadatastore.nsf"
                            defaultColumns="true" viewName="InvoicePersonnel" var="entry2">
                        </xe:viewItemFileService>
                    </xe:this.service>
                </xe:restService>
                <xe:djxDataGrid id="djxDataGrid1" autoHeight="10"
                    storeComponentId="restServicePers">
                    <xe:djxDataGridColumn id="djxDataGridColumn1"
                        label="Description" field="description" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn2"
                        label="Items" field="items" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn3"
                        label="Cost" field="cost" width="auto">
                    </xe:djxDataGridColumn>
                    <xe:djxDataGridColumn id="djxDataGridColumn4"
                        label="Total" field="total" width="auto">
                    </xe:djxDataGridColumn>
                </xe:djxDataGrid>
            </xp:panel>

--------- EDIT 7/3/2013 ---------

I moved the view to the same database as the REST service and still received "Sorry, an error occurred" message. The view name is correct since I selected the viewName from the list. The column title/field name is correct also.

<xe:restService id="restServicePers" pathInfo="persInfo">
                            <xe:this.service>
                                <xe:viewItemFileService defaultColumns="true"
                                    viewName="InvoicePersonnel" var="entryPers">
                                </xe:viewItemFileService>
                            </xe:this.service>
                        </xe:restService>
                        <xe:djxDataGrid id="djxDataGrid1" autoHeight="10"
                            storeComponentId="restServicePers">
                            <xe:djxDataGridColumn id="djxDataGridColumn1"
                                label="Description" field="description" width="auto">
                            </xe:djxDataGridColumn>
                        </xe:djxDataGrid>

I added the pathInfo property to the REST service to see what is being returned and there was an error:

{
    "code":500,
    "text":"Internal Error",
    "message":"",
    "type":"text",
    "data":"java.lang.NullPointerException\r\n\tat com.ibm.domino.services.rest.das.view.RestViewNavigatorFactory$ViewNavigatorNavigator.getTopLevelEntryCount(RestViewNavigatorFactory.java:565)\r\n\tat com.ibm.domino.services.rest.das.view.RestViewItemFileService.renderServiceJSONGet(RestViewItemFileService.java:263)\r\n\tat com.ibm.domino.services.rest.das.view.RestViewItemFileService.renderService(RestViewItemFileService.java:77)\r\n\tat com.ibm.domino.services.HttpServiceEngine.processRequest(HttpServiceEngine.java:167)\r\n\tat com.ibm.xsp.extlib.component.rest.UIBaseRestService._processAjaxRequest(UIBaseRestService.java:242)\r\n\tat com.ibm.xsp.extlib.component.rest.UIBaseRestService.processAjaxRequest(UIBaseRestService.java:219)\r\n\tat com.ibm.xsp.util.AjaxUtilEx.renderAjaxPartialLifecycle(AjaxUtilEx.java:206)\r\n\tat com.ibm.xsp.webapp.FacesServletEx.renderAjaxPartial(FacesServletEx.java:225)\r\n\tat com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:170)\r\n\tat com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)\r\n\tat com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)\r\n\tat com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)\r\n\tat com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:583)\r\n\tat com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281)\r\n\tat com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:854)\r\n\tat com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:751)\r\n\tat com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:572)\r\n\tat com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265)\r\n\tat com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:658)\r\n\tat com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:481)\r\n\tat com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)\r\n\tat com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)\r\n\tat com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)\r\n"
}

Upvotes: 2

Views: 1589

Answers (1)

Knut Herrmann
Knut Herrmann

Reputation: 30960

There is a property databaseName in service definitions

  • xe:viewItemFileService
  • xe:viewJsonLegacyService
  • xe:viewJsonService
  • xe:viewXmlLegacyService

in xe:restService.

If it's empty then the current database is used but if you put in path and name of a database then those database is used.

The view name is defined in property viewName.

        <xe:restService id="restService1">
            <xe:this.service>
                <xe:viewItemFileService
                    databaseName="MyFolder/MyOtherDatabase.nsf"
                    viewName="AllContacts"
                    ...>

Upvotes: 5

Related Questions