В настоящее время я пытаюсь добавить pushpins на карту Bing в форме Dynamics 365.
Хотя все идет гладко как для компьютерных, так и для мобильных веб-версий, у меня возникла проблема с Dynamics 365 для телефона.
Я проверил мобильную опцию как на веб-ресурсе HTML, так и на форме, которую использую, поэтому моя проблема не связана с этим.
Это мой HTML файл:
<body onload="loadMap();">
<div id="myMap"></div>
<script type="text/javascript">
function loadMap() {
if (window.top.mainAddress== null) {
setTimeout(loadMap, 300);
return;
}
Microsoft.Maps.loadModule('Microsoft.Maps.Search', () => {
let map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
mapTypeId: Microsoft.Maps.MapTypeId.aerial,
zoom: 3
});
window.top.createMarker = (lat, lon, url) => {
try {
let marker = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(lat, lon), {
color: "blue"
});
Microsoft.Maps.Events.addHandler(marker, 'click', () => {
window.open(url);
});
map.entities.push(marker);
return true;
}
catch (exception) {
return exception;
}
}
let searchManager = new Microsoft.Maps.Search.SearchManager(map);
let requestOptions = {
bounds: map.getBounds(),
where: window.top.mainAddress,
callback: answer => {
map.setView({ bounds: answer.results[0].bestView });
map.entities.push(new Microsoft.Maps.Pushpin(answer.results[0].location, { color: "yellow" }));
}
};
searchManager.geocode(requestOptions);
});
}
</script>
<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?key=XXX" async="" defer=""></script>
</body>
И мой JS файл с обеими функциями, вызываемыми при загрузке формы:
function getMainAddress(executionContext) {
let formContext = executionContext.getFormContext();
window.top.mainAddress = [
formContext.getAttribute("address1_line1").getValue(),
formContext.getAttribute("address1_postalCode").getValue(),
formContext.getAttribute("address1_city").getValue(),
].filter(Boolean).join(' ');
}
function secondaryMarkers(executionContext) {
if (window.top.createMarker == null) {
setTimeout(() => secondaryMarkers(executionContext), 500);
return;
}
Xrm.WebApi.retrieveMultipleRecords("lead", "?$select=address1_latitude,address1_longitude&$top=5").then((result) => {
result.entities.forEach((lead) => {
alert(window.top.createMarker(lead.address1_latitude, lead.address1_longitude, `https://XXX.crm.dynamics.com/main.aspx?pagetype=entityrecord&etn=lead&id=${lead.leadid}`));
});
}).catch((exception) => {
alert(exception);
});
}
Итак, вот как это должно работать (очевидно, в не -оптимальный способ, но сейчас я просто хочу, чтобы это сначала работало правильно): функция getMainAddress
устанавливает значение window.top.mainAddress
, пока loadMap
ожидает. После того, как значение установлено, карта создается, функция createMarker тоже, и желтая кнопка, представляющая текущий отвод, добавляется к карте.
Эта часть фактически работает для обоих веб-версия динамика (на мобильных устройствах и ноутбуках) и приложение Dynamics 365 для телефона.
После этого функция secondaryMarkers
вызывает функцию createMarker
с координатами 5 других отведений.
Моя проблема в том, что эта функция выполняет alert(true)
для каждой среды, но синие кнопки не отображаются в приложении Dynamics 365 для телефона, в то время как они видны в веб-версии (будь то на ноутбуке или на телефон).
Есть идеи, что я здесь делаю не так?
Возникает ли эта проблема из-за моего кода из приложения Dynamics?
Если первое, как добавить кнопки на карту Bing?