Migration technique 4.0 vers 4.1


  1. Exclusion de l'action "Modification des PJ" du ruban
  2. Séparation des heures d'enseignement
    1. Données
    2. Workflow
    3. Import CDM-fr
    4. Import Apogée
  3. Copie de catalogue
  4. Catégories des tables de référence hiérarchiques avec titre multilingue
  5. Migration des services

Exclusion de l'action "Modification des PJ" du ruban

L'action "Modification des PJ" apparaît dans le ruban si vous n'avez pas mis à jour votre workflow en prenant modèle sur celui du template ODF ou ODF-Web selon votre cas.

L'action 12 doit être exclue des boutons avec l'identifiant org.ametys.odf.course.workflow.WorkflowSteps, org.ametys.odf.program.workflow.WorkflowSteps, org.ametys.odf.subprogram.workflow.WorkflowSteps dans la balise workflow-actions si elle est en mode exclude.

Séparation des heures d'enseignement

Les données totalDurationOf* ont totalement disparues, toutes les références à celles-ci doivent être migrées. Cela veut notamment dire que si vous avez surchargé le type de contenu ELP (course), il faut supprimer les références vers les données totalDurationOf* et les remplacer par une référence vers la métadonnée courseParts.

Données

La migration des données se fait via une classe d'initialisation.
Elle est désactivable une fois que les données ont été migrées, c'est la feature odf/init.course-part, mais ce n'est pas indispensable.
Reconstruire les index et le live après le premier démarrage en M3.

Workflow

Il y a un nouveau worfklow, le workflow des heures d'enseignement (ou CoursePart), c'est le fichier workflows/course-part.xml. Il faut aussi ajouter son libellé dans application.xml :

<message key="WORKFLOW_coursepart">Heures d'enseignement</message>              

Le workflow des ELP (workflows/course.xml) a été mis à jour pour ajouter après la validation d'un contenu de type ELP, la validation des heures d'enseignement qui y sont rattachées.
Il faut donc ajouter dans workflows/course.xml, après chaque appel à la fonction org.ametys.odf.workflow.ValidateODFContentFunction, l'appel à la fonction org.ametys.odf.workflow.MoveLiveTagOnCoursePartFunction :

<function type="avalon">                      
    <arg name="role">org.ametys.odf.workflow.MoveLiveTagOnCoursePartFunction</arg>                      
</function>                     

Import CDM-fr

Pour les imports CDM-fr non Ametys ou antérieurs à Ametys v4.2 (ODF 4.1), Si dans la synchronisation CDM-fr, vous avez surchargé les templates nommés course-totalDurationOf*, ils faut les modifier pour qu'ils importent des CoursePart sous la forme suivante :

<xsl:template name="course-totalDurationOfCM">                      
    <xsl:if test="cdmfr:credits/cdmfr:globalVolume[@teachingtype='CM']">                      
        <coursePart>                      
            <title>CM</title>                      
            <nature>CM</nature>                      
            <nbHours><xsl:value-of select="cdmfr:credits/cdmfr:globalVolume[@teachingtype='CM']"/></nbHours>                      
        </coursePart>                      
    </xsl:if>                      
</xsl:template>                      

Pour faire de l'import Ametys v4.2 (ODF 4.1), il faudra utiliser le template nommé course-courseParts.

Import Apogée

Une requête a été ajoutée au fichier apogee-requests.xml :

<select id="getCourseParts" parameterType="java.util.Map" resultType="map">                     
    <include refid="Functions.isNotBlank" />                      
    SELECT DISTINCT                      
        COD_TYP_HEU,                      
        NBR_HEU_ELP                      
    FROM ELP_CHG_TYP_HEU                      
    WHERE upper(COD_ELP)=upper(#{apogeeSyncCode})                      
    <if test="#fn = isNotBlank, #fn(year)">                      
        AND (COD_ANU IS NULL OR COD_ANU = #{year})                      
    </if>                      
</select>                      

Et en parallèle de cela, la requête remontant les données d'un ELP dont les volumes horaires a été simplifiée. Les volumes horaires ne sont plus stockés au même endroit et peuvent maintenant être multiples pour une même nature d'enseignement. Toutes les références à la table ELP_CHARGE_ENS ont donc été supprimées de la requête searchCourses.

Le mapping associé présent dans apogee-mapping.xml également :

{"metadata-ref":"totalDurationOfCM","attribute":"NBR_HEU_CM_ELP","synchro":true},                     
{"metadata-ref":"totalDurationOfTD","attribute":"NBR_HEU_TD_ELP","synchro":true},                     
{"metadata-ref":"totalDurationOfTP","attribute":"NBR_HEU_TP_ELP","synchro":true}                     
[...]                     
<column>NBR_HEU_CM_ELP</column>                     
<column>NBR_HEU_TD_ELP</column>                     
<column>NBR_HEU_TP_ELP</column>                     

Donc si vous avez surchargé apogee-mapping.xml et/ou apogee-requests.xml, il faudra les comparer aux nouvelles versions noyau.

Copie de catalogue

Une nouvelle action de workflow allégée a été faite pour la copie de catalogue (et la traduction) afin de réduire le temps de copie. Il faut rajouter l'action 210 à l'étape 1 des workflow program, subprogram, container, courselist, course et course-part :

<!-- Edit by copy Action -->           
<action id="210" name="plugin.default-odf-workflow:WORKFLOW_ACTION_EDIT_BY_COPY">           
    <restrict-to>           
        <conditions>           
            <condition type="avalon">           
                <arg name="role">org.ametys.cms.workflow.LockCondition</arg>           
            </condition>           
        </conditions>           
    </restrict-to>           
    <results>           
        <unconditional-result old-status=" " status=" " step="1" />           
    </results>           
    <post-functions>           
        <function type="avalon">           
            <arg name="role">org.ametys.cms.workflow.ExtractOutgoingReferencesFunction</arg>           
        </function>           
        <function type="avalon">           
            <arg name="role">org.ametys.odf.workflow.copy.NotifyCopyFunction</arg>           
        </function>           
    </post-functions>           
</action>           

Cette action est une interne qui doit être exclue des menus de workflows. Pour cela dans le plugin.xml de votre plugin default-odf-workflow, ajoutez <action>210</action> dans la section <workflow-actions mode="exclude"> pour la déclaration des menus suivants :

  • org.ametys.odf.course.workflow.WorkflowSteps
  • org.ametys.odf.program.workflow.WorkflowSteps
  • org.ametys.odf.subprogram.workflow.WorkflowSteps
  • org.ametys.odf.container.workflow.WorkflowSteps
  • org.ametys.odf.courselist.workflow.WorkflowSteps

En cas de doute, reportez-vous aux plugin default-odf-workflow des templates ODF et ODF web.

Catégories des tables de référence hiérarchiques avec titre multilingue

Les titres des catégories des tables de référence sont maintenant multilingues.

Exécutez le script suivant pour migrer les catégories existantes:

var count = 0;        
            
function _titleMigration(content)        
{        
    var titleProp = content.getNode().getProperty("ametys:title");        
    var title = titleProp.getString();        
    titleProp.remove();        
    content.getMetadataHolder().setMetadata("title", title, new java.util.Locale("fr"));        
    count++;        
}        
            
jcrXPathQuery("//element(*, ametys:content)[(@ametys-internal:contentType = 'odf-enumeration.CodeErasmusCategory' or @ametys-internal:contentType = 'odf-enumeration.CodeFapCategory' or @ametys-internal:contentType = 'odf-enumeration.EnseignementNatureCategory') and @ametys:title]")        
    .forEach(function (content)        
    {        
        migrateContent(        
            content,        
            [_titleMigration],        
            true /* old versions incompatible */,        
            null /* no tag */,        
            false /* not verbose */        
        );        
    }        
);        
            
print(count + " reference table entries have been migrated");        

Migration des services

Les services ODF comme tous les autres services nécessitent une migration suite à des modifications sur le format de stockage.
Exécutez le script de la page dédiée à la migration des services

Retour en haut

Manuel de mise à jour