cancel
Showing results for 
Search instead for 
Did you mean: 

Managing custom directories through the admin center

Marwane_K_A_
Star Contributor
Star Contributor

Hi,

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.

EDIT:

  • 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:

.

"id","label","custom_col_1","custom_col_2","custom_col_3","obsolete","ordering"
"...","...",,"..","...","0","0"
1 ACCEPTED ANSWER

Aykut_Açikel
Champ on-the-rise
Champ on-the-rise

Hello,

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)

View answer in original post

5 REPLIES 5

Florent_Guillau
World-Class Innovator
World-Class Innovator

How did you define your directory in XML ?

Marwane_K_A_
Star Contributor
Star Contributor

I just added some details on the post, thanks

Aykut_Açikel
Champ on-the-rise
Champ on-the-rise

Hello,

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)

Woah, I just tried, and it worked. Awesome! Thank you a lot, I was really out of ideas on this one.

You are welcome. I usually don't put prefix for directories, as i had some problems in the past