Jointures dynamiques X.11
Utilisation de .ActivateCase
Une nouvelle instruction de RecordSql permet de traiter des jointures variables. Le principe est de remplacer l'écriture de plusieurs jointures par une seule, en permettant de mettre dans un ‘case’ à l’intérieur de la jointure les éléments différentiateurs qui ont donné plusieurs jointures à l’origine.
Exemple d'écriture en jointure classique
<LeftJoin NoActivate> ENT AS ENT_DV USING EntetePiece_PicodFullPiNo(1, MOUV.PrefDvNo, MOUV.DvNo) <LeftJoin NoActivate> ENT AS ENT_Cd USING EntetePiece_PicodFullPiNo(2, MOUV.PrefCdNo, MOUV.CdNo) <LeftJoin NoActivate> ENT AS ENT_Bl USING EntetePiece_PicodFullPiNo(3, MOUV.PrefBlNo, MOUV.BlNo) <LeftJoin NoActivate> ENT AS ENT_Fa USING EntetePiece_PicodFullPiNo(4, MOUV.PrefFaNo, MOUV.FaNo)
On voit ici 4 jointures qui ont pour différence les paramètres passés au dictionnaire de jointure.
Le code diva manipule dans ce cas une activation de jointure à la demande
Switch Choix_Type_Statistique Case C_PICOD_DEV InterroStat.Join.Activate('ENT_DV') Case C_PICOD_CDE InterroStat.Join.Activate('ENT_Cd') Case C_PICOD_BL InterroStat.Join.Activate('ENT_BL') Case C_PICOD_FAC InterroStat.Join.Activate('ENT_FA') EndSwitch
La nouvelle fonctionnalité de jointure dynamique permet de passer à une nouvelle écriture
Exemple d'écriture pour utilisation du .ActivateCase dans le .DHSQ
<Join NoActivate> GTFDD.dhsd ENT As ENT Case DEVIS USING EntetePiece_PicodFullPiNo(1, MOUV.PrefDvNo, MOUV.DvNo) Case COMMANDE USING EntetePiece_PicodFullPiNo(2, MOUV.PrefCdNo, MOUV.CdNo) Case BL USING EntetePiece_PicodFullPiNo(3, MOUV.PrefBlNo, MOUV.BlNo) Case FACTURE USING EntetePiece_PicodFullPiNo(4, MOUV.PrefFaNo, MOUV.FaNo)
Cela implique des adaptations dans le code diva appelant pour lequel, il faut remplacer l’instruction instance.join.activate('Ent') par instanceMouvement.join.activateCase('ENT','UseCase')