<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://frp.sage.fr/wiki1000/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://frp.sage.fr/wiki1000/index.php?action=history&amp;feed=atom&amp;title=Conseils_pour_l%27%C3%A9criture_des_processus_%28code%29</id>
		<title>Conseils pour l'écriture des processus (code) - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="https://frp.sage.fr/wiki1000/index.php?action=history&amp;feed=atom&amp;title=Conseils_pour_l%27%C3%A9criture_des_processus_%28code%29"/>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;action=history"/>
		<updated>2026-05-15T23:06:27Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=897&amp;oldid=prev</id>
		<title>Syfre : /* Prise en compte des droits utilisateurs */</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=897&amp;oldid=prev"/>
				<updated>2009-07-25T07:16:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Prise en compte des droits utilisateurs&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Version précédente&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Version du 25 juillet 2009 à 07:16&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 97 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 97 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;En générale les droits de lecture se traduisent par des filtres qui doivent être appliqué aux différentes requêtes.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;En générale les droits de lecture se traduisent par des filtres qui doivent être appliqué aux différentes requêtes.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Voir [[Prise en compte des droits (code)|La prise en compte des droits dans les processus]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Voir &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;aussi :&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* &lt;/ins&gt;[[Prise en compte des droits (code)|La prise en compte des droits dans les processus]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Footer|Code métier}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Footer|Code métier}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[category:Code métier]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[category:Code métier]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=794&amp;oldid=prev</id>
		<title>Syfre : /* Contrôle des erreurs métiers */</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=794&amp;oldid=prev"/>
				<updated>2009-07-18T17:10:50Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Contrôle des erreurs métiers&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Version précédente&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Version du 18 juillet 2009 à 17:10&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 65 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 65 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Le [[ClassManager (code)|ClassManager]] dispose de services pour contrôler le déclenchement des messages d'erreurs et d'alertes des règles.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Le [[ClassManager (code)|ClassManager]] dispose de services pour contrôler le déclenchement des messages d'erreurs et d'alertes des règles.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;source lang='delphi'&amp;gt;Classmanager.hasgui:Boolean;&amp;lt;/source&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Voir [[Contrôle du contexte &lt;/ins&gt;de &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;session (CM)|Contrôle du contexte de session]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Bloque tous les messages d’erreurs ou d’alertes tant qu’il est positionné à False. Aucun message n’apparaît. Cela permet &lt;/del&gt;de &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ne pas bloquer des traitements longs par des messages d’alerte ou d’erreur. Ceux-ci sont gérés en bloc dans le traitement.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;source lang='delphi'&amp;gt;Classmanager.NoAlert:Boolean ;&amp;lt;/source&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Bloque tous les messages d’alerte tant qu’il est positionné à True.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Déclenchement d’exceptions métier===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Déclenchement d’exceptions métier===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=793&amp;oldid=prev</id>
		<title>Syfre : Nouvelle page : ===Ecriture de processus=== Un processus (ou traitement) est une opération réalisée sur un ensemble d’objets.  ===Modélisation d’un processus=== Il est commode d’implément...</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php?title=Conseils_pour_l%27%C3%A9criture_des_processus_(code)&amp;diff=793&amp;oldid=prev"/>
				<updated>2009-07-18T16:54:12Z</updated>
		
		<summary type="html">&lt;p&gt;Nouvelle page : ===Ecriture de processus=== Un processus (ou traitement) est une opération réalisée sur un ensemble d’objets.  ===Modélisation d’un processus=== Il est commode d’implément...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Ecriture de processus===&lt;br /&gt;
Un processus (ou traitement) est une opération réalisée sur un ensemble d’objets.&lt;br /&gt;
&lt;br /&gt;
===Modélisation d’un processus===&lt;br /&gt;
Il est commode d’implémenter les processus à l’aide d’une ou plusieurs classes non persistantes.&lt;br /&gt;
&lt;br /&gt;
En général un processus comprendra :&lt;br /&gt;
*Une ou plusieurs classes non persistantes définies au cours de la modélisation.&lt;br /&gt;
*Un écran d’exécution réalisant l’interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
L’écran d’exécution du processus doit comporter un « dataset » portant sur la classe non persistante du processus. A l’ouverture de l’écran, une instance de cette classe est automatiquement créée par le framwork d’interface. Cette instance est responsable de l’exécution du processus.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
'''Processus de régularisation du lettrage'''&lt;br /&gt;
&lt;br /&gt;
Les zones de sélection de la fenêtre se retrouvent dans les attributs et dans les rôles de la classe processus.&lt;br /&gt;
Les autres attributs et rôles n’apparaissent pas dans la fenêtre mais sont utilisés dans le programme des fonctions et des règles.&lt;br /&gt;
La fonction Executer() est exécutée lorsque le bouton Exécuter est actionné.&lt;br /&gt;
 &lt;br /&gt;
Fenêtre d’exécution du processus de régularisation du lettrage.&lt;br /&gt;
 &lt;br /&gt;
Ecrans d’exécution et contrôle du processus&lt;br /&gt;
Un écran d’exécution doit au moins comporter les éléments suivants :&lt;br /&gt;
*Un composant « dataset » portant sur la classe non persistante implémentant le processus.&lt;br /&gt;
*Un composant « invoker » permettant de déclencher et contrôler l’exécution du processus.&lt;br /&gt;
*Un contrôle de déclenchement de l’exécution du processus, généralement un bouton.&lt;br /&gt;
L’écran peut comporter des éléments permettant au code métier du processus d’interagir avec l’utilisateur :&lt;br /&gt;
*Un contrôle affichant les messages émis par le code métier, généralement un contrôle de type mémo.&lt;br /&gt;
*Un contrôle « barre de progression » permettant d’afficher la progression de réalisation du traitement.&lt;br /&gt;
*Un contrôle de déclenchement permettant d’interrompre le processus, généralement un bouton.&lt;br /&gt;
&lt;br /&gt;
===Messages utilisateur, progression et interruption===&lt;br /&gt;
Le framework offre un ensemble de services permettant au code métier d’interagir avec l’utilisateur.&lt;br /&gt;
&lt;br /&gt;
Voir [[Interactions utilisateur (code)|Interactions utilisateur]]&lt;br /&gt;
&lt;br /&gt;
{{info|Il n’existe pas de service permettant l’ouverture de boîte de dialogue directement à partir du code métier.}}&lt;br /&gt;
                      &lt;br /&gt;
===Gestion des transactions dans les processus===&lt;br /&gt;
Dans un écran portant sur une classe non persistante la modification d’un attribut ne déclenche pas une transaction implicite. La transaction doit donc être gérée explicitement par le code métier du processus à l’aide des API de contrôle de transaction .&lt;br /&gt;
&lt;br /&gt;
Voir [[Transactions (code)|La gestion des transactions]]&lt;br /&gt;
&lt;br /&gt;
===Contrôle des erreurs===&lt;br /&gt;
====Contrôle des erreurs d’exécution====&lt;br /&gt;
Le code métier a la possibilité de gérer les erreurs d’exécution à l’aide d’un bloc d’exception ; il peut alors intercepter l'exception et émettre le message vers l'interface utilisateur.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
procedure doMiseAJourAxeAnalytiqueAPlat;&lt;br /&gt;
try&lt;br /&gt;
  _SupprimerEspaces;&lt;br /&gt;
  _MajEspaces ;&lt;br /&gt;
  ClassManager.CommitLongTran;&lt;br /&gt;
except&lt;br /&gt;
  ClassManager.RollBackLongTran;&lt;br /&gt;
  ProgressMessage('Erreur dans la mise à jour de l''axe analytique à plat') ;&lt;br /&gt;
  ProgressMessage(E.Message) ;&lt;br /&gt;
  Completed := False ;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contrôle des erreurs métiers====&lt;br /&gt;
Le [[ClassManager (code)|ClassManager]] dispose de services pour contrôler le déclenchement des messages d'erreurs et d'alertes des règles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;Classmanager.hasgui:Boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
Bloque tous les messages d’erreurs ou d’alertes tant qu’il est positionné à False. Aucun message n’apparaît. Cela permet de ne pas bloquer des traitements longs par des messages d’alerte ou d’erreur. Ceux-ci sont gérés en bloc dans le traitement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;Classmanager.NoAlert:Boolean ;&amp;lt;/source&amp;gt;&lt;br /&gt;
Bloque tous les messages d’alerte tant qu’il est positionné à True.&lt;br /&gt;
&lt;br /&gt;
===Déclenchement d’exceptions métier===&lt;br /&gt;
Le code métier a la possibilité de lever des exceptions métiers qui permettent d’interrompre élégamment un traitement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;Raise ERule.Create&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
  if Assigned(deviseBR) and (deviseBR.CodeISO = 'FRF') &lt;br /&gt;
    then Result := 'F'&lt;br /&gt;
    else &lt;br /&gt;
  if Assigned(deviseBR) and (deviseBR.CodeISO = 'EUR') &lt;br /&gt;
    then Result := 'E'&lt;br /&gt;
    else raise ERule.Create('La devise de compte bancaire doit être FRF ou EUR');&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prise en compte des droits utilisateurs===&lt;br /&gt;
Les droits utilisateurs ajoutés dans l’administration permettent de poser des restrictions sur les données accessibles à l’utilisateur et sur les actions qu’il est autorisé à effectuer.&lt;br /&gt;
&lt;br /&gt;
Cependant ces droits ne sont pas pris en compte automatiquement dans les processus pour deux raisons :&lt;br /&gt;
*La première est qu’il aurait été très difficile de le faire du fait que le processus peut écrire du code SQL directement à travers des curseurs.&lt;br /&gt;
*La seconde est qu’il aurait été très difficile d’assurer un fonctionnement cohérent des traitements, les droits pouvant affecter de manière imprévisible le déroulement normal d’un traitement.&lt;br /&gt;
&lt;br /&gt;
Dans certain cas particulier il peut être néanmoins nécessaire de prendre en compte les droits dans certains processus, par exemple ceux effectuant des consultations de données. Pour ce faire une API a été ajoutée au langage de script permettant au code métier de récupérer les éléments de droits et de les appliquer dans le code métier.&lt;br /&gt;
&lt;br /&gt;
En générale les droits de lecture se traduisent par des filtres qui doivent être appliqué aux différentes requêtes.&lt;br /&gt;
&lt;br /&gt;
Voir [[Prise en compte des droits (code)|La prise en compte des droits dans les processus]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Code métier}}&lt;br /&gt;
[[category:Code métier]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	</feed>