Я создаю компонент, который отображает текущие учетные записи пользователей на карте. Маркеры карты не отображаются. Я что-то упускаю из виду?

<template>
<div class="slds-m-around_medium">
    <template if:true={mapMarkers}>
            <lightning-map 
                map-markers={mapMarkers}
                markers-title={markersTitle}
                list-view={listView}
                >
            </lightning-map>
    </template>

</div>
import { LightningElement, track, wire } from 'lwc';
import Id from '@salesforce/user/Id';
import getUsersAccounts from '@salesforce/apex/AccountLocationController.getUsersAccounts';

export default class AccountMP extends LightningElement {
    @track mapMarkers;
    @track data;
    @track error;

    userId = Id;

    @wire(getUsersAccounts, {uId: '$userId'})
    wiredAccounts({error, data}){
        if(data) {
             this.mapMarkers = [
                 {
                     location:  {
                         Street: data.BillingStreet,
                         City: data.BillingCity,
                         PostalCode: data.BillingPostalCode,
                         State: data.BillingState,
                         Country: data.BillingCountry,
                     },

                     title: data.Name,
                 },
             ];
             this.error    = undefined;
             console.log('this.mapMarkers => ', JSON.stringify(this.mapMarkers));
         } else if (error) {
             this.error         = error;
             this.mapMarkers    = undefined;
             console.error('ERROR => ', error);
         }
    }
    listView = 'visible';
}
public with sharing class AccountLocationController {

    @AuraEnabled(Cacheable = true)
    public static List<Account> getUsersAccounts(Id uId){
        return [
            SELECT Id, Name, BillingStreet, BillingCity, BillingPostalCode, BillingState, BillingCountry 
            FROM Account 
            WHERE OwnerId = :uId
        ];
    }
}

3
Oleh Berehovskyi 4 Дек 2019 в 23:47
Как насчет файла .js?
 – 
Oleh Berehovskyi
4 Дек 2019 в 22:52
1
Забыл добавить в исходный пост. Обновлено сейчас.
 – 
Jordan
4 Дек 2019 в 22:56

1 ответ

Лучший ответ

Проблема здесь может заключаться в том, что ваш метод getUsersAccounts() возвращает List<Account>, а вы пытаетесь получить поле из Array, а не из Object в вашей связанной функции:

location:  {
   Street: data.BillingStreet,
   City: data.BillingCity,
   PostalCode: data.BillingPostalCode,
   State: data.BillingState,
   Country: data.BillingCountry,
},

Поэтому либо верните одну запись из контроллера вершины, либо обработайте переменную data как Array записей:

this.mapMarkers = data.map((account) => {
    return {
        location: {
            Street: account.BillingStreet,
            City: account.BillingCity,
            PostalCode: account.BillingPostalCode,
            State: account.BillingState,
            Country: account.BillingCountry,
        },
        title: account.Name,
    }
});
7
Oleh Berehovskyi 5 Дек 2019 в 00:00
1
Спасибо! Знаете ли вы какие-либо возможные обходные пути ограничения запросов? Не все записи отображаются, и я получаю ошибку OVER_QUERY_LIMIT. Я не нашел какой-либо документации, каковы пределы.
 – 
Jordan
5 Дек 2019 в 00:10
1
Это ограничение Google Geocoding API developers.google.com/ maps/premium/previous-licenses/articles/… Я могу порекомендовать вам ограничить максимальное количество возвращаемых записей, используя более конкретные условия фильтрации или добавив предложение LIMIT в ваш запрос SOQL.
 – 
Oleh Berehovskyi
5 Дек 2019 в 00:17
1
Большое спасибо еще раз. На данный момент я добавил LIMIT, но найду способ более эффективно фильтровать возвращаемые записи.
 – 
Jordan
5 Дек 2019 в 00:29
1
Пожалуйста)
 – 
Oleh Berehovskyi
5 Дек 2019 в 00:32
2
В зависимости от ваших требований и вида географического распределения учетных записей, один хороший способ применить ограничение — использовать РАССТОЯНИЕ между домашним местоположением пользователя (например) и местоположениями учетной записи. Однако это предполагает, что в вашей организации есть геокодированные адреса.
 – 
Phil W
5 Дек 2019 в 00:37