Salesforce Spring'16 Release Note #0
Salesforce Spring'16 Release Note
http://docs.releasenotes.salesforce.com/en-us/spring16/release-notes/salesforce_release_notes.htm
Spring'16のリリースノート公開されました。
何と言っても特筆すべきは…
この青色の蝶ですよね。
調べてみたら、どうやら「アサギマダラ」という蝶っぽい。
<script>と<apex:includeScript>
<script src="https://..." /> <apex:includeScript value="{!URLFOR($Resource.XXX)}" />
両者の違いについて。
併用するとエラーになることが多く、
何となくで回避してきたけど、下記にまとめてあって理解した。
http://www30304u.sakura.ne.jp/blog/?p=1800
HTML生成時に「apex:includeScript」タグを使ったプラグインの方はhead配下で読み込まれるが、
素のscriptタグを使ったjQuery本体はもっと下のbody近くで読み込まれるようになり、読み込み順が逆転してエラー
ということらしい。
エラーということだけど、
この読み込みタイミングの違いを使って、抜け道的な実装ができそう。
Wordpress + heroku を始めたい
あれはプログラミングのプの字も知らない頃…
記事の執筆のアルバイトをしたことがあるのですが、
その時にWordpressを使って記事を書いていました。
あの時は、用意された環境でマニュアル通りにやっていたので、
// アルバイトなので当たり前ですが
あまり覚えていないのですが、今一度Wordpressを触ってみたいなと思い立ちました。
つまり、WordpressでBlogを新規に立ち上げるということで、
それをこのBlog上で紹介するのは矛盾というか、
ニワトリか卵か、みたいな雰囲気もあるのですが…個人的な技術メモに過ぎないので問題無いですね。
以下を参考にしつつ…
herokuを使ってWordpressが立ち上げられるみたいなので、herokuも初挑戦。
Salesforceやってるし、herokuも多少はね。
色々初めて尽くしですが、今月を目処に進めます。
共有グループに含まれるユーザのIdを取得する
共有グループのIdを受け取って、
その共有グループに含まれるユーザのIdを返すメソッド。
ユーザだけでなく共有グループも含まれている可能性があるため、再帰的に記述する。
/** * グループメンバーの取得 */ public static Set<id> GetUserIdsFromGroup(Id groupId){ Set<Id> result = new Set<Id>(); String userType = Schema.SObjectType.User.getKeyPrefix(); String groupType = Schema.SObjectType.Group.getKeyPrefix(); // 指定のグループのグループメンバーを取得し、ループ for (GroupMember m : [Select Id, UserOrGroupId From GroupMember Where GroupId =: groupId]) { // グループメンバーがUserの場合、resultにadd if (((String)m.UserOrGroupId).startsWith(userType)) { result.add(m.UserOrGroupId); // グループメンバーがGroupの場合、再帰呼び出ししてUser単位まで処理してresultにadd } else if (((String)m.UserOrGroupId).startsWith(groupType)) { result.addAll(GetUSerIdsFromGroup(m.UserOrGroupId)); } } return result; }
ビューステートエラー対応
遂にビューステートエラーとご対面してしまったので、
今後のために、実施した対応などをログ。
対応1:ビューステートの確認
ユーザの権限にある「開発モードでビューステートを表示」にチェックを入れた状態で、
Visualforceページを表示し、画面下部のコンソールからビューステートを見てみる。
サイズが大き過ぎる配列などが無いか、不要なデータがVisualforce側に渡っていないか、確認する。
対応2:プログラムの効率化
不要なデータ(項目など)が無いか、
実行しているSOQLのLIMITなどが考慮されているか確認する。
上記の対応で改善しない場合、ページ側の設計の改善を検討する。
(一覧の場合、ページングの実装など)
変数に、transient修飾子の付与の検討。
カスタム設定を使用した、動的な制限の検討(上記のLIMITなど)。
Visualforceのボタンについてのあれこれ
VisualforceのボタンのStyleについてちょっと調べたのでログ
・ボタンを<apex:commandButton>で設置すると、Salesforce標準のCSSが適用されてしまう。
方法1:<apex:page>のstandardstylesheets属性をFalseに設定する
方法2:勝手に適用されたCSSのclassを何かしらの方法で削除する
方法3:HTMLでボタンを作って、<apex:actionFunction>などを使う
・マウスオーバーした際に、ボタンをへこませたりしたい。
<apex:commandButton>のonMouseover属性、onMouseout属性を設定する。
<apex:commandButton image="{!URLFOR($Resource.SampleResourse, 'SampleResourse/images/btn_off.png')}" alt="ダウンロード" styleClass="button1" onMouseover="this.src='{!URLFOR($Resource.SampleResourse, 'SampleResourse/images/btn_on.png')}'" onMouseout="this.src='{!URLFOR($Resource.SampleResourse, 'SampleResourse/images/btn_off.png')}'"/>
image属性:初期表示時の画像(通常)
onMouseover属性:マウスオーバー時の画像(へこむ)
onMouseout属性:マウスオーバー後の画像(通常)
onMouseout属性で、通常の画像に戻してあげるのを忘れない。
ボタンに画像は使わない派だったけど、実際作ってみると楽しい。
デザイン系の仕事もやってみたいなあ。
Apexでランダムな文字列を作成するメソッド
メモ用に。
Apexでランダムな文字列を作成するメソッド。
多分、某ブログで共有されていたものの、真似の真似ぐらいのやつ。
public static string getRandomString(Integer LengthRequired){ String CharList = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'; String Res = ''; integer position; for(Integer i = 0; i <= LengthRequired; i++) { position = Integer.valueof(String.valueof(Math.roundToLong(CharList.length()*Math.random()))) -1; if(position < 0){ position = 0; } Res += CharList.substring(position,position+1); } return Res; }
凄く便利なメソッドなんだけど、
一番良く使うのが、テストクラスでランダムにユーザ名を付ける時っていうのは何だか切ない。