<?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?feed=atom&amp;namespace=0&amp;title=Sp%C3%A9cial%3ANouvelles_pages</id>
		<title>Wiki1000 - Nouvelles pages [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://frp.sage.fr/wiki1000/index.php?feed=atom&amp;namespace=0&amp;title=Sp%C3%A9cial%3ANouvelles_pages"/>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Sp%C3%A9cial:Nouvelles_pages"/>
		<updated>2026-04-12T14:21:25Z</updated>
		<subtitle>De Wiki1000</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/D%C3%A9claration_des_URLs_de_services_externes</id>
		<title>Déclaration des URLs de services externes</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/D%C3%A9claration_des_URLs_de_services_externes"/>
				<updated>2026-03-19T09:28:59Z</updated>
		
		<summary type="html">&lt;p&gt;Flfay : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contexte ==&lt;br /&gt;
&lt;br /&gt;
L’application communique avec plusieurs services tiers via HTTP/HTTPS. &lt;br /&gt;
&lt;br /&gt;
Dans des environnements sécurisés (entreprise, production), les flux sortants sont souvent restreints. &lt;br /&gt;
&lt;br /&gt;
Cette documentation décrit les URLs des services externes utilisés.&lt;br /&gt;
&lt;br /&gt;
Ces endpoints doivent être explicitement autorisés par les administrateurs (réseau, sécurité, proxy, pare-feu) afin de garantir le bon fonctionnement de l’application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Liste des URLs à autoriser ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Liste des services externes&lt;br /&gt;
|-&lt;br /&gt;
! Service !! URL / Domaine !! Port !! Protocole !! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
| Sage Update|| frp1000.blob.core.windows.net|| 443 || https || &lt;br /&gt;
|-&lt;br /&gt;
| Sage Service Fabric || api-money.sage.com || 443 || https || api inscription Service Sage (peut ouvrir une url qui fait des appels *.gstatic.com)&lt;br /&gt;
|-&lt;br /&gt;
| Sage Service Fabric || www.sagetokenservice.com|| 443 || https || api obtention des jetons services Sage &lt;br /&gt;
|-&lt;br /&gt;
| Sage Service Fabric || regulatory-reports.sagecompliance.com|| 443 || https || api siren, signature pdf, taxid validation&lt;br /&gt;
|-&lt;br /&gt;
| Sage Network || api.sbc.sage.com|| 443 || https || api Inscription Sage Network&lt;br /&gt;
|-&lt;br /&gt;
| Sage Network || app.sbc.sage.com|| 443 || https || Url gestion Sage Network&lt;br /&gt;
|-&lt;br /&gt;
| Sage Network || api.network.sage.com|| 443 || https || api Sage network&lt;br /&gt;
|-&lt;br /&gt;
| Sage Network || network.sage.com|| 443 || https || url Sage connect&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Flfay</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Version_2026_r1_(release_note)</id>
		<title>Version 2026 r1 (release note)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Version_2026_r1_(release_note)"/>
				<updated>2026-03-16T14:27:54Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : /* Portail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2026r1}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
''' PREVIEW '''&lt;br /&gt;
&lt;br /&gt;
==Redirection Portail==&lt;br /&gt;
&lt;br /&gt;
Le portail supporte la redirection à partir de l'écran de connexion vers un écran ou un tableau de bord de l'application.&lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
&lt;br /&gt;
Redirection vers un écran:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://..../service_name/htmls/htmlhomepage/index.html?redirectUrl=frm%3A%2F%2Fegescom_tiersform.dfm%2FDAC19ACF0B210002079000000E690002&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redirection vers un dashboard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://..../service_name/htmls/htmlhomepage/index.html?redirectUrl=tab%3A%2F%2Fdashboard%2FTDashboardAdminDatabase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redirection vers un écran à partir de l'url de callback d'un workflow :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://.../service_name/server/rpc.l1000/rest/forms.url?value=frm%3A%2F%2Fegescom_tiersform.dfm%2FDAC19ACF0B210002079000000E690002%2F%3Fparams%3D%22ArgOidSiteCommercial%3DmptString%28%27%27%29%26SiteOid%3DmptString%28%27%27%29%22%26options%3D%22%7B%22showCaption%22%3Atrue%2C%22screenCenter%22%3Atrue%2C%22close%22%3Atrue%2C%22formType%22%3A0%2C%22formTitle%22%3A%22ACARIS%20-%20Fiche%20Tiers%22%2C%22helpUrl%22%3A%22https%3A%5C%2F%5C%2Fsagefrp1000.online-help.sage.fr%5C%2F%22%2C%22width%22%3A1827%2C%22height%22%3A912%7D%22%0A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version2026r1]]&lt;br /&gt;
[[Category:Release note]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/API_Json_(SData)</id>
		<title>API Json (SData)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/API_Json_(SData)"/>
				<updated>2026-02-26T15:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : /* Méthode JSON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Prérequis==&lt;br /&gt;
&lt;br /&gt;
L'API Json est une variante de [[Ressource (sdata)|l'API SData en mode ressource]]&lt;br /&gt;
&lt;br /&gt;
Les informations de connexion et les schémas d'URL sont identiques.&lt;br /&gt;
&lt;br /&gt;
A la différence de l'API en mode ressource, elle nécessite le déploiement de paquet DSM pour gérer les appels de service.&lt;br /&gt;
&lt;br /&gt;
==Méthode JSON==&lt;br /&gt;
&lt;br /&gt;
Dans ce mode, au lieu de manipuler des ressources retournées en xml ou json, le client appele des méthodes en passant en paramètre un payload json et en recevant en retour une responde json.&lt;br /&gt;
&lt;br /&gt;
La signature de ces méthodes doit être :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure foo(req:TJson; out resp:TJson);&lt;br /&gt;
var json:TJson;&lt;br /&gt;
begin&lt;br /&gt;
  json := TJson.Create('{}');&lt;br /&gt;
  ....&lt;br /&gt;
  resp := json;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces méthodes peuvent être membre de n'importe quelle classe non persistante, ou d'une classe support d'un paquet de service local.&lt;br /&gt;
&lt;br /&gt;
==Paquet de service local==&lt;br /&gt;
&lt;br /&gt;
L'utilisation d'un paquet de service local permet d'appeler directement les méthodes de la classe support du paquet.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&lt;br /&gt;
[[image:api-json-1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pouvez appeler directement la méthode myMethodJson() sans explicitement indiquer la classe support :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:8080/sdata/dsmPaquetDeService/myMethodJson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[image:api-json-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Paquet de classes non persistantes ==&lt;br /&gt;
&lt;br /&gt;
Les méthodes Json membres de classes non persistantes peuvent aussi être appelées.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&lt;br /&gt;
[[image:api-json-3.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Dans ce cas vous devez spécifier le nom de la classe dans l'URL d'appel de la méthode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:8080/sdata/dsmPaquetAPI/myMethodJson&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[image:api-json-4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
* [[Ressource (sdata)|API SData en mode ressource]]&lt;br /&gt;
&lt;br /&gt;
[[Category:SData]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/SQL_Server_2025_(rdbms)</id>
		<title>SQL Server 2025 (rdbms)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/SQL_Server_2025_(rdbms)"/>
				<updated>2026-02-07T08:29:24Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : /* Mode Optimized locking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Mode Optimized locking===&lt;br /&gt;
&lt;br /&gt;
SQL Serveur 2025 supporte une nouvelle option de gestion des verrous qui peut permettre dans certain cas de réduire le nombre de verrous posés durant une transaction et de limiter l'escalation de verrous vers le niveau Table .&lt;br /&gt;
&lt;br /&gt;
Ce mode est disponible sur toutes les éditions sauf Express.&lt;br /&gt;
&lt;br /&gt;
Ce mode n'est pas actif par défaut sur la version On Premise.&lt;br /&gt;
&lt;br /&gt;
'''Pour activer l'optimisation de verrous'''&lt;br /&gt;
&lt;br /&gt;
Activer le mode snapshot avec READ_COMMITTED_SNAPSHOT : &lt;br /&gt;
* Déconnecter tous les utilisateurs&lt;br /&gt;
* Exécuter l’ordre suivant :&lt;br /&gt;
&lt;br /&gt;
* ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON&lt;br /&gt;
&lt;br /&gt;
Activer le mode Accelerated Database Recovery :&lt;br /&gt;
&lt;br /&gt;
* ALTER DATABASE ... SET ACCELERATED_DATABASE_RECOVERY = ON;&lt;br /&gt;
&lt;br /&gt;
Activer le mode optimisation des verrous :&lt;br /&gt;
&lt;br /&gt;
* ALTER DATABASE ... SET OPTIMIZED_LOCKING = ON&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que le mode est actif :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT database_id,&lt;br /&gt;
       name,&lt;br /&gt;
       is_accelerated_database_recovery_on,&lt;br /&gt;
       is_read_committed_snapshot_on,&lt;br /&gt;
       is_optimized_locking_on&lt;br /&gt;
FROM sys.databases&lt;br /&gt;
WHERE name = ....;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[SQL_Server_2005_(rdbms)|SQL Server 2005, mode snapshot]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Base de données]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/TsqlOperation_(class)</id>
		<title>TsqlOperation (class)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/TsqlOperation_(class)"/>
				<updated>2025-12-23T11:00:52Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  ==Introduction==  La classe TsqlOperation est une classe SQL utilisée dans les opérations SQL exécutées par des sélecteurs.  {|class=&amp;quot;wikitable&amp;quot; |-... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
La classe TsqlOperation est une classe SQL utilisée dans les opérations SQL exécutées par des sélecteurs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Colonne&lt;br /&gt;
!Type&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|Identity&lt;br /&gt;
|Identifiant unique&lt;br /&gt;
|-&lt;br /&gt;
|opeId&lt;br /&gt;
|string&lt;br /&gt;
|Identifiant d'opération&lt;br /&gt;
|-&lt;br /&gt;
|action&lt;br /&gt;
|string&lt;br /&gt;
|Action SQL&lt;br /&gt;
|-&lt;br /&gt;
|operation&lt;br /&gt;
|string&lt;br /&gt;
|Operation SQL&lt;br /&gt;
|-&lt;br /&gt;
|oidTargeObject&lt;br /&gt;
|TOID&lt;br /&gt;
|Identifiant de l'objet créé / modifié&lt;br /&gt;
|-&lt;br /&gt;
|oidSourceObject&lt;br /&gt;
|TOID&lt;br /&gt;
|Identifiant de l'objet source&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Selecteur (tech)|Sélecteur]]&lt;br /&gt;
* [[CopyTo (selector)|Sélecteur CopyTo]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Code métier}}&lt;br /&gt;
[[category:Classes frameworks]]&lt;br /&gt;
[[category:version2025r2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ToJsonEx_(selector)</id>
		<title>ToJsonEx (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ToJsonEx_(selector)"/>
				<updated>2025-12-23T10:42:42Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;function ToJsonEx(SA:TJson; iOptions:Integer):Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode sérialise les objets de la sélection en json.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Nombre d'objets&lt;br /&gt;
|-&lt;br /&gt;
|SA&lt;br /&gt;
|Tableau json&lt;br /&gt;
|-&lt;br /&gt;
|iOptions&lt;br /&gt;
|Options de sérialisation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne le nombre d'objets affectés par l'opération en utilisant un jeu d'options.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//procedure TableRows(ST:TJsonStruct)&lt;br /&gt;
Type&lt;br /&gt;
  vue = viewOf(...)&lt;br /&gt;
   jsonName:Type(fmtOptions) = propPath;&lt;br /&gt;
   ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  sel := vue.CreateSelector('','',True,[]);&lt;br /&gt;
  sel.ToJsonEx(ST.rows, sjoIdAsGuid);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[ToJson (selector)|ToJson]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ToJson_(selector)</id>
		<title>ToJson (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ToJson_(selector)"/>
				<updated>2025-12-23T10:40:16Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;function ToJson(SA:TJson):Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode sérialise les objets de la sélection en json.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Nombre d'objets&lt;br /&gt;
|-&lt;br /&gt;
|SA&lt;br /&gt;
|Tableau json&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne le nombre d'objets affectés par l'opération.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//procedure TableRows(ST:TJsonStruct)&lt;br /&gt;
Type&lt;br /&gt;
  vue = viewOf(...)&lt;br /&gt;
   jsonName:Type(fmtOptions) = propPath;&lt;br /&gt;
   ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  sel := vue.CreateSelector('','',True,[]);&lt;br /&gt;
  sel.ToJson(ST.rows);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[ToJsonEx (selector)|ToJsonEx]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/MergeTableName_(selector)</id>
		<title>MergeTableName (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/MergeTableName_(selector)"/>
				<updated>2025-12-23T10:34:00Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property MergeTableName:string;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété définit le nom de la table destination lorsqu... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property MergeTableName:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit le nom de la table destination lorsque le sélecteur est utilisé sur une table temporaire en mise à jour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/SourceTableName_(selector)</id>
		<title>SourceTableName (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/SourceTableName_(selector)"/>
				<updated>2025-12-23T10:33:23Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property SourceTableName:string;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété définit le nom de la table source lorsque le... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property SourceTableName:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit le nom de la table source lorsque le sélecteur est utilisé sur une table temporaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/OperationId_(selector)</id>
		<title>OperationId (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/OperationId_(selector)"/>
				<updated>2025-12-23T10:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property operationID:string;&amp;lt;/source&amp;gt; &amp;lt;source lang='delphi'&amp;gt;property opeID:string;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propri... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property operationID:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property opeID:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit l'identifiant d'opération SQL utilisé dans une suite d'opérations SQL.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
var opeId:string;&lt;br /&gt;
begin&lt;br /&gt;
  opeId := CreateGuid;&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Operation (selector)|Operation SQL]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/OpeSource_(selector)</id>
		<title>OpeSource (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/OpeSource_(selector)"/>
				<updated>2025-12-23T10:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property opeSource:string;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété définit le nom de colonne source utilisée comme o... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property opeSource:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit le nom de colonne source utilisée comme oidSource de la table TsqlOperation dans les opérations SQL.&lt;br /&gt;
&lt;br /&gt;
Par défaut cette classe est &amp;quot;oid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Operation (selector)|Operation SQL]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/OpeClass_(selector)</id>
		<title>OpeClass (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/OpeClass_(selector)"/>
				<updated>2025-12-23T10:19:28Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property opeClass:string;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété définit le nom de la classe SQL utilisée dans les ... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property opeClass:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit le nom de la classe SQL utilisée dans les opérations SQL.&lt;br /&gt;
&lt;br /&gt;
Par défaut cette classe est TsqlOperation&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Operation (selector)|Operation SQL]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Operation_(selector)</id>
		<title>Operation (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Operation_(selector)"/>
				<updated>2025-12-23T09:27:24Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property Operation:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété définit le nom d'une opération SQL de mise à jour.&lt;br /&gt;
&lt;br /&gt;
{{tip|Nécessite conjointement OpeId}}&lt;br /&gt;
&lt;br /&gt;
Lorsque les propriétés Operation et OperationId sont définies, l'opération CopyTo alimente une classe SQL des objets insérés.&lt;br /&gt;
&lt;br /&gt;
Cette table peut ensuite être jointe dans des opérations SQL successives.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple &lt;br /&gt;
&lt;br /&gt;
'''Use of TsqlOperation to chain SQL operations'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  // We want to create a TPiece from a TBordereauReglement&lt;br /&gt;
  vueBordereau = viewOf(TBordereauReglement)&lt;br /&gt;
   .... define TPiece columns  ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // Then we want to add one ecriture by reglement of the borderau to this piece&lt;br /&gt;
  //&lt;br /&gt;
  vueReglement = viewOf(TReglement)&lt;br /&gt;
   vl:TsqlOperation = join('(opeId=%ArgOpeId) and (operation=%ArgOperation)'); &lt;br /&gt;
   oidBordereau:TOID = oidBordereauReglement;&lt;br /&gt;
   oidpiece:TOID = vl.oidTargetObject; // OID of the piece which has been created &lt;br /&gt;
   .... define TEcriture columns ....&lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
  // And finally we want to update the TReglement with the oid of the TEcriture created for this reglement.&lt;br /&gt;
  //&lt;br /&gt;
  vueUpdateReglement = viewOf(TReglement)&lt;br /&gt;
   vl:TsqlOperation = join('(opeId=%ArgOpeId) and (operation=%ArgOperation) and (oidSourceObject=self.oid)'); &lt;br /&gt;
   oidEcriture:TOID = oidEcriture; &lt;br /&gt;
   oidTargetEcriture:TOID = vl.oidTargetObject; // OID of the TEcriture for this TReglement&lt;br /&gt;
   oidBordereau:TOID = oidBordereauReglement; &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
// foo(oidBordereauReglement)&lt;br /&gt;
var opeId:string;&lt;br /&gt;
begin&lt;br /&gt;
  opeId := CreateGuid;&lt;br /&gt;
  try&lt;br /&gt;
  withP long transaction do&lt;br /&gt;
   begin&lt;br /&gt;
&lt;br /&gt;
     // Create a TPiece from this TBordereauReglement&lt;br /&gt;
     //  &lt;br /&gt;
     sel := vueBordereau.CreateSelector('(oid=%1)','',True,[oidBordereauReglement]);&lt;br /&gt;
     sel.OpeId := opeId;&lt;br /&gt;
     sel.Operation := 'Piece';&lt;br /&gt;
     sel.CopyTo('TPiece',[],[]);&lt;br /&gt;
&lt;br /&gt;
     // We could also retrieve the OID of the TPiece from the selector result&lt;br /&gt;
     // because the operation has created only one object&lt;br /&gt;
     // aOidPiece := sel.lastOpeFirstOID;&lt;br /&gt;
&lt;br /&gt;
     // Create TEcriture (s) from TReglement (s) of the TBordereauReglement&lt;br /&gt;
     //&lt;br /&gt;
     sel := vueReglement.CreateSelector('(oidBordereau=%1)','',True,[oidBordereauReglement]); &lt;br /&gt;
&lt;br /&gt;
     // To retreive the TPiece OID&lt;br /&gt;
     sel.AddParameter('ArgOpeId',opeId);&lt;br /&gt;
     sel.AddParameter('ArgOperation','Piece');&lt;br /&gt;
&lt;br /&gt;
     // To insert in the TsqlOperation the TEcriture we create&lt;br /&gt;
     sel.OpeId := opeId;&lt;br /&gt;
     sel.Operation := 'EcrReg';&lt;br /&gt;
     sel.CopyTo('TEcriture',[],[]); &lt;br /&gt;
  &lt;br /&gt;
     // Update the TReglement from the TEcriture which has been created for this Reglement&lt;br /&gt;
     //&lt;br /&gt;
     sel := vueUpdateReglement.CreateSelector('(oidBordereau=%1)','',True,[oidBordereauReglement]); &lt;br /&gt;
     // To match TReglement with TEcriture&lt;br /&gt;
     sel.AddParameter('ArgOpeId',iOpeId); &lt;br /&gt;
     sel.AddParameter('ArgOperation','EcrReg'); &lt;br /&gt;
     sel.Update(['oidEcriture'],['oidTargetEcriture']); &lt;br /&gt;
&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
  finally&lt;br /&gt;
   // Clean up the TsqlOperation&lt;br /&gt;
   TsqlOperation.CleanOpe(aOpeId); &lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[OpeID (selector)|Identifiant d'opération SQL (OpeId)]]&lt;br /&gt;
* [[CopyTo (selector)|Création par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/LastOpeAffected_(selector)</id>
		<title>LastOpeAffected (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/LastOpeAffected_(selector)"/>
				<updated>2025-12-23T08:29:38Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property lastOpeAffected:Integer;&amp;lt;/source&amp;gt;  '''Lecture'''  Cette propriété retourne le nombre d'objets affectés par la dernièr... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property lastOpeAffected:Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété retourne le nombre d'objets affectés par la dernière opération de mise à jour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update_(selector)|Mise à jour par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/LastOpeFirstOID_(selector)</id>
		<title>LastOpeFirstOID (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/LastOpeFirstOID_(selector)"/>
				<updated>2025-12-23T08:28:43Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;property lastOpeFirstOid:string;&amp;lt;/source&amp;gt;  '''Lecture'''  Cette propriété retourne le premier Oid mis à jour par une opération... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property lastOpeFirstOid:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété retourne le premier Oid mis à jour par une opération de mise à jour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update_(selector)|Mise à jour par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/LastOpeStampe_(selector)</id>
		<title>LastOpeStampe (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/LastOpeStampe_(selector)"/>
				<updated>2025-12-23T08:27:14Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : a déplacé LastOpeStampe (selector) vers LastOpeStamp (selector)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property lastOpeStamp:string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété retourne le dernier UpdStamp mis à jour par une opération de mise à jour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update_(selector)|Mise à jour par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/UpdateCumuls_(selector)</id>
		<title>UpdateCumuls (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/UpdateCumuls_(selector)"/>
				<updated>2025-12-23T08:25:39Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version11}}  &amp;lt;source lang='delphi'&amp;gt;property UpdateCumuls:boolean;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété permet la mise à jour des cumuls lors des mise à ... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property UpdateCumuls:boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété permet la mise à jour des cumuls lors des mise à jour par un sélecteur (défaut True).&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update_(selector)|Mise à jour par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/InsertInto_(selector)</id>
		<title>InsertInto (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/InsertInto_(selector)"/>
				<updated>2025-12-23T08:22:06Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;function InsertInto(const iTableName:string; const iInsertColumns:Array of string; const iInsertValues:Array of variant):Integer;&amp;lt;/source&amp;gt;  Cette mé... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;function InsertInto(const iTableName:string; const iInsertColumns:Array of string; const iInsertValues:Array of variant):Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode insère les objets de la sélection dans une table temporaire&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Nombre d'objets affectés par l'opération&lt;br /&gt;
|-&lt;br /&gt;
|iTableName&lt;br /&gt;
|Nom de table temporaire&lt;br /&gt;
|-&lt;br /&gt;
|iInsertColumns&lt;br /&gt;
|Tableau de noms de colonne supplémentaires à insérer&lt;br /&gt;
|-&lt;br /&gt;
|iUpdatePropValues&lt;br /&gt;
|Tableau de valeurs des colonnes supplémentaires&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne le nombre d'objets insérés par l'opération.&lt;br /&gt;
&lt;br /&gt;
* iInsertPropnames,iInsertPropValues&lt;br /&gt;
:Ces deux tableaux doivent avoir le même nombre d'élément&lt;br /&gt;
&lt;br /&gt;
{{tip|L'opération est effectué par un ordre SQL en mode auto commit, si une transaction longue est ouverte la session de la transaction longue est utilisée.}}&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  IvueSource = interface&lt;br /&gt;
    ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueSource = viewOf(AClassSource,iVueSource)&lt;br /&gt;
   .... &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  sqlClass = sqlClass(iVue)&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var sel:TSelector; aJob,aTempTable1:string; keepTables:boolean;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FALSE;&lt;br /&gt;
  aJob := CreateGuid; &lt;br /&gt;
  keepTables := False; &lt;br /&gt;
&lt;br /&gt;
  sel := vueSource.CreateSelector('','',True,[]);&lt;br /&gt;
  sel.useCTE := True; &lt;br /&gt;
  sel.NoFrameworks := True; &lt;br /&gt;
  sel.NoOrderBy := True; &lt;br /&gt;
&lt;br /&gt;
  try&lt;br /&gt;
    // Create a Temp table from a source selector&lt;br /&gt;
    // &lt;br /&gt;
    aTempTable1 := ClassManager.DefDatabase.AllocTempTable(aJob);&lt;br /&gt;
    sel.InsertInto(aTempTable1,[],[]); &lt;br /&gt;
&lt;br /&gt;
    // Use the temp table as source of operation&lt;br /&gt;
    // &lt;br /&gt;
    sel := sqlClass.CreateSelector('','',True,[]);&lt;br /&gt;
    sel.SourceTableName := aTempTable1;&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
  finally&lt;br /&gt;
  if not KeepTables then ClassManager.DefDatabase.DropTempTables(aJob); &lt;br /&gt;
  end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/UpdateFrom_(selector)</id>
		<title>UpdateFrom (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/UpdateFrom_(selector)"/>
				<updated>2025-12-23T08:04:57Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;function UpdateFrom(iSelector:TSelector; const iMatchedProps:Array of String; const iUpdatePropNames:Array of string; const iUpdatePropValues:Array of variant):Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode met à jour les objets sélectionnés par le sélecteur en utilisant un sélecteur source&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Nombre d'objets affectés par l'opération&lt;br /&gt;
|-&lt;br /&gt;
|iSelector&lt;br /&gt;
|Sélecteur source &lt;br /&gt;
|-&lt;br /&gt;
|iMatchedProps&lt;br /&gt;
|Tableau de noms d'attribut qui doivent être égaux entre les deux sélecteurs&lt;br /&gt;
|-&lt;br /&gt;
|iUpdatePropNames&lt;br /&gt;
|Tableau de noms d'attribut devant être mis à jour dans la même opération&lt;br /&gt;
|-&lt;br /&gt;
|iUpdatePropValues&lt;br /&gt;
|Tableau de valeurs pour les attributs mis à jour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne le nombre d'objets affectés par l'opération.&lt;br /&gt;
&lt;br /&gt;
* iSelector&lt;br /&gt;
:Sélecteur source de l'opération, doit être en mode CTE&lt;br /&gt;
&lt;br /&gt;
* iMatchedProps&lt;br /&gt;
:Tableau de propriétés qui doivent matcher dans l'opération de mise à jour CTE&lt;br /&gt;
&lt;br /&gt;
* iUpdatePropnames,iUpdatePropValues&lt;br /&gt;
:Ces deux tableaux doivent avoir le même nombre d'élément et doivent référencer des attributs de la classe du sélecteur&lt;br /&gt;
&lt;br /&gt;
{{tip|L'opération est effectué par un ordre SQL en mode auto commit, si une transaction longue est ouverte la session de la transaction longue est utilisée.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MERGE target AS tm1 &lt;br /&gt;
USING (source) AS tm0 ON ( tm0 matched properties tm1) &lt;br /&gt;
WHEN MATCHED THEN UPDATE&lt;br /&gt;
 tm1.iUpdatePropNames = tm0.iUpdateSourceValues&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//function _MAJPieceEtatPieceTypeAucun(aDateLimiteTraitement:datetime):integer;&lt;br /&gt;
Type&lt;br /&gt;
  vuePieceTypeAucun = viewOf(TEcheance)&lt;br /&gt;
    idPiece : TOID = Ecriture.oidPiece;&lt;br /&gt;
    idLettrage : TOID = oidLettrage notInSelect;&lt;br /&gt;
    typeEcheance : integer = Ecriture.Piece.TypePiece.typeEcheance notInSelect;&lt;br /&gt;
    [typeEcheance=TypeEcheance_Aucun]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueEcheanceAvecPieceTypeAucun = viewOf(TEcheance)&lt;br /&gt;
    oidpieceEtat : TOID = oidPieceEtat;&lt;br /&gt;
    typeEcheance : integer = Ecriture.Piece.TypePiece.typeEcheance notInSelect;&lt;br /&gt;
    estLettrageTotal : boolean = Lettrage.LettrageEcriture.total notInSelect;&lt;br /&gt;
    dateLettrage : datetime = Lettrage.LettrageEcriture.lDate notInSelect;&lt;br /&gt;
    cNature:integer = Ecriture.CompteGeneral.natureCompte notInSelect;&lt;br /&gt;
    //&lt;br /&gt;
    idPieceDestination : TOID = vuePieceTypeAucun.select('idPiece','(idLettrage=self.oidLettrage)','-Ecriture.eDate,-dateEcheance,-oid',true,[]);&lt;br /&gt;
    aExistePieceDestination : TOID = vuePieceTypeAucun.select('idPiece','(idLettrage=self.oidLettrage)','',true,[]) notInSelect;&lt;br /&gt;
&lt;br /&gt;
    [(typeEcheance in (TypeEcheance_Facture, TypeEcheance_FactureTVA, TypeEcheance_Reprise)) and&lt;br /&gt;
    (cNature=NatureCompte_TTC) and (((estLettrageTotal=true) and (dateLettrage&amp;gt;=%ArgDateLettrage)) or (estLettrageTotal=false)) and&lt;br /&gt;
    (oidPieceEtat='') and (Lettrage.oidEcritureDestination='') and (aExistePieceDestination&amp;lt;&amp;gt;'')]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueEcheance = viewOf(TEcheance)&lt;br /&gt;
    oidpieceEtat : TOID = oidPieceEtat;&lt;br /&gt;
  end;&lt;br /&gt;
var&lt;br /&gt;
  vSel, vSelUpdate : TSelector;&lt;br /&gt;
  vBatchCount : integer;&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  // Mise à jour de la pièce état des échéances Facture/Facture TVA/Reprise des deux derniers exercices&lt;br /&gt;
  // La pièce état est la pièce la plus récente de type &amp;quot;Aucun&amp;quot; du groupe de lettrage&lt;br /&gt;
&lt;br /&gt;
  vBatchCount := 0;&lt;br /&gt;
  Repeat&lt;br /&gt;
    // Source selector of the CTE operation&lt;br /&gt;
    // (MUST BE CTE)&lt;br /&gt;
    //&lt;br /&gt;
    vSel := vueEcheanceAvecPieceTypeAucun.CreateSelector('', '', true, []);&lt;br /&gt;
    vSel.AddParameter('ArgDateLettrage', aDateLimiteTraitement);&lt;br /&gt;
    vSel.MaxInstances := nbElementParLot;&lt;br /&gt;
    vSel.useCTE := true;&lt;br /&gt;
&lt;br /&gt;
    // ON match TEcheance on &amp;quot;oid&amp;quot; THEN update &amp;quot;oidpieceEtat&amp;quot; of dest FROM &amp;quot;idPieceDestination&amp;quot; of source&lt;br /&gt;
    //&lt;br /&gt;
    vSelUpdate := vueEcheance.CreateSelector('', '', true, []);&lt;br /&gt;
    vBatchCount := vSelUpdate.UpdateFrom(vSel, ['oid'], ['oidpieceEtat'], ['idPieceDestination']);&lt;br /&gt;
    Result := Result + vBatchCount;&lt;br /&gt;
  Until (vBatchCount&amp;lt;nbElementParLot);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update (selector)|Update]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/RmvParameter_(selector)</id>
		<title>RmvParameter (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/RmvParameter_(selector)"/>
				<updated>2025-12-23T07:34:00Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version2025r2}}  &amp;lt;source lang='delphi'&amp;gt;procedure RmvParameter(const iName:string);&amp;lt;/source&amp;gt;  Cette méthode permet de retirer un paramètre nommée de la requête.  {|cl... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version2025r2}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;procedure RmvParameter(const iName:string);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet de retirer un paramètre nommée de la requête.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|iParameterName&lt;br /&gt;
|Le nom du paramètre&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les paramètres nommés peuvent être utilisé dans les expression de requêtes.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
procedure SetSelectorFilter(sel:TSelector);&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
  sel.AddParameter('ArgProperty1',pValue1);&lt;br /&gt;
  sel.AddParameter('ArgProperty2',pValue2);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
function GetSelectorGroupBy(iGroupBy:string);&lt;br /&gt;
Type&lt;br /&gt;
  vueDetails = viewOf(..)&lt;br /&gt;
   aProperty1:string = aProperty1; &lt;br /&gt;
   aProperty2:string = aProperty2; &lt;br /&gt;
   [(aProperty1=%ArgProperty1) and (aProperty2=%ArgProperty2)]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueGroupBy = viewOf(vueDetails)&lt;br /&gt;
   ACount:Integer = count(oid);&lt;br /&gt;
   AProperty:string; &lt;br /&gt;
   [inherited]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  Result := vueGroupBy.CreateSelector('','',True,[]);&lt;br /&gt;
  SetSelectorFilter(Result); &lt;br /&gt;
  //&lt;br /&gt;
  case iGroupBy of&lt;br /&gt;
    'property1' : &lt;br /&gt;
      begin&lt;br /&gt;
        // Want to group by property1 and to remove filter on property1 &lt;br /&gt;
        sel.AddColumn('property1','AProperty');&lt;br /&gt;
        sel.RmvParameter('property1');&lt;br /&gt;
      end;&lt;br /&gt;
&lt;br /&gt;
    'property2' : &lt;br /&gt;
      begin&lt;br /&gt;
        sel.AddColumn('property2','AProperty');&lt;br /&gt;
        sel.RmvParameter('property2');&lt;br /&gt;
      end;&lt;br /&gt;
  end; &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Vue_locale_(langage)|Vue locale]]&lt;br /&gt;
* [[AddParameter (selector)|Ajouter un paramètre]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Am%C3%A9liorations_des_contr%C3%B4les_d%27interface_(Version_11.00_2025_r2)</id>
		<title>Améliorations des contrôles d'interface (Version 11.00 2025 r2)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Am%C3%A9liorations_des_contr%C3%B4les_d%27interface_(Version_11.00_2025_r2)"/>
				<updated>2025-07-07T15:10:09Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « __TOC__  ===DataSourceRefresh===  * FormArguments : Lorsqu'un DatasourceRefresh est déclenché il met à jour les paramètres de la forme dont le nom match les FormArgume... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
===DataSourceRefresh===&lt;br /&gt;
&lt;br /&gt;
* FormArguments&lt;br /&gt;
: Lorsqu'un DatasourceRefresh est déclenché il met à jour les paramètres de la forme dont le nom match les FormArguments associés au DataSourceRefresh&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple le déclenchement du DataSourcePreviewRefresh recopie les paramètres du ArgNoCmdInf et ArgNoCmdSup de la source de donnée dsVueSelection vers DataSourcePreview&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
object egescom_validationPA: TL5FormContainer&lt;br /&gt;
&lt;br /&gt;
  Arguments = &amp;lt;&lt;br /&gt;
    item&lt;br /&gt;
      Name = 'ArgNoCmdInf'&lt;br /&gt;
      ArgSens = ptIn&lt;br /&gt;
      FieldName = 'noPieceInf'&lt;br /&gt;
      Control = DataSourcePreview&lt;br /&gt;
    end&lt;br /&gt;
    item&lt;br /&gt;
      Name = 'ArgNoCmdSup'&lt;br /&gt;
      ArgSens = ptIn&lt;br /&gt;
      FieldName = 'noPieceSup'&lt;br /&gt;
      Control = DataSourcePreview&lt;br /&gt;
    end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  object DataSourcePreview: TDataSource&lt;br /&gt;
    DataSet = dsParamQBuild1&lt;br /&gt;
    Left = 447&lt;br /&gt;
    Top = 132&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  object DataSourcePreviewRefresh: TDataSourceRefresh&lt;br /&gt;
    FormArguments = &amp;lt;&amp;gt;&lt;br /&gt;
    Triggers = &amp;lt;&lt;br /&gt;
      item&lt;br /&gt;
        Control = dsVueSelection&lt;br /&gt;
        EventStyle = evsOnDataSetAfterScroll&lt;br /&gt;
      end&amp;gt;&lt;br /&gt;
	FormArguments = &amp;lt;&lt;br /&gt;
		item&lt;br /&gt;
		  Name = 'ArgNoCmdInf'&lt;br /&gt;
		  FieldName = 'noPiece'&lt;br /&gt;
		  Control = dsVueSelection&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
		  Name = 'ArgNoCmdSup'&lt;br /&gt;
		  FieldName = 'noPiece'&lt;br /&gt;
		  Control = dsVueSelection&lt;br /&gt;
		end&amp;gt;&lt;br /&gt;
    DataSource = DataSourcePreview&lt;br /&gt;
    DataSourceAction = dsaNone&lt;br /&gt;
    Left = 804&lt;br /&gt;
    Top = 181&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ajout de l'action dsaNone&lt;br /&gt;
: Ne fait rien (Utile pour un DataSetRefresh associé à un ParaQBuild dont on met à jour les paramètres)&lt;br /&gt;
&lt;br /&gt;
===Grille===&lt;br /&gt;
&lt;br /&gt;
* PreviewDataSource&lt;br /&gt;
: DataSource associée à ParamQBuild pour réaliser un aperçu d'édition contextuel à la ligne de la grille&lt;br /&gt;
&lt;br /&gt;
* PreviewTitle&lt;br /&gt;
: Libellé de l'aperçu affiché dans le combobox contextuel de la grille.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version1100-2025-r2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Tableaux_de_bord_(dev)</id>
		<title>Tableaux de bord (dev)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Tableaux_de_bord_(dev)"/>
				<updated>2025-05-06T08:13:45Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : /* Principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
A partir de la version 11 2024 une nouvelle API permet de réaliser des tableaux de bord dans le portail basé sur le framework React.&lt;br /&gt;
&lt;br /&gt;
{{tip|L'ancienne API de tableau de bord est dépréciée}}&lt;br /&gt;
&lt;br /&gt;
==Principe==&lt;br /&gt;
&lt;br /&gt;
Un tableau de bord peut être considéré comme une interface organisée en vignettes (widgets) disposés sur une grille.&lt;br /&gt;
&lt;br /&gt;
==Développement==&lt;br /&gt;
&lt;br /&gt;
Dans le modèle 1000 un tableau de bord est une classe non persistante&lt;br /&gt;
&lt;br /&gt;
==Environnement de développement==&lt;br /&gt;
&lt;br /&gt;
===A partir de l'application Desktop===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez développer un tableau de bord à partir de l'application Desktop.&lt;br /&gt;
&lt;br /&gt;
Pour cela devez disposer d'un environnement de service 1000 contenant le site html.&lt;br /&gt;
&lt;br /&gt;
Dans le concepteur de modèle &lt;br /&gt;
&lt;br /&gt;
* Définissez le répertoire du site htmls du Service 1000.&lt;br /&gt;
* Démarrez le serveur htpp de développement.&lt;br /&gt;
&lt;br /&gt;
L'url du portail géré par le serveur de développement sera indiqué dans la page.&lt;br /&gt;
&lt;br /&gt;
A partir de cette adresse vous pouvez exécuter le portal 1000 et développer les tableaux de bord&lt;br /&gt;
&lt;br /&gt;
===A partir des sources du portail React===&lt;br /&gt;
&lt;br /&gt;
Si vous disposez d'un accès aux sources du portail React vous pouvez développer à partir du serveur de l'environnement de développement React (Visual Studio Code) et de l'application 1000 Desktop.&lt;br /&gt;
&lt;br /&gt;
Ceci vous permettra de tracer le code javascript du portail.&lt;br /&gt;
&lt;br /&gt;
Pour cela :&lt;br /&gt;
&lt;br /&gt;
* Installer l'environnement de développement React (Visual Studio code)&lt;br /&gt;
&lt;br /&gt;
* Cloner ou copier le projet React&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;quot;.env.developpement&amp;quot; du projet vous devez avoir les variable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REACT_APP_API_URL=http://localhost:8080/sdata&lt;br /&gt;
REACT_APP_API_PACKAGE=htmlportalPackage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ouvrir le répertoire du projet React&lt;br /&gt;
* Dans une fenêtre terminal bash exécuter &lt;br /&gt;
: &amp;quot;yarn install&amp;quot;&lt;br /&gt;
: &amp;quot;yarn start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Le serveur de développement React démarre sur http://localhost:3000&lt;br /&gt;
&lt;br /&gt;
Le serveur de développement de l'application Desktop doit être démarré.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tableaux de bord]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Version_2025_r2_(release_note)</id>
		<title>Version 2025 r2 (release note)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Version_2025_r2_(release_note)"/>
				<updated>2025-04-08T08:24:18Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r2}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Langage==&lt;br /&gt;
&lt;br /&gt;
* Valeur par défaut de paramètre&lt;br /&gt;
: Il est possible de définir des valeurs par défaut aux paramètres des méthodes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
  MyClass = Class(TitObject)&lt;br /&gt;
    Procedure TestDeffParams;&lt;br /&gt;
    Procedure TestDefParamBool(p1:string; p2:boolean=true);&lt;br /&gt;
    Procedure TestDefParamJson(p1:string; p2:TJson=nil);&lt;br /&gt;
    Procedure TestDefParamJson2(p1:string; p2:TJson='{a:false}');&lt;br /&gt;
    Procedure TestDefParamEnum(p1:string; p2:Integer=WFCAState_Etat2);&lt;br /&gt;
    Procedure TestDefParamMulti(p1:string; p2:string='a'; p3:string='b');&lt;br /&gt;
    Function TestDefParamOne(p1:string='a'):string;&lt;br /&gt;
    Function TestDefParamFunc(p1:string='a'):string;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
Procedure MyClass.TestDefParamJson(p1:string; p2:TJson=nil);&lt;br /&gt;
var json:TJson;&lt;br /&gt;
begin&lt;br /&gt;
  json := TJsonStruct.Create('{}');&lt;br /&gt;
  //&lt;br /&gt;
  // use Assigned insted of p2&amp;lt;&amp;gt;nil&lt;br /&gt;
  //&lt;br /&gt;
  if assigned(p2) then json.addStruct('p2',p2);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
Procedure MyClass.TestDeffParams;&lt;br /&gt;
var V:string;&lt;br /&gt;
begin&lt;br /&gt;
  V := TestDefParamFunc('c'); &lt;br /&gt;
  ShowMessage(V); &lt;br /&gt;
   &lt;br /&gt;
  TestDefParamOne;&lt;br /&gt;
  TestDefParamOne(); &lt;br /&gt;
  TestDefParamOne('x'); &lt;br /&gt;
   &lt;br /&gt;
  TestDefParamMulti('a'); &lt;br /&gt;
  TestDefParamMulti('a','1'); &lt;br /&gt;
  TestDefParamMulti('a','1','2'); &lt;br /&gt;
   &lt;br /&gt;
  TestDefParamBool('a'); &lt;br /&gt;
  TestDefParamBool('a',false); &lt;br /&gt;
  TestDefParamBool('a',true); &lt;br /&gt;
   &lt;br /&gt;
  TestDefParamJson2('b');&lt;br /&gt;
  TestDefParamJson2('b','{a:true}'); &lt;br /&gt;
&lt;br /&gt;
  TestDefParamEnum('c');&lt;br /&gt;
  TestDefParamEnum('c',WFCAState_Final); &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Paramètre de type classe&lt;br /&gt;
: Les paramètres de type classe peuvent être passé directement&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  MyClass1 = class&lt;br /&gt;
    class procedure foo(rg:TRegClass);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  MyClass2 = class&lt;br /&gt;
    ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  MyClass3 = class&lt;br /&gt;
    procedure oldbar();&lt;br /&gt;
    procedure newbar();&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
class procedure MyClass1.foo(rg:TRegClass);&lt;br /&gt;
begin&lt;br /&gt;
  // =&amp;gt; MyClass2&lt;br /&gt;
  showMessage(rg.aClassName);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyClass3.oldbar();&lt;br /&gt;
var rg:TRegClass;&lt;br /&gt;
begin&lt;br /&gt;
  ModelManager.FindClass('MyClass2');&lt;br /&gt;
  myClass1.foo(rg);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure MyClass3.newbar();&lt;br /&gt;
begin&lt;br /&gt;
  myClass1.foo(MyClass2);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Json==&lt;br /&gt;
* Opérateur In&lt;br /&gt;
: Un json de type structure supporte l'opérateur In &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Procedure TestJson;&lt;br /&gt;
&lt;br /&gt;
 function _foo(p:TJson):boolean;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := false; &lt;br /&gt;
   if 'a' in p then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := True;&lt;br /&gt;
    end; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
var js:TJson;&lt;br /&gt;
begin&lt;br /&gt;
  js := TJson.Create('{a:true}'); &lt;br /&gt;
  if _foo(js) then showMessage('ok') else showMessage('nok');&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter et Setter&lt;br /&gt;
: Un json de type structure supporte l'accès direct aux valeur des membres&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Procedure TestJson;&lt;br /&gt;
&lt;br /&gt;
 function _foo(p:TJson):boolean;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := false; &lt;br /&gt;
   if 'a' in p then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := p['a'];&lt;br /&gt;
    end; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
var js:TJson;&lt;br /&gt;
begin&lt;br /&gt;
  js := TJson.Create('{a:true}'); &lt;br /&gt;
  js['b'] := False; &lt;br /&gt;
  js['a'] := not js['b']; &lt;br /&gt;
  if _foo(js) then showMessage('ok') else showMessage('nok');&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Constructeur implicite&lt;br /&gt;
: Un paramètre TJson peut être instancié à partir d'une chaine de caractère&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Procedure TestJson;&lt;br /&gt;
&lt;br /&gt;
 function _foo(p:TJson):boolean;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := false; &lt;br /&gt;
   if 'a' in p then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := p['a'];&lt;br /&gt;
    end; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  if _foo('{a:true}') then showMessage('ok') else showMessage('nok');&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{tip|La chaine doit être une constante, l'instanciation à partir d'une chaîne construite dynamiquement ne marche pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Procedure TestJson;&lt;br /&gt;
&lt;br /&gt;
 function _foo(p:TJson):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := false; &lt;br /&gt;
   if 'a' in p then&lt;br /&gt;
    begin&lt;br /&gt;
      Result := p['a'];&lt;br /&gt;
    end; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
var v:string;&lt;br /&gt;
begin&lt;br /&gt;
  v := 'une chaine';&lt;br /&gt;
  if _foo('{a:&amp;quot;'+uneChaine+'&amp;quot;}')&amp;lt;&amp;gt;'' then showMessage('ok') else showMessage('nok'); // don't work !&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Enumérateurs&lt;br /&gt;
: Un json de type strutucture supporte l'énumérateur sur les clés&lt;br /&gt;
: Un json de type tableau supporte l'énumérateur sur les éléments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure TestJson;&lt;br /&gt;
&lt;br /&gt;
 procedure _enumValues(p:TJson);&lt;br /&gt;
 var i:Integer; V:Variant;&lt;br /&gt;
 begin&lt;br /&gt;
   forEach V in p index i do&lt;br /&gt;
    begin&lt;br /&gt;
      showMessageFmt('%d:%s',[i,V]); &lt;br /&gt;
    end; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 procedure _enumKeys(p:TJson);&lt;br /&gt;
 var i:Integer; Key,Keys,stag:string; &lt;br /&gt;
 begin&lt;br /&gt;
   Keys := ''; stag := '';&lt;br /&gt;
   forEach key in p index i do&lt;br /&gt;
    begin&lt;br /&gt;
      Keys := Keys+stag+inttostr(i)+':'+key;&lt;br /&gt;
      stag := ','; &lt;br /&gt;
    end; &lt;br /&gt;
   showMessage(Keys); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  _enumKeys('{a:true, b:false}'); &lt;br /&gt;
  _enumValues('[{a:true, b:false},{a:false, b:true}]'); &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modèle==&lt;br /&gt;
&lt;br /&gt;
===Classes===&lt;br /&gt;
&lt;br /&gt;
* Méthode AllocOID&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;class function AllocOID:TOID;&amp;lt;/source&amp;gt;&lt;br /&gt;
* Alloue un oid de la classe&lt;br /&gt;
: Peut être utile dans les tests unitaires&lt;br /&gt;
&lt;br /&gt;
* Méthode ToJson()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;procedure ToJson(SA:variant);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sérialize l'objet en json &lt;br /&gt;
: SA peut être un TJsonArray ou un TJsonStruct&lt;br /&gt;
&lt;br /&gt;
===Classes SQL===&lt;br /&gt;
&lt;br /&gt;
* Options de rôle : NoRefIndex&lt;br /&gt;
&lt;br /&gt;
* Options de rôle : NoForeignKey&lt;br /&gt;
&lt;br /&gt;
==Script==&lt;br /&gt;
&lt;br /&gt;
===Trace===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;procedure dbgClear();&amp;lt;/source&amp;gt;&lt;br /&gt;
: Vide la trace&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;procedure dbgEnable(value:boolean);&amp;lt;/source&amp;gt;&lt;br /&gt;
: Active / désactive la trace&lt;br /&gt;
&lt;br /&gt;
===Vue locale===&lt;br /&gt;
&lt;br /&gt;
* Une vue locale peut contenir des attributs &amp;quot;oidXXX&amp;quot; sans définir le rôle&lt;br /&gt;
&lt;br /&gt;
'''Exemple:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   p1:TEnum(enumName) = ...;&lt;br /&gt;
   oidRef:TOID = oidrefB;&lt;br /&gt;
   ..&lt;br /&gt;
   idRefB:TOID = oidrefB notInSelect;&lt;br /&gt;
   [ (idRefB=%ArgRefB) and ....]&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Une vue locale peut contenir des attributs non mappés dans la définition, ces attributs peuvent ensuite être mappés dynamiquement par le selecteur en utilisant addColumn()&lt;br /&gt;
&lt;br /&gt;
'''Exemple:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
    ACount:Integer = count(oid)&lt;br /&gt;
    oidRef:TOID;&lt;br /&gt;
    codeRef:string;&lt;br /&gt;
    libelleRef:string;&lt;br /&gt;
   ..&lt;br /&gt;
   [  ...]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var sel:TSelector;&lt;br /&gt;
begin&lt;br /&gt;
  sel := vue1.createSelector();&lt;br /&gt;
  case iGroupBy of&lt;br /&gt;
   'refB':&lt;br /&gt;
     begin&lt;br /&gt;
       sel.AddColumn('oidrefB','oidRef'); &lt;br /&gt;
       sel.AddColumn('refB.code','codeRef'); &lt;br /&gt;
       sel.AddColumn('refB.Caption','libelleRef'); &lt;br /&gt;
     end;&lt;br /&gt;
   'refC':&lt;br /&gt;
     begin&lt;br /&gt;
       sel.AddColumn('oidrefC','oidRef'); &lt;br /&gt;
       sel.AddColumn('refC.code','codeRef'); &lt;br /&gt;
       sel.AddColumn('refC.Caption','libelleRef'); &lt;br /&gt;
     end;&lt;br /&gt;
  end; &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Paramètre de type de donnée&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   p1:TEnum(enumName) = ...;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Qualifier d'attribut NotInGroupBy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   p1:string = expression('...') notInGroupBy;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Héritage de vue locale&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   p1:string = ...;&lt;br /&gt;
   [...]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vue2 = viewOf(vue1)&lt;br /&gt;
   p2:string = ...;&lt;br /&gt;
   [inherited and (...)]&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//function GetSelector(iGroupBy:string; iFilter:TJsonArray):TSelector;&lt;br /&gt;
Type&lt;br /&gt;
  // défini une classe de base avec tous les filtres&lt;br /&gt;
  //&lt;br /&gt;
  vueEcritureLettrage = viewOf(TEcriture)&lt;br /&gt;
    lettrable:boolean = compteGeneral.lettrable notInSelect; &lt;br /&gt;
    idEtablissement:TOID = piece.oidEtablissement notInSelect; &lt;br /&gt;
    idCompteGeneral:TOID = oidCompteGeneral notInSelect; &lt;br /&gt;
    idRoleTiers:TOID = oidroleTiers notInSelect; &lt;br /&gt;
    [(lettrable=true) &lt;br /&gt;
      and ((oidLettrageEcriture='') or (dateLettrage=0)) &lt;br /&gt;
      and (typeEcriture&amp;lt;&amp;gt;0)&lt;br /&gt;
      and (piece.lot.origineLot&amp;lt;&amp;gt;0)&lt;br /&gt;
      and (eDate&amp;gt;=%ArgDateInf) &lt;br /&gt;
      and (eDate&amp;lt;=%ArgDateSup) &lt;br /&gt;
      and (idEtablissement=%ArgEtablissement) &lt;br /&gt;
      and (idCompteGeneral=%ArgCompteGeneral)&lt;br /&gt;
      and (idRoleTiers=%ArgRoleTiers)&lt;br /&gt;
    ] &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // Hérite de tous les filtres&lt;br /&gt;
  //&lt;br /&gt;
  vueEcritureLettrageGroupBy = viewOf(vueEcritureLettrage)&lt;br /&gt;
    dateMin:TDatetime = min(eDate);&lt;br /&gt;
    dateMax:TDatetime = max(eDate); &lt;br /&gt;
    ACount:Integer = count(oid); &lt;br /&gt;
    credit:Currency = sum('credit:TCValue'); &lt;br /&gt;
    debit:Currency = sum('debit:TCValue'); &lt;br /&gt;
    solde:Currency = sumDiff(debit,credit); &lt;br /&gt;
    [inherited] &lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  Result := vueLettrageGroupBy.CreateSelector('','',True,[]);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Scope de vue locale&lt;br /&gt;
&lt;br /&gt;
Une vue locale peut être référencée en dehors de la méthode où elle est définie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
procedure Class1.foo;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   p1:string = ...;&lt;br /&gt;
  end;&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
procedure Class2.bar;&lt;br /&gt;
Type&lt;br /&gt;
  vue2 = viewOf(class1.foo.vue1)&lt;br /&gt;
   p2:string = ...;&lt;br /&gt;
  end;&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Expression Exists()&lt;br /&gt;
&lt;br /&gt;
Une expression existe peut être utilisée dans les filtres comme une valeur logique&lt;br /&gt;
&lt;br /&gt;
{{tip|Une expression Exists() est beaucoup plus rapide qu'un &amp;quot;Count&amp;lt;&amp;gt;0&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue1 = viewOf(ClassA)&lt;br /&gt;
   id:string = ...;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vue2 = viewOf(ClassB)&lt;br /&gt;
   id:string = ...;&lt;br /&gt;
   bb:boolean = vue1.Exists('(id=self.id)',True,[]) notInSelect;&lt;br /&gt;
   [(bb=true) and (....)]&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Expression de Sous requête &lt;br /&gt;
&lt;br /&gt;
Une expression peut être définie par une sous requête&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  VueTauxADate = ViewOf(TTauxADate)&lt;br /&gt;
    idTVA : TOid = oidTVA;&lt;br /&gt;
    tDate : Date = tDate;&lt;br /&gt;
    taux : float = taux; &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueMontantTVA = viewOf(TEcriture)&lt;br /&gt;
    dateEcriture:TDatetime=eDate notInSelect;&lt;br /&gt;
    oidTVA:TOID = ProfilTVA.oidTVA notInSelect; &lt;br /&gt;
    oidPiece:TOID = oidPiece; &lt;br /&gt;
    montantTVAReel:Currency = vueTauxADate.select('taux * self.montant_TCValue /100','(tDate&amp;lt;=self.dateEcriture)and(idTVA=self.oidTVA)','',True,[]); &lt;br /&gt;
    montantTVAReel_CodeDevise:string = montantTVAReel:CodeDevise; &lt;br /&gt;
  end; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ToJson==&lt;br /&gt;
&lt;br /&gt;
Permet de sérialiser l'objet ou l'ensemble d'objets au format json compatible avec les tables du client React&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; procedure TObject.ToJson(SA:TJsonArray);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; procedure TObject.ToJsonEx(SA:TJsonArray; iOptions:TSerializeJsonOptions);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; procedure TSelector.ToJson(SA:TJsonArray);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; procedure TSelector.ToJsonEx(SA:TJsonArray; iOptions:TSerializeJsonOptions);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; procedure TRole.ToJson(SA:TJsonArray);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TSerializeJsonOptions :&lt;br /&gt;
&lt;br /&gt;
* sjoIdAsGuid&lt;br /&gt;
: Le membre id de la sérialisation sera un GUID&lt;br /&gt;
&lt;br /&gt;
* sjoIdAsOid&lt;br /&gt;
: Le membre id de la sérialisation sera l'OID de l'objet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//procedure GetData(SRows:TJsonArray);&lt;br /&gt;
Type&lt;br /&gt;
  myView = viewOf(...)&lt;br /&gt;
   ...&lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
var sel:TSelector; &lt;br /&gt;
begin&lt;br /&gt;
  // Selector to retreive the data&lt;br /&gt;
  // &lt;br /&gt;
  sel := myView.CreateSelector('','',True,[]);&lt;br /&gt;
  sel.ToJson(SRows); &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Formats===&lt;br /&gt;
&lt;br /&gt;
Le formattage de la sérialisation des propriétés peut être controllé par les propriétés du type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  vue = viewOf(...)&lt;br /&gt;
    p:string(typeParam1,typeParam2,typeParam3) = x;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type de l'attribut&lt;br /&gt;
!TypeParam1&lt;br /&gt;
!TypeParam2&lt;br /&gt;
!TypeParam3&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|Currency&lt;br /&gt;
|fmtTC&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Le montant est considéré en valeur de tenue de compte&lt;br /&gt;
|-&lt;br /&gt;
|Currency&lt;br /&gt;
|fmtRP&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Le montant est considéré en valeur de reporting&lt;br /&gt;
|-&lt;br /&gt;
|String contenant un TfwParameters&lt;br /&gt;
|fmtParameters&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Valeur des paramètres&lt;br /&gt;
|-&lt;br /&gt;
|String contenant un TfwParameters&lt;br /&gt;
|fmtParameter&lt;br /&gt;
|Nom du paramètre &lt;br /&gt;
|Valeur par défaut si le paramètre n'existe pas&lt;br /&gt;
|Valeur du paramètre &lt;br /&gt;
|-&lt;br /&gt;
|String&lt;br /&gt;
|fmtTaskCategory&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Catégorie de tâche&lt;br /&gt;
|-&lt;br /&gt;
|oid de TdbfDocument&lt;br /&gt;
|fmtDocumentUrl&lt;br /&gt;
|Paramètre optionnel contenant le nom du document&lt;br /&gt;
|Paramètre optionnel contenant une url externe&lt;br /&gt;
|Lien sur le document&lt;br /&gt;
|-&lt;br /&gt;
|Datetime&lt;br /&gt;
|fmtUTC&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|La date en considérée UTC et convertie en date locale&lt;br /&gt;
|-&lt;br /&gt;
|Integer (idOTP)&lt;br /&gt;
|fmtClassLabel&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Le libellé de la classe &lt;br /&gt;
|-&lt;br /&gt;
|Integer (idOTP)&lt;br /&gt;
|fmtClassName&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|Le nom de la classe &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Sélecteur==&lt;br /&gt;
&lt;br /&gt;
* lastOpeStamp, lastOpeAffected, lastOpeFirstOID&lt;br /&gt;
: Attributs mis à jour par la dernière opération assembliste.&lt;br /&gt;
&lt;br /&gt;
* operationId, operation&lt;br /&gt;
: Permet d'enregistrer les opérations dans la table TsqlOperation&lt;br /&gt;
: S'applique à CopyTo()&lt;br /&gt;
&lt;br /&gt;
* RmvParameter()&lt;br /&gt;
: Permet de retirer un paramètre qui a été ajouté par AddParameter()&lt;br /&gt;
&lt;br /&gt;
* Amélioration de CopyTo&lt;br /&gt;
: Permet de créer des objets à partir d'un sélecteur&lt;br /&gt;
&lt;br /&gt;
* CopyTo, Update, UpdateFrom&lt;br /&gt;
: Fonctionne sur les classes de stéréotype SQL&lt;br /&gt;
&lt;br /&gt;
* InsertInto&lt;br /&gt;
: Permet de créer une table temporaire à partir d'un sélecteur&lt;br /&gt;
: Réalise un select ... into TEMPTABLE from ...&lt;br /&gt;
&lt;br /&gt;
* SourceTableName&lt;br /&gt;
: Permet de sélectionner une table SQL comme source de l'opération &lt;br /&gt;
: Utiliser dans les opérations ensemblistes sur des tables temporaires&lt;br /&gt;
&lt;br /&gt;
===TsqlOperation===&lt;br /&gt;
&lt;br /&gt;
Classe SQL définie par le framework et permettant d'enregistrer les opérations du sélecteur&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
  TsqlOperation = Class(TsqlObject)&lt;br /&gt;
  public&lt;br /&gt;
    class procedure CleanOpe(iOpeId:string);&lt;br /&gt;
    //&lt;br /&gt;
    property action: StringS[128];&lt;br /&gt;
    property id: SQLIdentity;&lt;br /&gt;
    property oidSourceObject: TOID;&lt;br /&gt;
    property oidTargetObject: TOID;&lt;br /&gt;
    property opeId: StringS[128];&lt;br /&gt;
    property operation: StringS[128];&lt;br /&gt;
    property SourceObject: Ref(roGeneric,roNotExternal,roNoForeignKey,roNoRoleIndex) of TitObject;&lt;br /&gt;
    property TargetObject: Ref(roGeneric,roNotExternal,roNoForeignKey,roNoRoleIndex) of TitObject;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* opeId, operationId&lt;br /&gt;
: Un identifiant unique (guid) identifiant l'ensemble des opérations&lt;br /&gt;
&lt;br /&gt;
* opération&lt;br /&gt;
: Nom de l'opération dans l'ensemble des opérations&lt;br /&gt;
&lt;br /&gt;
* action&lt;br /&gt;
: Action de l'opération &lt;br /&gt;
: Par exemple INSERT pour un CopyTo&lt;br /&gt;
&lt;br /&gt;
* oidSourceObject&lt;br /&gt;
: identifiant de l'objet source dans l'opération &lt;br /&gt;
: Par exemple l'objet source de la copie pour un CopyTo&lt;br /&gt;
&lt;br /&gt;
* oidTargetObject&lt;br /&gt;
: identifiant de l'objet cible dans l'opération&lt;br /&gt;
: Par exemple l'objet copié par un CopyTo&lt;br /&gt;
&lt;br /&gt;
'''Exemple d'utilisation:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // Créer des écritures a partir des réglements&lt;br /&gt;
 //&lt;br /&gt;
 procedure  _doCreateEcritureReglements(iOidPiece:string; iOpeId:string);&lt;br /&gt;
 var sel:TSelector; &lt;br /&gt;
 begin&lt;br /&gt;
   sel := vueEcritureReglement.CreateSelector('(oidBordereau=%1)','',True,[oidBordereauReglement]); &lt;br /&gt;
   sel.AddParameter('ArgBordereau',oidBordereauReglement); &lt;br /&gt;
   sel.Operation := 'EcrReg'; &lt;br /&gt;
   sel.OpeId := iOpeId; &lt;br /&gt;
   // &lt;br /&gt;
   sel.CopyTo('TEcriture',['oidpiece','eDate','sens','sensProrata','regimeTVA','typeEcriture'],[&lt;br /&gt;
    iOidPiece,&lt;br /&gt;
    BordereauReglement.dateReglement, &lt;br /&gt;
    sens_credit,&lt;br /&gt;
    sens_credit, &lt;br /&gt;
    regimeTVA_Encaissements,&lt;br /&gt;
    typeEcriture_Brouillard &lt;br /&gt;
   ]); &lt;br /&gt;
 end;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Type&lt;br /&gt;
  vueUpdateReglement = viewOf(TReglement)&lt;br /&gt;
   vl:TsqlOperation = join('(opeId=%ArgOpeId) and (operation=%ArgOperation) and (oidSourceObject=self.oid)'); &lt;br /&gt;
   oidEcriture:TOID = oidEcriture; &lt;br /&gt;
   oidTargetEcriture:TOID = vl.oidTargetObject; &lt;br /&gt;
   oidBordereau:TOID = oidBordereauReglement; &lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
 // Met à jour l'oidEcriture créée sur les réglements correspondants&lt;br /&gt;
 ..&lt;br /&gt;
 procedure _doUpdateReglementsEcriture(iOidPiece:string; iOpeId:string);&lt;br /&gt;
 var sel:TSelector; &lt;br /&gt;
 begin&lt;br /&gt;
   sel := vueUpdateReglement.CreateSelector('(oidBordereau=%1)','',True,[oidBordereauReglement]); &lt;br /&gt;
   sel.AddParameter('ArgOpeId',iOpeId); &lt;br /&gt;
   sel.AddParameter('ArgOperation','EcrReg'); &lt;br /&gt;
   //&lt;br /&gt;
   sel.Update(['oidEcriture'],['oidTargetEcriture']); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  aOpeId := CreateGuid;&lt;br /&gt;
  withP long transaction do&lt;br /&gt;
   begin&lt;br /&gt;
     aOidPiece := _doCreatePiece();&lt;br /&gt;
     _doCreateEcritureReglements(aOidPiece,aOpeId);&lt;br /&gt;
     _doUpdateReglementsEcriture(aOidPice,aOpeId); &lt;br /&gt;
     ...&lt;br /&gt;
     TsqlOperation.CleanOpe(aOpeId);&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UpdateFrom()===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function updateFrom(sel:TSelector; iMatchedProps:Array of string; iUpdatedProps:Array of string; iUpdatedValue:Array of variant):Integer;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permet de mettre à jour une classe à partir d'un sélecteur et d'une colonne de correspondance.&lt;br /&gt;
&lt;br /&gt;
'''Exemple :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  // Update the temp table &lt;br /&gt;
  vueTemp = viewOf(TempLettrage)&lt;br /&gt;
    reference1:string = reference1;&lt;br /&gt;
    reference2:string = reference2;&lt;br /&gt;
    modeLettrage:Integer = modeLettrage; &lt;br /&gt;
  end;&lt;br /&gt;
   &lt;br /&gt;
  vueRef1 = viewOf(TempLettrage)&lt;br /&gt;
    //ACount:Integer = count(id);&lt;br /&gt;
    ATotal:Currency = sumSign(montant:TCValue,sens,'1');&lt;br /&gt;
    reference1:string = reference1; &lt;br /&gt;
    [(modeLettrage=0) and (reference1&amp;lt;&amp;gt;'')] &lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
var selT,selG:TSelector;&lt;br /&gt;
begin&lt;br /&gt;
  withP long transaction do&lt;br /&gt;
    begin&lt;br /&gt;
     // for updating the temp table on &amp;quot;match&amp;quot; &lt;br /&gt;
     selT := vueTemp.CreateSelector('','',True,[]);&lt;br /&gt;
&lt;br /&gt;
     // Lettrage sur reference 1 &lt;br /&gt;
     selG := vueRef1.CreateSelector('(ATotal=0)','',True,[]);&lt;br /&gt;
     selG.useCTE := True; &lt;br /&gt;
     selT.UpdateFrom(selG,['reference1'],['modeLettrage'],[1]); &lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with CTE as (&lt;br /&gt;
select sum(case when t0.sens=1 then ISNULL(t0.montant_TCValue, 0) else -ISNULL(t0.montant_TCValue, 0) end)  as &amp;quot;ATotal&amp;quot;,t0.reference1  as &amp;quot;reference1&amp;quot;&lt;br /&gt;
from dbo.TEMPLETTRAGE t0 WITH (NOLOCK)&lt;br /&gt;
where ((t0.modeLettrage = 0) and (t0.reference1 IS NOT NULL))&lt;br /&gt;
group by t0.reference1&lt;br /&gt;
)&lt;br /&gt;
merge into dbo.TEMPLETTRAGE tm0 using (&lt;br /&gt;
SELECT  *&lt;br /&gt;
FROM CTE&lt;br /&gt;
Where (ATotal = 0.0000)&lt;br /&gt;
) tm1 on (tm1.reference1=tm0.reference1)&lt;br /&gt;
when matched then update set&lt;br /&gt;
tm0.modeLettrage = 1&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Opérations ensemblistes SQL==&lt;br /&gt;
&lt;br /&gt;
Des opérations ensemblistes utilisant des tables SQL temporaires peuvent être réalisées en utilisant l'opération InserInto du selecteur.&lt;br /&gt;
&lt;br /&gt;
===Table temporaire===&lt;br /&gt;
&lt;br /&gt;
* TDatabase.AllocTempTable(JobId:string)&lt;br /&gt;
: Génère un nom de table temporaire&lt;br /&gt;
&lt;br /&gt;
* TDatabase.DropTempTables(JobId:string)&lt;br /&gt;
: Supprime (drop) les tables temporaires&lt;br /&gt;
&lt;br /&gt;
===Vue SQL locale===&lt;br /&gt;
&lt;br /&gt;
Une vue SQL locale permet d'utiliser une table SQL comme source d'opération d'un sélecteur&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  // define an interface&lt;br /&gt;
  intf = interface&lt;br /&gt;
   ...&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // create a view which support the interface&lt;br /&gt;
  // will be used to create the temp table&lt;br /&gt;
  //&lt;br /&gt;
  vue = viewOf(MyClass,intf)&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // define a sql class based on the interface&lt;br /&gt;
  //&lt;br /&gt;
  sql = sqlClass(intf)&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  // view on the sql class&lt;br /&gt;
  //&lt;br /&gt;
  vue2 = viewOf(sql)&lt;br /&gt;
   ...&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var sel:Tselector; aJob,aTempTable:string; keepTables:boolean;&lt;br /&gt;
begin&lt;br /&gt;
  // Alloc a temp table name&lt;br /&gt;
  //&lt;br /&gt;
  aJob := CreateGuid;&lt;br /&gt;
  aTempTable := ClassManager.DefDatabase.AllocTempTable(aJob);&lt;br /&gt;
  KeepTables := false; // for debuging&lt;br /&gt;
  try&lt;br /&gt;
   // Create a temp table from MyClass view&lt;br /&gt;
   //&lt;br /&gt;
   sel := vue.CreateSelector(...);&lt;br /&gt;
   sel.insertInto(aTempTable,[...],[...]); // we create a tempTable&lt;br /&gt;
&lt;br /&gt;
   // Query the temp table throught the vue2 &lt;br /&gt;
   //&lt;br /&gt;
   sel := vue2.CreateSelector(...);&lt;br /&gt;
   sel.SourceTableName := aTempTable; // because we select the tempTable&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
  finally&lt;br /&gt;
  if not KeepTables then ClassManager.DefDatabase.DropTempTables(aJob); &lt;br /&gt;
  end; &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Updater==&lt;br /&gt;
&lt;br /&gt;
Classe technique permettant de mettre à jour un attribut sur un ensemble d'objet.&lt;br /&gt;
&lt;br /&gt;
'''Exemple : Mise à jour des compteurs qui ne peuvent pas être déterminés en SQL'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  // Should returns all attributes part of the counter&lt;br /&gt;
  //&lt;br /&gt;
  vueNumeroPiece = viewOf(TPiece)&lt;br /&gt;
   pDate:TDatetime = pDate;&lt;br /&gt;
   numero:TCounter = numero; &lt;br /&gt;
  end; &lt;br /&gt;
&lt;br /&gt;
 procedure _doUpdateNumeroPiece(iOidPiece:string);&lt;br /&gt;
 var sel:TSelector; vueNP:vueNumeroPiece; upd:TUpdater;&lt;br /&gt;
 begin&lt;br /&gt;
   upd := TPiece.CreateUpdater('numero'); &lt;br /&gt;
   // &lt;br /&gt;
   sel := vueNumeroPiece.CreateSelector('(oid=%1)','',True,[iOidPiece]);&lt;br /&gt;
   forEach vueNP in sel.AsCursor do&lt;br /&gt;
    begin&lt;br /&gt;
      vueNP.numero.AllocValue;&lt;br /&gt;
      upd.AddValue(vueNP.OID,vueNP.numero.value); &lt;br /&gt;
    end; &lt;br /&gt;
   //&lt;br /&gt;
   upd.Execute; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface==&lt;br /&gt;
&lt;br /&gt;
* [[Améliorations des contrôles d'interface (Version 11.00 2025 r2)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Version2025r2]]&lt;br /&gt;
[[Category:Release note]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Version_2025_r1_(release_note)</id>
		<title>Version 2025 r1 (release note)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Version_2025_r1_(release_note)"/>
				<updated>2025-04-08T08:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version2025r1}} __TOC__   Category:Version 2025 R1 Category:Release note »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2025r1}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 2025 R1]]&lt;br /&gt;
[[Category:Release note]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/JsonToDatetime_(rtl)</id>
		<title>JsonToDatetime (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/JsonToDatetime_(rtl)"/>
				<updated>2024-11-26T15:57:03Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function JsonToDatetime(const fmt:string):TDatetime;&amp;lt;/source&amp;gt;  Cette fonction converti un format json en date et heure  {|class=&amp;quot;wikitable&amp;quot; |- |Resul... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function JsonToDatetime(const fmt:string):TDatetime;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction converti un format json en date et heure&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La date et heure correspondant au format json.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Json]]&lt;br /&gt;
[[category:version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/JsonToDate_(rtl)</id>
		<title>JsonToDate (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/JsonToDate_(rtl)"/>
				<updated>2024-11-26T15:56:31Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function JsonToDate(const fmt:string):TDatetime;&amp;lt;/source&amp;gt;  Cette fonction converti un format json en date  {|class=&amp;quot;wikitable&amp;quot; |- |Result |La date co... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function JsonToDate(const fmt:string):TDatetime;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction converti un format json en date&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La date correspondant au format json.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Json]]&lt;br /&gt;
[[category:version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/DatetimeToJson_(rtl)</id>
		<title>DatetimeToJson (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/DatetimeToJson_(rtl)"/>
				<updated>2024-11-26T15:55:18Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function DatetimeToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;  Cette fonction converti une date et heure en format json  {|class=&amp;quot;wikitable&amp;quot; |- |Result |La ... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function DatetimeToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction converti une date et heure en format json&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La date et heure au format json.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Json]]&lt;br /&gt;
[[category:version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/DateToJson_(rtl)</id>
		<title>DateToJson (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/DateToJson_(rtl)"/>
				<updated>2024-11-26T15:54:42Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function DateToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;  Cette fonction converti une date en format json  {|class=&amp;quot;wikitable&amp;quot; |- |Result |La date au forma... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function DateToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction converti une date en format json&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La date au format json.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Json]]&lt;br /&gt;
[[category:version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/TimeToJson_(rtl)</id>
		<title>TimeToJson (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/TimeToJson_(rtl)"/>
				<updated>2024-11-26T15:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function TimeToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;  Cette fonction converti une heure en format json  {|class=&amp;quot;wikitable&amp;quot; |- |Result |L'heure au form... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function TimeToJson(dt:TDateTime):string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction converti une heure en format json&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|L'heure au format json.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Json]]&lt;br /&gt;
[[category:version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/PageSize_(selector)</id>
		<title>PageSize (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/PageSize_(selector)"/>
				<updated>2024-11-26T15:48:31Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;property PageSize:Integer;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété défini la taille de la page dans la pagination.  Exemple &amp;lt;source lang... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;property PageSize:Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété défini la taille de la page dans la pagination.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[PageMode (selector)|PageMode]]&lt;br /&gt;
* [[PageOffset (selector)|PageOffset]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/PageOffset_(selector)</id>
		<title>PageOffset (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/PageOffset_(selector)"/>
				<updated>2024-11-26T15:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;property PageOffset:Integer;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété défini l'offset dans la pagination.  Exemple &amp;lt;source lang='delphi'&amp;gt;... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;property PageOffset:Integer;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété défini l'offset dans la pagination.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[PageMode (selector)|PageMode]]&lt;br /&gt;
* [[PageSize (selector)|PageSize]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/PageMode_(selector)</id>
		<title>PageMode (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/PageMode_(selector)"/>
				<updated>2024-11-26T15:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;property PageMode:boolean;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété force l'utilisation d'une requête en mode paginé.  Une requête pagi... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;property PageMode:boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété force l'utilisation d'une requête en mode paginé.&lt;br /&gt;
&lt;br /&gt;
Une requête paginée retourne un nombre de ligne (PageSize) en partant d'un offset (PageOffset)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//procedure GetEcritures(iPages:TJsonStruct);&lt;br /&gt;
var sel:TSelector; ....&lt;br /&gt;
begin&lt;br /&gt;
  ....&lt;br /&gt;
  sel := vueEcriture.CreateSelector(AWhere,'-dateEcriture',True,[&lt;br /&gt;
   ....&lt;br /&gt;
  ]);&lt;br /&gt;
  // &lt;br /&gt;
  if iPages.itemCount=0 then &lt;br /&gt;
   begin&lt;br /&gt;
     // evaluate the itemCount &lt;br /&gt;
     iPages.itemCount := sel.Count; &lt;br /&gt;
   end; &lt;br /&gt;
  // &lt;br /&gt;
  sel.maxInstances := iPages.itemPerPage;&lt;br /&gt;
  sel.PageMode := True;&lt;br /&gt;
  sel.PageSize := iPages.itemPerPage;&lt;br /&gt;
  sel.PageOffset := (iPages.currentPage-1) * iPages.itemPerPage; &lt;br /&gt;
  // &lt;br /&gt;
  forEach view in sel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     ....&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[PageOffset (selector)|PageOffset]]&lt;br /&gt;
* [[PageSize (selector)|PageSize]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/IsClassOID_(class)</id>
		<title>IsClassOID (class)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/IsClassOID_(class)"/>
				<updated>2024-11-26T15:35:08Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;class function isClassOID(const iOID:TOID):boolean;&amp;lt;/source&amp;gt;  Retourne True si l'identifiant correspond à la classe.  {|class=&amp;quot;wikitable&amp;quot; |- |Return... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;class function isClassOID(const iOID:TOID):boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retourne True si l'identifiant correspond à la classe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Return&lt;br /&gt;
|True si l'identifiant appartient à la classe&lt;br /&gt;
|-&lt;br /&gt;
|iOID&lt;br /&gt;
|Un identifiant&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
iOpe doit être unique pour une classe.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//procedure doSomething(const iOID:string);&lt;br /&gt;
begin&lt;br /&gt;
  if TTiers.isClassOID(iOID) then&lt;br /&gt;
    begin&lt;br /&gt;
      ...&lt;br /&gt;
    end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi&lt;br /&gt;
&lt;br /&gt;
{{Footer|Classes métiers (tech)}}&lt;br /&gt;
[[category:Classes métiers]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/IsOID_(rtl)</id>
		<title>IsOID (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/IsOID_(rtl)"/>
				<updated>2024-11-26T15:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;Function IsOIDL(const value:string):boolean;&amp;lt;/source&amp;gt;  Cette fonction retourne True si la chaine est un OID.  {|class=&amp;quot;wikitable&amp;quot; |- |Result |True si... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Function IsOIDL(const value:string):boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne True si la chaine est un OID.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|True si value est un OID.&lt;br /&gt;
|-&lt;br /&gt;
|value&lt;br /&gt;
|Une chaine.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//procedure doSomething(param:string)&lt;br /&gt;
begin&lt;br /&gt;
  if isOID(param) then&lt;br /&gt;
   begin&lt;br /&gt;
     ...&lt;br /&gt;
   end&lt;br /&gt;
   else&lt;br /&gt;
   begin&lt;br /&gt;
     ...&lt;br /&gt;
   end&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Framework]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/ShowMessageFmt_(rtl)</id>
		<title>ShowMessageFmt (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/ShowMessageFmt_(rtl)"/>
				<updated>2024-11-26T15:21:12Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;Procedure showMessageFmt(const iMessage:String; const Args:Array of variant);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ShowMessageFmt affiche un message dans une boite de dialogue.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|iMessage&lt;br /&gt;
|Message à afficher.&lt;br /&gt;
|-&lt;br /&gt;
|Args&lt;br /&gt;
|Arguments pour formattage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cette fonction est utilisable à des fins de mise au point.&lt;br /&gt;
&lt;br /&gt;
{{tip|N'utiliser les dialogues qu'à des fins de mise au points, les processus doivent utiliser les services dédiés pour communiquer avec l'interface.}}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
// procedure onRequest(req:TJon; out resp:TJson);&lt;br /&gt;
begin&lt;br /&gt;
  //...&lt;br /&gt;
  showMessageFmt('Request:%s',[req]);&lt;br /&gt;
  //...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
&lt;br /&gt;
* [[ShowMessage (rtl)|ShowMessage]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Dialogues]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/UNLockSocietyPerimeter_(CM)</id>
		<title>UNLockSocietyPerimeter (CM)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/UNLockSocietyPerimeter_(CM)"/>
				<updated>2024-11-26T15:02:22Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;procedure UnLockSocietyPerimeter(iOpe:Integer);&amp;lt;/source&amp;gt;  Cette procédure déverrouille le perimètre société.   {|class=&amp;quot;wikitable&amp;quot; |- |iOpe |Op... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;procedure UnLockSocietyPerimeter(iOpe:Integer);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette procédure déverrouille le perimètre société. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|iOpe&lt;br /&gt;
|Opération&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Exemple :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//class procedure TestLockPerimeter;&lt;br /&gt;
var ope:Integer;&lt;br /&gt;
begin&lt;br /&gt;
  ope := 1;  &lt;br /&gt;
  ClassManager.LockSocietyPerimeter(ope,false);&lt;br /&gt;
  try&lt;br /&gt;
    showMessage('locked'); &lt;br /&gt;
  finally&lt;br /&gt;
  ClassManager.UnLockSocietyPerimeter(ope); &lt;br /&gt;
  end; &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
*[[LockSocietyPerimeter (CM)|LockSocietyPerimeter]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Gestion du contexte de partage (CM)}}&lt;br /&gt;
[[category:ClassManager]]&lt;br /&gt;
[[category:CMSC]]&lt;br /&gt;
[[category:Partage]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/LockSocietyPerimeter_(CM)</id>
		<title>LockSocietyPerimeter (CM)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/LockSocietyPerimeter_(CM)"/>
				<updated>2024-11-26T15:01:27Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang='delphi'&amp;gt;function LockSocietyPerimeter(iOpe:Integer; iNoWait:boolean):boolean;&amp;lt;/source&amp;gt;  Cette procédure verrouille le perimètre société.   {|class=&amp;quot;wikit... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang='delphi'&amp;gt;function LockSocietyPerimeter(iOpe:Integer; iNoWait:boolean):boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette procédure verrouille le perimètre société. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|iOpe&lt;br /&gt;
|Opération&lt;br /&gt;
|-&lt;br /&gt;
|iNoWait&lt;br /&gt;
|N'attend pas si le périmètre est déjà verrouillé&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|True si le périmètre a été verrouillé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Exemple :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
//class procedure TestLockPerimeter;&lt;br /&gt;
var ope:Integer;&lt;br /&gt;
begin&lt;br /&gt;
  ope := 1;  &lt;br /&gt;
  ClassManager.LockSocietyPerimeter(ope,false);&lt;br /&gt;
  try&lt;br /&gt;
    showMessage('locked'); &lt;br /&gt;
  finally&lt;br /&gt;
  ClassManager.UnLockSocietyPerimeter(ope); &lt;br /&gt;
  end; &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
*[[UnlockSocietyPerimeter (CM)|UnlockSocietyPerimeter]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Gestion du contexte de partage (CM)}}&lt;br /&gt;
[[category:ClassManager]]&lt;br /&gt;
[[category:CMSC]]&lt;br /&gt;
[[category:Partage]]&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Migration_des_personnalisations_(administration)</id>
		<title>Migration des personnalisations (administration)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Migration_des_personnalisations_(administration)"/>
				<updated>2024-11-26T10:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lors du'une mise à jour, les interfaces personnalisées qui ont été mise à jour doivent être revue pour prendre en comptes les modifications.&lt;br /&gt;
&lt;br /&gt;
La console d'administration et l'application d'Administration offre une interface permettant de simplifier cette opération.&lt;br /&gt;
&lt;br /&gt;
===A partir de la console d'administration===&lt;br /&gt;
&lt;br /&gt;
[[image:report-personnalisation-1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
{{tip|Dans la console d'administration les personnalisations moins récentes que leur version courante apparaissent en blanc sur fond bleu.}}&lt;br /&gt;
&lt;br /&gt;
A partir d'un objet personnalisé :&lt;br /&gt;
&lt;br /&gt;
[[image:report-personnalisation-2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Les différentes fonction disponibles :&lt;br /&gt;
&lt;br /&gt;
* Comparer version courante et version personnalisée&lt;br /&gt;
: Cette fonction permet de comparer les versions sans modification&lt;br /&gt;
* Reporter version courante vers version personnalisée&lt;br /&gt;
: Cette fonction permet de reporter les modification de la nouvelle version vers la version personnalisée&lt;br /&gt;
* Reporter version personnalisée vers version courante&lt;br /&gt;
: Cette fonction permet de reporter les personnalisations vers la version courante&lt;br /&gt;
* Conserver cette personnalisation&lt;br /&gt;
: Cette fonction modifie la date de la version personnalisée de sorte qu'elle apparaisse comme plus récente.&lt;br /&gt;
&lt;br /&gt;
L'outils de comparaison / modification présente les deux versions de l'interface :&lt;br /&gt;
&lt;br /&gt;
[[image:report-personnalisation-3.png|800px]]&lt;br /&gt;
&lt;br /&gt;
* Les reports se font toujours de la gauche vers la droite&lt;br /&gt;
* Les lignes en bleues sont les lignes présentes dans la version modifiée et absente dans la version d'origine&lt;br /&gt;
* Les lignes en verts sont les lignes présentes dans les deux versions&lt;br /&gt;
* Les lignes en rouges sont les lignes présentes dans la version d'origine et absente dans la version modifiée&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un report placer le curseur sur le bloc correspondant dans la version d'origine (à gauche) et cliquer sur le bouton &amp;quot;Copier le bloc&amp;quot; de la barre d'outils.&lt;br /&gt;
Pour sauvegarder les modifications confirmez le message &amp;quot;Sauvegardez les modifications&amp;quot; en sortie de l'éditeur.&lt;br /&gt;
&lt;br /&gt;
{{tip|Une copie de l'objet personnalisé avant modificaton est sauvegardée dans le répertoire backup du programme}}&lt;br /&gt;
&lt;br /&gt;
===A partir du menu d'Administration===&lt;br /&gt;
&lt;br /&gt;
[[image:report-personnalisation-4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Les fonctionnalités sont identiques à celles de la console d'administration.&lt;br /&gt;
&lt;br /&gt;
{{tip|Le report des modifications doit être réalisée dans l'application Desktop}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;br /&gt;
[[Category:Administration]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Version_2024_r2_(release_note)</id>
		<title>Version 2024 r2 (release note)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Version_2024_r2_(release_note)"/>
				<updated>2024-11-26T10:21:32Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Administration==&lt;br /&gt;
* [[Migration des personnalisations (administration)|Migration des personnalisations.]]&lt;br /&gt;
&lt;br /&gt;
==Portail Web==&lt;br /&gt;
* Ajout de la gestion des préférences dans l'écran &amp;quot;mon compte&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Script==&lt;br /&gt;
* [[Gestion_du_contexte_de_partage_(CM)|Verrouillage du périmètre société]]&lt;br /&gt;
* [[IsOID (rtl)|Ajout de IsOID]]&lt;br /&gt;
* [[IsClassOID (class)|Ajout de IsClassOID]]&lt;br /&gt;
* [[:Category:RTL_Json|Ajout de TimeToJson,DateToJson,DatetimeToJson,JsonToDate,JsonToDatetime]]&lt;br /&gt;
* [[ShowMessageFmt (rtl)|Ajout de ShowMessageFmt]]&lt;br /&gt;
* [[Selecteur_(tech)|Ajout du mode paginé sur les selecteurs]]&lt;br /&gt;
&lt;br /&gt;
==Tableaux de bord==&lt;br /&gt;
* Améloration des APIs Tableaux de bords&lt;br /&gt;
&lt;br /&gt;
==Automate==&lt;br /&gt;
* Ajout de l'option &amp;quot;Security Mode Force Intranet&amp;quot; pour forcer le mode intranet sur un serveur d'automate &lt;br /&gt;
* Ajout du support de l'export xml dans l'automate&lt;br /&gt;
* Ajout du support d'impression vers imprimante dans l'automate&lt;br /&gt;
&lt;br /&gt;
==Service==&lt;br /&gt;
* Ajout du paramétrage des gestionnaires d'enregistrement d'évènements pour la surveillance du service&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 2024 R2]]&lt;br /&gt;
[[Category:Release note]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/LoremIpsum_(rtl)</id>
		<title>LoremIpsum (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/LoremIpsum_(rtl)"/>
				<updated>2024-10-12T06:32:16Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « &amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Function LoremIpsum(len:Integer):string;&amp;lt;/source&amp;gt;  Cette fonction crée un texte aléatoire.  {|class=&amp;quot;wikitable&amp;quot; |- |Result |Le texte aléatoire |- ... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Function LoremIpsum(len:Integer):string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction crée un texte aléatoire.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Le texte aléatoire&lt;br /&gt;
|-&lt;br /&gt;
|len&lt;br /&gt;
|Nombre de ligne.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
* [[Random (rtl)|Random]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Système]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/RandomFloat_(rtl)</id>
		<title>RandomFloat (rtl)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/RandomFloat_(rtl)"/>
				<updated>2024-10-12T06:29:48Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;Function RandomFloat(min,max:Double; dec:Integer):Double;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction crée une valeur flottante aléatoire d'une certaine longueur.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La valeur aléatoire&lt;br /&gt;
|-&lt;br /&gt;
|min&lt;br /&gt;
|Valeur minimale.&lt;br /&gt;
|-&lt;br /&gt;
|max&lt;br /&gt;
|Valeur maximale.&lt;br /&gt;
|-&lt;br /&gt;
|dec&lt;br /&gt;
|Nombre de décimale.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi:&lt;br /&gt;
* [[Random (rtl)|Random]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Développement DSM}}&lt;br /&gt;
[[category:RTL Système]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/SetStringSize_(MM)</id>
		<title>SetStringSize (MM)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/SetStringSize_(MM)"/>
				<updated>2024-07-30T08:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version2024r1}}&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;procedure SetStringSize(const iType:string; const iSize:Integer);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode définit la taille des colonnes chaîne.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|iType&lt;br /&gt;
|Nom du type de chaîne.&lt;br /&gt;
|-&lt;br /&gt;
|iSize&lt;br /&gt;
|Taille des colonnes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les types chaînes sont définis ainsi :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|strCurrencyCode&lt;br /&gt;
|Code devise&lt;br /&gt;
|-&lt;br /&gt;
|strCurrencyConv&lt;br /&gt;
|Chaîne de conversion de devise&lt;br /&gt;
|-&lt;br /&gt;
|strUnitCode&lt;br /&gt;
|Code unité&lt;br /&gt;
|-&lt;br /&gt;
|strCounterValue&lt;br /&gt;
|Valeur de compteur&lt;br /&gt;
|-&lt;br /&gt;
|strCounterName&lt;br /&gt;
|Nom de compteur&lt;br /&gt;
|-&lt;br /&gt;
|strDateList&lt;br /&gt;
|Liste de date&lt;br /&gt;
|-&lt;br /&gt;
|strIntegerList&lt;br /&gt;
|Liste d'entier&lt;br /&gt;
|-&lt;br /&gt;
|strBarCodeValue&lt;br /&gt;
|Valeur de barre code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
Modifier la taille des colonnes de conversion des devises :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
  ModelManager.SetStringSize(strCurrencyConv,255); &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
* [[Configuration_des_applications_(administration)|Configuration des applications]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|ModelManager_(code)}}&lt;br /&gt;
[[category:ModelManager]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Version 2024 R1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Execute_(TSearchAction)</id>
		<title>Execute (TSearchAction)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Execute_(TSearchAction)"/>
				<updated>2024-06-20T12:32:18Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version11}}  &amp;lt;source lang='delphi'&amp;gt;Function Execute(action:TjsonStruct; resp:TJson):boolean;&amp;lt;/source&amp;gt;  Cette fonction exécute l'action et peut retourner une facet qui s... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;Function Execute(action:TjsonStruct; resp:TJson):boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction exécute l'action et peut retourner une facet qui sera affichée dans le panneau ouvert par l'action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|action&lt;br /&gt;
|Une structure json qui comprend les paramètres du résultat de la recherche&lt;br /&gt;
|-&lt;br /&gt;
|resp&lt;br /&gt;
|Une structure json en réponse&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|True si l'action a été exécutée&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//function Action_piece_ecritures.Execute(action:TjsonStruct; resp:TJson):boolean;&lt;br /&gt;
Type&lt;br /&gt;
  vueEcriture = viewOf(TEcriture)&lt;br /&gt;
   oidPiece:TOID = oidPiece;&lt;br /&gt;
   numero:Integer = numero; &lt;br /&gt;
   // &lt;br /&gt;
   codeCompte:string = compteGeneral.codeCompte; &lt;br /&gt;
   libelleCompte:string = compteGeneral.Caption;&lt;br /&gt;
   idCompteGeneral:TOID = oidCompteGeneral;&lt;br /&gt;
   // &lt;br /&gt;
   codeTiers:string = roleTiers.+Tiers.+Code; &lt;br /&gt;
   libelleTiers:string = roleTiers.+Tiers.+Caption;&lt;br /&gt;
   idRoleTiers:TOID = oidRoleTiers;&lt;br /&gt;
   idTiers:TOID = roleTiers.+oidTiers; &lt;br /&gt;
   //&lt;br /&gt;
   libelleEcriture:String = Caption; &lt;br /&gt;
   debit:TMoneyDT = debit;&lt;br /&gt;
   credit:TMoneyDT = credit; &lt;br /&gt;
   //&lt;br /&gt;
   dateLettrage:TDatetime = dateLettrage; &lt;br /&gt;
   lettre:String = lettrageEcriture.+lettre; &lt;br /&gt;
   //&lt;br /&gt;
   profilTVA:String = ProfilTVA.+Caption; &lt;br /&gt;
   dateDeclarationTVA:TDatetime = DeclarationTVALigne.+DeclarationTVA.+dDate; &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
 function _GetTitle():string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := Format(_TP('Ecritures pour la pièce %s'),[&lt;br /&gt;
     action.param.KeyValue['numero'],&lt;br /&gt;
   ]); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
var itemId:string; vSel:TSelector; inst:vueEcriture; &lt;br /&gt;
    idx,idv,idr,limits:Integer; SF,ST,SR:TjsonStruct; SA:TjsonArray;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FALSE;&lt;br /&gt;
&lt;br /&gt;
  // This is TPiece oid &lt;br /&gt;
  if action.Exists('param.itemId') &lt;br /&gt;
   then itemId := action.param.itemId&lt;br /&gt;
   else itemId := ''; &lt;br /&gt;
&lt;br /&gt;
  if itemId='' then Exit; &lt;br /&gt;
  SR := resp.AddStruct('panel','{panelId:&amp;quot;ecritures-'+itemId+'&amp;quot;, title:&amp;quot;'+_GetTitle+'&amp;quot;}');&lt;br /&gt;
  /////////////////////////////////////&lt;br /&gt;
  SR.addStruct('layout','{ name:&amp;quot;body&amp;quot; }');&lt;br /&gt;
&lt;br /&gt;
  SF := FacetBuilder.AddFacet(SR,'body','list','');&lt;br /&gt;
  ST := FacetBuilder.AddValueTable(SF,_GetTitle,''); &lt;br /&gt;
  SA := ST.table.columnDefs; &lt;br /&gt;
&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;n&amp;quot;, headerName:&amp;quot;'+_TP('Numéro')+'&amp;quot;, width:100}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;a&amp;quot;, headerName:&amp;quot;'+_TP('Compte')+'&amp;quot;, cellRenderer: &amp;quot;linkRenderer&amp;quot; }'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;b&amp;quot;, headerName:&amp;quot;'+_TP('Tiers')+'&amp;quot;, cellRenderer: &amp;quot;linkRenderer&amp;quot; }'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;c&amp;quot;, headerName:&amp;quot;'+_TP('Débit')+'&amp;quot;, width:160}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;d&amp;quot;, headerName:&amp;quot;'+_TP('Crédit')+'&amp;quot;, width:160}');&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;e&amp;quot;, headerName:&amp;quot;'+_TP('Libellé')+'&amp;quot;}');&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;f&amp;quot;, headerName:&amp;quot;'+_TP('Date lettrage')+'&amp;quot;, width:132}');&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;g&amp;quot;, headerName:&amp;quot;'+_TP('Lettrage')+'&amp;quot;, width:100}');&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;h&amp;quot;, headerName:&amp;quot;'+_TP('Profil de TVA')+'&amp;quot;}');&lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;i&amp;quot;, headerName:&amp;quot;'+_TP('Déclaration TVA')+'&amp;quot;}');&lt;br /&gt;
&lt;br /&gt;
  SA := ST.table.rows; &lt;br /&gt;
   &lt;br /&gt;
  idr := 0; limits := -1;&lt;br /&gt;
  vSel := vueEcriture.CreateSelector('(oidPiece=%1)', '', false, [itemId]);&lt;br /&gt;
  foreach inst in vSel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     SA.addDatum('id','',opeDatumSet,['id','n','a','b','c','d','e','f','g','h','i'],[&lt;br /&gt;
      inst.oid, &lt;br /&gt;
      inst.numero, &lt;br /&gt;
      _FormatLinkObject(_FormatTitle(inst.codeCompte,inst.libelleCompte),Format(_TP('Compte géénrale %s'),[inst.codeCompte]),inst.idCompteGeneral), &lt;br /&gt;
      _FormatLinkObject(_FormatTitle(inst.codeTiers,inst.libelleTiers),Format(_TP('Tiers %s'),[inst.codeTiers]),inst.idTiers), &lt;br /&gt;
      _FormatMontant(inst.debit),&lt;br /&gt;
      _FormatMontant(inst.credit),&lt;br /&gt;
      inst.libelleEcriture, &lt;br /&gt;
      _FormatDateObject(inst.dateLettrage),&lt;br /&gt;
      inst.lettre, &lt;br /&gt;
      inst.profilTVA, &lt;br /&gt;
      _FormatDate(inst.dateDeclarationTVA)&lt;br /&gt;
     ]);&lt;br /&gt;
     idr := idr+1; &lt;br /&gt;
     if idr=limits then break; &lt;br /&gt;
   end; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Result := True;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
{{Footer|TSearchAction (class)}}&lt;br /&gt;
[[Category:version2024r1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/GetLibelle_(TSearchAction)</id>
		<title>GetLibelle (TSearchAction)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/GetLibelle_(TSearchAction)"/>
				<updated>2024-06-20T12:26:27Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version11}}  &amp;lt;source lang='delphi'&amp;gt;Function GetLibelle(const iClassName:string):string;&amp;lt;/source&amp;gt;  Cette fonction retourne le libellé à afficher dans la vignette résul... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;Function GetLibelle(const iClassName:string):string;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne le libellé à afficher dans la vignette résultat de recherche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|iClassName&lt;br /&gt;
|Le nom de la classe de l'objet du résultat de la recherche&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|Le libellé à afficher dans la vignette pour cette action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Retourner une chaîne vide si la classe ne correspond pas à l'action, dans ce cas l'action sera ignorée.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//function ACtion_piece_ecritures.GetLibelle(const iClassName:string):string;&lt;br /&gt;
begin&lt;br /&gt;
  if TFacadeModel.hasAccounting and (iClassName='TPiece') then Result := _TP('Voir les écritures de la pièce') else&lt;br /&gt;
  Result := '';&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
{{Footer|TSearchAction (class)}}&lt;br /&gt;
[[Category:version2024r1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/TSearchAction_(class)</id>
		<title>TSearchAction (class)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/TSearchAction_(class)"/>
				<updated>2024-06-20T12:21:12Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
La classe TSearchAction est une classe de base pour les actions sur les résultats de recherche du portail Web. &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une nouvelle action sur un résultat de recherche ajoutez une classe dérivée de la classe TSearchAction et implémentez les méthodes GetLibelle et Execute.&lt;br /&gt;
&lt;br /&gt;
===Méthodes===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[GetLibelle (TSearchAction)|GetLibelle]]&lt;br /&gt;
|Retourne le libellé à afficher dans le panneau de recherche.&lt;br /&gt;
|-&lt;br /&gt;
|[[Execute (TSearchAction)|Execute]]&lt;br /&gt;
|Execute l'action.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour un exemple d'utilisation voir Action_piece_ecriture&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[TSearchKey_(MM)|Clé de recherche]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Code métier}}&lt;br /&gt;
[[category:Classes frameworks]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/UpdateStamp_(selector)</id>
		<title>UpdateStamp (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/UpdateStamp_(selector)"/>
				<updated>2024-06-20T12:03:08Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{version11}}  &amp;lt;source lang='delphi'&amp;gt;property UpdateStamp:boolean;&amp;lt;/source&amp;gt;  '''Lecture/Ecriture'''  Cette propriété force la mise à jour des attributs UpdDate et UpdSt... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;property UpdateStamp:boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Lecture/Ecriture'''&lt;br /&gt;
&lt;br /&gt;
Cette propriété force la mise à jour des attributs UpdDate et UpdStamp lors des mise à jour par un sélecteur.&lt;br /&gt;
&lt;br /&gt;
{{tip|La mise à jour en SQL de UpdDate peur provoquer des erreurs d'intégrité pour les tables protégées si la date de dernière modification de l'objet était antérieure à la date d'application de la protection.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Update_(selector)|Mise à jour par sélecteur]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/HasParameter_(selector)</id>
		<title>HasParameter (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/HasParameter_(selector)"/>
				<updated>2024-06-20T11:57:23Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version11}}  &amp;lt;source lang='delphi'&amp;gt;functione HasParameter(const iName:string):boolean;&amp;lt;/source&amp;gt;  Cette fonction teste si un paramètre nommée de la requête existe.  {|... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;functione HasParameter(const iName:string):boolean;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction teste si un paramètre nommée de la requête existe.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|iParameterName&lt;br /&gt;
|Le nom du paramètre&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|True si le paramètre existe.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les paramètres nommés peuvent être utilisé dans les expression de requêtes.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Vue_locale_(langage)|Vue locale]]&lt;br /&gt;
* [[AddParameter_(selector)|Ajout de paramètre]]&lt;br /&gt;
* [[GetParameter_(selector)|Retourne la valeur d'un paramètre]]&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version2024r1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/GetParameter_(selector)</id>
		<title>GetParameter (selector)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/GetParameter_(selector)"/>
				<updated>2024-06-18T06:06:19Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version11}}  &amp;lt;source lang='delphi'&amp;gt;functione GetParameter(const iName:string):variant;&amp;lt;/source&amp;gt;  Cette fonction retourne la valeur d'un paramètre nommée de la requête... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='delphi'&amp;gt;functione GetParameter(const iName:string):variant;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne la valeur d'un paramètre nommée de la requête.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|iParameterName&lt;br /&gt;
|Le nom du paramètre&lt;br /&gt;
|-&lt;br /&gt;
|Result&lt;br /&gt;
|La valeur du paramètre.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les paramètres nommés peuvent être utilisé dans les expression de requêtes.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Vue_locale_(langage)|Vue locale]]&lt;br /&gt;
* [[AddParameter_(selector)|Ajout de paramètre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footer|Selecteur (tech)}}&lt;br /&gt;
[[category:Sélecteur]]&lt;br /&gt;
[[Category:version2024r1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Test</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Test"/>
				<updated>2024-06-14T07:10:01Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : Page créée avec « {{Version650}} __TOC__  Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.  Par exemple le code suivant déclare une ... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Version650}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Les vues locales sont des type de données vues déclarées localement à l'intérieur d'une opération.&lt;br /&gt;
&lt;br /&gt;
Par exemple le code suivant déclare une vue MyView et effectue une recherche sur cette vue :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
  unCode:string = unCodeA;&lt;br /&gt;
  unEntier:Integer = refB.unEntierB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var inst:MyView;&lt;br /&gt;
begin&lt;br /&gt;
  inst := MyView.Find('unCode=%1','',true,['B1']);&lt;br /&gt;
  if Assigned(inst) then&lt;br /&gt;
   begin&lt;br /&gt;
     ...&lt;br /&gt;
   end;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le périmètre du type est limité à la procédure, il n'est donc pas possible de passer les objets de la vue en paramètre à d'autres fonctions (pour cela utilisez une vue globale).&lt;br /&gt;
&lt;br /&gt;
La syntaxe pour définir une vue locale :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BNF style grammar : &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nom_vue&amp;gt; ::= ViewOf(&amp;lt;class_dec&amp;gt;) [&amp;lt;attributes&amp;gt;] end &lt;br /&gt;
  &amp;lt;class_dec&amp;gt; ::= &amp;lt;class_names&amp;gt; | &amp;lt;class_name&amp;gt; &amp;lt;class_dec&amp;gt;&lt;br /&gt;
  &amp;lt;class_names&amp;gt; ::= &amp;lt;class_name&amp;gt;| [&amp;lt;class_name&amp;gt; ,]&lt;br /&gt;
  &amp;lt;class_name&amp;gt; ::= identifier&lt;br /&gt;
  &amp;lt;class_dec&amp;gt; ::= distinct&lt;br /&gt;
  &amp;lt;attributes&amp;gt; ::= &amp;lt;attribute_def&amp;gt; | &amp;lt;attribute_def&amp;gt; &amp;lt;where_def&amp;gt;&lt;br /&gt;
  &amp;lt;attribute_def&amp;gt; ::= &amp;lt;simple_attribute_def&amp;gt; | &amp;lt;simple_attribute_def&amp;gt; &amp;lt;attribute_directive&amp;gt; &lt;br /&gt;
  &amp;lt;simple_attribute_def&amp;gt; ::= &amp;lt;attribute_dec&amp;gt; | &amp;lt;attribute_dec&amp;gt; = &amp;lt;attribute_ref&amp;gt;&lt;br /&gt;
  &amp;lt;attribute_dec&amp;gt; ::= &amp;lt;attribute_name&amp;gt; : &amp;lt;type_name&amp;gt;&lt;br /&gt;
  &amp;lt;attribute_ref&amp;gt; ::= &amp;lt;main_class_attribute_name&amp;gt; | &amp;lt;operator&amp;gt;(&amp;lt;main_class_attribute_name&amp;gt;)&lt;br /&gt;
  &amp;lt;operator&amp;gt; ::= &amp;lt;aggregate_operator&amp;gt; | &amp;lt;date_operator&amp;gt; | &amp;lt;join_operator&amp;gt;&lt;br /&gt;
  &amp;lt;aggregate_operator&amp;gt; ::= count|sum|max|min&lt;br /&gt;
  &amp;lt;date_operator&amp;gt; ::= year|month|quarter|week|day|dayofyear|dayofweek|hour|minute|second&lt;br /&gt;
  &amp;lt;join_operator&amp;gt; ::= join&lt;br /&gt;
  &amp;lt;attribute_directive&amp;gt; ::=  primary | orderby | orderby desc | over | notInSelect&lt;br /&gt;
  &amp;lt;where_def&amp;gt; ::= [ &amp;lt;expression&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
  Type&lt;br /&gt;
    NomDeVue = ViewOf(NomDeClassePrincipale)&lt;br /&gt;
      Attribut : Type;&lt;br /&gt;
      Attribut : Type = AliasDe;&lt;br /&gt;
      Attribut : Type = operator(AliasDe);&lt;br /&gt;
      Attribut : Type = AliasDe primary;&lt;br /&gt;
      Attribut : Type = AliasDe orderby;&lt;br /&gt;
      Attribut : Type = AliasDe orderby desc;&lt;br /&gt;
      [ expression ]&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les vues peuvent utiles pour effectuer des traitement sur des classes complexes, par exemples :&lt;br /&gt;
&lt;br /&gt;
===Exemples===&lt;br /&gt;
====Curseur sur une classe vue====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    newCode:string;&lt;br /&gt;
    unCode:string = unCodeA;&lt;br /&gt;
    unEntier:Integer = refB.unEntierB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var inst:MyView; cursor:MyViewCursor&lt;br /&gt;
begin&lt;br /&gt;
  Result := 0;&lt;br /&gt;
  cursor := MyView.CreateCursorWhere(''unCode=%1'','''',true,[S]);&lt;br /&gt;
  foreach inst in cursor do&lt;br /&gt;
   begin&lt;br /&gt;
     Result := Result + inst.unEntier;&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec jointure externe====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function ViewExternalJoin(const S:string):Boolean;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    newCode:string;&lt;br /&gt;
    unCodeAA:string = unCodeA;&lt;br /&gt;
    unCodeBB:string = refB+unCodeB;&lt;br /&gt;
  end;&lt;br /&gt;
var inst:MyView;&lt;br /&gt;
begin&lt;br /&gt;
  inst := MyView.Find('unCodeAA=%1','',true,[S]);&lt;br /&gt;
  if Assigned(inst) and (inst.unCodeAA=S)&lt;br /&gt;
     then Result := True&lt;br /&gt;
     else Result := False;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue sur une interface====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(InterfaceA, ClassA1, ClassA2)&lt;br /&gt;
    unCode:string = unCodeA primary;&lt;br /&gt;
    ....&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue sur des combinaisons uniques d'attributs====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA distinct)&lt;br /&gt;
    unCode:string = unCodeA primary;&lt;br /&gt;
    unEntier:Integer = refB.unEntierB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec agrégats====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    unCode:string = unCodeA primary;&lt;br /&gt;
    unEntier:Integer = sum(unEntier);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec agrégats sur un montant====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  myView = viewof(WFClasseX)&lt;br /&gt;
   mysum:TMoney = sum(credit) orderby;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var sel:TSelector; inst:MyView; S,stag:string;&lt;br /&gt;
begin&lt;br /&gt;
  sel := MyView.CreateSelector('','',true,[]);&lt;br /&gt;
&lt;br /&gt;
  S := ''; stag := '';&lt;br /&gt;
  foreach inst in Sel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     S := S+stag+Formatfloat('0.00',inst.mysum.Value);&lt;br /&gt;
     stag := ',';&lt;br /&gt;
   end;&lt;br /&gt;
  showmessage(S);&lt;br /&gt;
&lt;br /&gt;
  Result := FALSE;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select sum(t0.credit) &amp;quot;mysum&amp;quot;,t0.credit_CodeDevise &amp;quot;mysum_CodeDevise&amp;quot; from dbo.WFCLASSEX t0&lt;br /&gt;
group by t0.credit_CodeDevise&lt;br /&gt;
order by sum(t0.credit)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec agrégats sur un attribut enfant====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  myView = viewof(WFClasseX)&lt;br /&gt;
   mysum:TMoney = sum(credit:TCValue) orderby;&lt;br /&gt;
  end;&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select sum(t0.credit_TCValue) &amp;quot;mysum&amp;quot; from dbo.WFCLASSEX t0&lt;br /&gt;
order by sum(t0.credit_TCValue)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec un opérateur de date====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassC distinct)&lt;br /&gt;
    unCode:string = unCodeC primary;&lt;br /&gt;
    unMois:Integer = month(uneDate);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec un opérateur de date (diff)====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(iDayDiff):string;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassC distinct)&lt;br /&gt;
    unCode:string = unCodeC primary;&lt;br /&gt;
    DayDiff:Integer = DayDiff(uneDateStart,uneDateEnd);&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  inst := MyView.Find('DayDiff &amp;gt;= %1','',true,[iDayDiff]);&lt;br /&gt;
    if Assigned(inst)&lt;br /&gt;
       then Result := inst.unCode&lt;br /&gt;
       else Result := 'Not found';&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec référence====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    unCodeAA:string = unCodeA;&lt;br /&gt;
    refB:reference = refB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    unCodeAA:string = unCodeA;&lt;br /&gt;
    refB:ClassB = refB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec variable référence====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    unCodeAA:string = unCodeA;&lt;br /&gt;
    refB:ClassB;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec filtre====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function foo(const S:string):Integer;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassA)&lt;br /&gt;
    unCodeAA:string = unCodeA;&lt;br /&gt;
    unCodeBB:string = refB.unCodeB;&lt;br /&gt;
    [ unCodeA='A1' ]&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  ...&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec traversée de liste====&lt;br /&gt;
&lt;br /&gt;
[[image:view-list-1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
function _Concat(const S:string):string;&lt;br /&gt;
Type&lt;br /&gt;
  MyView = viewof(ClassF)&lt;br /&gt;
    unCodeF:string = unCodeF;&lt;br /&gt;
    unCodeG:string = refFG.unCodeG;&lt;br /&gt;
    unCodeH:string = refFG.listH.unCodeH;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var ls:MyViewList; stag:string; idx:integer;&lt;br /&gt;
begin&lt;br /&gt;
  ls := MyView.CreateListWhere('unCodeG=%1','','unCodeH',true,-1,[S]);&lt;br /&gt;
  Result := ''; stag := '';&lt;br /&gt;
  for idx:=0 to ls.Count-1 do&lt;br /&gt;
   begin&lt;br /&gt;
     Result := Result+stag+ls.Refs[idx].unCodeH;&lt;br /&gt;
     stag := ',';&lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Vue avec jointure sur une classe====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Type&lt;br /&gt;
  myView = class(myClass)&lt;br /&gt;
    vp1:joinClass1 = join(A,B);&lt;br /&gt;
    vp2:JoinClass2 = join(A,B,W);&lt;br /&gt;
    vp3:JoinClass3 = join(W);&lt;br /&gt;
    ....&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Paramètre&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|A&lt;br /&gt;
|Attribut de la classe join (joinClass)&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|Chemin à partir de la classe base (myView)&lt;br /&gt;
|-&lt;br /&gt;
|W&lt;br /&gt;
|Clause Where sur la classe join&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La clause Where peut être exprimée avec les préfixes :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|self&lt;br /&gt;
|Préfixe de la classe de base&lt;br /&gt;
|-&lt;br /&gt;
|?&lt;br /&gt;
|Préfixe de la classe Join&lt;br /&gt;
|-&lt;br /&gt;
|xx&lt;br /&gt;
|alias d'une jointure de classe&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{tip|Il est possible de créer un produit cartésien entre deux classes en utilisant une jointure avec une clause where toujours vraie. }}&lt;br /&gt;
&lt;br /&gt;
{{tip|Les jointures seront générées dans l'ordre de leur déclaration dans la vue. }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//Procedure expensePendings(req:Tjson; var res:TObject);&lt;br /&gt;
Type&lt;br /&gt;
  ExpenseView = viewOf(TNoteFrais)&lt;br /&gt;
   vp: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier, EtatNF);&lt;br /&gt;
   aManager:string = vp.ContactEtablissement.oidutilisateur;&lt;br /&gt;
   //&lt;br /&gt;
   aDate:TDatetime = nDate;&lt;br /&gt;
   aRef:string = referencePiece;&lt;br /&gt;
   aReason:string = Caption;&lt;br /&gt;
   aAmountOrg:TMoney = MontantTTC;&lt;br /&gt;
   aAmountAct:TMoney = MontantRetenu;&lt;br /&gt;
   aQuantity:TQuantity = Quantite;&lt;br /&gt;
   aUser:string = Salarie.Operateur.oidutilisateur;&lt;br /&gt;
   aType:string = FraisSalarie.Caption;&lt;br /&gt;
   aMode:Integer = FraisSalarie.modeRemboursement;&lt;br /&gt;
   aAmountMax:TMoney = FraisSalarie.montantPlafond;&lt;br /&gt;
   aStatus:Integer = Statut;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var json:TJson; ls:TSelector; indx,ctn:Integer; inst:ExpenseView;&lt;br /&gt;
    AWhere,AOrder:string; Args:Array[0..5] of variant;&lt;br /&gt;
begin&lt;br /&gt;
  json := TJson.Create('');&lt;br /&gt;
  res  := json;&lt;br /&gt;
  //&lt;br /&gt;
  AWhere := '(aManager=%1) and (aStatus=%2)';&lt;br /&gt;
  Args[0] := GlbUserName;&lt;br /&gt;
  Args[1] := StatutNF_AValider;&lt;br /&gt;
  AOrder := 'aUser,-aDate';&lt;br /&gt;
&lt;br /&gt;
  indx := 0; ctn := 0; &lt;br /&gt;
  ls := ExpenseView.CreateSelector(AWhere,AOrder,true,Args);&lt;br /&gt;
  foreachP inst in ls.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     . . . &lt;br /&gt;
   end;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple le modèle est celui-ci :&lt;br /&gt;
&lt;br /&gt;
[[image:view-join-2.jpg]]&lt;br /&gt;
&lt;br /&gt;
La classe TEtatMetier est atteinte par deux chemins différents, un issu de la classe TValideurPossible et un issu de la classe TNoteFrais. La jointure est réalisée sur l'objet TEtatMetier. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   vp: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier, EtatNF);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TValideurPossible est la classe qui va être jointe &lt;br /&gt;
* vp défini un alias sur cette classe qui peut être ensuite utilisé dans la définition de la vue.&lt;br /&gt;
* ValidationEtat.EtatPossible.EtatMetier est le chemin issu de la classe jointe&lt;br /&gt;
* EtatNF est le chemin issu de la classe de la vue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exemple, vue locale avec produit cartésien, jointure par clause where et sous requêtes'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//procedure RubriqueParExerciceDetail;&lt;br /&gt;
Type&lt;br /&gt;
  vueSolde = viewof(TCumulPeriodeCompte)&lt;br /&gt;
   codeCompte:string = CompteGeneral.codeCompte;&lt;br /&gt;
   datePeriode:TDatetime = Periode.dateDebut;&lt;br /&gt;
   value:Currency = sumDiff(debitTenue,creditTenue); &lt;br /&gt;
   oidExercice:TOID = Periode.oidexercice; &lt;br /&gt;
   [(typeLot=1)] &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  vueSelection = viewOf(TSelectionCompte) &lt;br /&gt;
   vc:TCompteGeneral = join('(codeCompte&amp;gt;=self.compteInferieur) and (codeCompte&amp;lt;=self.compteSuperieur)');&lt;br /&gt;
   vp:TPeriode = join('(1=1)'); &lt;br /&gt;
   ve:TExercice = join(oid,vp.oidexercice); &lt;br /&gt;
   ve1:TExercice = join('(?.dateDebut = DateAdd(dpyear,ve.dateDebut,-1))');&lt;br /&gt;
  // &lt;br /&gt;
   idCompteGeneral:TOID = vc.oid primary; &lt;br /&gt;
   idRubrique:TOID = oidRubriqueCompte primary; &lt;br /&gt;
   idPeriode:TOID = vp.oid primary;&lt;br /&gt;
   idExercice:TOID = vp.oidexercice; &lt;br /&gt;
   idExerciceN1:TOID = ve1.oid;&lt;br /&gt;
   // &lt;br /&gt;
   codeRubrique:string = RubriqueCompte.code orderby; &lt;br /&gt;
   libelleRubrique:string = RubriqueCompte.Caption; &lt;br /&gt;
   codeCompte:string = vc.codeCompte orderby;&lt;br /&gt;
   libelleCompte:string = vc.Caption; &lt;br /&gt;
   libellePeriode:string = vp.Caption; &lt;br /&gt;
   // &lt;br /&gt;
   datePeriode:TDatetime = vp.dateDebut orderby desc;&lt;br /&gt;
   year:Integer = year(vp.dateDebut);&lt;br /&gt;
   month:Integer = month(vp.dateDebut);&lt;br /&gt;
   valueN0:currency = VueSolde.select('value','(oidExercice=self.idExercice) and  (codeCompte=self.codeCompte) and (datePeriode&amp;lt;=self.datePeriode)','',true,[]); &lt;br /&gt;
   valueN1:currency = VueSolde.select('value','(oidExercice=self.idExerciceN1) and  (codeCompte=self.codeCompte) and (datePeriode&amp;lt;=DateAdd(dpYear,self.datePeriode,-1))','',true,[]); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
var Sel:TSelector; inst:vueSelection; S,stag:string;&lt;br /&gt;
begin&lt;br /&gt;
  Sel   := vueSelection.CreateSelector('(codeRubrique=%1) and (year=2022) and (month=3)','',True,['SIG.L02']);&lt;br /&gt;
&lt;br /&gt;
  S := ''; stag := ''; &lt;br /&gt;
  forEach inst in Sel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     S := S+stag+inst.codeCompte;&lt;br /&gt;
     stag := ','; &lt;br /&gt;
   end; &lt;br /&gt;
  showMessage(S); &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{tip|Notez l'opérateur SQL DateAdd() qui peut être utilisé dans la partie littérale d'une expression}}&lt;br /&gt;
&lt;br /&gt;
====Vue avec jointures liées====&lt;br /&gt;
{{version11}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
 Type&lt;br /&gt;
  VueValideur = viewOf(TPieceTaxable)&lt;br /&gt;
   vp1: TValideurPossible = join(ValidationEtat.EtatPossible.EtatMetier,EtatMetier);&lt;br /&gt;
   vp2: TValideurPossible = join(ValidationEtat.RegleValidation,RegleValidation);&lt;br /&gt;
   gcv: TGroupeContactValidation = leftjoin(TGroupeValidation,vp2.ContactEtablissement); &lt;br /&gt;
   aId1:TOID = vp1.oid;&lt;br /&gt;
   aId2:TOID = vp2.oid; &lt;br /&gt;
   // &lt;br /&gt;
   ...&lt;br /&gt;
   [ (aId1=aId2) and ... ] &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple :&lt;br /&gt;
&lt;br /&gt;
* vp1 et vp2 sont deux jointures qui coincident sur le même tuple.&lt;br /&gt;
* La coincidence des deux jointures est réalisée par le clause where (aId1=aId2)&lt;br /&gt;
* gcv est une jointure sur le tuple défini par vp1 et vp2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voir aussi :&lt;br /&gt;
&lt;br /&gt;
* [[Vue anonyme (langage)|Vue anonyme]]&lt;br /&gt;
&lt;br /&gt;
[[Category:langage]]&lt;br /&gt;
[[Category:Vue de classe]]&lt;br /&gt;
[[Category:Version650]]&lt;br /&gt;
[[Category:Version11]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Am%C3%A9liorations_des_contr%C3%B4les_d%27interface_(Version_11_2024_r1)</id>
		<title>Améliorations des contrôles d'interface (Version 11 2024 r1)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Am%C3%A9liorations_des_contr%C3%B4les_d%27interface_(Version_11_2024_r1)"/>
				<updated>2024-06-14T06:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : a déplacé Améliorations des contrôles d'interface (Version 11 2024 r1) vers Améliorations des contrôles d'interface (Version 2024 r1)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Composant Dataset==&lt;br /&gt;
&lt;br /&gt;
===Dataset défini sur une interface===&lt;br /&gt;
&lt;br /&gt;
ClassNameFilter est utilisé pour récupérer le nom de la classe utilisée qui peut être définie par un argument&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
*Interrogation utilisant des vues différentes (et donc des requêtes différentes) en fonction des paramètres&lt;br /&gt;
*Le dataset est définie sur l'interface commune à toutes les vues&lt;br /&gt;
*Le processus contrôleur définie le nom de la vue en fonction des paramètres&lt;br /&gt;
&lt;br /&gt;
===Evènement OnPropertyChange===&lt;br /&gt;
&lt;br /&gt;
Permet de déclencher un refresh lorsqu'un attribut change sans passer par un contrôle d'écran&lt;br /&gt;
&lt;br /&gt;
==Composant TPropertyController==&lt;br /&gt;
&lt;br /&gt;
Ajout de Triggers&lt;br /&gt;
&lt;br /&gt;
Ajout de DefValue&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
Permet de positionner le bookSheetName du Treebook sur un refresh de la vue résultat &lt;br /&gt;
&lt;br /&gt;
==Paramètres d'écran==&lt;br /&gt;
&lt;br /&gt;
===Passage d'objet===&lt;br /&gt;
Permet de passer un objet à un contrôleur&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
* Sur le contrôleur définir un rôle référence correspondant à la classe de l'objet&lt;br /&gt;
* Définir un paramètre d'écran de type ptIn, mptClass, le ratttacher au rôle du contrôleur&lt;br /&gt;
* Sur le contrôleur ajouter une règle valeur par défaut sur le rôle pour récuperer les valeurs passées par l'objet&lt;br /&gt;
* Dans la règle VPD après avoir récupéré les valeurs vous pouvez faire &amp;quot;role := nil;&amp;quot; pour libérer l'objet passé&lt;br /&gt;
&lt;br /&gt;
===Evènement SET paramètre IN sur la forme===&lt;br /&gt;
&lt;br /&gt;
Déclenchée lorsqu'un paramètre IN est positionné lorsque la forme est ouverte&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
Déclenchement du recalcul du filtre lorsque des paramètres sont passés &lt;br /&gt;
&lt;br /&gt;
[[Category:Version11 2024 R1]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php/Version_11_2024_r1_(release_note)</id>
		<title>Version 11 2024 r1 (release note)</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php/Version_11_2024_r1_(release_note)"/>
				<updated>2024-06-12T06:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;Syfre : /* Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version2024r1}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Modèle==&lt;br /&gt;
* [[Vue_locale_(langage)|Amélioration des vues locales.]]&lt;br /&gt;
&lt;br /&gt;
==Script==&lt;br /&gt;
* [[Selecteur_(tech)|Amélioration du Sélecteur]]&lt;br /&gt;
* [[TSearchAction (class)|Action sur résultat de recherche]]&lt;br /&gt;
&lt;br /&gt;
==Interface utilisateur==&lt;br /&gt;
* [[Améliorations des contrôles d'interface (Version 2024 r1)]]&lt;br /&gt;
* [[Amélioration du requêteur|Amélioration du requêteur (Version 2024 r1)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 2024 R1]]&lt;br /&gt;
[[Category:Release note]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>	</entry>

	</feed>