Hello,
We are using an external tool to view and modify lists in labkey. We have lists with some columns of Attachment type (file type). How can we modify the rows of the lists from the external application using Java Api? The method UpdateRowsCommand only supports string type. We would like to upload files to certains rows in these lists of labkey.
We are trying to use UpdateRowsCommand:
UpdateRowsCommand cmdUpd = new UpdateRowsCommand("lists", "miLista");
HashMap<String,Object> row = new HashMap<String,Object>();
row.put("Volume", "file:/C:/prueba.txt");
cmdUpd.addRow(row);
SaveRowsResponse response = cmdUpd.execute(cn, project);
But we get an error from Labkey:
ERROR ExceptionUtil 2013-05-22 13:35:22,121 http-8080-17 : Exception detected and logged to mothership:
java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
at org.labkey.api.exp.ObjectProperty.init(ObjectProperty.java:169)
at org.labkey.api.exp.ObjectProperty.<init>(ObjectProperty.java:125)
at org.labkey.list.model.ListItemImpl.setProperty(ListItemImpl.java:425)
at org.labkey.list.model.ListQueryUpdateService.populateBean(ListQueryUpdateService.java:241)
at org.labkey.list.model.ListQueryUpdateService.updateRow(ListQueryUpdateService.java:142)
at org.labkey.api.query.AbstractQueryUpdateService.updateRows(AbstractQueryUpdateService.java:461)
at org.labkey.query.controllers.QueryController$CommandType$3.saveRows(QueryController.java:2837)
at org.labkey.query.controllers.QueryController$BaseSaveRowsAction.executeJson(QueryController.java:2986)
at org.labkey.query.controllers.QueryController$UpdateRowsAction.execute(QueryController.java:3039)
at org.labkey.query.controllers.QueryController$UpdateRowsAction.execute(QueryController.java:3032)
at org.labkey.api.action.ApiAction.handlePost(ApiAction.java:152)
at org.labkey.api.action.ApiAction.handleRequest(ApiAction.java:87)
at org.labkey.api.action.BaseViewAction.handleRequestInternal(BaseViewAction.java:177)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.labkey.api.action.SpringActionController.handleRequest(SpringActionController.java:354)
at org.labkey.api.module.DefaultModule.dispatch(DefaultModule.java:928)
at org.labkey.api.view.ViewServlet.service(ViewServlet.java:164)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.labkey.api.data.TransactionFilter.doFilter(TransactionFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.labkey.core.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:118)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.labkey.api.module.ModuleLoader.doFilter(ModuleLoader.java:806)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.labkey.api.security.AuthFilter.doFilter(AuthFilter.java:171)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:300)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Thank you for your help. |
|
jeckels responded: |
2013-05-28 14:51 |
Hello,
Unfortunately, I don't believe that we have support for setting values for "Attachment" fields through these APIs. Giving a path to a file that's under the file/pipeline root for a given folder should work for "File Link" fields, but lists don't currently allow for that field type. For reference, File Links are just stored as a path (a pointer to a file), while Attachments store the binary content of the file itself.
Thanks,
Josh |
|
Matthew Bellew responded: |
2013-05-28 21:52 |
The work around is to just do a regular http post the same as the default UI does it. You can post to the list/../update.view url that we use for updating lists items. |
|
|
|