Java API

Si vous souhaitez étendre beCPG grâce à un nouveau module JAVA AMP, beCPG fourni un ensemble d'API public pouvant être utilisé et facilitant le développement d'applications.

ORM API

Afin de manipuler les entités de beCPG, il existe un outil de mapping entre les modèles Alfresco et les objets Java Pojo.

En effet, il permet de mapper les objets Java Pojo avec les modèles de données Alfresco et utilise l'API Java pour manipuler ces objets. Le mapping est basé sur 5 annotations Java.

Un ensemble d'annotations représente les propriétés et les associations d'Alfresco:

@AlfQname --> Spécifie le qName d'Alfresco
@AlfType --> Correspond à un type Alfresco
@AlfProp --> Correspond à des propriétés Alfresco
@AlfMlText -->  Correspond à des propriétés mltext précises

@AlfSingleAssoc --> Correspond à une unique association cible
@AlfMultiAssoc --> Correspond à plusieurs associations cibles
@AlfEnforced --> Enregistre le champ même s'il est nul
@AlfReadOnly --> N'enregistre pas les propriétés

Il existe également un ensemble d'annotations représentant les datalists de beCPG:

@DataList
@DataListIdentifierAttr
@DataListView
@MultiLevelDataList
...

Nous voulons, par exemple, créer et manipuler des objects de type "deliverable".

  • Créer le modèle de données Alfresco:
            <type name="pjt:deliverable">
                <properties>
                    <property name="pjt:dlDescription">
                        <type>d:text</type>
                        <mandatory>true</mandatory>
                    </property>
                    <property name="pjt:dlState">
                        <type>d:text</type>
                        <constraints>
                            <constraint ref="pjt:deliverableStates" />
                        </constraints>
                    </property>
                    <property name="pjt:dlUrl">
                        <type>d:text</type>
                    </property>
                </properties>
                <associations>
                    <association name="pjt:dlTask">
                        <source>
                            <mandatory>true</mandatory>
                            <many>true</many>
                        </source>
                        <target>
                            <class>pjt:taskList</class>
                            <mandatory>true</mandatory>
                            <many>false</many>
                        </target>
                    </association>
                    <association name="pjt:dlContent">
                        <source>
                            <mandatory>false</mandatory>
                            <many>true</many>
                        </source>
                        <target>
                            <class>cm:content</class>
                            <mandatory>false</mandatory>
                            <many>false</many>
                        </target>
                    </association>
                </associations>
            </type>
  • Créer l'objet Java correspondant avec les annotations beCPG.
    La classe devrait hériter de BeCPGDataObject. Les méthodes setters, hashCode, equals et toString doivent être déclarées.
    @AlfType
    @AlfQname(qname = "pjt:deliverable")
    public class Deliverable extends BeCPGDataObject {

        private NodeRef task;
        private DeliverableState state = DeliverableState.Planned;
        private String description;
        private String url;
        private Integer completionPercent = 0;
        private NodeRef content;

        @AlfSingleAssoc
        @AlfQname(qname = "pjt:dlTask")
        public NodeRef getTask() {
            return task;
        }

        @AlfProp
        @AlfQname(qname = "pjt:dlUrl")
        public String getUrl() {
            return url;
         }

        @AlfProp
        @AlfQname(qname = "pjt:dlState")
         public DeliverableState getState() {
            return state;
         }


        @AlfProp
        @AlfQname(qname = "pjt:dlDescription")
        public String getDescription() {
            return description;
        }

        @AlfProp
        @AlfQname(qname = "pjt:completionPercent")
        public Integer getCompletionPercent() {
            return completionPercent;
        }

        @AlfSingleAssoc
        @AlfQname(qname = "pjt:dlContent")
        public NodeRef getContent() {
            return content;
        }
       ...
    }
  • Enfin, utiliser la classe AlfrescoRepository afin d'effectuer les opérations CRUD (création, lecture, mise à jour, supression) sur l'objet Java créé.
    public class TestORM {
     @Resource
     protected AlfrescoRepository<Deliverable> alfrescoRepository;
     @Test
     public void test() {
            //CRUD
            Deliverable deliverable = new Deliverable();            
            deliverable.setParentNodeRef(getParentNodeRef());

            //Create
            alfrescoRepository.save(deliverable);            
            NodeRef deliverableNodeRef = deliverable.getNodeRef();

            //Retrieve
            deliverable = alfrescoRepository.findOne(deliverableNodeRef);            
            deliverable.setDescription("Test");
            //Update
            alfrescoRepository.save(deliverable);        }
       ...
    }

Search query builder

beCPG fournit une classe utilitaire pour construire des requêtes FTS (Full-Text Search) ou Alfresco Lucene sûres et rapides.\ Cette classe s'efforcera autant que possible de construire une requête transactionnelle. Consultez https://docs.alfresco.com/search-services/latest/config/transactional/ pour plus d'informations.

Voici quelques cas d'utilisation :

    //Getting some search results
    List<NodeRef> ret = BeCPGQueryBuilder.createQuery()
                    .ofType(ContentModel.TYPE_FOLDER)
                    .isNotNull(ContentModel.PROP_MODIFIED)
                    .excludeAspect(ContentModel.ASPECT_WORKING_COPY)
                    .withAspect(ContentModel.ASPECT_TITLED)
                    .addSort(ContentModel.PROP_MODIFIED,true).list();

    // Getting unlimited results, it will do an internal pagination based on date modified 
    List<NodeRef> ret = BeCPGQueryBuilder.createQuery()
                    .ofType(ContentModel.TYPE_FOLDER).maxResults(RepoConsts.MAX_RESULTS_UNLIMITED).list();

    //Getting single result or null
    NodeRef nodeRef  = BeCPGQueryBuilder.createQuery()
                    .ofType(ContentModel.TYPE_FOLDER)
                    .andPropEquals(ContentModel.PROP_NAME, "Test").singleValue();

results matching ""

    No results matching ""