cancel
Showing results for 
Search instead for 
Did you mean: 

User Action active in a specific contentView and LifeCycle for selected Document

Pierre_Jenicot1
Star Contributor
Star Contributor

Hi,

In Nuxeo Studio, I created a "User Action" attached to a specific contentView (category) and I would like the button is active only when the selected documents are in a life cycle validated?

I can not use in this case the "current document has life cycle" because I'm in a contentView but an EL expression like this:

$ {selectedDocument.currentLifeCycleState = 'approved'}

But my syntax is not correct?

Thank you

alt text

1 ACCEPTED ANSWER

Pierre_Jenicot1
Star Contributor
Star Contributor

Hi,

I publish the final code for users interested

@Name("yourProjectAction")
@Scope(ScopeType.EVENT)
public class yourProjectAction implements Serializable {

private static final long serialVersionUID = 1L;

@In(create = true, required = false)
protected transient CoreSession documentManager;

@In(create = true)
protected NavigationContext navigationContext;

@In(create = true)
protected DocumentsListsManager documentsListsManager;

protected List<DocumentModel> getCurrentlySelectedDocuments() {

    if (navigationContext.getCurrentDocument().isFolder()) {
        return documentsListsManager.getWorkingList(DocumentsListsManager.CURRENT_DOCUMENT_SELECTION);
    } else {
        return null;
    }
}    

public boolean isSelectionAreAllApproved() throws ClientException {

    List<DocumentModel> selectedDocs = getCurrentlySelectedDocuments();
    if (selectedDocs == null) {
      return false;
    }
    for (DocumentModel doc : selectedDocs) {
        if (!doc.getCurrentLifeCycleState().equals("approved")) {
          return false;
        }
    }
    return true;
 }
}

View answer in original post

3 REPLIES 3

Benjamin_Jalon1
Elite Collaborator
Elite Collaborator

There is no way (I think to do with just a simple EL.

The way (not so hard) is to use Nuxeo IDE if you have a bit development skills :

  • I let you look the Nuxeo IDE installation documentation : http://doc.nuxeo.com/x/ZYKE
  • Then you create a new Nuxeo Plugin Project (click on the yellow button > new Nuxeo Plugin name it > next > next )
  • finally create an Action Bean (for instance named YourProjectAction) with the yellow button > next > next
  • create a method into the java class created named isSelectionAreAllApproved

And in it:

    List<DocumentModel> selectedDocs = getCurrentlySelectedDocuments();
    if (selectedDocs != null) {
      return false;
    }
    for (DocumentModel doc : selectedDocs) {
    if (!doc.getCurrentLifeCycleState().equals("approve")) {
      return false;
    }
    return true;

And in your el just fill : yourProjectActions.selectionAreAllApproved

You will have to clean up a bit what have generated the Nuxeo IDE template (create a button hello world => you can look what have been generated to understand a bit more Nuxeo behind the Nuxeo Studio scene). But in your case you will have to :

  • remove the getCurrentlySelectedDocuments, doGet, accept methods in the java class
  • remove the /src/main/resources/OSGI-INF/extensions/org.nuxeo.sample.YourProjectActionsBean.xml xml file
  • remove the /src/main/resources/OSGI-INF/l10n directory
  • remove the /src/main/resources/web directory

To generate the jar => right click on the project name > Nuxeo > Export jar...

To install it into your Nuxeo instance copy it in $Nuxeo_HOME/nxserver/bundles

Hope will help.

Pierre_Jenicot1
Star Contributor
Star Contributor

Hi,

I publish the final code for users interested

@Name("yourProjectAction")
@Scope(ScopeType.EVENT)
public class yourProjectAction implements Serializable {

private static final long serialVersionUID = 1L;

@In(create = true, required = false)
protected transient CoreSession documentManager;

@In(create = true)
protected NavigationContext navigationContext;

@In(create = true)
protected DocumentsListsManager documentsListsManager;

protected List<DocumentModel> getCurrentlySelectedDocuments() {

    if (navigationContext.getCurrentDocument().isFolder()) {
        return documentsListsManager.getWorkingList(DocumentsListsManager.CURRENT_DOCUMENT_SELECTION);
    } else {
        return null;
    }
}    

public boolean isSelectionAreAllApproved() throws ClientException {

    List<DocumentModel> selectedDocs = getCurrentlySelectedDocuments();
    if (selectedDocs == null) {
      return false;
    }
    for (DocumentModel doc : selectedDocs) {
        if (!doc.getCurrentLifeCycleState().equals("approved")) {
          return false;
        }
    }
    return true;
 }
}

Thank you for the community. I marked your answer as the one. Mine is more general.

Getting started

Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.