Développer des objets de requête et de page pour Power BI
Lorsque vous devez développer un état Power BI, une bonne pratique consiste à développer les jeux de données dont votre état a besoin. Vous pouvez créer ces jeux de données à l’aide de l’environnement de développement. En général, ce processus implique la création d’une petite extension comportant les requêtes ou pages requises pour votre état et, dans les services web, d’une collection de services web pour vous assurer que les requêtes et pages sont publiées automatiquement dans la table Services web lorsque vous installez et publiez l’extension.
Lorsque vous développez des requêtes ou pages d’API, elles sont automatiquement disponibles après le déploiement de l’extension. Les requêtes et pages d’API ne nécessitent pas de fichier de collection de services web et ne sont pas publiées dans la table Services web.
Maintenant, avant de commencer à développer votre extension, pour Power BI, il est judicieux d’analyser préalablement plus en détail vos besoins. Par exemple, vous pourriez être invité à créer un certain état Power BI qui nécessite des données spécifiques, puis vos jeux de données sur la base de ce besoin. Et la prochaine fois que vous serez invité à créer un autre état Power BI, vous recommencerez à zéro et créerez d’autres jeux de données.
Au lieu d’adopter cette approche, il serait préférable de réfléchir aux tables dont vous avez souvent besoin dans l’ensemble ou la plupart des états Power BI, puis de les créer en tant que jeux de données distincts. Ainsi, vous pouvez les réutiliser à tout moment. Commencez donc par créer les blocs élémentaires de vos états Power BI typiques, puis vous pouvez réutiliser ces blocs élémentaires lors de la création des états. Au final, vous disposez de moins de jeux de données et vous n’avez pas toujours besoin de recommencer à zéro pour chaque nouvel état Power BI.
Dans le module suivant de ce parcours d’apprentissage, nous allons expliquer comment vous devez réfléchir au modèle de données d’un état typique. Sur la base de ce modèle de données, généralement appelé schéma en étoile ou en flocon de neige, vous pouvez créer des requêtes (ou pages) et les publier en tant que services web.
Dans la procédure suivante, je vais vous expliquer comment vous pouvez créer une extension qui comprend de nouvelles pages et requêtes, afin de les rendre disponibles en tant que services web pour Power BI.
Vous devez d’abord télécharger et installer Visual Studio Code.
Ensuite, après avoir lancé Visual Studio Code, ajoutez l’extension AL pour Business Central.
Un exemple détaillé de cette procédure est disponible. Accédez aux informations sur chaque sujet à l’aide de ces liens :
Après avoir installé Visual Studio Code et activé l’extension AL Language, vous devez créer un projet, comme décrit ici.
Créer une extension Business Central dans Visual Studio Code
Après avoir créé l’extension dans Visual Studio Code, vous pouvez modifier les fichiers launch.json et app.json, comme décrit ici.
Utiliser les fichiers de configuration JSON
Vous êtes désormais prêt à ajouter de nouvelles pages et requêtes dans cette extension.
À titre d’exemple, nous allons maintenant créer une requête basée sur la table Écriture comptable client et une page basée sur la table Client.
Pour créer une page basée sur la table Client, procédez comme suit :
Dans Visual Studio Code, ajoutez un nouveau fichier .al à votre projet et nommez-le
Customers.Page.al.Créez le squelette de la nouvelle page à l’aide de l’extrait de code tpage.
Définissez la propriété SourceTable sur Customer.
Supprimez maintenant tous les éléments autres que le répéteur. Votre code devrait maintenant ressembler à ce qui suit :
page 50101 Customers { PageType = List; ApplicationArea = All; UsageCategory = Lists; SourceTable = Customer; SourceTableView = where(Blocked = filter(" ")); Editable = false; InsertAllowed = false; DeleteAllowed = false; ModifyAllowed = false; layout { area(Content) { repeater(GroupName) { field(Name; NameSource) { ApplicationArea = All; } } } } }Dans la section du répéteur, vous pouvez maintenant ajouter les champs dont vous avez besoin à partir de la table Customer. A titre d’exemple, vous pouvez ajouter les champs suivants :
repeater(GroupName) { field(CustomerNo; Rec. "No.") { ApplicationArea = All; ToolTip = 'CustomerNo' } field(CustomerName; Rec.Name) { ApplicationArea = All; ToolTip = 'CustomerName' } field(CustomerCity; Rec.City) { ApplicationArea = All; ToolTip = 'CustomerCity' } field(CustomerCountry; Rec. "Country/Region Code") { ApplicationArea = All; ToolTip = 'CustomerCountry' } }Lorsque vous fournissez des noms pour les champs provenant de la table Client, une bonne pratique consiste à s’assurer que tous les noms sont faciles à comprendre et à indiquer les informations disponibles dans les colonnes.
Si vous le souhaitez, vous pouvez désormais également filtrer la page afin qu’elle ne renvoie que les enregistrements qui vous intéressent. Vous pouvez y parvenir en utilisant la propriété SourceTableView de la page et/ou en ajoutant du code dans les déclencheurs de page. À titre d’exemple, nous allons supprimer tous les clients bloqués de la page à l’aide de la propriété SourceTableView. Pour ce faire, implémentez la propriété suivante :
SourceTableView = where(Blocked = filter(" "));Pour en savoir plus sur la propriété SourceTableView, consultez Propriété SourceTableView.
Ensuite, configurez la page en mode lecture seule à l’aide de la propriété Editable :
Editable = false;.Enfin, définissez les propriétés suivantes pour vous assurer que la page ne peut lire que les données de la table Client :
Editable = false;
InsertAllowed = false;
DeleteAllowed = false;
ModifyAllowed = false;
Le code complet de la page devrait ressembler à l’exemple suivant.
page 50101 Customers { PageType = List; ApplicationArea = All; UsageCategory = Lists; SourceTable = Customer; SourceTableView = where(Blocked=filter(" ")); Editable = false; InsertAllowed = false; DeleteAllowed = false; ModifyAllowed = false; layout { area(Content) { repeater(GroupName) { field(CustomerNo; Rec. "No.") { ApplicationArea = All; ToolTip = 'CustomerNo'; } field(CustomerName; Rec.Name) { ApplicationArea = All; ToolTip = 'CustomerName'; } field(CustomerCity; Rec.City) { ApplicationArea = All; ToolTip = 'CustomerCity'; } field(CustomerCountry; Rec."Country/Region Code") { ApplicationArea = All; ToolTip = 'CustomerCountry'; } } } } }Enregistrez l’objet .al à l’aide du raccourci clavier Ctrl+S.
Pour créer une requête basée sur la table Écriture comptable client, procédez comme suit :
Dans Visual Studio Code, ajoutez un nouveau fichier
.alà votre projet et nommez-leCustomerLedgers.Query.al.Créez le squelette de la nouvelle requête à l’aide de l’extrait de code tquery :
Modifiez l’élément de données afin qu’il utilise la table Écriture comptable client et définissez la propriété DataAccessIntent de la requête sur ReadOnly.
QueryType = Normal;DataAccessIntent = ReadOnly;Ajoutez des colonnes à la requête. Effectuez cette opération pour tous les champs que vous souhaitez que cette requête renvoie sous forme de colonnes :
column(CustomerNo; "Customer No.") { } column(PostingDate; "Posting Date") { } column(Amount; "Amount (LCY)") { }Supprimez tout ce que l’extrait de code tquery a ajouté à votre objet.
Votre requête devrait maintenant ressembler à ceci :
query 50101 CustomerLedgers { QueryType = Normal; DataAccessIntent = ReadOnly; elements { dataitem(CustomerLedgers; "Cust. Ledger Entry") { column(CustomerNo; "Customer No.") { } column(PostingDate; "Posting Date") { } column(Amount; "Amount (LCY)") { } } } }Vous pouvez désormais appliquer des filtres à la requête pour supprimer toutes les lignes de la table non requises dans le jeu de données. Vous pouvez y parvenir en utilisant la propriété DataItemTableFilter de l’élément de données, en ajoutant des colonnes de filtre ou en utilisant le déclencheur de requête OnBeforeOpen.
Pour en savoir plus sur le filtrage des objets de requête, consultez Filtres de requête.
Vous avez désormais créé un objet de page et un objet de requête. Vous pouvez affiner davantage les objets de page et de requête en ajoutant d’autres champs ou filtres. Pour cet exemple, nous allons les laisser tels quels.
L’étape suivante consiste à s’assurer que nos objets de page et de requête sont automatiquement publiés en tant que services web, afin que Power BI puisse se connecter et importer les données. Pour ce faire, vous devez ajouter une collection de services web à l’extension. La collection de services web a alors besoin d’une entrée de service web pour chaque objet que vous souhaitez publier en tant que service web.
Pour créer la collection de services web, procédez comme suit :
Dans Visual Studio Code, ajoutez un nouveau fichier .al à votre projet et nommez-le
webservices.xml.Créez le squelette de la collection de services web à l’aide de l’extrait de code twebservices.
Le fichier webservices.xml se présente désormais comme suit :
<?xml version="1.0" encoding="UTF-8"?> <ExportedData> <TenantWebServiceCollection> <TenantWebService> <ObjectType>Page</ObjectType> <ServiceName>serviceName</ServiceName> <ObjectID>objectId</ObjectID> <Published>false</Published> </TenantWebService> </TenantWebServiceCollection> </ExportedData>Nous allons maintenant modifier cette collection de services web afin qu’elle comprenne notre nouvel objet de page et notre nouvel objet de requête. Utilisez le code suivant à titre d’exemple :
<?xml version="1.0" encoding="UTF-8"?> <ExportedData> <TenantWebServiceCollection> <TenantWebService> <ObjectType>Page</ObjectType> <ServiceName>CustomerPage_PowerBI</ServiceName> <ObjectID>50101</ObjectID> <Published>true</Published> </TenantWebService> <TenantWebService> <ObjectType>Query</ObjectType> <ServiceName>CustomerLedgersQuery_PowerBI</ServiceName> <ObjectID>50101</ObjectID> <Published>true</Published> </TenantWebService> </TenantWebServiceCollection> </ExportedData>Pour chaque page ou requête que vous devez publier en tant que service web dans Business Central, vous devez créer une entrée dans ce fichier xml.
Vous êtes maintenant prêt à publier et installer cette extension sur votre bac à sable Business Central. Pour ce faire, procédez comme suit :
Dans Visual Studio Code, accédez à la Palette de commandes, puis sélectionnez l’option AL: Publish without debugging.
Attendez que l’extension soit publiée. Ensuite, votre navigateur s’ouvre automatiquement et se connecte à votre bac à sable dans Business Central.
Dans Business Central, ouvrez la page Gestion des extensions pour vérifier que votre extension a été publiée et installée avec succès.
Ouvrez maintenant la page Services web et filtrez-la sur _PowerBI.
Votre nouvelle page et votre nouvelle requête sont désormais publiées en tant que services web.
Comme expliqué dans une autre unité de ce module, Utilisation de Business Central en tant que source de données dans Power BI, vous pouvez maintenant utiliser Power BI Desktop et découvrir ces nouveaux services web et API à l’aide du Connecteur Business Central pour Power BI.