SlideShare a Scribd company logo
1 of 42
Download to read offline
Visualforceで セキュアコーディング 初級編 
2014/11/05 中村
ねらい 
•Dreamforceセッション 「Secure Coding: Field-level Security, CRUD, and Sharing」 より、 今回は、画面開発に絞って、CRUDとFLSを 遵守する術を再度確認します。 
2
3 
#1 SF設定において データアクセスを、どう 権限管理するの~
データに対するセキュリティ設定 
4 
1.オブジェクトレベルのアクセス権限 
2.項目レベルのセキュリティ 
3.Force.comでの共有設定 
を適切に設定する。
データに対するセキュリティ設定 
CRUD 
5 
1.オブジェクトレベルのアクセス権限 
2.項目レベルのセキュリティ 
3.Force.comでの共有設定 
を適切に設定する。 
FLS 
Sharing
データに対するセキュリティ設定 
6 
CRUD 
•Read 
•Create 
•Edit 
•Delete 
1.オブジェクトレベルのアクセス権限 
プロファイルごとに設定・管理する。
データに対するセキュリティ設定 
2.項目レベルのセキュリティ 
7 
プロファイルごとに設定・管理する。 
•Required 
•Editable 
•Read-Only 
FLS
データに対するセキュリティ設定 
3.Force.comでの共有設定 
8 
今日は割愛します。ごめんなさい。 
Sharing
データに対するセキュリティ設定 
CRUD 
9 
1.オブジェクトレベルのアクセス権限 
2.項目レベルのセキュリティ 
3.Force.comでの共有設定 
を適切に設定する。 
FLS 
Sharing
10 
#2 ページ開発時に、何を 気をつければいいの~
まず、大前提として・・・ 
Apex: Apex Classes do not enforce CRUD Why? System Context Visualforce: Visualforce Pages do enforce CRUD Why?User Context 
11
まず、大前提として・・・ 
Apex: Apex は、CRUDもFLSも遵守しません。 システムコンテクストだから。 
Visualforce: Visualforce は、CRUDもFLSも遵守します。 ユーザコンテクストだから。 
12
考えるべきポイントは2つ 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
13
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
14 
更に、ここもポイントは2つ。 
①Visualforce層を介する場合 
②Visualforce層を介さない場合
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
15 
更に、ここもポイントは2つ。 
①Visualforce層を介するとは? 
差込項目が、Sobjectや項目を直接参照 しているケース。
Visualforce Page 
01 <apex:page standardController="Account"> 
02 <apex:pageBlock title="Contacts"> 
03 <apex:dataTable value="{!account.Contacts}" var="contact" cellPadding="4" border="1"> 
04 <apex:column> 
05 <apex:facet name="header">Name</apex:facet> 
06 {!contact.Name} 
07 </apex:column> 
08 <apex:column> 
09 <apex:facet name="header">Phone</apex:facet> 
10 {!contact.Phone} 
11 </apex:column> 
12 </apex:dataTable> 
13 </apex:pageBlock> 
14 </apex:page> 
16
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
17 
更に、ここもポイントは2つ。 
①Visualforce層を介する場合 
②Visualforce層を介さないとは? 
文字列、整数、Apex クラスなどのオブ ジェクトを介して SObject データを参照 している場合
Visualforce Page 
01 <apex:page controller="MyLanguageController" showheader="false" applyBodyTag="true" sidebar="false"> 
02 <apex:pageMessages /> 
03 
04 <apex:form > 
05 <apex:selectList value="{!selectedLanguage}" multiselect="False" size="1" style="width:115px;"> 
06 <apex:selectOptions value="{!languageOptions}"/> 
07 </apex:selectList> 
08 <apex:commandButton value="change!" action="{!save}" /> 
09 </apex:form> 
10 
11 </apex:page> 
18
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
19 
①Visualforce層を介する場合 ⇒CRUD、FLSが自動チェックされる。 
②Visualforce層を介さない場合 ⇒CRUD、FLSの自動チェックはない。 よって、自前でチェックする必要 がある!
考えるべきポイントは2つ 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
20
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
21 
ここも同様のポイントが2つ。 
①Visualforce層を介する場合 
②Visualforce層を介さない場合
考えるべきポイントは2×2 
2.データに対する変更(作成、更新、削除) 
22 
①Visualforce層を介する場合 ⇒CRUD、FLSが自動チェックされる。 
②Visualforce層を介さない場合 ⇒CRUD、FLSの自動チェックはない。 よって、自前でチェックする必要 がある!
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
23 
いずれのパターンにおいても、 Visualforce層を介するレンダリングが推 奨される。
考えるべきポイントは2×2 
1.ユーザに対して表示するデータ 
2.データに対する変更(作成、更新、削除) 
24 
では、Visualforce層を介さない場合、 どうチェックするのか?
25 
#3 どうやって チェックするの~
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
26
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
27
Visualforce Page 
01 <apex:page controller="RandomContactController"> 
02 <apex:outputText value="{!getRandomName}" /> 
03 </apex:page> 
28 
Apex Controller 
01 public with sharing class RandomContactController { 
02 public String getGetRandomName() { 
03 
04 Contact [] myList = [SELECT Name FROM Contact LIMIT 1000]; 
05 // Pick a list entry at random 
06 Integer index = Math.mod(Math.abs(Crypto.getRandomInteger()),myList.size()); 
07 Contact selected = myList.get(index); 
08 return selected.Name; 
09 } 
10 }
Visualforce Page 
01 <apex:page controller="RandomContactController"> 
02 <apex:outputText value="{!getRandomName}" /> 
03 </apex:page> 
29 
Apex Controller 01 public with sharing class RandomContactController { 02 public String getGetRandomName() { 03 04 // Check if the user has read access on the Contact.Name field 05 if (!Schema.sObjectType.Contact.fields.Name.isAccessible()) { 06 return ''; 07 } 08 09 Contact [] myList = [SELECT Name FROM Contact LIMIT 1000]; 10 // Pick a list entry at random 11 Integer index = Math.mod(Math.abs(Crypto.getRandomInteger()),myList.size()); 12 Contact selected = myList.get(index); 13 return selected.Name; 14 } 15 }
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
30
Visualforce Page 
01 <apex:page standardcontroller="Lead" extensions="LeadConverterExtension"> 
02 <apex:pageMessages /> 
03 <apex:pageBlock title="Lead"> 
04 <apex:outputField value="{!Lead.Name}" /><br /> 
05 <apex:outputField value="{!Lead.Company}" /><br /> 
06 <apex:outputField value="{!Lead.Phone}" /><br /> 
07 <apex:form> 
08 <apex:commandButton action="{!convertLead}" value="Convert To Contact" /> 
09 </apex:form> 
10 </apex:pageBlock> 
11 </apex:page> 
31
32 
Apex Controller 
01 public with sharing class LeadConverterExtension { 
02 private Lead l; 
03 public LeadConverterExtension(ApexPages.StandardController ctr) { 
04 l = [SELECT FirstName,LastName,Phone,Company FROM Lead WHERE Id=:ctr.getRecord().05 } 
06 
07 public PageReference convertLead() { 
08 Contact c = new Contact(FirstName = l.FirstName, LastName = l.LastName, Phone = l.Phone); 
09 insert c; 
10 return null; 
11 } 
12 }
33 
Apex Controller 01 public with sharing class LeadConverterExtension { 02 private Lead l; 03 public LeadConverterExtension(ApexPages.StandardController ctr) { 04 l = [SELECT FirstName,LastName,Phone FROM Lead WHERE Id=:ctr.getRecord().Id]; 05 } 06 07 public PageReference convertLead() { 08 String [] contactUpdateFields = new String [] {'FirstName', 'LastName', 'Phone'}; 09 10 Map<String,Schema.SObjectField> m = Schema.SObjectType.Contact.fields.getMap(); 11 for (String fieldToCheck : contactUpdateFields) { 12 if (!m.get(fieldToCheck).getDescribe().isCreateable()) { 13 ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, 14 return null; 15 } 16 } 17 18 Contact c = new Contact(FirstName = l.FirstName, LastName = l.LastName, Phone = l.Phone); 19 insert c; 20 return null; 21 } 22 }
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
34
35 
Apex Controller 01 public with sharing class LeadConverterExtension { 02 private Lead l; 03 public LeadConverterExtension(ApexPages.StandardController ctr) { 04 l = [SELECT FirstName,LastName,Phone FROM Lead WHERE Id=:ctr.getRecord().Id]; 05 } 06 07 public PageReference convertLead() { 08 String [] contactUpdateFields = new String [] {'FirstName', 'LastName', 'Phone'}; 09 10 Map<String,Schema.SObjectField> m = Schema.SObjectType.Contact.fields.getMap(); 11 for (String fieldToCheck : contactUpdateFields) { 12 if (!m.get(fieldToCheck).getDescribe().isCreateable()) { 13 ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, 14 return null; 15 } 16 } 17 18 Contact c = new Contact(FirstName = l.FirstName, LastName = l.LastName, Phone = l.Phone); 19 insert c; 20 return null; 21 } 22 } 
isCreateable() を isUpdateable() に してチェック!
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
36
Visualforce Page 01 <apex:page standardcontroller="Lead" extensions="LeadDeleteExtension"> 02 <apex:pageMessages /> 03 <apex:pageBlock title="Lead"> 04 <apex:outputField value="{!Lead.Name}" /><br /> 05 <apex:outputField value="{!Lead.Company}" /><br /> 06 <apex:outputField value="{!Lead.Phone}" /><br /> 07 <apex:form> 08 <apex:commandButton action="{!deleteLead}" value=“Delete" /> 09 </apex:form> 10 </apex:pageBlock> 11 </apex:page> 
37
38 
Apex Controller 01 public with sharing class LeadDeleteExtension { 02 private Lead l; 03 public LeadDeleteExtension(ApexPages.StandardController ctr) { 04 l = [SELECT Id FROM Lead WHERE Id=:ctr.getRecord().Id]; 05 } 06 07 public PageReference deleteLead() { 09 delete l; 10 return null; 11 } 12 }
39 
Apex Controller 01 public with sharing class LeadDeleteExtension { 02 private Lead l; 03 public LeadDeleteExtension(ApexPages.StandardController ctr) { 04 l = [SELECT Id FROM Lead WHERE Id=:ctr.getRecord().Id]; 05 } 06 07 public PageReference deleteLead() { 08 if (!Lead.sObjectType.getDescribe().isDeletable()) { 09 ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, 10 return null; 11 } 12 } 13 14 delete c; 15 return null; 16 } 17 } 
isDeletable() は オブジェクトレベルで チェック!
パターンは4+α 
1.データ表示(R) 
2.データ作成(C) 
3.データ編集(U) 
4.データ削除(D) 
5.Apexコントローラではなく、 Visualforceページでチェック! 
40
Visualforce Page <!– 表示権限チェック --> 01 <apex:outputText value="{!contactName}" 02 rendered="{!$ObjectType.Contact.fields.Name.Accessible}" /> <!– 作成権限チェック --> 01 <apex:inputText value="{!stringToBecomeNewContactEmail}" 02 rendered="{!$ObjectType.Contact.fields.Email.Createable}" /> <!– 更新権限チェック --> 01 <apex:inputText value="{!contactEmail}" 02 rendered="{!$ObjectType.Contact.fields.Email.Updateable}" /> <!– 削除権限チェック --> 01 <apex:commandButton action="{!CustomDelete}“ 02 rendered="{!$ObjectType.Contact.Deletable}" /> 
41
42 
Enjoy Salesforce Developer Thank You!

More Related Content

Similar to 8 power night2014_nakamura

[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太Insight Technology, Inc.
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Yuji Kanemoto
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Akira Onishi
 
マッチングアプリの作り方
マッチングアプリの作り方マッチングアプリの作り方
マッチングアプリの作り方IBM Analytics Japan
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...Insight Technology, Inc.
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方Soudai Sone
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 Daiyu Hatakeyama
 
リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)Mariko Goda
 
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用stomita
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Shotaro Suzuki
 
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~decode2016
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送Google Cloud Platform - Japan
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発Fujio Kojima
 
見よう見まねでJavaFX!
見よう見まねでJavaFX!見よう見まねでJavaFX!
見よう見まねでJavaFX!_denko
 

Similar to 8 power night2014_nakamura (20)

[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
 
マッチングアプリの作り方
マッチングアプリの作り方マッチングアプリの作り方
マッチングアプリの作り方
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方
 
20110607
2011060720110607
20110607
 
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要 第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
第29回 SQL Server 勉強会 (JSSUG) - Azure Synapse Analytics 概要
 
Mvc conf session_4_ono
Mvc conf session_4_onoMvc conf session_4_ono
Mvc conf session_4_ono
 
リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)リアルFacebookガジェットを作った(ロングバージョン)
リアルFacebookガジェットを作った(ロングバージョン)
 
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
 
見よう見まねでJavaFX!
見よう見まねでJavaFX!見よう見まねでJavaFX!
見よう見まねでJavaFX!
 
G0042 h
G0042 hG0042 h
G0042 h
 

More from TerraSky

TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -TerraSky
 
TerraSky PowerNight myEinstein
TerraSky PowerNight  myEinsteinTerraSky PowerNight  myEinstein
TerraSky PowerNight myEinsteinTerraSky
 
TerraSky PowerNight Soql performance explained
TerraSky PowerNight  Soql performance explainedTerraSky PowerNight  Soql performance explained
TerraSky PowerNight Soql performance explainedTerraSky
 
セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔TerraSky
 
Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎TerraSky
 
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁TerraSky
 
Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹TerraSky
 
11 power nignt_furuta
11 power nignt_furuta11 power nignt_furuta
11 power nignt_furutaTerraSky
 
9 power night2014_iwai
9 power night2014_iwai9 power night2014_iwai
9 power night2014_iwaiTerraSky
 
6 power night2014_sasaki
6 power night2014_sasaki6 power night2014_sasaki
6 power night2014_sasakiTerraSky
 
5 power night2014_totsuka
5 power night2014_totsuka5 power night2014_totsuka
5 power night2014_totsukaTerraSky
 
2 power night2014_erp
2 power night2014_erp2 power night2014_erp
2 power night2014_erpTerraSky
 
04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターンTerraSky
 
03 salesforce mobilesdkの+(プラス)なお話
03 salesforce mobilesdkの+(プラス)なお話03 salesforce mobilesdkの+(プラス)なお話
03 salesforce mobilesdkの+(プラス)なお話TerraSky
 
02 singletonとflyweightを使った省エネapex
02 singletonとflyweightを使った省エネapex02 singletonとflyweightを使った省エネapex
02 singletonとflyweightを使った省エネapexTerraSky
 
01 awsとsalesforceを使ったエコシステム ファイル編
01 awsとsalesforceを使ったエコシステム ファイル編01 awsとsalesforceを使ったエコシステム ファイル編
01 awsとsalesforceを使ったエコシステム ファイル編TerraSky
 
4 TSPN_Apex 10 Commandments
4 TSPN_Apex 10 Commandments4 TSPN_Apex 10 Commandments
4 TSPN_Apex 10 CommandmentsTerraSky
 
7 TSPN_次世代UIフレームワークについて
7 TSPN_次世代UIフレームワークについて7 TSPN_次世代UIフレームワークについて
7 TSPN_次世代UIフレームワークについてTerraSky
 
6 TSPN_SalesforceのOData対応
6 TSPN_SalesforceのOData対応6 TSPN_SalesforceのOData対応
6 TSPN_SalesforceのOData対応TerraSky
 
5 TSPN_Write Apex and Visualforce Using Re-usable Patterns
5 TSPN_Write Apex and Visualforce Using Re-usable Patterns5 TSPN_Write Apex and Visualforce Using Re-usable Patterns
5 TSPN_Write Apex and Visualforce Using Re-usable PatternsTerraSky
 

More from TerraSky (20)

TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -
 
TerraSky PowerNight myEinstein
TerraSky PowerNight  myEinsteinTerraSky PowerNight  myEinstein
TerraSky PowerNight myEinstein
 
TerraSky PowerNight Soql performance explained
TerraSky PowerNight  Soql performance explainedTerraSky PowerNight  Soql performance explained
TerraSky PowerNight Soql performance explained
 
セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔
 
Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎
 
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
 
Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹
 
11 power nignt_furuta
11 power nignt_furuta11 power nignt_furuta
11 power nignt_furuta
 
9 power night2014_iwai
9 power night2014_iwai9 power night2014_iwai
9 power night2014_iwai
 
6 power night2014_sasaki
6 power night2014_sasaki6 power night2014_sasaki
6 power night2014_sasaki
 
5 power night2014_totsuka
5 power night2014_totsuka5 power night2014_totsuka
5 power night2014_totsuka
 
2 power night2014_erp
2 power night2014_erp2 power night2014_erp
2 power night2014_erp
 
04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン
 
03 salesforce mobilesdkの+(プラス)なお話
03 salesforce mobilesdkの+(プラス)なお話03 salesforce mobilesdkの+(プラス)なお話
03 salesforce mobilesdkの+(プラス)なお話
 
02 singletonとflyweightを使った省エネapex
02 singletonとflyweightを使った省エネapex02 singletonとflyweightを使った省エネapex
02 singletonとflyweightを使った省エネapex
 
01 awsとsalesforceを使ったエコシステム ファイル編
01 awsとsalesforceを使ったエコシステム ファイル編01 awsとsalesforceを使ったエコシステム ファイル編
01 awsとsalesforceを使ったエコシステム ファイル編
 
4 TSPN_Apex 10 Commandments
4 TSPN_Apex 10 Commandments4 TSPN_Apex 10 Commandments
4 TSPN_Apex 10 Commandments
 
7 TSPN_次世代UIフレームワークについて
7 TSPN_次世代UIフレームワークについて7 TSPN_次世代UIフレームワークについて
7 TSPN_次世代UIフレームワークについて
 
6 TSPN_SalesforceのOData対応
6 TSPN_SalesforceのOData対応6 TSPN_SalesforceのOData対応
6 TSPN_SalesforceのOData対応
 
5 TSPN_Write Apex and Visualforce Using Re-usable Patterns
5 TSPN_Write Apex and Visualforce Using Re-usable Patterns5 TSPN_Write Apex and Visualforce Using Re-usable Patterns
5 TSPN_Write Apex and Visualforce Using Re-usable Patterns
 

8 power night2014_nakamura