Réunion technique PMSIpilot 06 Juin 2009
<ul><li>Du Context au Criteria
L'utilisation dans MCO
Le fonctionnement
Le filtrage dans MCO
Pourquoi forker Propel ? </li></ul>Agenda
<ul><li>Objectifs  : </li><ul><li>Permettre la réalisation du Requeteur
Filtrage multiple sur MCO (filtre premium)
Utilisation de tables virtuelles et partitionnées
Utiliser ces mécanismes de manière transparente pour le développeur </li></ul></ul>Du Context au Criteria
<ul><li>3 notions : </li><ul><li>Context : Conteneur d'information
Criteria : Objet permettant de générer du code SQL
Criterion : Composant du Criteria, permet de générer des bouts de SQL </li></ul></ul>Du Context au Criteria Context Criter...
<ul><li>Appel du pmsipilotMCOCriteria toujours à partir du pmsipilotMCOContext
Cloner le Criteria lorsque l'on modifie l'objet
Prochain SlideShare
Chargement dans…5
×

pmsipilotMCOCriteria

815 vues

Publié le

Présentation du Criteria PMSIpilot utilisé avec propel

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
815
Sur SlideShare
0
Issues des intégrations
0
Intégrations
236
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

pmsipilotMCOCriteria

  1. 1. Réunion technique PMSIpilot 06 Juin 2009
  2. 2. <ul><li>Du Context au Criteria
  3. 3. L'utilisation dans MCO
  4. 4. Le fonctionnement
  5. 5. Le filtrage dans MCO
  6. 6. Pourquoi forker Propel ? </li></ul>Agenda
  7. 7. <ul><li>Objectifs : </li><ul><li>Permettre la réalisation du Requeteur
  8. 8. Filtrage multiple sur MCO (filtre premium)
  9. 9. Utilisation de tables virtuelles et partitionnées
  10. 10. Utiliser ces mécanismes de manière transparente pour le développeur </li></ul></ul>Du Context au Criteria
  11. 11. <ul><li>3 notions : </li><ul><li>Context : Conteneur d'information
  12. 12. Criteria : Objet permettant de générer du code SQL
  13. 13. Criterion : Composant du Criteria, permet de générer des bouts de SQL </li></ul></ul>Du Context au Criteria Context Criteria Périmètre Criterion
  14. 14. <ul><li>Appel du pmsipilotMCOCriteria toujours à partir du pmsipilotMCOContext
  15. 15. Cloner le Criteria lorsque l'on modifie l'objet
  16. 16. Utilisation d'une méthode getPerimetre du context pour passer des paramètres supplémentaires
  17. 17. $perimetre = $context->getPerimetre('rumag',array(RumPeer::TARIFRUM, RumPeer::GHS, RumPeer::DATEEFFETTARIF);
  18. 18. $criteria = clone $context->getPmsiCriteria($perimetre); </li></ul>L'utilisation dans MCO
  19. 19. L'utilisation dans MCO V4 V5
  20. 20. <ul><li>Choix de la table principale
  21. 21. Mappage de la table
  22. 22. Initialisation des tables partitionnées
  23. 23. Ajout du filtrage
  24. 24. Ajout des tables temporaires </li></ul>Le fonctionnement
  25. 25. <ul><li>Les méthodes de l'API </li><ul><li>bindToAnotherTable($to, $from) </li><ul><li>Lie une table à une table virtuelle (ex table rum vers une table virtuelle) </li></ul><li>initMap($table) </li><ul><li>Créé le mappage de la table et active les tables partitionnées </li></ul><li>generatePartTable($table, $annee) </li><ul><li>Génère les tables partitionnées pour l'année concernée </li></ul><li>changerNomTable($champ) </li><ul><li>Change le nom d'un champ (ex: rss.NroRSS) en un nom utilisant la table virtuelle ou partitionnée (ex : rss_08.NroRSS)
  26. 26. Utilise un template pour choisir dynamiquement le nom de la classe (:peer::NOMCHAMP ---> RumPeer.Nom_champ) </li></ul></ul></ul>Le fonctionnement
  27. 27. <ul>$perimetre = $context->getPerimetre('rumag',array(RumPeer::TARIFRUM, RumPeer::GHS, RumPeer::DATEEFFETTARIF); $criteria = $context->getPmsiCriteria($perimetre); </ul>1 2 3 : initMap (rum) 5 : filtrage 4 : création Criteria rum 6 : création table temporaire 7: traitements Table tmp 9 :Bind table rum vers table tmp Le fonctionnement Contrôleur Context Criteria Criteria filtrage Criteria Temporaire Génération Table tmp
  28. 28. <ul><li>En 2 temps </li><ul><li>Génération de Criterion stockés dans le Criteria
  29. 29. Intégration des Criterion </li></ul><li>4 types de filtrage </li><ul><li>Periode
  30. 30. Verclass
  31. 31. UM
  32. 32. Filtre premiums </li></ul></ul>Le filtrage dans MCO
  33. 33. <ul><li>3 cas d'intégration du filtrage dans le Criteria </li><ul><li>Criteria sans table virtuelle </li><ul><li>Avec jointure dans le filtrage </li><ul><li>Utilisation d'une table temporaire de filtrage </li></ul><li>Sans jointure dans le filtrage </li><ul><li>Ajout des conditions dans la clause WHERE </li></ul></ul><li>Criteria avec table virtuelle </li><ul><ul><li>Ajout des conditions dans la clause WHERE du SELECT qui va servir à remplir la table virtuelle. </li></ul></ul></ul></ul>Le filtrage dans MCO
  34. 34. <ul><li>2 contraintes principales : </li><ul><li>Faire des jointures complexes : </li><ul><li>Ex : tableA LEFT JOIN table2 ON (tableA.ch1 > tableB.ch2 OR tableA.ch3 <= tableB.ch3) </li></ul><li>Éviter de cumuler les jointures sur une même table et pour une colonne identique. </li><ul><li>$crit->addJoin(RumPeer::NRORSS, RssPeer::NRORSS);
  35. 35. /*** un peu plus loin ***/
  36. 36. $crit->addJoin(RumPeer::NRORSS, RssPeer::NRORSS); </li></ul></ul><li>Obligation de faire ces modifications dans la classe mère Criteria </li></ul>Pourquoi forker Propel ?
  37. 37. <ul><li>Autres modifications du comportement de Propel </li><ul><li>Surcharge de la méthode add(); </li><ul><li>Additionner les conditions au lieu d'écraser. </li></ul></ul><li>Surcharges des méthodes du Criteria </li><ul><li>Remplacer les noms des tables par celles des tables partitionnées et virtuelles.
  38. 38. Utilisation de changerNomTable() </li></ul></ul>Pourquoi forker Propel ?
  39. 39. <ul><li>Points faibles du Criteria/MCOCriteria/SQL </li><ul><li>2 jointures sur la même table avec des conditions différentes -> PropelException
  40. 40. Nom de la table temporaire basée sur la signature de l'objet MCOCriteria
  41. 41. Jointure sur la table temporaire de filtrage coûteuse lorsque la condition de filtrage est peu filtrante </li></ul></ul>Pourquoi forker Propel ?
  42. 42. <ul><li>Empiler les tables temporaires
  43. 43. Récupérer un Criterion de filtrage </li></ul>Autres possibilités

×