[Dynamics CRM 2016]取引先企業にGoogleMapを組み込むー2
2016/08/16 Kyo1.Inoue
前回、取引先企業にGoogleMapを配置しました。
[Dynamics CRM 2016]取引先企業にGoogleMapを組み込むー1
WebResourceから取引先企業のフィールド値を取得しましたが、
WebResourceに取引先企業のフィールド値を渡した方が、フォームのOnLoad、フィールドのOnChangeイベントで再表示できて、作りとして美しいため、その方法を記載します。
1.1. Web Resourceとなるhtmlを定義します。
htmlファイルの文字コードはUTF-8にしてください。下記、ピンク時の”キー”は、前回同様です。
ちなみにgetServerURLはDynamics CRM 2016から getClientURLにメソッド名が変わっています。
[htmlファイルの内容]
[code]<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<style type="text/css">
#mapdata {
height: 600px;
}
</style>
</head>
<body id="mapdata">
<!-- <div id="mapdata"></div> -->
<script type="text/javascript">
var map;
var marker;
var geocoder;
// 右クリック抑止
document.oncontextmenu = function () {
return false;
}
//=========================================
// パラメタ取得メソッドの登録
//=========================================
/*
document.onreadystatechange = function () {
// Redy完了時にURLパラメタを取得
if (document.readyState == "complete") {
getDataParam();
}
}
*/
//=========================================
// パラメタ取得
//=========================================
function getDataParam() {
var vals = new Array();
if (location.search != "") {
vals = location.search.substr(1).split("&");
for (var i in vals) {
vals[i] = vals[i].replace(/+/g, " ").split("=");
}
//look for the parameter named 'data'
var found = false;
for (var i in vals) {
if (vals[i][0].toLowerCase() == "data") {
parseDataValue(vals[i][1]);
found = true;
break;
}
}
if (!found)
{ noParams(); }
}
else {
noParams();
}
}
//=========================================
// パラメタ値解析
//=========================================
function parseDataValue(datavalue) {
if (datavalue != "") {
var val = decodeURIComponent(datavalue);
//val = val.replace(/+/g, " ");
val = val.substring(val.indexOf('=', 0) + 1);
val = val.replace(/&/g, "&");
val = val.replace(/</g, "<");
val = val.replace(/>/g, ">");
val = val.replace(/"/g, """);
val = val.replace(/'/g, "'");
initMap(val);
}
else {
noParams();
}
}
//=========================================
// パラメタ解析時エラー処理
//=========================================
function noParams() {
// エラーメッセージ設定
alert('Error-noParams');
}
//=========================================
// Google Map 設定
//=========================================
function initMap(text) {
geocoder = new google.maps.Geocoder();
geocoder.geocode({
'address': text // 取引先企業の住所を取得
}, function(results, status) { // 結果
if (status === google.maps.GeocoderStatus.OK) {
map = new google.maps.Map(document.getElementById('mapdata'), {
center: results[0].geometry.location,
zoom: 15 // 地図のズームを指定
});
marker = new google.maps.Marker({
position: results[0].geometry.location, // マーカーを立てる位置を指定
map: map // マーカーを立てる地図を指定
});
}
else {
alert('Error-' + status);
}
});
}
</script>
<!-- keyがGoogleAPIの認証キーを取得する必要あり 1日あたり地図の生成回数が 25,000回以上で90日連続以上の連続した場合に Googleから課金の連絡が行われるそう -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=キー&callback=getDataParam">
</script>
</body>
</html>
[/code]
URLパラメタを取得するよう変えています。
Google MapのcallbackをinitMapメソッドからgetDataParamメソッドに変更しています。
1.2. .htmlファイルを作成したら、Webリソースとして登録します。
登録の仕方は前回同様です。
1.3. 取引先企業のスクリプトとなるjsファイルを定義します。
jsファイルの文字コードもUTF-8にしてください。
[JavaScript(js)ファイルの内容]
[code]//=========================================
// 名前空間
// 2016/08/16 Kyo1.Inoue FirstCreate
//=========================================
var JSAccount = {};
//=========================================
// Webリソースへ住所を設定する
// 2016/08/16 Kyo1.Inoue FirstCreate
//=========================================
JSAccount.SetWebResourceParam = function() {
// 取引先企業の住所を取得
var address = Xrm.Page.data.entity.attributes.get('address1_composite').getValue().replace( /r/g, " " );
// new_WebResource_GoogleMapのURLパラメタをエンコード設定
var src = Xrm.Page.context.getClientUrl() + '/WebResources/new_WebResource_GoogleMap?Data=first%3D' + encodeURIComponent(address);
// WebResourceオブジェクト取得
var objWebResource = Xrm.Page.ui.controls.get('WebResource_GoogleMap');
// 設定
objWebResource.setSrc(src);
};
[/code]
1.4. .jsファイルを作成したら、Webリソースとして登録します。

1.5. 登録したnew_JSAccountを取引先企業メインフォームの「フォームのプロパティ」からフォームライブラリとして設定します。

1.6. JSAccount.SetWebResourceParamメソッドを取引先企業のフォームOnLoad、住所1フィールドOnChangeで呼び出すよう追加します。



1.7. フォームを保存して公開し、画面初期表示、住所変更時に即時反映されるようになりました。

[Dynamics CRM 2016]取引先企業にGoogleMapを組み込むー1


