Salesforce.com Certified Administrator Winter'13 Release Exam (リリース試験)

Spring'13リリース試験受けてね、とメールが来ました(それも結構前だけど・・・)

つい先日、放置してたWinter'13のリリース試験受けました。


15問中11問以上正解で合格。制限時間30分。


Winter'13のリリースノートを見ながら(検索かけまくりながら)・・・

半分くらい記憶に無いなぁと不安ながら、制限時間いっぱい使って回答。
なんとか(?)合格しました・・・。点数でないのでよくわかりませんが。


Developerもあるので、Winterをあと1本、
Springも2本受けないといけない。


これはなかなか体力を消耗するな・・・

Herokuのrake db:migrateで already exists

マイグレーションファイルを追加したので、Herokuにmigrateする必要が出ました。

開発中なので、たまには一回全消しして改めてmigrateしてみようと思いました。

heroku run rake db:drop
heroku run rake db:migrate


これでいけるつもりでしたが、

PG::Error: ERROR:  relation "xxxxxxx(Table名)" already exists

となりました。


これで解決しました。

heroku run rake db:reset
heroku run rake db:migrate


dropとresetの違いが良くわかってないので確認。

drop: createの逆。
reset: dropして、schema.rbからcreateして復帰させる。


つまりあれか。createしないといけないのか。


RubyMineではしてないな。どっかで勝手にcreateが走ってるのかな・・・。



Rakeタスクの確認にはこちらを参考にさせてもらいました。

HerokuでRMagick

処理に応じて任意の2つの画像を合成したくて、RMagickを使ってみました。


ローカルではGemfileに

gem 'rmagick', '~> バージョン'

と書くだけでしたが、HerokuにPushすると、これだと動きません。


エラーとしては、以下のエラーがでました。

2013-03-01T17:18:54+00:00 app[web.1]: Completed 500 Internal Server Error in 1ms
2013-03-01T17:18:54+00:00 app[web.1]: 
2013-03-01T17:18:54+00:00 app[web.1]:   app/controllers/XXXXX.rb:47:in `xxxxxxxx'
2013-03-01T17:18:54+00:00 app[web.1]: 
2013-03-01T17:18:54+00:00 app[web.1]: NameError (uninitialized constant XXXXXController::Magick):


以下2カ所で記述の追加が必要でした。

gem 'rmagick', '~> バージョン', :require => 'RMagick'

※ requireのRMagickは、RMとキャピタライズを意識にしないと動かないようなので注意!

Controllerなど、RMagickを必要とするソースで、

require 'RMagick'


これでうまくいきましたー

Amazon S3にjquery_file_uploadでファイルをアップしたら動かなくなったよ

jQuery_file_uploadを利用して画像ファイルをS3にアップする仕組みを作ってみました。

一旦アプリケーション配下にアップロードする方式で実装。一通り要件通り動作することを確認。
Herokuを使って動かす想定。Herokuはアプリ内のpublicとかにファイルを保存できないことから、S3を利用するように書き換えを開始・・・。
このあたりの設定とかは色々なサイトで説明が書かれていますね。ここのサイトを参考にさせてもらいました。アップロードと、uploadTemplateでのサムネイル表示あたりまでは順調に書き換えできました。


downloadTemplateが全然うごかない・・・

Amazon S3にpaperclipでファイルをアップロードしたあとの戻りの値がローカルに保存した場合とは異なっているようです。また、サーバからjsonで返してくるレスポンスもとれていないようでした。


done:を自分で作成することにします。
※最終的なdoneのコードは記事の末尾にのせてます。

こんな感じにして、jqXHRからレスポンスをTextで取得。
JSON形式に変換して、renderTemplateしてあげる。

var res = data.jqXHR.responseText;
var jsonData = $.parseJSON(res);

template = fu._renderDownload(jsonData)
                     .appendTo($('#fileupload .files'));

これでdownloadTemplate問題が解決しました。

続いて、アップロードが終わったあとにuploadTemplateが消えない問題が発生。
どうも、レスポンスのdata.contextに、uploadTemplateが格納されているようです。
なので、こんな感じにしてみました。

$(data.context).remove();

jquery_file_uploadのソースの中にはこんな記述は無いため、もっと良い書き方がありそうですが・・・
$.Deferred()を利用して制御しているように見えましたが、うまく再利用できませんでした。


ということで、最終的にはこうなりました。(他の部分は割愛)

<script type="text/javascript" charset="utf-8">
    $(function () {
        // Initialize the jQuery File Upload widget:
        $('#fileupload').fileupload({
            done: function(e, data) {
                // Load existing files:
                var fu = $(this).data('blueimp-fileupload') ||
                                $(this).data('fileupload'),
                        template;
                var res = data.jqXHR.responseText;
                var jsonData = $.parseJSON(res);

                // Render DownloadTemplate
                template = fu._renderDownload(jsonData)
                        .appendTo($('#fileupload .files'));
                // Force reflow:
                fu._forceReflow(template);
                // downloadTemplate Fade-in
                template.addClass('in');

                // remove upload
                $(data.context).remove();
                // remove loading
                $('#loading').remove();
            }
        });
    });
</script>

解決するのに5時間くらいかかった・・・

アウトバウンドメッセージ通知

アウトバウンド再び。


アウトバウンドメッセージ通知


ここにあるそうです。

あなたの名前 | [設定] | [監視] | [アウトバウンドメッセージ通知]


この機能では、

・「24時間、送信を失敗し続けたアウトバウンドメッセージがあるよ」というリストことを、最大5人のSalesforceユーザに通知できる。(24時間に1回、リストが通知される)


・24時間エラーのメッセージを、最大7日間[失敗したアウトバウンドメッセージ] 関連リストに保持できる。


・[失敗したアウトバウンドメッセージ] 関連リストに保持されてる間は、削除と再試行が要求できる。


再試行すると、もっかい送信キューに入るのかな??
そしたらまた、24時間+7日間残るのかな??
ちょっとヘルプからはわかんないな。


ていうか、24時間経つまで連絡来ないのか・・・リアルタイムに見たいと思うと、監視は目視な感じかなぁ。


なお、

このオプションが表示されない場合は、組織がアウトバウンドメッセージを有効にしていません。アウトバウンドメッセージを有効にするには、salesforce.com に連絡してください。

だそうです。オープンオンラインヘルプより。

アウトバウンドメッセージ仕様:2回以上送られることがある・・・順序不定・・・キューイング後も更新可・・・24時間失敗すると消滅する


なにこの仕様。こわい。

• エンドポイントが利用できない場合、メッセージは正常に送信されるまで、または 24 時間が経過するまでキューに留まります。24 時間を過ぎると、メッセージがキューから削除されます。


• メッセージが配信できない場合には、再試行の間隔が、最長 2 時間まで大幅に増えます。


• メッセージは、キュー内の順番とは無関係に再試行されます。そのため、メッセージが順番に配信されない場合があります。


• アウトバウンドメッセージを使用して監査履歴を作成することはできません。どのメッセージも 1 回は配信される必要がありますが、2 回以上配信される場合もあります。また、24 時間以内に配信できない場合には、まったく配信されないこともあります。さらに、上述のとおり、通知がキューされた後でも送信される前であれば、ソースオブジェクトの変更が可能です。エンドポイントは、途中の変更内容ではなく、最新のデータのみを受信します。


• メッセージが複数回送信される場合があるため、リスナークライアントでは、処理を実行する前に、通知内で配信された通知 ID を確認する必要があります。


参照:SOAP API開発者ドキュメント P.1351(Summer '13)