ラベル visualfore の投稿を表示しています。 すべての投稿を表示
ラベル visualfore の投稿を表示しています。 すべての投稿を表示

2012年6月9日土曜日

Salesforce季節の変わり目にありがちなこと:APIが違う

さてもうすぐSummer '12です。

新規に取得したDev環境はSummer '12になってますね。その上で一部リリースされた新機能を試したりチャットのポップアップがうぜぇwなどと言いつつ作業し、できあがったパッケージを本番環境に移そうとしたのですが…「API違うから駄目っすw」と言われました。

パッケージもForce.com IDEも駄目。同じことをSpring '12の時期にもやっていたような気がする…でも、Dev環境取得する時点でAPI選べないのでどうにもなりません。

で、エラーを細かくチェックしていくと、

  • カスタムオブジェクトやレイアウトに関しては移植可能
  • エラーが出るのはVisualforce, Apex, Triggerなどのメタファイル

という状態でした。

ということでwork around。

  1. 稼働環境用サンドボックスへカスタムオブジェクトやレイアウトをすべて移植
  2. 同サンドボックスへ手動でVisualforce, Apex, Triggerをコピペ
  3. サンドボックスから本番環境へDeployment
まぁ当たり前の手順ですけども、ハマった方のご参考になれば幸いです。

なお、今回ソース数本だったので手動で対応できましたが、本数が多いと依存関係もあって大変です。とりあえずは以下の順番でコピペしてみます。
  1. Trigger
  2. 通常のApex
  3. Visualforce
  4. テストコード
ひっかかったら適宜入れ替えます。また、どうしても依存関係が解消できない場合には、先にクラス名定義だけコピーしておいて、あとから実装部分をコピーするという方法もあります。最後の手段として、ソースの数だけブラウザにタブを開いておいて、依存関係のないところから片っ端からQuick Saveして少しずつ埋めていく、なんてのもあります。

申し遅れましたが、この手の作業はForce.com IDEよりもブラウザ経由の方がレスポンスが良くて作業しやすいような気がします。

2011年11月18日金曜日

Visualforceが憎いいいい



■簡単なこと■


てな感じの罫線入った表を表示したいとします(今回はグラデーション入れませんが)。まぁ日本のWeb屋さんにはごく日常的な作業で、処理系によって違いはあるけど

  • ループを回しながらコントロール・ブレークで行を出力していく
  • 先にコントロール・ブレーク済みの行データを配列にいれておいて出力

のどっちかで対応しますわな。

Visualforceだとループ内側では動的な評価ができないので後者で作ります。作りました。


■Visualforce困ったちゃん■

で、分類と詳細の行はレイアウトが違うので、分類の行だったら分類用のタグ、詳細行には詳細用のタグ…を出力させます。

そのために多くのフレームワークには「この内側のタグsを出力するか否か」をスイッチする機能が用意されてます。史上最高のWebフレームワークたるWebObjectsにはWOConditionalがあって(以下長いので省略

しかし。

Force.comってかVisualforceにはありません。ので、<apex:include>とか<apex:component>などを用いてコンポーネントとして作った要素を埋め込みrenderedでon/offします。

これでHTMLを生成すると…見事に表が崩れます。ソースを読んでみると…componentの前後に勝手に<span></span>が挿入されており、結果として以下のようなソースが生成されてしまいます。
<Table>
  <TR><SPAN><TH>品目</TH><TH>金額</TH></SPAN></TR>
  <TR><SPAN><TD>Mac</TD><TD>128,000</TD></SPAN></TR>
</Table>
そりゃ崩れるわなorz。


■しかし天才はいる■

で、困った時のGoogle先生ってことで apex:component span で検索してみたら、一発でworkaroundが見つかりました。「apex:component rendered in SPAN」、いやー、その手は思いつかなかった。まさに天才です。

さっそく実装してみたら、

<Table>
  <TR>
    <SPAN></SPAN>
    <TH>品目</TH><TH>金額</TH>
    <SPAN></SPAN>
  </TR>
  <TR>
    <SPAN></SPAN>
    <TD>Mac</TD><TD>128,000</TD>
    <SPAN></SPAN>
  </TR>
</Table>
となり、ブラウザ上では意図した通りの表示が出ました。

喜び勇んでrenderAs="PDF"を実行したら…。



…はい、終了。お疲れ様でした。まぁ、そらそうよね、<TR>の内側だしねorz

さて、TABLEを全部DIVで書き直すかな。CSSも全部再定義だ…。ああもう朝だ…。

私の夜はまだ明けそうにないがorz