Jointures dynamiques vX.11
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')