【Salesforce】数式項目のHYPERLINKでJavaScriptが使えなくなる
タイトルの通り、Salesforceの数式項目にてHYPERLINK内のJavaScriptが使えなくなるそうです。
管理者の方はメールが飛んできたそうです。
確認してくださいとの依頼があったため、確認を行いました。
簡単なのはEclipse等でメタデータを落とし、その中身を確認する方法でしょうか。
検索で引っかけて目視で確認をすれば良いですね。
ただ、項目が多いと面倒だったりメモリが足りなくて落ちたりします。
依頼された環境ではメタデータを落として確認することが出来ましたが、ちょっと心配なのでもう一つ確認を行いました。
開発者コンソールでSchemaの情報を取得するという方法です。
暇つぶしで作った割には楽しかったのでメモしておきます。
Map<String, Schema.SObjectType> sObjectTypeMap;
Map<String, Schema.DescribeSObjectResult> sObjectDetailMap;
Map<String, Map<String, Schema.DescribeFieldResult>> sObjectFieldDetailMap;
// SObjectTypeのSchemaを取得する
sObjectTypeMap = Schema.getGlobalDescribe();
// SObjectTypeの詳細Mapを作成する
sObjectDetailMap = new Map<String, Schema.DescribeSObjectResult>();
// SObjectTypeから項目Mapを取得するMapを作成する
sObjectFieldDetailMap = new Map<String, Map<String, Schema.DescribeFieldResult>>();
// すべてのSObject項目でループする
for(String key : sObjectTypeMap.keySet()){
Schema.DescribeSObjectResult result;
Map<String, Schema.sObjectField> fieldMap;
Map<String, Schema.DescribeFieldResult> fieldDetailMap;
// SObjectの詳細を取得する
result = sObjectTypeMap.get(key).getDescribe();
// SObjectの項目Mapを取得する
fieldMap = result.fields.getMap();
// 項目の詳細Mapを作成する
fieldDetailMap = new Map<String, Schema.DescribeFieldResult>();
for(String fieldName : fieldMap.keySet()){
Schema.sObjectField field;
Schema.DescribeFieldResult fieldDetail;
// 項目を取得する
field = fieldMap.get(fieldName);
// 項目の詳細を取得する
fieldDetail = field.getDescribe();
// 項目の詳細をMapに追加する
fieldDetailMap.put(fieldName, fieldDetail);
// 数式の場合、表示する
if(fieldDetail.isCalculated() && String.isNotEmpty(fieldDetail.getCalculatedFormula())){
String calcString;
// 数式の値を取得する
calcString = fieldDetail.getCalculatedFormula();
// 数式にHYPERLINKが含まれるものを取得する
if(calcString.toLowerCase().contains('hyperlink')){
system.debug('【ログ】----------------------------------------------------------------------------------------------------');
system.debug('【ログ】' + key + ' : ' + fieldDetail.getLabel());
system.debug('【ログ】\r\n' + fieldDetail.getCalculatedFormula());
}
}
}
// Mapに追加する
sObjectFieldDetailMap.put(key, fieldDetailMap);
}
すべての項目を取得し、数式項目の中でHYPERLINKを使用している場合にデバッグログで表示しています。
変数に保持している割には使っていなかったりしますが、元々は画面に表示しようとしていた名残です。
暇とやる気があったら作るのもいいかもしれませんね。
恐らくSObjectや項目が多すぎるとCPUタイムアウトでエラーが出ると思います。
その場合は必要な項目のみ処理するように修正することで解決できそうですね。
No comments.