SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Visualforce + jQuery
Force.com上でjQueryを有効活用
Riezel Ramos, Salesforce.com, Associate Sales Support Engineer
Kaz Kawamura, Salesforce.com, Technical Solution Architect
Safe harbor
 Safe harbor statement under the Private Securities Litigation Reform Act of 1995:

 This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
 materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results
 expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
 deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
 financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
 statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.

 The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
 functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
 operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of
 intellectual property and other litigation, risks associated with possible mergers and acquisitions, the immature market in which we
 operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new
 releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization
 and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com,
 inc. is included in our annual report on Form 10-Q for the most recent fiscal quarter ended July 31, 2012. This documents and others
 containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site.

 Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
 available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based
 upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-
 looking statements.
今日の内容

・Javascript + jQuery
・Javascript + jQuery + Visualforce
・Javascript + jQuery + Visualforce + Imagination
自己紹介
ライゼール ラモス (Riezel Ramos)	
   河村 嘉之(Kaz Kawamura)	
・出身: フィリピン                   ・会社: Salesforce.com
・会社: Salesforce.com          ・仕事: Technical Solution Architect
・仕事: Sales Support       
Engineer                     	
・その他名前: ライズ、ライコ、雷子                                    この本の著者
Javascript + jQuery
Javascriptのないインターネット	
                       ・Facebook : メッセージとチャットが動かない	
・Youtube: ビデオが動かない	




                       ・Twitter : Tweetできない	



・地図: 検索にリダイレクトされる
Javascriptがあるから、ウェブがインターアクティブになった
Javascriptの役割:HTMLドキュメントを操作するため	
      ウェブページ	
                         <body>
                                     <div>
                                               <input  type=“text”  id=“in1”/>
      HTML: 構造	
                     </div>
                         </body>
                         
                         <script  type=“text/javascript”>
                                   var  foo  =  document.getElementById(“in1”);
   Javascript: アクション	
           foo.addEventListener(“click”,  alert(“アロハ!”),  false);
                         </script>
                         
                         
                         <style>
                                   body{
      CSS: スタイル	
                              background:  pink;
                                   }
                         </style>
問題:JavascriptだけでDOMの操作が難しい!	




                      よく使うJavascriptの機
                      能をいくつまとめて、提
                      供しています。
jQueryでJavascriptをシンプルにする	

Javascript	
                        jQuery	


var x =                             var x = $(‘#in1');
document.getElementById(‘in1’);	

                                    サンプル:http://jquery.com/
jQueryの良い点	


・32KB (minified)   ・jQuery UI
・CSS3のサポート         ・jQuery Mobile
・クロスブラウザーサポート	
    ・jQuery Plugins
Javascript + jQuery +
force.com
まずは、jQueryライブラリをVFページから読みましょう
 ・静的リソースとして、アップロード
   <script src=“{!$Resource.jQueryFile}”></script>
 ・CDNを使う
   <script src=“https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”></script>
Apex:includeScript OR script?	
<apex:page showHeader="false">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>

  <apex:includeScript value="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"/>
</apex:page>
気を付けましょう!
$j = jQuery.noConflict();
 →他のライブラリとconflictしないため(標準Visualforceで使っているライブラリを含む)
Visualforce v.s. jQuery	




         Visualforce	
      jQuery	

ページ	
                                  部品
Visualforce > jQuery	
          ボタンを押した時の
           アクションなどを
                            基本はVFで
          JavaScriptで記述	
   書いたページ
Visualforceの部品のIDを取るには?	
                                                          階層がある場合は
                                                            階層も指定	
                                        !$Component.コン
<apex:outputPanel   id="thePanel"></apex:outputPanel>	
                                       ポーネントのIDを指定	



      document.getElementById("{!
      $Component.thePanel}").innerHTML = result;	
                                  j_id0:thePanel

      $("#{!
      $Component.thePanel}").text(res
      ult);	
         注意!
                                IDに:が入ると
                      これは動かない	
                                    jQueryは別の      実はjQueryとVFの
                                     意味に捉える	
      相性はあまり良くな
                                                    い…(以下略)
Visualforce+jQuery 使いどころ	

                                           生成されるコードでは
                                            class属性になる	
 <apex:form >
  Weekday <apex:inputCheckBox value="{!weekday}" styleClass="days"/>
  Satday <apex:inputCheckBox value="{!satday}" styleClass="days"/>
  Sunday <apex:inputCheckBox value="{!sunday}" styleClass="days"/>
  <input type="button" id="check" value="check all"/>
</apex:form>	
                               $('#check').click(function() {
                                 $('.days').attr('checked', 'checked');
                               });	
                                     classを指定して
                                        一括処理	
                       UIに+αを加える
Visualforce < jQuery	



                         サーバサイドの
                         機能を呼び出し	




           ほぼHTMLで
           そのまま記述
ページからforce.comにアクセス	

 • actionSupport
 • actionFunction
 • JavaScript Remoting
actionSupport	
                                      コントローラ
                                      のメソッドを
                                                        イベントを
                                       呼び出す	
            指定	
 <apex:inputText value="{!recordInputText}">
   <apex:actionSupport action="{!refresh}" event="onchange”
                       reRender="parentPanel">
     <apex:param assignTo="{!var1}" value="{!recordId}"
                 name="recordParam"/>
   </apex:actionSupport>
 </apex:inputText>

 イベントの発生に合わせて、コントローラのメソッドを呼び出す
 • JavaScriptを書かずにイベント処理を実現
 • 結果はreRenderで
actionFunction	
                             コントローラの
            名前を
                             メソッドを指定	
            付ける	

<apex:actionFunction action="{!methodOne}"
      name="methodOneInJavascript" rerender="showstate">
  <apex:param name="firstParam" assignTo="{!state}" value="" 指定した名前で
                                                              />
</apex:actionFunction>                                       JavaScriptから
                                                                呼び出し	
                                             <script>
                                               function clickOne(){
                                                 methodOneInJavaScript();
                                               }
                                             </script>

          コントローラのメソッドに名前を付けてJavaScriptから利用できるようにする
          • 結果はreRenderで
JavaScript Remoting	
     コントローラ名.メソッド名で
          呼び出し	
        引数を
  <script>              渡せる	
       コールバック関数	
  $(function() {
    HelloRemote.sayHello('World', function(result, event) {
      $('#out').text(result);
    });
  });
  </script>           global class HelloRemote {
                          @RemoteAction
                          global static String sayHello(String name) {
           リモートアクセス可能な
           メソッドをアノテーション     return 'Hello ' + name + '!';
               でマーク	
     }
                      }	
             よりJavaScriptっぽくコントローラのメソッドを呼べる
             • より柔軟
             • ただしコードは増える
IDの工夫	


<apex:page standardController="Account” recordSetVar="accounts">
<apex:repeat value="{!accounts}" var="account">
    <div id=”acct_{!account.id}">{!account.name}</div>
</apex:repeat>
</apex:page> SFIDをうまく活用
             すると一意性を確   <div id=”acct_001A00000090CmoIAE">A商事</div>
             保するのが容易	
  <div id=”acct_001A000000RQgHkIAL”>B商事</div>
                        <div id=”acct_001A000000EaawzIAB">A商事</div>
                               IDは一意で
                               なければいけ
                                  ない
Javascript + jQuery +
Visualforce + Imagination
世界征服をしてやろう!!
Mini Page Hover               デモ




 ・レコード名にhoverをしたら、詳細を表示する
Mini Page Hover: コード
 var url = $(this).attr(‘href’) + ‘ div.bDetailBlock’;   //hoverしているレコードのURLを取得


 $(‘#overlay’).load(url, function () {                   //#overlayのdivにURLをロードする
       setTimeout(function () {                          //overlayを表示する
         $(‘#overlay’).show(); },
       200);
 });
Mini Page Hover: コード
 アドバイス:
 HTMLで作られているホームページコンポーネントのコードフォーマットが崩れるため、jsbeautifierみたいなツールを使うのがお
 勧めです (http://jsbeautifier.org/)
デモ	
  iPad アンケート作成用ツール             デモ(iPad)	
セールスフォース側	




                     iPad側
iPad アンケート作成用ツール(セールスフォース側)
・jQuery + jQuery UI

$( ".answerUL1" ).sortable({
   start: function (e, ui) { },
   update: function (e, ui) {               /*更新時にこのメッソドを行う */
        $( “.answerUL .choiceLabel1”).each( function(){ /* 各選択肢のソート番号を更新する */
              $(this).find(".choiceSortNumber").val($(this).index()+1);
        });
         /* apexコントローラーを呼び出し、ソート番号を更新する */
         sortChoiceList( /*パラメータ省略 */);
} });
<apex:actionFunction action="{!sortChoiceList}" reRender="questionPanel" name="sortChoiceList"
oncomplete="initSortable();" >
          /* パラメータ省略 */
</apex:actionFunction>
iPad アンケート作成用ツール(セールスフォース側)	
アドバイス:
reRenderの使い方
ページの一部のみ、更新したい場合、
reRenderでapexタグのidを指定すれば、
指定したDOMしか更新されません。


reRenderを使う時に、できるだけ小さいDOMを
設定しないと、重くなる可能性があります。


<apex:actionFunction action="{!sortChoiceList}"
          reRender="questionPanel"
          name="sortChoiceList"
          oncomplete="initSortable();" />
                                                  選択肢の順番を更新したいため、選択肢
                                                  を持っているパネルを更新します。全ペー
                                                  ジを更新したら、重くなりますので、小さい
                                                  範囲で更新したほうが良いです。
iPad アンケート作成用ツール(iPad側)	
・jQuery + jQuery Mobile
・複数のプラットフォームで見えるページを
モバイル向けのUIで簡単に作成ができるので、
jQuery Mobileで作りました。



             apex:repeatでページ、
             質問、選択肢を
             ループして表示している
Visualforce + jQuery

Weitere ähnliche Inhalte

Was ist angesagt?

Alfresco勉強会#18 alfrescoのバックアップとリストア
Alfresco勉強会#18 alfrescoのバックアップとリストアAlfresco勉強会#18 alfrescoのバックアップとリストア
Alfresco勉強会#18 alfrescoのバックアップとリストアTasuku Otani
 
クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようNTT Communications Technology Development
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streamingmganeko
 
FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX) FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX) 守淑 田村
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCYuichi Hasegawa
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.jsThe MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.jsMongoDB
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...FIWARE
 
Test Automation for Manual Testers
Test Automation for Manual TestersTest Automation for Manual Testers
Test Automation for Manual TestersTricentis
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Toshiki Iga
 
FIWARE IoTデバイスを保護する方法
FIWARE IoTデバイスを保護する方法FIWARE IoTデバイスを保護する方法
FIWARE IoTデバイスを保護する方法fisuda
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Cloudera Japan
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理fisuda
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)fisuda
 

Was ist angesagt? (20)

Alfresco勉強会#18 alfrescoのバックアップとリストア
Alfresco勉強会#18 alfrescoのバックアップとリストアAlfresco勉強会#18 alfrescoのバックアップとリストア
Alfresco勉強会#18 alfrescoのバックアップとリストア
 
クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えよう
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
ELK introduction
ELK introductionELK introduction
ELK introduction
 
FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX) FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX)
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.jsThe MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...
FIWARE Global Summit - The Scorpio NGSI-LD Broker: Features and Supported Arc...
 
Test Automation for Manual Testers
Test Automation for Manual TestersTest Automation for Manual Testers
Test Automation for Manual Testers
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
FIWARE IoTデバイスを保護する方法
FIWARE IoTデバイスを保護する方法FIWARE IoTデバイスを保護する方法
FIWARE IoTデバイスを保護する方法
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
 

Ähnlich wie Visualforce + jQuery

勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発Kazuki Nakajima
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤Yuichi Sakuraba
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイドYuichi Sakuraba
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210cmtomoda
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdkKazuki Nakajima
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Lighting componentワークブック(経費精算アプリ)
Lighting componentワークブック(経費精算アプリ)Lighting componentワークブック(経費精算アプリ)
Lighting componentワークブック(経費精算アプリ)Akihiro Iwaya
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた Shumpei Shiraishi
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0何が変わった JavaFX 2.0
何が変わった JavaFX 2.0Yuichi Sakuraba
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Hiroshi Oyamada
 

Ähnlich wie Visualforce + jQuery (20)

勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
 
Knockout
KnockoutKnockout
Knockout
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Lighting componentワークブック(経費精算アプリ)
Lighting componentワークブック(経費精算アプリ)Lighting componentワークブック(経費精算アプリ)
Lighting componentワークブック(経費精算アプリ)
 
Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
html5j.orgがHTML5+JavaScriptで Metro Style アプリを作ってみた
 
Jquery1 1
Jquery1 1Jquery1 1
Jquery1 1
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
何が変わった JavaFX 2.0
何が変わった JavaFX 2.0何が変わった JavaFX 2.0
何が変わった JavaFX 2.0
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
 

Mehr von Salesforce Developers Japan

Salesforce DX の始め方とパートナー様成功事例
Salesforce DX の始め方とパートナー様成功事例Salesforce DX の始め方とパートナー様成功事例
Salesforce DX の始め方とパートナー様成功事例Salesforce Developers Japan
 
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみようデータ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみようSalesforce Developers Japan
 
Einstein Analyticsでのデータ取り込みと加工
Einstein Analyticsでのデータ取り込みと加工Einstein Analyticsでのデータ取り込みと加工
Einstein Analyticsでのデータ取り込みと加工Salesforce Developers Japan
 
GMOペパボのエンジニアが語るHeroku活用ノウハウ
GMOペパボのエンジニアが語るHeroku活用ノウハウGMOペパボのエンジニアが語るHeroku活用ノウハウ
GMOペパボのエンジニアが語るHeroku活用ノウハウSalesforce Developers Japan
 
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜Salesforce Developers Japan
 
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発Salesforce Developers Japan
 
Lightning時代のService Cloud概要とカスタマイズ
Lightning時代のService Cloud概要とカスタマイズLightning時代のService Cloud概要とカスタマイズ
Lightning時代のService Cloud概要とカスタマイズSalesforce Developers Japan
 
Spring '19リリース開発者向け新機能セミナー
Spring '19リリース開発者向け新機能セミナーSpring '19リリース開発者向け新機能セミナー
Spring '19リリース開発者向け新機能セミナーSalesforce Developers Japan
 
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -Salesforce Developers Japan
 
MuleSoft Anypoint Platformのコンセプトとサービス
MuleSoft Anypoint PlatformのコンセプトとサービスMuleSoft Anypoint Platformのコンセプトとサービス
MuleSoft Anypoint PlatformのコンセプトとサービスSalesforce Developers Japan
 
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜Salesforce Developers Japan
 
Lightning時代のレポート ダッシュボード & Flow 最前線
Lightning時代のレポート ダッシュボード & Flow 最前線Lightning時代のレポート ダッシュボード & Flow 最前線
Lightning時代のレポート ダッシュボード & Flow 最前線Salesforce Developers Japan
 
Summer18 開発者向け新機能Webセミナー
Summer18 開発者向け新機能WebセミナーSummer18 開発者向け新機能Webセミナー
Summer18 開発者向け新機能WebセミナーSalesforce Developers Japan
 

Mehr von Salesforce Developers Japan (20)

Salesforce DX の始め方とパートナー様成功事例
Salesforce DX の始め方とパートナー様成功事例Salesforce DX の始め方とパートナー様成功事例
Salesforce DX の始め方とパートナー様成功事例
 
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみようデータ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
データ連携の新しいカタチ - 変更データキャプチャ/プラットフォームイベントを MuleSoft Anypoint Platform と組み合わせて試してみよう
 
Einstein Analyticsでのデータ取り込みと加工
Einstein Analyticsでのデータ取り込みと加工Einstein Analyticsでのデータ取り込みと加工
Einstein Analyticsでのデータ取り込みと加工
 
GMOペパボのエンジニアが語るHeroku活用ノウハウ
GMOペパボのエンジニアが語るHeroku活用ノウハウGMOペパボのエンジニアが語るHeroku活用ノウハウ
GMOペパボのエンジニアが語るHeroku活用ノウハウ
 
Salesforce Big Object 最前線
Salesforce Big Object 最前線Salesforce Big Object 最前線
Salesforce Big Object 最前線
 
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜
Salesforce 開発者向け最新情報 Web セミナー 〜 TrailheaDX での新発表 & Summer '19 リリース新機能 〜
 
Einstein Next Best Action を試してみよう
Einstein Next Best Action を試してみようEinstein Next Best Action を試してみよう
Einstein Next Best Action を試してみよう
 
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発
Salesforce DXとLightning Web ComponentsでモダンSalesforceアプリ開発
 
Lightning時代のService Cloud概要とカスタマイズ
Lightning時代のService Cloud概要とカスタマイズLightning時代のService Cloud概要とカスタマイズ
Lightning時代のService Cloud概要とカスタマイズ
 
Spring '19リリース開発者向け新機能セミナー
Spring '19リリース開発者向け新機能セミナーSpring '19リリース開発者向け新機能セミナー
Spring '19リリース開発者向け新機能セミナー
 
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -
業務課題の解決に、データ分析・予測結果の活用を - Einstein Discovery / Einstein 予測ビルダーのご紹介 -
 
Einstein analyticsdashboardwebinar
Einstein analyticsdashboardwebinarEinstein analyticsdashboardwebinar
Einstein analyticsdashboardwebinar
 
MuleSoft Anypoint Platformのコンセプトとサービス
MuleSoft Anypoint PlatformのコンセプトとサービスMuleSoft Anypoint Platformのコンセプトとサービス
MuleSoft Anypoint Platformのコンセプトとサービス
 
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜
IoTで成功を収めるための製品と戦略 〜 Salesforce IoT 〜
 
Heroku seminar winter19
Heroku seminar winter19Heroku seminar winter19
Heroku seminar winter19
 
Dreamforce18 update platform
Dreamforce18 update platformDreamforce18 update platform
Dreamforce18 update platform
 
Winter '19 開発者向け新機能
Winter '19 開発者向け新機能Winter '19 開発者向け新機能
Winter '19 開発者向け新機能
 
Lightning時代のレポート ダッシュボード & Flow 最前線
Lightning時代のレポート ダッシュボード & Flow 最前線Lightning時代のレポート ダッシュボード & Flow 最前線
Lightning時代のレポート ダッシュボード & Flow 最前線
 
Summer18 開発者向け新機能Webセミナー
Summer18 開発者向け新機能WebセミナーSummer18 開発者向け新機能Webセミナー
Summer18 開発者向け新機能Webセミナー
 
使ってみよう、Salesforce Big Object!
使ってみよう、Salesforce Big Object!使ってみよう、Salesforce Big Object!
使ってみよう、Salesforce Big Object!
 

Visualforce + jQuery

  • 1. Visualforce + jQuery Force.com上でjQueryを有効活用 Riezel Ramos, Salesforce.com, Associate Sales Support Engineer Kaz Kawamura, Salesforce.com, Technical Solution Architect
  • 2. Safe harbor Safe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of intellectual property and other litigation, risks associated with possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-Q for the most recent fiscal quarter ended July 31, 2012. This documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward- looking statements.
  • 3. 今日の内容 ・Javascript + jQuery ・Javascript + jQuery + Visualforce ・Javascript + jQuery + Visualforce + Imagination
  • 4. 自己紹介 ライゼール ラモス (Riezel Ramos) 河村 嘉之(Kaz Kawamura) ・出身: フィリピン ・会社: Salesforce.com ・会社: Salesforce.com ・仕事: Technical Solution Architect ・仕事: Sales Support        Engineer ・その他名前: ライズ、ライコ、雷子 この本の著者
  • 6. Javascriptのないインターネット ・Facebook : メッセージとチャットが動かない ・Youtube: ビデオが動かない ・Twitter : Tweetできない ・地図: 検索にリダイレクトされる
  • 8. Javascriptの役割:HTMLドキュメントを操作するため ウェブページ <body>            <div>                      <input  type=“text”  id=“in1”/> HTML: 構造            </div> </body> <script  type=“text/javascript”>          var  foo  =  document.getElementById(“in1”); Javascript: アクション        foo.addEventListener(“click”,  alert(“アロハ!”),  false); </script> <style>          body{ CSS: スタイル                      background:  pink;          } </style>
  • 9. 問題:JavascriptだけでDOMの操作が難しい! よく使うJavascriptの機 能をいくつまとめて、提 供しています。
  • 10. jQueryでJavascriptをシンプルにする Javascript jQuery var x = var x = $(‘#in1'); document.getElementById(‘in1’); サンプル:http://jquery.com/
  • 11. jQueryの良い点 ・32KB (minified) ・jQuery UI ・CSS3のサポート ・jQuery Mobile ・クロスブラウザーサポート ・jQuery Plugins
  • 12. Javascript + jQuery + force.com
  • 13. まずは、jQueryライブラリをVFページから読みましょう ・静的リソースとして、アップロード <script src=“{!$Resource.jQueryFile}”></script> ・CDNを使う <script src=“https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”></script>
  • 14. Apex:includeScript OR script? <apex:page showHeader="false"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <apex:includeScript value="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js"/> </apex:page>
  • 16. Visualforce v.s. jQuery Visualforce jQuery ページ 部品
  • 17. Visualforce > jQuery ボタンを押した時の アクションなどを 基本はVFで JavaScriptで記述 書いたページ
  • 18. Visualforceの部品のIDを取るには? 階層がある場合は 階層も指定 !$Component.コン <apex:outputPanel id="thePanel"></apex:outputPanel> ポーネントのIDを指定 document.getElementById("{! $Component.thePanel}").innerHTML = result; j_id0:thePanel $("#{! $Component.thePanel}").text(res ult); 注意! IDに:が入ると これは動かない jQueryは別の 実はjQueryとVFの 意味に捉える 相性はあまり良くな い…(以下略)
  • 19. Visualforce+jQuery 使いどころ 生成されるコードでは class属性になる <apex:form > Weekday <apex:inputCheckBox value="{!weekday}" styleClass="days"/> Satday <apex:inputCheckBox value="{!satday}" styleClass="days"/> Sunday <apex:inputCheckBox value="{!sunday}" styleClass="days"/> <input type="button" id="check" value="check all"/> </apex:form> $('#check').click(function() { $('.days').attr('checked', 'checked'); }); classを指定して 一括処理 UIに+αを加える
  • 20. Visualforce < jQuery サーバサイドの 機能を呼び出し ほぼHTMLで そのまま記述
  • 22. actionSupport コントローラ のメソッドを イベントを 呼び出す 指定 <apex:inputText value="{!recordInputText}"> <apex:actionSupport action="{!refresh}" event="onchange” reRender="parentPanel"> <apex:param assignTo="{!var1}" value="{!recordId}" name="recordParam"/> </apex:actionSupport> </apex:inputText> イベントの発生に合わせて、コントローラのメソッドを呼び出す • JavaScriptを書かずにイベント処理を実現 • 結果はreRenderで
  • 23. actionFunction コントローラの 名前を メソッドを指定 付ける <apex:actionFunction action="{!methodOne}" name="methodOneInJavascript" rerender="showstate"> <apex:param name="firstParam" assignTo="{!state}" value="" 指定した名前で /> </apex:actionFunction> JavaScriptから 呼び出し <script> function clickOne(){ methodOneInJavaScript(); } </script> コントローラのメソッドに名前を付けてJavaScriptから利用できるようにする • 結果はreRenderで
  • 24. JavaScript Remoting コントローラ名.メソッド名で 呼び出し 引数を <script> 渡せる コールバック関数 $(function() { HelloRemote.sayHello('World', function(result, event) { $('#out').text(result); }); }); </script> global class HelloRemote { @RemoteAction global static String sayHello(String name) { リモートアクセス可能な メソッドをアノテーション return 'Hello ' + name + '!'; でマーク } } よりJavaScriptっぽくコントローラのメソッドを呼べる • より柔軟 • ただしコードは増える
  • 25. IDの工夫 <apex:page standardController="Account” recordSetVar="accounts"> <apex:repeat value="{!accounts}" var="account"> <div id=”acct_{!account.id}">{!account.name}</div> </apex:repeat> </apex:page> SFIDをうまく活用 すると一意性を確 <div id=”acct_001A00000090CmoIAE">A商事</div> 保するのが容易 <div id=”acct_001A000000RQgHkIAL”>B商事</div> <div id=”acct_001A000000EaawzIAB">A商事</div> IDは一意で なければいけ ない
  • 26. Javascript + jQuery + Visualforce + Imagination 世界征服をしてやろう!!
  • 27. Mini Page Hover デモ ・レコード名にhoverをしたら、詳細を表示する
  • 28. Mini Page Hover: コード var url = $(this).attr(‘href’) + ‘ div.bDetailBlock’; //hoverしているレコードのURLを取得 $(‘#overlay’).load(url, function () { //#overlayのdivにURLをロードする setTimeout(function () { //overlayを表示する   $(‘#overlay’).show(); }, 200); });
  • 29. Mini Page Hover: コード アドバイス: HTMLで作られているホームページコンポーネントのコードフォーマットが崩れるため、jsbeautifierみたいなツールを使うのがお 勧めです (http://jsbeautifier.org/)
  • 30. デモ iPad アンケート作成用ツール デモ(iPad) セールスフォース側 iPad側
  • 31. iPad アンケート作成用ツール(セールスフォース側) ・jQuery + jQuery UI $( ".answerUL1" ).sortable({ start: function (e, ui) { }, update: function (e, ui) { /*更新時にこのメッソドを行う */ $( “.answerUL .choiceLabel1”).each( function(){ /* 各選択肢のソート番号を更新する */ $(this).find(".choiceSortNumber").val($(this).index()+1); }); /* apexコントローラーを呼び出し、ソート番号を更新する */ sortChoiceList( /*パラメータ省略 */); } }); <apex:actionFunction action="{!sortChoiceList}" reRender="questionPanel" name="sortChoiceList" oncomplete="initSortable();" > /* パラメータ省略 */ </apex:actionFunction>
  • 32. iPad アンケート作成用ツール(セールスフォース側) アドバイス: reRenderの使い方 ページの一部のみ、更新したい場合、 reRenderでapexタグのidを指定すれば、 指定したDOMしか更新されません。 reRenderを使う時に、できるだけ小さいDOMを 設定しないと、重くなる可能性があります。 <apex:actionFunction action="{!sortChoiceList}" reRender="questionPanel" name="sortChoiceList" oncomplete="initSortable();" /> 選択肢の順番を更新したいため、選択肢 を持っているパネルを更新します。全ペー ジを更新したら、重くなりますので、小さい 範囲で更新したほうが良いです。
  • 33. iPad アンケート作成用ツール(iPad側) ・jQuery + jQuery Mobile ・複数のプラットフォームで見えるページを モバイル向けのUIで簡単に作成ができるので、 jQuery Mobileで作りました。 apex:repeatでページ、 質問、選択肢を ループして表示している