AXOPEN

Relation inverse : quelle syntaxe en OJS sous Planisware ?

Problématique

Les relations inverses permettent de « récupérer » facilement et de manière optimisée tous les objets qui possèdent une relation avec un objet donné. Par exemple une relation inverse permettra de parcourir la liste des affectations portant sur une activité donnée.

Cet article apporte un éclairage sur la manière d’utiliser une relation inverse et complète un précédent billet sur ce sujet. Comme vous pourrez le voir le nommage est loin d’être unique… et pour une même relation inverse on pourra avoir plusieurs possibilités.

1. Faire une boucle sur une relation inverse

Prenons un exemple :

Pour itérer sur les affectations d’une activité « ID_ACTIVITY » on peut utiliser la syntaxe suivante utilisant des relations inverses :

var o_activity = "OpxActivity".get("ID_ACTIVITY");

for(var o_allocation in o_activity.Allocations)
{
    …
}

Ici à partir de l’activité dont l’ID est « ID_ACTIVITY » on va itérer sur toutes les Affectations dont le champ relation Activité (ou WORK_STRUCTURE) a pour valeur l’activité concernée.

La boucle va parcourir l’ensemble des objets o_activity.Allocations qui permet, à partir de l’objet activité de remonter les objets affectations qui lui sont rattachés. Ceci grâce au mot clé « Allocations » qui est le nom de la relation inverse.

Ce fameux mot clé peut avoir plusieurs noms différents pour une même relation. Ceci peut être déroutant lorsque l’on découvre le code OJS.

2. Nommage des relations inverses natives

Dans cette partie nous proposons une liste non exhaustive par relation des mots clés permettant de lister les objets en relation inverse.

On verra qu’il existe souvent au moins 1 version par langue (exemple Anglais / Français) mais d’autres déclinaisons dans une même langue peuvent être constatées.

Relation Affectations – Activité

for(var o_allocation in o_activity.Allocations){}
for(var o_allocation in o_activity.PlannedHours){}

Relation Dépenses prévues – Activité

for(var o_allocation in o_activity.Expenditures){}
for(var o_allocation in o_activity.PlannedExpenditures){}

Relation Synthèses des temps et des dépenses – Activité

for(var o_allocation in o_activity.get("TIME-SYNTS")){}

Version Planisware : Processes 5.3.2.14