いがぴょんの日記@はてな

いがぴょん画像(小) 2003/06

いがぴょんの日記@はてな

[いがぴょんの日記,diary,igapyon,v2,hatena,はてな]
<< 2016/07 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

このページは いがぴょんの日記ウェブページv2 の出張所です。

ポータル 資料 全ての日記 RSS
 

2038-01-19 2038年問題

2016-06-30 [Force.com] Force.com Migration Tool Simple Sample

[] Force.com Migration Tool Simple Sample

Salesforce の Force.com Migration Tool を使うときの、とてのシンプルなサンプルです。defPackage というディレクトリに 必要な package.xml が配置されていることを前提とします。

<project name="Force.com Migration Tool Simple Sample by Igapyon" basedir="." xmlns:sf="antlib:com.salesforce">
    <!-- build.properties に必要な設定が実施済みであることを前提とします。 -->
    <property file="build.properties"/>
    <property environment="env"/>

    <!-- 参考にした Migration Tool のシンプルサンプルに元から付属する記述 -->
    <condition property="sf.username" value=""> <not> <isset property="sf.username"/> </not> </condition>
    <condition property="sf.password" value=""> <not> <isset property="sf.password"/> </not> </condition>
    <condition property="sf.sessionId" value=""> <not> <isset property="sf.sessionId"/> </not> </condition>

    <taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
        <classpath>
            <!-- このディレクトリ配下の lib フォルダに jar ファイルが配置済みであることを前提とします。 -->
            <pathelement location="./lib/ant-salesforce.jar" />
        </classpath>
    </taskdef>

    <!-- 自分の現在作業分をサーバーから取得します。 -->
    <!-- このターゲットでは、対象ディレクトリを一旦削除する記述が含まれます。 -->
    <!-- このAnt build.xml ファイルは、開発対象ファイルが(内容がほぼ無くても良いから)SFDC上に存在していることを開始前提としています。 -->
    <target name="get-myTask">
      <echo>自分の現在作業分をサーバーから取得します。</echo>
      <mkdir dir="myTask"/>
      <echo>1.取得に先立ち、取得先ディレクトリを一旦掃除します。</echo>
      <delete verbose="true">
        <fileset dir="myTask" includes="**/*.cls,**/*.component,**/*.page,**/*.xml" />
      </delete>
      <echo>2.実際の取得を実施します。</echo>
      <sf:retrieve username="${sf.username}" password="${sf.password}" 
            sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" 
            retrieveTarget="myTask" unpackaged="defPackage/package-myTask.xml"/>
      <echo>3.自分の現在作業分について、サーバからの取得が完了しました。</echo>
    </target>

    <!-- 自分の現在作業分をサーバーへ配備。 -->
    <target name="put-myTask">
      <echo>自分の現在作業分をサーバーにデプロイします。</echo>

      <echo>1.デプロイに先立ち、デプロイ予定物をサーバーからバックアップ取得します。</echo>
      <mkdir dir="myTask.bak"/>
      <sf:retrieve username="${sf.username}" password="${sf.password}" 
            sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" 
            retrieveTarget="myTask.bak" unpackaged="defPackage/package-myTask.xml"/>

      <!-- 少しだけ待機。 -->
      <sleep seconds="1" />

      <echo>2.自分の現在作業分のサーバーへのデプロイを実施します。</echo>
      <sf:deploy username="${sf.username}" password="${sf.password}" 
            sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" 
            deployRoot="myTask" rollbackOnError="true" testLevel="RunSpecifiedTests">
      	<!-- 必要に応じて実行テストクラスを書き換え。 -->
        <runTest>MyControlFile1</runTest>
      </sf:deploy>
      <echo>3.自分の現在作業分のサーバーへのデプロイが完了しました。</echo>
    </target>

    <!-- 自分の担当範囲のソースコード一式をサーバーから取得。 -->
    <target name="get-myScope">
      <echo>自分の担当範囲分のすべてをサーバーから取得します。</echo>
      <mkdir dir="myScope"/>
      <echo>1.自分の担当範囲分のすべてをサーバーから取得開始します。</echo>
      <sf:retrieve username="${sf.username}" password="${sf.password}" 
            sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" 
            retrieveTarget="myScope" unpackaged="defPackage/package-myScope.xml"/>
      <echo>2.自分の担当範囲分のすべてをサーバーから取得完了しました。</echo>
      <echo>3.自分の管理下の SCM と取得した内容との差分を把握して、場合によりシンクロおよびコミットしてください。</echo>
    </target>

    <!-- プロジェクトに関わるすべてのファイルをサーバーから取得。 -->
    <target name="get-projectAll">
      <echo>プロジェクトに関わるすべてのファイルをサーバーから取得します。</echo>
      <mkdir dir="projectAll"/>
      <sf:retrieve username="${sf.username}" password="${sf.password}" 
            sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" 
            retrieveTarget="projectAll" unpackaged="defPackage/package-projectAll.xml"/>
    </target>
</project>

2016-06-26 自宅掃除機の購入を検討中

自宅掃除機の購入を検討中

2016-06-20 [Force.com] Data Loader のソースコード

[] Data Loader のソースコード

Salesforce Force.com の DataLoader は Java で書かれていますが、これには OSS 版があり、ソースコードを参照することができます。

このソースコードは伊賀的には必見。熟読します。

2016-05-31 [Force.com] Salesforceにおける排他処理

[] Salesforceにおける排他処理

排他のことを調べた範囲では、以下の記事が優秀だと思いました。

標準画面は、デフォルトで楽観排他が提供されます。それ以外は自前での実装です。

この中から気になるところをピックアップ

  • Apexコードの呼び出しから終了までのすべての処理は1つのトランザクション
  • 実行時例外が投げられるとトランザクションはロールバック
  • コード中で明示的に、ある時点までのロールバック処理を実行できるが、ガバナ制限により、Savepointは1トランザクションにつき5つまで
  • トランザクションの分離レベル(Isolation level)は、JavaEE仕様の"Read Committed"に似た動作
  • Webアプリケーションでよく用いられるのは、「楽観的(Optimistic)ロック」であり、多くの業務にフィットする。
  • Force.comでは、楽観ロックに SystemModstamp項目を利用できる。
    • この項目はレコードに対して何らかの更新操作が行われるとシステムにより値が更新されるので、データ取得時とコミット直前でこの値の変化を見れば良い。
 

いがぴょんについて

いがぴょんのアンテナ

1. 山本隆の開発日誌 (Delphi/C++Builder情報源)
2. 栗原潔のテクノロジー時評Ver2
3. ニュース&アナウンス
4. Planet Debian JP
5. torutkの日記
6. Allegro Barbaro : ITmedia オルタナティブ・ブログ
7. QA@IT: Java
8. Inno Setup Downloads
9. Nilquebe Blog
10. お花畑で
11. セキュリティホール memo
12. Eclipse Packages
13. LLVM@マイナビニュース
14. NHK「かぶん」ブログ:NHK
15. yasuoka の日記
16. いがぴょんの日記@はてな
17. かふぇ・べいぶ別館
18. 武田邦彦 (中部大学)
19. YAMDAS現更新履歴 (yomoyomoさん)
20. Publickey 〓 Enterprise IT × Cloud Computing × Web Technology / Blog

いがぴょんについて