L'exemple fourni ici montre une implémentation des CustomPages. Il s'agit d'un simple pointage de prestations sur des clients et selon des catégories de tâches. Le pointage reste actif même quand l'écran n'est plus visible ou que la connexion Internet est temporairement interrompue.

Les pointages sont stockés dans une table plate qu'il faut créer dans la base de données :
CREATE TABLE [dbo].[POINTAGES](
[ID] [uniqueidentifier] NOT NULL default newid(),
[MOMENT_1] [datetime] NOT NULL default '19000101',
[MOMENT_2] [datetime] NULL,
[ID_USER] [char](10) NOT NULL default '',
[ID_CAT] [char](10) NOT NULL default '',
[ID_CLI] [char](10) NOT NULL default '',
[PAUSE_FROM] [uniqueidentifier] NULL,
CONSTRAINT [PK_POINTAGES] PRIMARY KEY CLUSTERED
(
[ID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
create index MOMENT_1 on dbo.POINTAGES(MOMENT_1)
create index MOMENT_2 on dbo.POINTAGES(MOMENT_2)
create index ID_USER on dbo.POINTAGES(ID_USER)
create index ID_CLI on dbo.POINTAGES(ID_CLI)
Dans un développement plus élaboré, les catégories pourraient provenir de la base de données de Mercator (par exemple depuis une table libre).
Le projet TimeSheet reprend le code de cette bibliothèque de classes MAUI.
Le bundle permettant l'accès à ces fonctionnalités est le suivant :
XAML Recherche :
<m:SearchButton IsVisible="False" />
Requête SQL :
select 1
XAML ListViewCell :
<CustomPage>
<Android>
<MainAssembly><Other\TimeSheet\Android\TimeSheet.dll</MainAssembly>
</Android>
<iOS>
<MainAssembly><Other\TimeSheet\iOS\TimeSheet.dll</MainAssembly>
</iOS>
<ClassName>OfflineOrders.OrdersListPage</ClassName>
<NoData>True</NoData>
</CustomPage>
Les assemblies sont disposées comme ceci, dans "Gestion > Fichiers SQL > Autres" :

A télécharger :
0000003259.zip (6 Kb - 18/11/2024)