本部長は管理ができない

Salesforceに関わっているエンジニアの技術メモ。ときどきそれ以外。

新人に勧めた本

去年ちょこっと一緒のプロジェクトにいた新人(現在2年目)に進めた本。
久しぶりにあって、感想聞いたら役に立っているとのことなのでメモ。


知識ゼロから学ぶ ソフトウェアテスト

知識ゼロから学ぶ ソフトウェアテスト

一緒に仕事するまではテスターしていたとのことなので、当時やっていたテストの意味を考えてもらうために勧めた。
ルーチンワークで行っていたテストの意味が分かったとのこと。
また、現在プログラミングをするようになって、注意すべき点が見えてくるとも言っていた。


オブジェクト指向でなぜつくるのか 第2版  知っておきたいOOP、設計、関数型言語の基礎知識

オブジェクト指向でなぜつくるのか 第2版 知っておきたいOOP、設計、関数型言語の基礎知識

研修でJavaはやっていたけど、オブジェクト指向を理解しきれていないとのことで勧めた。
読んでいなかったら、今のプロジェクトで大変だったと思うとのこと。
まずは、とっかかりとして良かった模様。


プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムがどう動くのかを知って欲しいので勧めた。
読んでないって言われた・・・
C/C++をやっていた人間からすると、メモリ周りとか知って欲しいんだけどなあ。

本番環境のインスタンスの確認(推測)

SalesforceのURLは

https://<インスタンス>.salesforce.com/

となっている

SandboxのURL
https://cs5.salesforce.com/

インスタンスが「cs5」であることがわかる

本番環境のURL
https://ap.salesforce.com/

「ap0」なのか「ap1」なのかわからない

本番環境でVisualforceの画面を開くと

https://c.ap0.visual.force.com/apex/foo

となっていて、「ap0」であることがわかる

※1つの環境でのみ確認しただけなので、間違っているかもしれません。

Force.com IDEでpageファイルの文字コード一括変換

pageファイルはUTF-8だが、Shift-JISで開かれるので文字化けした状態で開かれる。
文字化けを回避するには、該当pageファイルのプロパティを開き、[Text file encording]→[Other]を選択し、プルダウンから「UTF-8」を選択する。
複数ファイルある場合、1ファイルずつ行う必要がある。
大量にあると日が暮れてしまうので、下記の方法で一括変換する。

一括変換方法
  1. まずは、1ファイルを手動で変換する
  2. Eclipseのインストール先の以下のファイルを開く
    • [Eclipseインストール先]\workspace\[対象プロジェクト]\.settings\org.eclipse.core.resources.prefs
    • なお、このファイルは、手動で変換しないと作成されない
  3. ファイルの3行目を参考に、他のpageファイルも追記し、保存する
  4. Eclipseの対象プロジェクトをリフレッシュする
org.eclipse.core.resources.prefsの中身
#Thu Oct 17 12:34:54 JST 2013
eclipse.preferences.version=1
encoding//src/pages/foo.page=UTF-8
2013/10/24 追記

テラスカイさんのブログで、Eclipseでの設定方法が紹介されていました。
10分でできる!快適な Force.com 開発環境 « TerraSky Tech Blog

こちらの方がずっと楽だ。

シート名の取得

MID(CELL("filename"), FIND("]", CELL("filename"), 1) + 1, 31)

ファイル保存していないと取得出来ない。
CELL("filename")は「C:\Temp\[foo.xlsx]Sheet1」を返す。
「]」以降がシート名となる。
MID関数の文字数指定が「31」であるのは、シート名に設定出来る文字数が31文字であるため。

カスタム項目IDを抽出するブックマークレット

関連リストから新規作成時に、呼出元オブジェクトの値を初期値としてセットするために、カスタム項目IDが必要になったので作ったもの。
初期値はURLパラメータで渡している。
Salesforceでは、URLパラメータを指定した画面遷移はサポート対象外となっているので注意。
URLパラメータの使用について


カスタム項目IDは「00N」で始まるため「00N」を含むリンクを取得している。
title属性が空文字であるリンクが条件になっているのは、編集、削除のリンクもカスタム項目IDを含んでいるため、これを対象外とするため。

javascript:(function(lnk,doc){doc.write('<table>');for(var i=0;i<lnk.length;i++){var url=lnk[i].href;if(url.indexOf('http')!=-1){if(lnk[i].title==''&&url.indexOf('/00N')!=-1)doc.write('<tr><td>'+lnk[i].innerHTML+'</td><td>'+url.match(/00N.+(?=\?)|00N.+/)+'</td></tr>');}}doc.write('</table>');})(document.getElementsByTagName('a'),open().document);


インデントを含めたスクリプトは以下。

javascript:(
    function(lnk,doc){
        doc.write('<table>');
        for(var i=0;i<lnk.length;i++){
            var url=lnk[i].href;
            if(url.indexOf('http')!=-1){
                if(lnk[i].title==''&&url.indexOf('/00N')!=-1)
                    doc.write('<tr><td>'+lnk[i].innerHTML+'</td><td>'+url.match(/00N.+(?=\?)|00N.+/)+'</td></tr>');
            }
        }
        doc.write('</table>');
    }
)(document.getElementsByTagName('a'),open().document);


リンク抽出部分はこちらを参考にさせて頂きました。
blog.鶯梭庵/links/ウェブページの画像とリンクのリストを作成するブックマークレット

apex:commandButtonを押下して別画面を起動する

以前の記事で、apex:commandButtonを使って別画面起動が出来なかったと書いたけど、色々試したら出来た。

<apex:page controller="foo">
    <apex:form id="frmHide" target="_blank">
        <apex:commandButton id="btnHide" value="別画面起動" action="{!openPage}" style="display:none;" />
    </apex:form>
    
    <apex:form id="frmMain">
        <apex:commandButton id="btnMain" value="別画面起動" 
            onclick="document.getElementById('{!$Component.frmHide.btnHide}').click();return false;" />
    </apex:form>
</apex:page>


表示するボタンと、非表示のボタンを2つ使う。
表示するボタンは、JavaScriptで非表示のボタンを押下するだけ。
非表示のボタンがあるapex:formは、target属性を"_blank"にして、ボタン押下時に別画面起動させる。

ああ、apex:commandLinkをボタン風にするより簡単だ・・・

スマフォ充電器 SONY CP-F2LSAVP を買った

充電器をずっと買おう買おうと思っていたが、無くて困る事が無かったので買わなかった。が、休日に朝から出かけると、夕方にはスマフォの電源が不足する事が頻発。
なので、ホリエモンのメルマガで紹介されていた、SONY CP-F2LSAVPを購入。

充電容量は多く、充電が早いので満足している。

不満があるのは、付属のUSB ACアダプターのコンセントに差し込む金具が折りたためない事。
充電器への充電が面倒なので、USB ACアダプターで直接充電しているので、持ち歩く事が多くちょっと邪魔。

USB ACアダプターで直接充電出来るのが気に入っている。