【Javascript】複数のチェックボックスの全選択・全解除
入力フォームでよくある、全選択・全解除のチェックボックスのサンプルです。
色んな方法がありますが、今回は<input>
の属性name
が全て同じだった場合を記載しています。
参考ページに色んな方法が書いてあるので、状況に応じて使いこなしてみてください。
<form name="form"> <label> <input type="checkbox" name="all" onClick="AllChecked();" />全て選択 </label> <p> <label> <input type="checkbox" name="test" value="TEST1" onClick="DisChecked();" />TEST1 </label> <label> <input type="checkbox" name="test" value="TEST2" onClick="DisChecked();" />TEST2 </label> <label> <input type="checkbox" name="test" value="TEST3" onClick="DisChecked();" />TEST3 </label> <label> <input type="checkbox" name="test" value="TEST4" onClick="DisChecked();" />TEST4 </label> </p> </form> <script language="JavaScript" type="text/javascript"> <!-- // 「全て選択」チェックで全てにチェック付く function AllChecked(){ var all = document.form.all.checked; for (var i=0; i<document.form.test.length; i++){ document.form.test[i].checked = all; } } // 一つでもチェックを外すと「全て選択」のチェック外れる function DisChecked(){ var checks = document.form.test; var checksCount = 0; for (var i=0; i<checks.length; i++){ if(checks[i].checked == false){ document.form.all.checked = false; }else{ checksCount += 1; if(checksCount == checks.length){ document.form.all.checked = true; } } } } // --> </script>
参考
複数のチェックボックスを同時にチェックする 全選択チェックボックス - [サンプルコード /JavaScript] ぺんたん info
メールアドレス入力フォームでの値の比較・確認
「メールアドレス」と「確認用メールアドレス」の入力値を照らし合わせて、一致しなかった場合はエラーメッセージを出すという、入力フォームでよくある機能のサンプルを2パターン記載します。
どちらもJavaScriptを使用するんですが、エラーメッセージの出し方を変えています。 状況に応じて使い分けてみてください。
サンプル1
エラーメッセージをJavaScriptのアラートで表現したパターンです。 こっちの方がコード的には簡単です。
<form onSubmit="return CheckEmail_1()"> <div> <label for="email_1">メール:</label> </div> <div> <input type="email" id="email_1" required> </div> <div> <label for="emailConfirm_1">メール確認用:</label> </div> <div> <input type="email" id="emailConfirm_1" required> </div> <p> <input type="submit" id="submit"> </p> </form> <script language="JavaScript" type="text/javascript"> <!-- function CheckEmail_1() { //IE対応の為変更 //var mail = email_1.value; //メールフォームの値を取得 //var mailConfirm = emailConfirm_1.value; //メール確認用フォームの値を取得 var mail = document.getElementById("email_1").value; //メールフォームの値を取得 var mailConfirm = document.getElementById("emailConfirm_1").value; //メール確認用フォームの値を取得 // パスワードの一致確認 if (mail != mailConfirm){ alert("パスワードと確認用パスワードが一致しません"); // 一致していなかったら、エラーメッセージを表示する return false; }else{ return true; } }; // --> </script>
サンプル2
こちらはエラーメッセージをHTML5の入力チェック方式で表現したパターンです。 他の値もHTML5で入力チェックをしていた場合は、こちらの方がメッセージの形式に統一感があるので見栄えがいいです。
<form> <div> <label for="email_2">メール:</label> </div> <div> <input type="email" id="email_2" required /> </div> <div> <label for="emailConfirm_2">メール確認用:</label> </div> <div> <input type="email" id="emailConfirm_2" required oninput="CheckEmail_2(this)" /> </div> <p> <input type="submit" id="submit"> </p> </form> <script language="JavaScript" type="text/javascript"> <!-- function CheckEmail_2(input){ //IE対応の為変更 //var mail = email_2.value; //メールフォームの値を取得 var mail = document.getElementById("email_2").value; //メールフォームの値を取得 var mailConfirm = input.value; //メール確認用フォームの値を取得(引数input) // パスワードの一致確認 if(mail != mailConfirm){ input.setCustomValidity('メールアドレスが一致しません'); // エラーメッセージのセット }else{ input.setCustomValidity(''); // エラーメッセージのクリア } } // --> </script>
リードの取引開始時に取引先責任者でレコードタイプを引き継ぐ
リードオブジェクトのレコードタイプを、取引開始後の取引先責任者でも引き継ぎたくて下記の記事を参考にプロセスビルダーを触っていました。
この記事の中で「18桁のレコードタイプIDを指定する」的なことが書いてあるんですけど、通常の画面からだとURLに記載されている15桁のレコードタイプIDしか参照できないのでそれでやってみました。 いちいちデータローダとか使うの面倒くさいし。
で、ちゃっちゃと真似てプロセスビルダーを作って、取引開始してみたんですけど、一向に指定したレコードタイプにならない。 何回やってもならない。
でちょっと面倒だけど18桁のレコードタイプIDを取得してみました。 レコードタイプを指定した適当なレコードを各オブジェクトに一つずつ作り、それを取り出します。
Lead[] lead = [SELECT Name, RecordTypeId FROM Lead WHERE name = 'xxx' LIMIT 1]; Contact[] contact = [SELECT Name, RecordTypeId FROM Contact WHERE name = 'xxx' LIMIT 1] System.debug(lead); System.debug(contact);
取得した18桁のレコードタイプIDを使ってプロセスビルダーを更新すると・・・
できた!
ちゃんと書いてあること守るべきでしたね。すいません。
同じところでハマってる人もいるかもなのでメモしときます。
パスワードの強度と桁数等の関係について
最近読んだコラムですごく為になったのでシェア。
WEBサービスで設定するパスワードって大体が6文字以上 or 8文字以上の半角英数字、中には大文字小文字識別、記号も使えるみたいなところもありますね。
まあ複雑な方が当然見破られにくく、セキュリティは強いっていうのは誰でも想像つくんですけど、文字数や組み合わせでどれくらい強度が違うのかを示している記事がありました。
上記リンクより拝借
6桁の英字(大文字小文字区別なし)だと、なんと37分!でパスワードを破られることがあるという驚きの結果!(PCの性能条件などは上記リンク参照)
Amazonや楽天なんかの大手ショッピングサイトでも、パスワードの条件は6文字以上の英数字(大文字小文字区別なし)だったと思います。(違ってたらすいません)
もちろん簡単に破れないように何らかの対策をしているとは思いますが、やっぱり怖いですよね。 僕はこれを見て急いで全て8文字以上に変えました。
表を見る限り、最低でも8文字以上の英数字(大文字小文字区別あり)位にしとけば解析されるのに大体50年かかるみたいなので、今後のパスワード設定の基準にしてみてください。 もちろんどんなに強力なパスワードでも使いまわしは危険なのでそこも注意してください。
ランダムパスワード生成サービスなんてものもあります。
【Apex】取引開始をまとめて行う方法
Apexを使用して、リードから取引先責任者への移行(取引開始)をまとめて行うクラスのサンプルを作ってみました。
ただfor文の中でSOQL使用していたりするので、ガバナ制限には気を付けなければいけません。そこは注意してください。
// 取引開始メソッド public void Convert(){ // リード状況の「取引開始済み」に該当する値を取得(MasterLabel) LeadStatus convertStatus = [SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted = true LIMIT 1 ]; // 取引開始していないリードを取得 Lead[] leads = [SELECT Id FROM Lead WHERE Status != :convertStatus.MasterLabel ]; // 取得したリードの数だけ取引開始を行う for(Lead lead : leads){ Database.LeadConvert lc = new Database.LeadConvert(); //取引開始済みリードオブジェクトをNew Account account = [SELECT Id FROM Account WHERE Name = :lead.Company LIMIT 1 ]; try{ lc.setLeadId(lead.Id); lc.setConvertedStatus(convertStatus.MasterLabel); // 取引先に同じ会社名がある場合は既存のレコードを使用 // 新しい取引先は作らない if(account != null){ lc.setAccountId(account.Id); } lc.setDoNotCreateOpportunity(True); // 商談オブジェクトを作成しない Database.LeadConvertResult lcr = Database.convertLead(lc); // 取引開始 }catch(DmlException e){ System.debug('エラー:' + e); } } }
参考
Web To リード(ケース)でレコードタイプを指定する
Web To リード(ケース)で生成したフォームからレコードタイプも同時に指定したいな、と思って調べたのでメモ。
Web to リード(ケース)で生成したHTMLに下記のコードを入れてやると指定できます。
フォームの生成方法は過去記事を参照。特にSandBox環境の人は読んでおいてください。
Value値にはレコードタイプのIDを入力。
<input type="hidden" id="recordType" name="recordType" value="***************">
レコードタイプのID
レコードタイプのIDを知る方法を書いていきます。 とはいってもApexでどうこうする必要もなく、簡単にわかります。
まず下記のページに移動します。
- 標準オブジェクト
設定 > カスタマイズ > 任意のオブジェクト(キャンペーン等) >レコードタイプ
- カスタムオブジェクト
設定 > 作成 > オブジェクト >レコードタイプ
IDを知りたいレコードタイプをクリックして、個別ページに遷移。
そのページのURLにid=***************
という形式で、15桁の英数字が並んでいる部分があります。それがIDです。(オブジェクトのレコード等と一緒ですね)
これを先ほどのコードに代入すれば、送信時にレコードタイプが入ります。
サンプルコード
最後にサンプルコードを書きます。
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"> <form action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type=hidden name="oid" value="xxxxxxxxxxxxxxx"> <!-- 送信後に遷移するページ --> <input type=hidden name="retURL" value="http://www.yahoo.co.jp/"> <!-- レコードタイプのIDを指定 --> <input type="hidden" id="recordType" name="recordType" value="***************"> <label for="name">名前</label> <input id="name" maxlength="80" name="name" size="20" type="text" /> <br> <input type="submit" name="submit"> </form>
参考
データ型「複数選択リスト」をWeb To リード(ケース)のフォームでチェックボックス表示
Salesforceにおいて、オブジェクトの項目タイプに複数選択リスト
というのがありますが、これをHTML上でチェックボックスで表現したい場合のメモ。
事前準備
Web ToリードのHTML生成方法は過去記事をチェックしてください。
複数選択リスト
Web To リードでHTMLを生成すると下記の様になります。
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"> <form action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type=hidden name="oid" value="xxxxxxxxxxxxxxx"> <input type=hidden name="retURL" value="http://"> <p> <label for="yyyyyyyyyyyyyyy">希望曜日:</label> <select id="yyyyyyyyyyyyyyy" multiple="multiple" name="yyyyyyyyyyyyyyy" title="2_参加可能曜日・時間"> <option value="月曜">月曜</option> <option value="火曜">火曜</option> <option value="水曜">水曜</option> <option value="木曜">木曜</option> <option value="金曜">金曜</option> <option value="土曜">土曜</option> <option value="日曜">日曜</option> </select> </p> <p> <input type="submit" name="submit"> </p> </form>
見た目はこんな感じ。いけてないですね。
チェックボックス
先ほどのコードを下記の様に変更していきます。
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"> <form action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST"> <input type=hidden name="oid" value="xxxxxxxxxxxxxxx"> <input type=hidden name="retURL" value="http://"> 希望曜日: <p> <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="月曜">月曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="火曜">火曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="水曜">水曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="水曜">木曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="木曜">金曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="金曜">土曜 <input type="checkbox" id="yyyyyyyyyyyyyyy" name="yyyyyyyyyyyyyyy" value="土曜">日曜 </p> <p> <input type="submit" name="submit"> </p> </form>
するとチェックボックスに変わっています。すっきりしましたね。
データもちゃんと反映されると思います。
まとめ
Salesforceの話というよりは、ほぼHTMLの話のような気もしますが、気にしない気にしない。
参考