{"id":803,"date":"2019-06-24T10:37:02","date_gmt":"2019-06-24T09:37:02","guid":{"rendered":"http:\/\/wollef.org\/?p=803"},"modified":"2019-06-24T10:37:02","modified_gmt":"2019-06-24T09:37:02","slug":"le-jeu-12-fficher-la-position-des-voitures-en-temps-reel","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/le-jeu-12-fficher-la-position-des-voitures-en-temps-reel\/","title":{"rendered":"Le Jeu (1\/2) : Afficher la position des voitures en temps r\u00e9el"},"content":{"rendered":"<p>Pour cette premi\u00e8re partie du jeu, on va cr\u00e9er un composant qui va afficher dans une page Salesforce toutes les voitures sur une carte. A chaque fois qu\u2019on regarde la carte, on voit si la voiture a boug\u00e9.<\/p>\n<p>Pour cela je me suis inspir\u00e9 du code de l\u2019application \u00ab\u00a0Ours\u00a0\u00bb du cours Salesforce qui affichait une carte des Ours d\u2019un Parc Naturel.<\/p>\n<h3><a name=\"_Toc6859858\"><\/a>2.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Le composant<\/h3>\n<p>Comme avant, on doit faire un fichier de description pour dire o\u00f9 le composant s\u2019affiche<\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n\n&lt;LightningComponentBundle xmlns=\"http:\/\/soap.sforce.com\/2006\/04\/metadata\" fqn=\"CarInfo\"&gt;\n&lt;apiVersion&gt;45.0&lt;\/apiVersion&gt;\n\n&lt;isExposed&gt;true&lt;\/isExposed&gt;\n\n&lt;targets&gt;\n&lt;target&gt;lightning__RecordPage&lt;\/target&gt;\n&lt;\/targets&gt;\n\n&lt;targetConfigs&gt;\n&lt;targetConfig targets=\"lightning__RecordPage\"&gt;\n&lt;objects&gt;\n&lt;object&gt;Car__c&lt;\/object&gt;\n&lt;\/objects&gt;\n&lt;\/targetConfig&gt;\n&lt;\/targetConfigs&gt;\n\n&lt;\/LightningComponentBundle&gt;<\/code><\/pre>\n<p>Le code HTML du composant est simple car il y a dans salesforce un composant tout pr\u00eat\u00a0: lightning-map, \u00e0 qui on donne une liste d\u2019objet \u00e0 placer sur la carte\u00a0: mapMarkers.<\/p>\n<pre><code>&lt;template&gt;\n\n&lt;article class=\"slds-card\"&gt;\n&lt;lightning-map\nmap-markers={mapMarkers}\nzoom-level=\"11\"\nmarkers-title=\"Cars\"&gt;\n&lt;\/lightning-map&gt;\n&lt;\/article&gt;\n\n&lt;\/template&gt;<\/code><\/pre>\n<p>Le code javascript du composant va juste<\/p>\n<ul>\n<li>charger les voitures depuis salesforce\u00a0en appelant un code Apex\u00a0: <strong>getAllCars<\/strong><\/li>\n<li>transformer les voitures en marqueurs pour la carte\u00a0: <strong>data.map<\/strong><\/li>\n<\/ul>\n<pre><code>import { LightningElement, track, wire } from 'lwc';\nimport getAllCars from '@salesforce\/apex\/CarController.getAllCars';\n\nexport default class CarMap extends LightningElement {\n\n@track mapMarkers = [];\n@track cars;\n\n@wire(getAllCars, {})\nloadCars(result) {\nif (result.data) {\nthis.cars = result.data;\nthis.mapMarkers = result.data.map(car =&gt; {\nconst Latitude = car.Last_Position__Latitude__s;\nconst Longitude = car.Last_Position__Longitude__s;\nreturn {\nlocation: { Latitude, Longitude },\ntitle: car.Name,\ndescription: 'Coords: ${Latitude}, ${Longitude}',\nicon: 'utility:animal_and_nature'\n};\n});\n}\n\n}}<\/code><\/pre>\n<p>Le code APEX qui renvoie les voitures est juste une requ\u00eate SOQL vers la base Salesforce pour savoir la derni\u00e8re position des voitures.<\/p>\n<pre><code>@AuraEnabled(Cacheable=true)\n\npublic static Car__c[] getAllCars() {\nreturn [SELECT Id, Name,\nLast_Position__longitude__s, Last_Position__latitude__s\nFROM Car__c\nWHERE Last_Position__longitude__s!= null\nAND Last_Position__latitude__s != null\nORDER BY Name LIMIT 50\n];\n}\n}<\/code><\/pre>\n<h3><a name=\"_Toc6859859\"><\/a>3.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Le r\u00e9sultat<\/h3>\n<p>Et voici ce que donne ce composant une fois install\u00e9 dans une page Salesforce\u00a0:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-804\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/10\/jeu1-300x192.png\" alt=\"\" width=\"481\" height=\"308\" \/><\/p>\n<blockquote><p>On sait o\u00f9 sont les voitures au fur et \u00e0 mesure que salesforce r\u00e9cup\u00e8re les informations depuis le serveur Cloud Mercedes !<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour cette premi\u00e8re partie du jeu, on va cr\u00e9er un composant qui va afficher dans une page Salesforce toutes les voitures sur une carte. A chaque fois qu\u2019on regarde la carte, on voit si la voiture a boug\u00e9. Pour cela je me suis inspir\u00e9 du code de l\u2019application \u00ab\u00a0Ours\u00a0\u00bb du cours Salesforce qui affichait une <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/le-jeu-12-fficher-la-position-des-voitures-en-temps-reel\/\">Continue Reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,33,46,48,1,18,20],"tags":[],"class_list":["post-803","post","type-post","status-publish","format-standard","hentry","category-cars-and-clouds","category-apex","category-javascript","category-lightning-web-component","category-non-classe","category-salesforce","category-soql"],"_links":{"self":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/comments?post=803"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/803\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}