Besoin: vérifier qu'une relevé Aten à la sauvegarde contienne au moins soit un index soit un incident de relève.
Commente le faire autrement qu'en javascript au clic sur la sauvegarde?
En post action?
Rechercher dans ce blog
lundi 8 avril 2013
jeudi 30 août 2012
Utiliser aten pour modifier l'affichage un champ dynamiquement
Je veux afficher la liste "usage" uniquement si la check box est cochée par l'utilisateur, et l'écran doit s'actualiser à la saisie. (type traitement javascript.)
Soit je code du javascript, moi je suis pas une grande fan, je trouve que le temps de debug/maintenance est plus long, soit j'utilise le mécanisme aten dédié.
Mecanisme aten dédidé
Ajouter le § en couleur à la variable qui doit être évaluée pour afficher la liste "usage".A chaque modif de cette variable "mycheckbox", aten réactualise les displays conditions des autres champs de l'écran.
<variable control=ControlChekcBox fieldid=mycheckbox....>
<javascript event="onchange">
<submit operation="control"/>
</javascript>
</variable>
Le champs usage a une displaycondition en fonction du champ mycheckbox
<variable fieldid=usage displaycondition =mycheck.tostring!='1'>...</variable>
cacher / rendre obligatoire un champ
s'utilise avec<setdisplayvar variableid="" ismandatory="" executeif=""/> (dans les préactions)
ou displaycondition (dans la variable)
cf datamodelCCIAG_GENE_PROCEDECONTRATCC.xml
mardi 28 août 2012
inserer nouvel élément dans une table fille
exemple extrait de la classe GénérationConsoTotaliseur
//Création donnee fille
if ((dcControleur == null) || (dnControleur == null)) {
throw new ErreurInterneException("#2 Impossible de recupérer le datacontrol CRTl_RENDEMENT_TOTALISEUR, id ="
+ (idControleur != null ? idControleur : "NULL"));
}
DatatreeIntDataNode dnRendement = dnControleur.createChild("CCIAG_CC_RENDEMENT_TOTALISEUR", atenContext);
Serialiseur.completeNewDataNode(atenContext, dnRendement);
dnRendement.setAttribut("CCIAG_RENDEMENT_DATE_DEBUT", dateMin);
dnRendement.setAttribut("CCIAG_RENDEMENT_DATE_FIN", dateMax);
dnRendement.setAttribut("CCIAG_RENDEMENT_VALEUR", rdt);
dnRendement.setAttribut("CCIAG_PERTE", perte);
dnRendement.setAttribut("CCIAG_RENDEMENT_ANNEE", annee);
dnRendement.setAttribut("CCIAG_RENDEMENT_MOIS", mois);
if ((lastIdControleur != null) && !lastIdControleur.equals(idControleur)) {//Sauve les rdts pour ce ctrl
Serialiseur.makeTransitionFilles(atenContext, dcControleur, null, "CCIAG_CC_RENDEMENT_TOTALISEUR");
}
} catch (Exception e) {
erreursRendement.add(e);
}
//Création donnee fille
if ((dcControleur == null) || (dnControleur == null)) {
throw new ErreurInterneException("#2 Impossible de recupérer le datacontrol CRTl_RENDEMENT_TOTALISEUR, id ="
+ (idControleur != null ? idControleur : "NULL"));
}
DatatreeIntDataNode dnRendement = dnControleur.createChild("CCIAG_CC_RENDEMENT_TOTALISEUR", atenContext);
Serialiseur.completeNewDataNode(atenContext, dnRendement);
dnRendement.setAttribut("CCIAG_RENDEMENT_DATE_DEBUT", dateMin);
dnRendement.setAttribut("CCIAG_RENDEMENT_DATE_FIN", dateMax);
dnRendement.setAttribut("CCIAG_RENDEMENT_VALEUR", rdt);
dnRendement.setAttribut("CCIAG_PERTE", perte);
dnRendement.setAttribut("CCIAG_RENDEMENT_ANNEE", annee);
dnRendement.setAttribut("CCIAG_RENDEMENT_MOIS", mois);
if ((lastIdControleur != null) && !lastIdControleur.equals(idControleur)) {//Sauve les rdts pour ce ctrl
Serialiseur.makeTransitionFilles(atenContext, dcControleur, null, "CCIAG_CC_RENDEMENT_TOTALISEUR");
}
} catch (Exception e) {
erreursRendement.add(e);
}
mardi 21 août 2012
Procédure livraison
Livraison Arsinoe
Se mettre sur la conf de Candice
Sur le projet CCIAG_Arsinoe trunk
1: merge: team merge sur le trunk; si update faire ok.
cf http://aten-alma.blogspot.fr/2012/04/svn-merger-les-revisions-de-la-branche.html
Merge a range of revision
Select revisions (merge from branch de dev)
Choisir le contenu
Prompt du maximum de choses
Ignore ancestry décoché
Finish
Vérif des conflits (visible aussi dans console)
Si conflits: gérer SVN Tree Conflicts (Team show tree conflicts)
Team commit (mettre date du jour, destination...)
2: ant qui copie le contenu des fichiers du dossier local du trunk (pas svn) dans les dossiers de locaux de la branche Imagina
ant: run as option run as (3); cocher default puis run; donner le nom du patch, sinon mettre une valeur ok
Refresh d'Imagina_CCIAG_Arsinoe, vérif rapide puis commit avec numéro de patch, et destination (prod et/ou test)
Puis mail à CCIAG quand mail d'Imagina: patch dispo
3: commit
4: avertir Imagina
5. Envoyer le mail de livraison :
- avec en pièce jointe les scripts présents dans <dossier lot chaine compteur>\Livraisons\<date livraison>
- en précisant les étapes post-installation parmi :
Mise à jour des bases d'étoile sur aplg et aplf ( sqlforeign label modifié)
Mise à jour des cycles de vie
Mise à jour des portlets et fonctions
Mise à jour des portails par profil d'utilisateur
Mise à jour des préferences utilisateur (ecran de recherche)
Mise à jour des droits
Après installation de la livraison, passer le script en pièce jointe.
Le patch mobilité nécessite une suppression des bases locales
Batch
Livraison Arsinoe V2
cf mail bruno :
le modèle de la fiche personnel a été modifié et
impactait la requête de sélection des personnes.
-
AtenDatabaseTablesPROD.cstAttribut_PERSON_RESOURCENAT remplacé par AtenDatabaseTablesPROD.cstAttribut_PERSON_RESOURCENAT_V_MNT
En synthèse l’ensemble doit
compiler moyennant cette modification, qui concerne uniquement une partie
commune. Procédure validée en interne avant la mise à disposition du nouveau
moteur.
- faire la livraison arisnoe (version normale)
- à partir du le projet arsinoe CCIAG_Arsinoe trunk
- executer la tache ant/ copyfiltoImaginaV2.xml
- aller dans le projet arsinoeV4 (qui correspond à arisnoe v2 !).
- faire refresh du projet.
- remettre la version tempstravailmanager .java du commit n°1390 dans le projet arsinoeV4
- commit
- copier dans le projet imagina_arsinoev4
- commit
mardi 3 juillet 2012
feuille de style, css
Pour inclure une feuille de style dans un configurateur :
Dans un configurateur il faut utiliser la balise
importcss (cf planning javascript : configuratorplanning.xml). Il faut placer le css dans un
répertoire “style” déclaré dans le module en question ou dans le noonpublic si
commun à plusieurs module.
jeudi 28 juin 2012
récupérer le technicien responsable d'un compteur
Exemple de code (point de départ: la ligne possédant une série de compteurs):
COALESCE((SELECT TOP 1 p2.at_firstname + ' ' + p2.at_lastname as techInstall
FROM cciag_cc_compteur
left outer join aten_prod_machine on aten_prod_machine.at_idmachine = cciag_cc_compteur.at_idmachinecompteur
left outer join ATEN_GENE_TREEL treelMachine on treelMachine.AT_NOONKEY='db:' + cast(aten_prod_machine.at_idmachine as varchar) +'@ATEN_PROD_MACHINE'
left outer join ATEN_GENE_TREEL treelEquipement on treelMachine.at_idtreelfather = treelEquipement.at_idtreel and treelEquipement.AT_NOONKEY like '%@ATEN_PROD_EQUIPEMENTH'
left outer join ATEN_GENE_TREEL treelInstallation on treelEquipement.at_idtreelfather = treelInstallation.at_idtreel and treelInstallation.AT_NOONKEY like '%@ATEN_PROD_INSTALLATIONH'
left outer join ATEN_PROD_INSTALLATIONH on treelInstallation.AT_NOONKEY='db:' + cast(ATEN_PROD_INSTALLATIONH.AT_IDINSTALLATIONH as varchar) +'@ATEN_PROD_INSTALLATIONH'
left outer join aten_prod_person p2 on ATEN_PROD_INSTALLATIONH.AT_IDFIRSTTECHNICAL=p2.at_idperson
where cciag_cc_ligne.cciag_idligne=cciag_cc_compteur.cciag_idligne and aten_prod_machine.AF_EXTENDCODE in
(
select AT_EXTENDCODE from ATEN_ADMIN_EXTENDL where at_idextendl in
(
select at_idextendl from ATEN_ADMIN_EXTENDFIELDDESCRIPTION
where AT_IDEXTENDFIELD in
(
select AT_IDEXTENDFIELD from aten_admin_extendfield where AT_FIELDCODE = 'TECHNICIEN'
)
and AT_IDEXTENDTABLE =
(
select AT_IDEXTENDTABLE from ATEN_ADMIN_EXTENDTABLE where AT_EXTENDTABLE = 'ATEN_PROD_MACHINE'
)
)
) order by techInstall desc
),'') AS tech2,
COALESCE((SELECT TOP 1 p2.at_firstname + ' ' + p2.at_lastname as techInstall
FROM cciag_cc_compteur
left outer join aten_prod_machine on aten_prod_machine.at_idmachine = cciag_cc_compteur.at_idmachinecompteur
left outer join ATEN_GENE_TREEL treelMachine on treelMachine.AT_NOONKEY='db:' + cast(aten_prod_machine.at_idmachine as varchar) +'@ATEN_PROD_MACHINE'
left outer join ATEN_GENE_TREEL treelEquipement on treelMachine.at_idtreelfather = treelEquipement.at_idtreel and treelEquipement.AT_NOONKEY like '%@ATEN_PROD_EQUIPEMENTH'
left outer join ATEN_GENE_TREEL treelInstallation on treelEquipement.at_idtreelfather = treelInstallation.at_idtreel and treelInstallation.AT_NOONKEY like '%@ATEN_PROD_INSTALLATIONH'
left outer join ATEN_PROD_INSTALLATIONH on treelInstallation.AT_NOONKEY='db:' + cast(ATEN_PROD_INSTALLATIONH.AT_IDINSTALLATIONH as varchar) +'@ATEN_PROD_INSTALLATIONH'
left outer join aten_prod_person p2 on ATEN_PROD_INSTALLATIONH.AT_IDFIRSTTECHNICAL=p2.at_idperson
where cciag_cc_ligne.cciag_idligne=cciag_cc_compteur.cciag_idligne and aten_prod_machine.AF_EXTENDCODE in
(
select AT_EXTENDCODE from ATEN_ADMIN_EXTENDL where at_idextendl in
(
select at_idextendl from ATEN_ADMIN_EXTENDFIELDDESCRIPTION
where AT_IDEXTENDFIELD in
(
select AT_IDEXTENDFIELD from aten_admin_extendfield where AT_FIELDCODE = 'TECHNICIEN'
)
and AT_IDEXTENDTABLE =
(
select AT_IDEXTENDTABLE from ATEN_ADMIN_EXTENDTABLE where AT_EXTENDTABLE = 'ATEN_PROD_MACHINE'
)
)
) order by techInstall desc
),'') AS tech2,
mardi 24 avril 2012
SVN merger les revisions de la branche vers le trunk
Dans le trunk >Team > merge
- ne pas cocher Ignor ancestry
- résoudre les conflits dans l'éditeur graphique (pour les fichiers contenus dans des révisions à ne pas embarquer)
- en cas de revert, faire le revert sur dossier parent.
- En cas de tree conflits (selon le conflit): view tree conflit > clic droit sur ficher > Resolve
Projet Trunk > History > toolbar de la view history > bouton triangle tout à droite > include merged revisions
mardi 17 avril 2012
Compteur volumétrique d'ECS associé à un controleur thermique
Cette association de compteurs est modélisée par un contrôleur de rendement entre un compteur thermique père (Chauffage & ECS ou ECS) et un compteur volumétrique d’ECS.
Le compteur thermique père est un compteur de chauffage&ECS en mode été (à l'état Marche) ou un compteur thermique ECS.
L’association avec le compteur volumétrique d’ECS se fait par le bais de son compteur fils virtuel multiplicateur thermique ECS. Le compteur virtuel multiplicateur utilise le ratio de conversion qECS ou R TH, VOL.
Noter que les alertes de rendement sont associées aux relevés du compteur père.
lundi 16 avril 2012
Création de compteur virtuel multiplicateur
Un compteur virtuel multiplicateur est créé automatiquement par le système, à la création d'un compteur volumétrique. Il y a alors 2 cas de création d'un multiplicateur:
- si un ratio est renseigné au niveau du compteur
- si une valeur qECS est assignée au niveau de la ligne de contrat (uniquement pour les volumétriques ecs)
- si un ratio est renseigné au niveau du compteur
- si une valeur qECS est assignée au niveau de la ligne de contrat (uniquement pour les volumétriques ecs)
jeudi 12 avril 2012
NO PERMISSION TO ACCESS THIS DATA MODEL
L'erreur suivante est due à un chargement du datacontrol avec le mauvais moduleId.
Pour corriger :
- ajouter le droit d'accès à partir de cc pour ce datamodel
- mettre le moduleId du datamodel en paramètre (on le fait déjà dans Serialiseur)
_!_!_ERROR_!_!_ NO PERMISSION TO ACCESS THIS DATA MODEL :dataModel[CCIAG_CC_DEMANDE_TABBORD] DataModelModuleId[cc] AccessModule[amon] java.lang.Throwable
- at com.imagina.packbox.logger.LoggerMessage.getPrintStack(LoggerMessage.java:323)
- at com.imagina.noon.toolbox.datamodel.DataModelFactory.getDataModel(DataModelFactory.java:1102)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getByModelId(DataControlFactory.java:360)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.loadWithDataOnlyForData(DataControlFactory.java:2385)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getCompleteDataControlOnlyForData(DataControlFactory.java:1830)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getDataControl(DataControlFactory.java:1116)
- at com.alma.cciag.cc.aten.Serialiseur.getDataControl(Serialiseur.java:392)
- at com.alma.cciag.cc.aten.Serialiseur.getDataControl(Serialiseur.java:315)
- at com.alma.cciag.cc.aten.scheduler.GenTabBordScheduler.generateTabBord(GenTabBordScheduler.java:345)
- at com.alma.cciag.cc.aten.scheduler.GenTabBordScheduler.execute(GenTabBordScheduler.java:286)
- at com.imagina.noon.engine.NoonActivity.executeActivity(NoonActivity.java:506)
- at com.imagina.sobek.engine.SobekMapExecute.execute(SobekMapExecute.java:180)
- at com.imagina.noon.activities.batch.BatchReport.executeUrl(BatchReport.java:1152)
- at com.imagina.noon.activities.batch.BatchReport.executeBatch(BatchReport.java:776)
Pour corriger :
- ajouter le droit d'accès à partir de cc pour ce datamodel
- mettre le moduleId du datamodel en paramètre (on le fait déjà dans Serialiseur)
_!_!_ERROR_!_!_ NO PERMISSION TO ACCESS THIS DATA MODEL :dataModel[CCIAG_CC_DEMANDE_TABBORD] DataModelModuleId[cc] AccessModule[amon] java.lang.Throwable
- at com.imagina.packbox.logger.LoggerMessage.getPrintStack(LoggerMessage.java:323)
- at com.imagina.noon.toolbox.datamodel.DataModelFactory.getDataModel(DataModelFactory.java:1102)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getByModelId(DataControlFactory.java:360)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.loadWithDataOnlyForData(DataControlFactory.java:2385)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getCompleteDataControlOnlyForData(DataControlFactory.java:1830)
- at com.imagina.noon.toolbox.datacontrol.core.DataControlFactory.getDataControl(DataControlFactory.java:1116)
- at com.alma.cciag.cc.aten.Serialiseur.getDataControl(Serialiseur.java:392)
- at com.alma.cciag.cc.aten.Serialiseur.getDataControl(Serialiseur.java:315)
- at com.alma.cciag.cc.aten.scheduler.GenTabBordScheduler.generateTabBord(GenTabBordScheduler.java:345)
- at com.alma.cciag.cc.aten.scheduler.GenTabBordScheduler.execute(GenTabBordScheduler.java:286)
- at com.imagina.noon.engine.NoonActivity.executeActivity(NoonActivity.java:506)
- at com.imagina.sobek.engine.SobekMapExecute.execute(SobekMapExecute.java:180)
- at com.imagina.noon.activities.batch.BatchReport.executeUrl(BatchReport.java:1152)
- at com.imagina.noon.activities.batch.BatchReport.executeBatch(BatchReport.java:776)
mercredi 11 avril 2012
DatacontrolCommandTransition
pour avoir la possibilité de faire un rollback sur un ensemble de traitement en cas d'erreur : on peut utiliser une telecommande
attention l'utilisation de la telecommande n'améliore pas les performances
try {
DataControlCommandTransition telecommande = new DataControlCommandTransition(atenContext);
telecommande.beginTransaction(atenContext);
foreach (.............datacontrols ){
//traitement sur le dc
telecommande.playtransition(datacontrol);
}
telecommande.endTransaction(true);
} catch (LoggerException e1) {
String eventsString = "";
for (LoggerEvent event : e1.getEventList()) {
if (event != null) {
eventsString += Utils.nonNull(event.toString()) + " ; ";
}
}
L'erreur suivante arrive si on utilise dans le même thread monDatacontrol.transition et telecommande.playtransition(monDatacontrol).
_!_!_ERROR_!_!_ Same thread ask stmt twice !!! [null] and stackTrace=[java.lang.Throwable
at com.imagina.packbox.database.DatabaseConnection.reserveStatementFromPool(DatabaseConnection.java:1500)
at com.imagina.packbox.database.DatabaseConnection.createStatement(DatabaseConnection.java:791)
at com.imagina.packbox.lock.Lock.lock(Lock.java:259)
at com.imagina.packbox.lock.Lock.lockWait(Lock.java:201)
at com.imagina.packbox.lock.Lock.multipleLock(Lock.java:116)
at com.imagina.packbox.lock.LockResourceManager.lock(LockResourceManager.java:231)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3455)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3269)
attention l'utilisation de la telecommande n'améliore pas les performances
try {
DataControlCommandTransition telecommande = new DataControlCommandTransition(atenContext);
telecommande.beginTransaction(atenContext);
foreach (.............datacontrols ){
//traitement sur le dc
telecommande.playtransition(datacontrol);
}
telecommande.endTransaction(true);
} catch (LoggerException e1) {
String eventsString = "";
for (LoggerEvent event : e1.getEventList()) {
if (event != null) {
eventsString += Utils.nonNull(event.toString()) + " ; ";
}
}
L'erreur suivante arrive si on utilise dans le même thread monDatacontrol.transition et telecommande.playtransition(monDatacontrol).
_!_!_ERROR_!_!_ Same thread ask stmt twice !!! [null] and stackTrace=[java.lang.Throwable
at com.imagina.packbox.database.DatabaseConnection.reserveStatementFromPool(DatabaseConnection.java:1500)
at com.imagina.packbox.database.DatabaseConnection.createStatement(DatabaseConnection.java:791)
at com.imagina.packbox.lock.Lock.lock(Lock.java:259)
at com.imagina.packbox.lock.Lock.lockWait(Lock.java:201)
at com.imagina.packbox.lock.Lock.multipleLock(Lock.java:116)
at com.imagina.packbox.lock.LockResourceManager.lock(LockResourceManager.java:231)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3455)
at com.imagina.noon.toolbox.datacontrol.core.DataControl.transition(DataControl.java:3269)
vendredi 23 mars 2012
Définitions chaîne compteur
Période été = pour les compteurs thermiques CH et ECS: compteur à l'état marche ECS; pour les compteurs thermiques CH: compteur à l'état arrêt
Période hiver = pour les compteurs thermiques CH et ECS: compteur à l'état marche ECS et chauffage; pour les compteurs thermiques CH: compteur à l'état marche
Mois de changement d'état = dans le mois (ou plutôt dans l'intervalle de date correspondant au mois) il existe au moins un relevé avec l'événement marqué "Changement état fonctionnement"
Période hiver = pour les compteurs thermiques CH et ECS: compteur à l'état marche ECS et chauffage; pour les compteurs thermiques CH: compteur à l'état marche
Mois de changement d'état = dans le mois (ou plutôt dans l'intervalle de date correspondant au mois) il existe au moins un relevé avec l'événement marqué "Changement état fonctionnement"
mercredi 14 mars 2012
trier un searchform
utiliser <form additionalfilter=" cciag_cc_frequence.AT_lifestatus like 'ACTI'" searchformid="acti" title="" defaultorder="AT_DATECREAT" >
(cf datamodelcciag_cc_ligne)
la balise fieldsort ne marche pas.
(cf datamodelcciag_cc_ligne)
la balise fieldsort ne marche pas.
mercredi 15 février 2012
mardi 24 janvier 2012
externalroopathclients
en cas de modif d'un fichier de l'externalrootpathclients
- verifier si on peut transférer le fichier ds externalrootpathintegrators
- sinon demander la derniere version à imagina, faire la modif, commiter ds CCIAG_Arsinoe/../livraison_externalrootpathclients
- prévenir imagina lors du patch d'integrer les fichier du dossier /livraison_externalrootpathclients
mercredi 4 janvier 2012
Mode op: ajouter un batch
Dans le fichier batchinit.xml: rajouter la définition du batch.
Dans l'IHM: chargement des données initiales, charger les cycles de vie
Dans la définition du batch, passer du statut DEAD au statut SLEEP
Dans l'IHM: chargement des données initiales, charger les cycles de vie
Dans la définition du batch, passer du statut DEAD au statut SLEEP
Mode op: ajouter une portlet
Fichier functions.xml: ajouter la portlet, les fonctions de la portlet (f1 par exemple)
Créer le(s) configurateur(s) associé(s) (par exemple ici Configurationf1.xml)
Remplir chaque configurateur en utilisant des labels définis dans noonpublic_fr.properties
Coder les fonctions appelées par chaque configurateur
Dans portalhome.xml et/ou portalhome_pro_superviseurCC.xml et/ou pro_technicien: ajouter la portlet
Dans l'IHM: Données > chargement des données initiales > fonctions et portlets, cocher "charger les données"
Dans l'écran d'accueil, cliquer sur les écrans en haut à droite et s'attribuer la portlet
Dans le menu Administration, cocher la case "Mode visualisation des droits"; puis cliquer sur modifier
Retour à l'écran: cliquer sur la clé à proximité des fonctions à utiliser; affecter un profil type
La fonction deviendra disponible aux détenteurs du profil concerné
ATTENTION! Si création des portlets et fonctions à la main:
- dans portlets ne pas indiquer d'icône ni d'origine
- dans fonctions, ne pas indiquer d'icône ni de compagnie sur l'écran principal (que pour l'écran d'ajout de libellé)
- surtout faire attention à la position des fonctions; bien mettre des positions x et y cohérentes; ils démarrent tous deux à 0. Attention des mauvais placements peuvent faire en sorte que les fonctions n'apparaissent pas à l'écran.
Créer le(s) configurateur(s) associé(s) (par exemple ici Configurationf1.xml)
Remplir chaque configurateur en utilisant des labels définis dans noonpublic_fr.properties
Coder les fonctions appelées par chaque configurateur
Dans portalhome.xml et/ou portalhome_pro_superviseurCC.xml et/ou pro_technicien: ajouter la portlet
Dans l'IHM: Données > chargement des données initiales > fonctions et portlets, cocher "charger les données"
Dans l'écran d'accueil, cliquer sur les écrans en haut à droite et s'attribuer la portlet
Dans le menu Administration, cocher la case "Mode visualisation des droits"; puis cliquer sur modifier
Retour à l'écran: cliquer sur la clé à proximité des fonctions à utiliser; affecter un profil type
La fonction deviendra disponible aux détenteurs du profil concerné
ATTENTION! Si création des portlets et fonctions à la main:
- dans portlets ne pas indiquer d'icône ni d'origine
- dans fonctions, ne pas indiquer d'icône ni de compagnie sur l'écran principal (que pour l'écran d'ajout de libellé)
- surtout faire attention à la position des fonctions; bien mettre des positions x et y cohérentes; ils démarrent tous deux à 0. Attention des mauvais placements peuvent faire en sorte que les fonctions n'apparaissent pas à l'écran.
jeudi 15 décembre 2011
index et vues
Je suis à la recherche d'exemples d'utilisation de vues indexées dans Aten.
Il n'y en a pas, pas possible d'indexer une vue avec Aten (mail d'Emilie).
Il n'y en a pas, pas possible d'indexer une vue avec Aten (mail d'Emilie).
jeudi 8 décembre 2011
Style
comment afficher la zone code style :
1. First you need to HTML-escape your code snippet to convert special characters to such as < and > to their escape form < and > respectively. You can do this manually or use an online escape tool.
http://www.htmlescape.net/htmlescape_tool.html
2. Go to post editor and switch to Edit HTML mode.
3. Place the escaped code inside tags, with class attribute included, like so:
1. First you need to HTML-escape your code snippet to convert special characters to such as < and > to their escape form < and > respectively. You can do this manually or use an online escape tool.
http://www.htmlescape.net/htmlescape_tool.html
2. Go to post editor and switch to Edit HTML mode.
3. Place the escaped code inside tags, with class attribute included, like so:
<pre class="brush: js">
ENTER YOUR ESCAPED CODE SNIPPET HERE
</pre>
If you use Window Live Writer to edit you posts, you can
use this Syntax Highlighter plug-in by Arnold Matusz.
With this plug-in, you just copy and paste the code into the plug-in screen.
You don’t have to escape the code or manually enter it, all you have to do is
paste the code inside the plugin window.
http://www.bloggersentral.com/2009/04/how-to-show-code-in-blog-post.html
Datamodel structure générale
les actions du initactions sont lancées au chargement de la page :
on fait des actions telles que :
initialiser des variables,
initialiser des readonlycondition (champ en lecture ou ecriture), des mandatory conditions (champs obligatoire)
lancer des classes java qui travaillent sur l'affichage de la donnée...
la plupart des ces actions sont conditionnées à l'état d'autres données, pour ça, elles ont toutes l'attribut executeif="" .
tankvariable : le nom du param de l'url
variableid : la variable de ton datamodel
ici la variable IDCOMPTEURGMAOCURRENT du datamodel est le champs qui va être initialiser, c'est défini grace au ' as IDCOMPTEURGMAOCURRENT ' de la requete
au passage note:
- le execute if (et sa syntaxe)
-@@CCIAG_IDCOMPTEUR@@ : A la génération de la page web, ce @@CCIAG_IDCOMPTEUR@@ est remplacé par la valeur de la variable CCIAG_IDCOMPTEUR du datamodel. Cette notation s'utilise dans les requetes, mais aussi dans les attributs de variable tq executeif ou autre
Exemple de classes java apellées pour modifier l'affichage. (on s'en sert pour cacher des champs, en rendre obligatoire, calculer les graphs, afficher la zone de "navigation compteurs" ..)
on fait des actions telles que :
initialiser des variables,
initialiser des readonlycondition (champ en lecture ou ecriture), des mandatory conditions (champs obligatoire)
lancer des classes java qui travaillent sur l'affichage de la donnée...
la plupart des ces actions sont conditionnées à l'état d'autres données, pour ça, elles ont toutes l'attribut executeif="" .
<datamodel datamodelid="CCIAG_CC_COMPTEUR" label="CCIAG_CC_COMPTEUR"getfromtank recupere les params passé en GET dans l'url:
titlefield="CCIAG_CODE_COMPTEUR" delta="TRUE">
<configuration configurationid="CCIAG_CC_COMPTEUR"
resetchangeflag="FALSE" title="root">
<initactions>
tankvariable : le nom du param de l'url
variableid : la variable de ton datamodel
<getfromtank variableid="CREA_COMPTEUR" tankvariable="CREA_COMPTEUR" />dans un sqlrequest tu récupéres une valeur pour initialiser la variable;
ici la variable IDCOMPTEURGMAOCURRENT du datamodel est le champs qui va être initialiser, c'est défini grace au ' as IDCOMPTEURGMAOCURRENT ' de la requete
au passage note:
- le execute if (et sa syntaxe)
-@@CCIAG_IDCOMPTEUR@@ : A la génération de la page web, ce @@CCIAG_IDCOMPTEUR@@ est remplacé par la valeur de la variable CCIAG_IDCOMPTEUR du datamodel. Cette notation s'utilise dans les requetes, mais aussi dans les attributs de variable tq executeif ou autre
<sql
sqlrequest="select AT_IDMACHINE as CCIAG_IDCOMPTEURGMAOCURRENT from cciag_cc_liengmao where CCIAG_IDCOMPTEUR=@@CCIAG_IDCOMPTEUR@@ and cciag_datefin is null"
executeif="ECRAN.tostring=='2' && CCIAG_IDCOMPTEURGMAOCURRENT.isnull && CCIAG_IDCOMPTEUR.tostring != ''" />
<set variableid="CCIAG_ISARELEVER" expression="0"
executeif="CCIAG_ISARELEVER.isnull" />
<set variableid="CCIAG_NBCHIFFREAPRVIRGULE1" expression="0"
executeif="CCIAG_NBCHIFFREAPRVIRGULE1.isnull" />
<set variableid="CCIAG_NBCHIFFREAPRVIRGULE2" expression="0"
executeif="CCIAG_NBCHIFFREAPRVIRGULE2.isnull" />
<set variableid="CCIAG_NIV1ACTIVE" expression="1"
executeif="CCIAG_NIV1ACTIVE.isnull" />
<set variableid="CCIAG_NIV2ACTIVE" expression="1"
executeif="CCIAG_NIV2ACTIVE.isnull" />
<set variableid="CCIAG_NIV3ACTIVE" expression="1"
executeif="CCIAG_NIV3ACTIVE.isnull" />
<set variableid="NB_ANNEE_CHAUFF" expression="4" />
<set variableid="COMPTEURTOGRAPH" expression="CCIAG_IDCOMPTEUR" />
<set variableid="CALCULDISPLAY" expression="'TRUE'" />
<set variableid="CCIAG_TYPE_TOTALISEUR_LIST" expression="' (0) '"
executeif="!CCIAG_TYPE.isnull && (CCIAG_TYPE.tostring=='1' || CCIAG_TYPE.tostring=='3' || CCIAG_TYPE.tostring=='4' || CCIAG_TYPE.tostring=='5' ) "/>
<set variableid="CCIAG_TYPE_TOTALISEUR_LIST" expression="' (1) '" executeif="!CCIAG_TYPE.isnull && CCIAG_TYPE.tostring=='8'"/>
<set variableid="CCIAG_TYPE_TOTALISEUR_LIST" expression="' (2) '" executeif="!CCIAG_TYPE.isnull && CCIAG_TYPE.tostring=='10'"/>
Exemple de classes java apellées pour modifier l'affichage. (on s'en sert pour cacher des champs, en rendre obligatoire, calculer les graphs, afficher la zone de "navigation compteurs" ..)
<callfct classname="com.alma.cciag.cc.datacontrol.AfficherCompteur" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphConsoIndex1" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphConsoIndex2" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphRatioConso" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphDeltaT" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphEcartsCumules" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
<callfct classname="com.alma.cciag.cc.graph.FctGraphRatioConsoECS" executeif="CCIAG_IDCOMPTEUR.tostring!=''" />
</initactions>
<globalactions />
Inscription à :
Articles (Atom)