Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Paramétrage de bundles de type "Liste"

0000002759     -      13/06/2022

Mercator permet le paramétrage de bundles destinés à MercatorPenguin, de type "liste" (ListView). Ce paramétrage peut contenir plusieurs étapes. Cela permettra à l'utilisateur, par exemple, d'obtenir le détail d'un enregistrement de l'étape précédente. Ce type de bundle peut contenir jusque 9 étapes. Chaque étape produit un affichage sous forme de liste.

 

Etape initiale

A l'étape initiale, le paramétrage doit contenir 3 éléments :

  • 1. La définition XAML d'un formulaire de sélection de paramètres de recherche. Ce formulaire sera affiché dans la partie supérieur de l'écran.
  • 2. Une requête SQL qui exploitera les paramètres saisi dans le formulaire ci-dessus.
  • 3. La définition XAML d'une cellule de la ListView qui sera affichée sous le formulaire.

 

1. XAML Recherche

Cette zone doit contenir du code XAML valide. Les conteneurs et les contrôles proposés par Xamarin Forms peuvent être librement utilisés et agencés.

Il convient toutefois de veiller à ce que les zones de recherche soit d'un de ces types :

  • m:SearchEntry : Entry (zone de texte d'une seule ligne) permettant l'association à un paramètre SQL
  • m:SearchDatePicker : idem pour un DatePicker (sélectionneur de date)
  • m:SearchSwitch : idem pour un Switch (True/False)
  • m:SearchPicker : idem pour un Picker (équivalent d'une liste déroulante)

Pour toutes les zones ci-dessus, la propriété SqlParam doit être complétée avec le nom du paramètre SQL qui sera utilisé dans la requête SQL du point 2.

Le code XAML doit aussi contenir un et un seul bouton de type m:SearchButton qui permettra de déclencher la recherche.


Cas particuliers :

Si la recherche n'utilise aucun paramètre (pas de SearchEntry, pas de SearchDatePicker, ...) alors on peut utiliser un SearchButton invisible. Dans ce cas, la recherche sera directement exécutée par MercatorPenguin, sans attendre d'intervention de l'utilisateur. Le code XAML correspondant doit donc être le suivant :

<m:SearchButton IsVisible="False" />

Si on souhaite que la validation d'un SearchEntry provoque directement la recherche, il faut ajouter cette propriété :

<m:SearchEntry Placeholder="Code-barres" SqlParam="@barcode" SearchWhenCompleted="True" />

Il est possible de fixer la zone qui doit recevoir le focus lors de l'ouverture de l'écran via la propriété FirstFocus :

<m:SearchEntry FirstFocus="true" 

Comme dans Mercator Desktop, il est possible de transférer facilement des valeurs d'une zone à une autre. Ceci se fait en ajoutant un TransferValue entre deux zones de même type. Ces deux zones doivent être identifiées par les propriétés SqlParamLeft et SqlParamRight. Cet objet se matérialise par une flèche vers la droite quand le contrôle de gauche à la focus et par une flèche vers la gauche quand celui de droite a le focus.

<m:SearchEntry Placeholder="N° min" Keyboard="Numeric" WidthRequest="120" BackgroundColor="White" TextColor="Black" SqlParam="@piece1" />
<m:TransferValue SqlParamLeft="@piece1" SqlParamRight="@piece2" />
<m:SearchEntry Placeholder="N° max" Keyboard="Numeric" WidthRequest="120" BackgroundColor="White" TextColor="Black" SqlParam="@piece2" />

TranferValue


Dans cette zone, il est possible de référencer un SearchDatesHelper. Comme dans Mercator, cet objet permet de sélectionner une seule date ou une fourchette (hier, semaine, mois en cours, ...). Ce contrôle contient deux propriétés : SqlParamDate1 et SqlParamDate2, dont

  • soit les deux sont complétées avec le nom du paramètre SQL auquel elles se rapportent : dans ce cas, ceci permet la saisie d'une fourchette de dates;
  • soit seul SqlParamDate1 est complété : dans ce cas, ceci permet la saisie d'une seule date.

Exemple d'utilisation :

<m:SearchDatesHelper SqlParamDate1="@date_1" SqlParamDate2="@date_2" HorizontalOptions="Center" BackgroundColor="Orange" />

 

Il est aussi possible de référencer un SearchScanButton. Il permet d'utiliser l'appareil photo du mobile comme lecteur de codes-barres. Ce bouton doit être associé à un SearchEntry afin d'y placer le résultat du scan. Cela se fait par sa propriété SqlParamKey.

Exemple d'utilisation :

<m:SearchScanButton SqlParamKey="@key" />

 

Concernant les SearchPickers : ce contrôle a la particularité de nécessiter une liste d'éléments. Cette liste peut, soit être fixée dans le code XAML, soit être le résultat d'une requête SQL, soit provenir de Mercator.

Exemple avec une liste dans le code XAML

<m:SearchPicker BackgroundColor="White" TextColor="Black" SqlParam="@n" HorizontalOptions="FillAndExpand">
  <Picker.ItemsSource>
    <x:Array Type="{x:Type x:String}">
      <x:String>1</x:String>
      <x:String>2</x:String>
      <x:String>3</x:String>
    </x:Array>
  </Picker.ItemsSource>
</m:SearchPicker>

 

Exemple avec une requête SQL

<m:SearchPicker ReqSql="select nom from CAT_STCK where type=1 order by nom" 
SqlParam="@cat1" BackgroundColor="White" TextColor="Black" HorizontalOptions="FillAndExpand" />

Ceci se fait par le biais de la propriété ReqSql. Cette requête SQL doit produire une seule table qui contient, au choix :

  • une seule colonne de type "chaîne de caractères"
  • deux colonnes de type "chaîne de caractères", la première étant l'élément affiché et la seconde étant l'ID stocké dans la base de données

Nous attirons l'attention sur le fait que le nombre d'enregistrements ainsi renvoyés vers le picker doit rester raisonnable.

 

Exemple avec une liste générée dynamiquement par Mercator

<m:SearchPicker MercatorItemsSource="Exercices" SqlParam="@num_ex" 
BackgroundColor="White" TextColor="Black" HorizontalOptions="FillAndExpand" />

La propriété MercatorItemsSource peut contenir une de ces valeurs :

  • Exercices : les exercices de la comptabilité (visible = Lib, valeur = num tinyint)
  • Periodes : les périodes de la comptabilité (visible = Lib + Lib exercice, valeur = num char(6))
  • Magasins : les dépôts (visible = Nom, valeur = Id char(10))
  • Reps : les représentants  (visible = Nom, valeur = Id char(10))
  • AnaPlans : les plans analytiques (visible = Libellé, valeur = numéro du plan tinyint)
  • Rayons : les rayons (visible = Nom, valeur = Id char(10))
  • Familles : les familles (visible = Nom, valeur = Id char(10))
  • SsFamilles : les sous-familles (visible = Nom, valeur = Id char(10))
  • Users : les utilisateurs (visible = Nom, valeur = Id char(10)).

Les listes sont importées dans le mobile lors de la lecture des bundles. Pour obtenir la dernière version de ces listes, il faut tirer la liste des bundles vers le bas (pull down).

Il est également possible de fixer l'élément à afficher par défaut.

 

2. Requête SQL

Cette zone permet de contenir n'importe quelle requête ou script SQL. Cette requête ne peut toutefois renvoyer qu'une seule table (ou 2 tables si une SubCellView est utilisée).Il convient de l'écrire de telle sorte que la quantité de données renvoyées vers le terminal portable ne soit pas trop importante, tant en terme de nombre de colonnes que de nombre d'enregistrements.

Formatage des données : voir cette page.

La requête SQL doit exploiter les paramètres SQL passés via le formulaire (point 1).

En sus, le paramètre @ID_USER (char 10) contenant l'ID de l'utilisateur est toujours passé à cette requête.

La première colonne renvoyée par cette requête est considérée comme contenant le titre de chaque enregistrement. Ce titre est affiché lors de l'éventuelle étape suivante.

 

3. XAML ListViewCell

Cette zone doit contenir du code XAML valide. Il doit définir le contenu d'une seule cellule de la ListView qui sera affichée par MercatorPenguin. Dans cette zone, toutes les propriétés des contrôles peuvent être automatiquement substituées par du contenu provenant de l'exécution de la requête de l'étape précédente. Pour cela, il faut mettre entre les guillemets @ suivi du nom de colonne en majuscules.

Par exemple, pour la propriété Text : 

<Label Text="@S_CLE1" Font="Small" />

 

Hormis les contrôles standard de Xamarin Forms, il est aussi possible d'utiliser ces contrôles propres à MercatorPenguin :

  PhoneButton

Ce bouton permet de composer directement un numéro de téléphone dans le mobile. La propriété Text est utilisée. Les caractères non strictement numériques sont ignorés. Le caractère + est remplacé par 00.

<m:PhoneButton Text="@C_NUM_TEL" Font="Small" />

 

 EmailButton

Ce bouton permet d'initier la rédaction d'un mail dans l'application de messagerie par défaut installée sur le mobile. Le destinataire sera le contenu de la propriété Text de ce contrôle. Le bouton n'est actif que si elle contient une adresse mail valide.

<m:EmailButton Text="@C_EMAIL" Font="Small" />

 

 MapButton

Ce bouton permet de démarrer automatiquement l'application de cartographie présente dans le mobile, la carte étant automatiquement localisée sur l'adresse indiquée dans la propriété Address. Il convient que cette adresse soit la plus complète possible pour permettre la géolocalisation. Par exemple, dans la requête SQL, on indiquera ceci : rtrim(rtrim(c_adresse)+' '+rtrim(c_adresse2)+' '+rtrim(c_codep) + ' ' + rtrim(c_ville)+ ' '+rtrim(c_pays)) as adresse

<m:MapButton Address="@ADRESSE" Font="Small" />

 

 FileButton

Ce bouton permet de visualiser un fichier PDF stocké dans la base de données SQL de Mercator. Cela permet d'afficher, par exemple, des duplicatas PDF de documents de la gestion commerciale ou des documents PDF de tous types associés à des fiches de signalétique. La propriété File de ce bouton doit contenir le chemin d'accès vers ce fichier (par ex. <RepData\Dir\MonFichier.pdf). 

<m:FileButton Text="@LIB" File="@PDF" Font="Small" />

 

Il est aussi possible d'afficher des images provenant de la base de données de Mercator.


Etapes 2 et suivantes

Dans ces étapes, le paramétrage doit contenir 2 éléments :

  • 1. Une requête SQL qui exploitera en tant que paramètre SQL les valeurs de l'enregistrement sélectionné à l'étape précédente;
  • 2. La définition XAML d'une cellule de la ListView qui sera affichée.

 

1. Requête SQL

Cette requête est construite selon les mêmes principes que ceux de l'étape initiale. La seule différence est que les paramètres SQL à prendre en compte correspondent aux noms des colonnes renvoyées par la requête SQL définie à l'étape précédente.

Il n'est pas possible de disposer des paramètres SQL correspondant, soit au formulaire de recherche, soit à une étape antérieure à l'étape précédente. Le cas échéant, il faudra ajouter dans la requête SQL d'une précédente étape un paramètre SQL en tant que colonne dans le SELECT afin de disposer de l'information souhaitée.

Par exemple, pour connaître les dates saisies initialement :

select ... @date_1 as date_1,@date_2 as date_2

 

2. XAML ListViewCell

Cette zone doit contenir du code XAML valide, composé exactement comme pour le point 3 de l'étape initiale. Les valeurs à indiquer dans les propriétés entre guillemets, composées de @ suivi du nom de colonne en majuscules doivent correspondre aux colonnes produites par la requête SQL du point 1 de cette étape.

 


 

Quelques exemples :