2月 25

いくつかのサイトにも紹介がしてありますが、bodyにオンロードイベントを仕込んで
いろんなことをやりたいことがあると思いますが、Visualforceページでそれを実現
しようとした場合、Saleforceが準備した下記の記述をすることで、JavaScriptを
使ってオンロードイベントを実行することができます。

 

<script type=”text/javascript”>

window.sfdcPage.appendToOnloadQueue(function() { hogehoge() });

</script>

 

ただし、注意しないといけないところとしては、こちら必ずVisualforceページに
「直接」書かないといけないみたいで、静的リソースのJavaScriptに書いていても
動作してくれないようです。

Tags:

2月 20

だいぶ間が開きました。

今回は、Visualforceページで選択リストを設置して、その初期値を設定する方法です。

・Apex側の記述例

public class hogehogeExtension{

private Staff__c staff;

private List staffList;

private List optionList = new List();

 

public hogehogeExtension(ApexPages.StandardController controller){

// データベースから選択リスト用のデータを取得

staff = [Select s.Name, s.Id From Staff__c s Where s.Name = 'piyopiyo'];

staffList = [Select s.Name, s.Id From Staff__c s Order By s.Id ASC];

}

// 選択値

public String selection{ get; set; }

// 選択リストの値

public List getListitems(){

for( Staff__c item : staffList ){

optionList.add(new Selectoption(item.Id, item.Name));

}

// 初期値設定

selection = staff.Id;

return optionList;

}

}

 

・Visualforce側の記述例

<apex:selectList id=”fugafuga” multiselect=”false” size=”1″ value=”{!Selection}”>

<apex:selectoptions value=”{!Listitems}”/>

</apex:selectList>

初期値の設定の方法がよくわからなかったので覚え書きとして。

1月 24

今回はDate型の加工です。
PHPでは、substr()などいろいろと駆使して自由に加工していたんですが、
どうもApexだと勝手が違って、Javaをほとんど知らない私としてはかなり
苦労しました。

ですが、今日はApexのレファレンスをForce.comのブログで見つけたおかげで
そういった苦労もこれからはちょっとはマシになるのかもしれません。

さて、本題。

Date型やDate Time型にもいろいろとメソッドが準備されているみたいで、
今回は「addDays()」というメソッドを使いました。

今回の場合、納品日などが事前に登録されていて、それとは別に
リードタイムの情報が数値として保存されているような状況で、納品日から
リードタイムを引いて発注日を逆算したいといった状況だったのですが、
まずはリードタイムがDecimal型で保存されているので、これをInteger型に
型変換。

Integer calcDate = readTime.intValue();

これでaddDays()に使うInteger型の値が準備できました。
ただし、今回の場合、addDays()はそのまま使うと「足す」だけなので、
事前に

calcDate = 0 – calcDate;

みたいな感じでマイナスの値にしておきました。
で、あとは

Date orderDate = deliveryDate.addDays(calcDate);

といった感じ使うと納品日から逆算された日付が計算されるて
登録されました。

いやはや、やっぱりメソッドに何があるのかほとんどわからない
状態で手探りでやってると効率が悪すぎるので、今回はレファレンスに
助けられました。まぁ、英語読めば探さなくてもあるんですけどね。

最後に参考になったApexコードのレファレンスを紹介している
Force.comのブログのアドレスを紹介しておきます。

http://blogjp.sforce.com/2007/10/apex_4d68.html

Tags:

1月 19

私は統合開発環境を使わずにLAPPやLAMPでの開発をやってきた人だったので、
デバッグをする際にはよく「var_dump()」を使っていました。

そこで今はForce.comでApexを使いながら開発を進めてはいるものの、当初、
開発者コースで教わったような「System.debug()」などでは、なかなかどうして
var_dumpのような感じで、素直に表にババーンとチェックしたい項目が表示して
くれなくてチェックしくいってことが続いてました。

で、ここで見つけたのが、ご存知の方もたくさんいらっしゃると思いますが、
「addError()」っていうメソッド。

これを使うと、「var_dump()+exit()」みたいな感じで強制的にその部分で
エラーを起こして、確認したい変数や配列の中身を見ることができて、
大変いい具合です。

使い方としては・・・

エラーを起こさせたいSオブジェクトの変数名.addError(‘任意のテキスト’ + 項目や配列の変数名);

といった感じ。任意のテキストの部分は、何でもいいんですけど、これを
入れておかずに変数だけにすると、配列の中身をチェックしたい場合には、
エラーになってしまいます。

例えば、

hoge.addError(‘error!!’ + fuga);

みたいな感じの書き方にすると、トリガの中身のデバッグにも使えて、
大変便利です。

Tags:

12月 05

私はPostgreSQLやMySQLをよく使っているのですが、ApexでSOQLの
クエリとして重複処理ができないかなと調べていたんですが、
「DISTINCT」は使えないぽいですね。

で、どうするのかというと「GROUP BY」で全部やっちゃうとのこと。
そういう仕様みたいなのでなるほど~と納得するしかないですが、
やっぱり微妙に使いづらいところがあるなと思いました。

参考にしたCommunityはこちら
SQL文のdistinct句と同じ機能

12月 02

英語サイトで調べればすぐわかることなんですが、意外とはまる
かもしれないので、ご紹介。

Sandbox環境にdataloaderでログインする時には、

① 「setting」を開く
② 「Server host」のところを
 ”https://login.salesforce.com” → ”https://test.salesforce.com”
 へ書き換える。

これですんなりログインできます。

※dataloaderの設定は保存されるとずっと残るので、次に本番組織にログインする
 時にはまらないように注意しましょう!

Tags:

12月 02

今回、ApexとVisualforce使って初めて開発を進めているわけですが、
思ったよりもレファレンスもなく、ちょっと調べようと思うとすぐに
英語サイトになってしまうので、ややめんどくさいところがあります。

そんな中で、一番困って時間がかかってしまったのが、拡張コントローラの
テストです。公式や他社さんのブログにも標準コントローラのテストに
ついては掲載があるのですが、どれも「やり方は一緒です」「応用すれば
できます」的な内容が多いため、JavaやC#などについては、ほぼ素人な
私からすると、真似て試行錯誤を繰り返してはみたものの、結論、
拡張コントローラ側で独自のsaveメソッドを使っていたりしていたため、
全く実現できない感じになっていました。

結局のところ、英語サイトのコミュニティで見つけたものが参考になり、
先に進むことができたわけですが以下のようにして実現しました。

PageReference pageRef = Page.entryItems;
Test.setCurrentPage(pageRef);
ApexPages.Standardcontroller sc1 = new ApexPages.Standardcontroller(j);
System.CurrentPageReference().getParameters().put(‘Juhatyuu__r.Id’, j.Id);
entryItemsExtension tmpEntryItem = new entryItemsExtension(sc1);

  1. 拡張コントローラが呼び出されるVisualforceページを現在のページとしてセット
  2. そのページの標準コントローラをインスタンス化
  3. そのページに渡すパラメータがあれば、GETで渡す
  4. 最後に拡張コントローラをインスタンス化

 

これで、この後はそのページにいるかのような動作を実行することができます。
必要なメソッドを呼び出して実行していく感じです。

Tags:

12月 02

何にハマっているのかというと、Apexのテストにハマってます。
ここ数日、ずっとテストをやっているんですが、エラーなどは
ぼちぼち解消しつつあるものの、一部のクラスのコードカバー率が
思うように上がってくれません。全体のカバー率は98%まで
上昇してはいるんですけど、いくつかだけ70%切ったまま・・・。

で、どこかの記事で全体で75%以上あればdeployできるというのを
見た気がしたので、実際にdeployしようとするとUnitTestなどで
何度やっても出てこないエラーが発生。もう何がなんやら・・・と
かなりまずい状況です。

皆さん、

① Force.IDEで単体でテストをしてもエラーは発生しない。
② SFAのブラウザ上から「すべてのテストを実行」で実行してもエラーは発生
 しない。
③ deployすると上記では発生しなかったエラーが発生。

上記のような問題が発生した経験があるでしょうか?

Tags:

11月 01

はじめまして、ビープラスの情報システム課の早井です。
この度、更新が停滞してしまっていたこのブログを復活させる任を受けて、
このブログを書かせていただくことになりました。

はじめましてなので、簡単に自己紹介を・・・。
私の職歴は結構変わっているらしく、高校卒業後は海上自衛官として約9年半
ほど勤めた後、SEに転職して国産CMSメーカーでその開発に携わったり、
その他WEBアプリの開発に携わったりしていました。その後、営業職を少し
かじって現在またSEとして頑張っています。

私個人としては、実はまだまだセールスフォースには不案内なところが
多いのですが、勉強していて気づいたこと、面白いな、凄いなと思った
ことを書いていきたいなと思っていますので、なにとぞお手柔らかに
お願いいたします。

さてさて今回は、最近、ApexやVisualforceを扱い始めたということで、
「Force.com IDE」と「developer.force」について軽く書きます。

いや~、今までWEBアプリの開発でもずっとEclipseのような統合開発環境を
使ったことがほとんどなかっただけに、正直、この2つには本当に驚かされ
ました。私が一番驚いたり凄いと思ったのは、

・関数などの補完機能
・プログラムのチェック機能
・オンデマンド開発(ブラウザ上での開発)とは思えないような使いやすさ

の3つです。

確かに、一般的なエディタなんかと比べたらできないことも多いのですが、
その辺は併用することだってできるし、何はともあれブラウザ上であれこれ
できてしまうので、扱いながら「前やってたCMSではこんなことできなかった
なぁ」とか「これってAjaxかな?JQueryかな?」とか「こういうWEBアプリを
作れたら凄いな」とか脱線しつつ感動しておりました(笑)

ただ、前職の時がやっていなかったので、苦労していることが1つあります。
何かというと、「テストの作成」です。こちら、前職の時はなかなかテストを
自動化するところまでたどり着けていなかったので、アナログちっくに人海戦術で
やっていました。なので、1つの機能のために1つのテストケースを作って
といったことがやや面倒に感じるのが正直否めません。(どなたか楽なテスト
ケース作成方法あればご教示ください;;)でも、それくらいかなって思います。
何はともあれ、まだ使ったことがない方がいらっしゃいましたら、ぜひぜひ
使ってみてください!

あとはWEBで検索して見ている感じでは、Subversionとの連携なんかも実現は
できるみたいなので、そういった部分も社内の開発サーバと連携とりながら
やっていけたらなって思ってます。そういう奮闘の記録も残していけるように
していきたいなと思います。

さてさて、ネタとしては他のブログさんみたいにWinter’12の話題なんかも
書いていくといいんでしょうけど、それはまた次の機会に・・・。(Chatterの
アップデートとか凄いですよね!)では、今回はこの辺で。

Tags:

5月 29

こんばんわ!ヨッシーです。

なんと~・・・ 続きを読む »