Managing custom directories through the admin center
I'm trying to make it possible to manage from the UI the content of custom directories, which I couldn't implement as vocabularies since I needed to add some custom columns. It seems like we can contribute directories to the “Vocabularies” admin tab by setting a custom layout, so I tried to build my own through Studio:
-I made a custom form layout that uses the /layouts/directory_layout_template.xhtml template
-I contributed the layout through an XML contribution:
<extension target="org.nuxeo.ecm.directory.ui.DirectoryUIManager" point="directories"> <directory name="XXX" layout="FormLayoutXXX@edit" sortField="label" /> </extension>
The last part feels a bit hacky, but it actually manages to bring the directory correctly on the admin tab, and I'm even able to edit or delete items correctly.
But! I can't create new entries. I also tried to use the “…@create” layout in case it was different in any way, still I fail to create new entries with the following error:
org.nuxeo.ecm.core.api.ClientException: org.nuxeo.ecm.directory.DirectoryException: Missing id at org.nuxeo.ecm.webapp.directory.DirectoryUIActionsBean.createDirectoryEntry(DirectoryUIActionsBean.java:248) (actually thrown at SQLSession#createEntry(Map<String, Object>), l.180)
The code looks for a “id” field among the entry fields ; in the case of custom directories, while “id” is indeed unset, “customSchema:id” is actually set. As far as I could dig, the problem seems to lie in that fields fetched through
entry.getProperties(schemaName) (SQLSession, l.1086) do not contain the prefix in the case of vocabularies, but they do otherwise, and the SQLSession doesn't like it.
Thanks for your help.
- The directory contribution:
<directory name="XXX"> <schema>schemaXXX</schema> <dataSource>java:/nxsqldirectory</dataSource> <cacheTimeout>3600</cacheTimeout> <cacheMaxSize>1000</cacheMaxSize> <table>vocabulary_XXX</table> <idField>id</idField> <autoincrementIdField>false</autoincrementIdField> <dataFile>directories/XXX.csv</dataFile> <createTablePolicy>on_missing_columns</createTablePolicy> </directory>
- The schema contents:
<?xml version="1.0"?> <xs:schema targetNamespace="http://www.nuxeo.org/ecm/schemas/directory_XXX" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="id" type="xs:string"/> <xs:element name="label" type="xs:string"/> <xs:element name="custom_col_1" type="xs:string"/> <xs:element name="custom_col_2" type="xs:string"/> <xs:element name="custom_col_3" type="xs:string"/> <xs:element name="obsolete" type="xs:integer" default="0"/> <xs:element name="ordering" type="xs:integer" default="10000000"/> </xs:schema>
- The csv contents:
I don't know if you still have the problem, but…
I suppose you added a prefix for your custom directory schema, in your schema contrib file :
<schema name="pack" src="directoryschema/pack.xsd" prefix="pp" />
If this is the case, removing the prefix should resolve the problem. (Still, it doesn't really solve the problem, this is just a bug workaround)