カテゴリ「基本機能」の記事

2017年4月 4日 (火)

火星で始める新生活!(Trailheadのご紹介)

時間が足りない

こんにちは、金森です。

先月は年度末で皆さまお忙しかったのではないでしょうか?

フレクトも例に漏れず、年度末の忙しさに追われて、ブログの更新量も減ってしまいました。

こんなとき、あと1時間、、、

とは言わないから、せめて40分でも、1日の時間が長くなったら良いなと思いますよね。

この度、そんな夢のようなことを実現するプロジェクトがTrailheadで公開されました。

 

火星で生活する

20170404_125539_2

https://trailhead.salesforce.com/ja/projects/trailhead_on_mars

こちらがそのプロジェクトになります。

「何を言っているんだ?」と思われるかとも思いますので、ちょっと解説です。

「1日」とは、地球が自転で一回転する時間ですね。

地球の場合、それはだいたい24時間になるので、「1日」=「24時間」になるわけです。

では、火星ではどうでしょうか?

火星の自転は「24時間39分35.244秒」だそうです。

すなわち、火星では1日が24時間と(約)40分になります!

1日が"40分伸びる"んです

そんな夢のような火星での生活を実現するために、

「火星で住む場所を探してくれるローバーとの通信機能を作成する」のが、上記プロジェクトです。

 

プロジェクトの中身

こちらのトレイル、残念ながらまだ日本語化はされていません。

ただ、そんなに難しい英語ではありませんし、Salesforceの用語もたくさん出てきます。

英語は苦手、という私のような人でも開発者初級の前半(Apexの前くらいまで)を

クリアしておけば、問題なく実施できると思います。

また、コードは一切必要ありません。

使うのは、

  • Chatter グループ
  • カスタムオブジェクト/項目
  • プロセスビルダー

の3つだけです。

あまり、解説しすぎるとネタバレになってしまいますので、この辺にしておきますが、

プロセスビルダーを使ってオブジェクトとChatterを連携させるとても良いサンプルになっています。

楽しみながら業務に活かせる事例も学べてとてもオススメです!

 

100$が当たるかも?

なんと、3/27〜5/15の間に、こちらのバッチを取得すると、

100$相当のVISAのギフト券が当たるキャンペーンも実施しているようです。

こちら

https://medium.com/trailhead/trailheads-next-great-mission-be44c9d8bebe

バッチ取得後、さらに別のバッチを取得すれば、取得した分応募数も増えるとのこと!

(読んだ限りでは、特別な応募方法の記載がないので、国内の同様のキャンペーンと同じように、バッチを取得したことで応募したことになると思われます)

日本語の応募要項はこちらです

http://go.pardot.com/l/27572/2017-03-28/6shr2z/27572/173347/Trailhead_on_Mars_Sweepstakes___Official_Rules_Japanese.pdf

ぜひ、これを機会に、Trailheadのバッチをどんどんゲットしちゃいましょう!(最初にBuild a Mars Communication Uplinkを取るのを忘れずに)

また、弊社ブログも4月になって、心機一転、火星の生活で増えた40分を生かして(!?)、連載記事も含めた怒涛の更新を予定しておりますので、

ご期待ください。

2014年9月30日 (火)

意外と知らないSalesforce Tips (8~10)

玉澤です。
意外と知らないSalesforce Tipsの残り3つを紹介します。


8. Salesforce標準のログイン画面をブランディングする

Salesforceの標準のログイン画面を変えたいお客様の会社のイメージでブランディングしたいときに役立つTipsです。

下記の手順で、Salesforce標準のログイン画面をカスタマイズできます。

まず、[管理]→[ドメイン管理]→[私のドメイン]から組織のサブドメインを登録します。
※組織のサブドメインは一度しか登録できないため、慎重に選択してください。

20140930_81

登録したら、↓のような画面になるので、「こちらをクリックしてログインしてください」を押下して、
ドメインのテストを実施します。

20140930_82
テスト後、↓のような画面になるので、「ユーザにリリース」を押下して、リリースします。
※新しいドメイン名をリリースした後は、元に戻せません。リリース後は、すべてのユーザが新しいドメインにリダイレクトされるので、注意してください。

20140930_83
リリース後、ログインページのブランド設定が表示されるので、ロゴ、背景色、右フレームのURLを表示します。

20140930_84
設定後、リリースしたドメインにアクセスすると、↓のように、ログイン画面がカスタマイズされて表示されるようになります。

20140930_85

9. タブのデフォルト表示を「最近使った○○」ではなくする

タブをクリックしたときに、「最近使った○○」(※○○はオブジェクト名)というビューではなく、通常のビュー画面をデフォルト表示したい場合に役立つTipsです。

20140930_91 まず、通常のビュー画面を表示するVisualforceページを作成します。↓のコードを書けばOKです。

<apex:page tabStyle="Rsv2__c"> ・・・オブジェクト名を指定
  <apex:enhancedList type="Rsv2__c" ・・・オブジェクト名を指定
             customizable="false" 
             height="600" 
             rowsPerPage="50" />
</apex:page>


次に、タブのデフォルト表示を変更したいオブジェクトの設定画面を開き、「ボタン、リンク、およびアクション」セクションで、タブの設定編集リンクをクリックします。

20140930_92
タブの設定編集画面で、上書き手段で「Visualforceページ」を選択し、先程作成したVisualforceページを選択します。

20140930_93
すると、タブをクリックしたときに、「最近使った○○」というビューではなく、通常のビュー画面が表示されるようになります。

20140930_94
10. レコード詳細画面にグラフを表示する

レコードの詳細画面にグラフを表示したいときに役立つTipsです。対象のレコードに関連するレポート結果だけをグラフ表示できます。

ここでは、取引先レコードの詳細画面で、その取引先の商談をフェーズ毎に集計したグラフを表示する方法を例に説明します。

まず、レポートをグラフ付きで作成します(今回の例では、標準の商談レポートタイプで、フェーズ毎に集計したサマリレポートを作成します)。

20140930_101

20140930_102
次にグラフを表示したいオブジェクトのページレイアウトの設定画面を表示します。レポートグラフのセクションに、先程作成したレポートが表示されているので、ドラッグ&ドロップでレイアウトに追加します(今回の例では、取引先のページレイアウトを表示し、先程作成したレポートグラフを追加します)。

20140930_103
追加後、プロパティ設定で、表示サイズ、タイトル表示の有無、絞り込み条件を設定します。
グラフは、元々のレポートの集計結果から、更に絞り込み条件で指定した項目で絞り込んだ結果が表示されます(今回の例では、取引先IDを指定して、その取引先の商談だけが表示されるようにします)。

20140930_104設定すると、↓のように、レコード詳細画面でグラフが表示されるようになります(今回の例では、取引先レコードの詳細画面で、その取引先の商談をフェーズ毎に集計したグラフが表示されます)。

20140930_105

2014年8月20日 (水)

意外と知らないSalesforce Tips (6~7)

またもやこのシリーズです。
今回は6つめと7つめをお送りします。

6. VisualforceをRead-Onlyモードで実行する

Apexの実行には実はRead-Onlyモードというものがあります。
これ、何か良いことがあるのかというとガバナ制限が緩和されるというメリットがあります。

どうしても大量のデータを扱いたいといったケースなどには、特別な細工をせずに扱えるデータ件数が増えるので利用価値がありそうです。

Read-Onlyモードの設定の仕方には2通りの方法があります。

(1) Visualforceページ全体をRead-Onlyモードにする
(2) コントローラークラスのメソッドをRead-Onlyモードにする

どちらの方法でモード設定するかによって緩和される制限に差があります。

具体的な緩和されるガバナ制限の内容は下記になります。

・1トランザクションで取得可能なレコード数上限が緩和される

50,000件 → 1,000,000件

・繰り返しコンポーネントでの使用可能コレクションサイズの上限が緩和される

1,000件 → 10,000件
対象の繰り返しコンポーネントは<apex:repeat><apex:dataTable><apex:dataList>の3つ
※Visualforceページ全体をRead-Onlyモードにした時のみ適用されます。

ここからはRead-Onlyモードの設定の仕方について書いていきます。

まずは、Visualforceページ全体をRead-Onlyモードにする方法から。
これはすごく簡単で、<apex:page>タグにパラメータ「readOnly="true"」を追加するだけです。

使用例: Visualforce側

<apex:page readOnly="true" controller="ReadOnlyController" action="{!init}" >
    <apex:repeat value="{!accountList}" var="ac">
        <apex:outputField value="{!ac.Id}"/>
        <apex:outputField value="{!ac.Name}"/>
        <hr />
    </apex:repeat>
    <apex:form>
        <apex:commandButton action="{!save}" value="Save"/>
    </apex:form>
</apex:page>

使用例: コントローラー側

global class ReadOnlyController {

    public List<Account> accountList {get; set;}
    
    public PageReference init(){
        accountList = [SELECT Id, Name FROM Account];
        return null;
    }
    
    // Read-Onlyモードだとこの処理は失敗する
    public PageReference save(){
        update [SELECT Id, Name FROM Account LIMIT 1];
        return null;
    }
}

コントローラー側は特に何もする必要はありません。
ちなみに、Read-Onlyモードの時にコントローラー側でデータの更新をしようとすると「Too many DML statements」の例外が発生します。

次はコントローラーのメソッド単位でRead-Onlyモードを設定する方法です。
コントローラーのメソッドにRead-Onlyモードを設定するには「@ReadOnly」あのテーションを付与します。
ただ、どんなメソッドにもアノテーションを付けられる訳ではなく、次の条件を満たしている必要があります。

・ global もしくは public である
・ static である
・ @RemoteAction アノテーションが付いている

ちなみにVisualforceということを抜きにすれば「@ReadOnly」自体はwebserviceなどでも使用できます。
詳細はDeveloper's Guideを見てください。

Force.com Apex Code Developer's Guide - ReadOnly Annotation
https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_annotation_ReadOnly.htm

Visualforce Developer's Guide - Working with Large Sets of Data
https://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_readonly_context.htm

では、実際の使用例です。

使用例: Visualforce側

<apex:page controller="ReadOnlyController2">
    <apex:includeScript value="//code.jquery.com/jquery-1.11.0.min.js" />
    <apex:includeScript value="//code.jquery.com/jquery-migrate-1.2.1.min.js" />
    <apex:includeScript value="//cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js" />

    <div data-bind="foreach: accountList">
        <span data-bind="text: Id" /> / <span data-bind="text: Name" />
        <hr/>
    </div>
    
    <button data-bind="click:save1">Save1</button><br/>
    <button data-bind="click:save2">Save2</button><br/>
    
    <apex:form>
        <apex:commandButton action="{!save3}" value="Save3"/>
    </apex:form>

    <script>
        jQuery.noConflict();    
        jQuery(document).ready(function($){
            var viewModel = new (function(){
                var self = this;
                self.accountList = ko.observableArray();
                
                self.find = function(){
                    Visualforce.remoting.Manager.invokeAction(
                        '{!$RemoteAction.ReadOnlyController2.find}',
                        function(result, e){
                            if(!e.status){
                                alert('error:' + ko.toJSON(e));
                                return;
                            }
                            self.accountList(ko.utils.arrayMap(result, function(o){
                                return {
                                    Id: ko.observable(o.Id),
                                    Name : ko.observable(o.Name)
                                };
                            }));
                        },
                        {escape :false}
                    );
                };
                
                self.save1 = function(){
                    Visualforce.remoting.Manager.invokeAction(
                        '{!$RemoteAction.ReadOnlyController2.save1}',
                        function(result, e){
                            alert((e.status?"success":("failed"+ko.toJSON(e))));
                        },
                        {escape :false}
                    );
                };
                
                self.save2 = function(){
                    Visualforce.remoting.Manager.invokeAction(
                        '{!$RemoteAction.ReadOnlyController2.save2}',
                        function(result, e){
                            alert((e.status?"success":("failed"+ko.toJSON(e))));
                        },
                        {escape :false}
                    );
                };
                
                //initialize
                self.find();
            })();
            ko.applyBindings(viewModel);
        });
    </script>
</apex:page>

使用例: コントローラー側

global class ReadOnlyController2 {
   
    @ReadOnly @RemoteAction global static List<Account> find() {
        return [SELECT Id, Name FROM Account];
    }
    
    // Read-Onlyモードなのでこの処理は失敗する
    @ReadOnly @RemoteAction global static void save1() {
        update [SELECT Id, Name FROM Account LIMIT 1];
    }
    
    @RemoteAction global static void save2() {
        update [SELECT Id, Name FROM Account LIMIT 1];
    }
    
    public PageReference save3(){
        update [SELECT Id, Name FROM Account LIMIT 1];
        return null;
    }
}

ページ全体がRead-Onlyモードになるわけではないので通常のメソッドを呼び出してデータを更新することもできます。

いかがだったでしょうか。
機会があったら活用してみてください。

7. 変更セットへ楽に項目を追加する

変更セット使ってますか。
変更セットは便利といえば便利なのですが、そのUIはお世辞にも使い易いとは言えません。
特にカスタム項目数が数千件ある時に、そのなかから必要なものを選択する場合は一苦労です。

こんなときに次の手順を踏むと少しだけ項目を選ぶのが楽になります。

(1) 一覧で「▼増やす」のリンクをクリック

(2) URLに追加されるパラメータ「rowsperpage」を1000に書き換えたURLに移動

これで一気に一覧の表示件数を上限の1000件に変更することができます。
あとはソートするなり、ページ内検索するなりすればほんの少し楽に項目追加ができるようになります。

さらに手動でURLを書き換えるのすら面倒だという方のために一覧表示を1000件にするブックマークレットを用意してみました。
(やっていることは表示しているURLにパラメータ「rowperpage」があれば値を1000に変更し、なければ値を1000で追加して遷移させているだけです。)

javascript:(function(){var l=location;var h=l.href;if(!(/entityType=/i).test(h)){h+=('&entityType='+document.getElementById('entityType').value);} l.href=((/rowsperpage=[0-9]+/i).test(h))?h.replace(/rowsperpage=[0-9]+/ig,'rowsperpage=1000'):(h+'&rowsperpage=1000');})();

一応、Chromeで動作確認してあります。
もし良かったら使ってやってください。

それでは。

2014年8月18日 (月)

意外と知らないSalesforce Tips (4~5)

前回からの続きです。
今回は4つめと5つめをお送りします。

4. オブジェクトでトピックを利用する

Spring'14からChatterのトピック機能がオブジェクトでも利用できる様になりました。
トピックはTwitterで言うところのハッシュタグみたいなもので、レコードの整理に使うことができます。

・使うための準備
オブジェクトに対してトピック機能を有効化する必要があります。
Spring'14以降に作成した組織の場合はトピックを使用可能なすべての標準オブジェクトは、デフォルトで機能が有効になっている様です。

トピックの有効化は「カスタマイズ>トピック>オブジェクトのトピック」から行います。

Mame20140818_01

オブジェクトのトピックが有効になると、そのオブジェクト種別のレコードで公開タグが無効になるので、公開タグを使っている場合は注意が必要です。

・使ってみる
トピックをレコードに追加するには詳細画面を開いて、タイトルの下にある「クリックしてトピックを追加」リンクをクリックします。
(すでにトピックが追加済みの場合はリンク名が「トピック」になります)

Mame20140818_02

トピック名を入力して「完了」をクリックするとトピックが追加されます。

Mame20140818_03

追加されたトピック名をクリックすると、対象のトピックが付与されているレコードが一覧で表示されます。

Mame20140818_04

Mame20140818_05

また、トピックはビューの絞り込み条件に指定することもできます。
トピックを絞り込み条件に指定する場合は、絞り込みの項目で「トピック」を選びます。

Mame20140818_06

次はApexからトピックを操作してみます。
ConnectApiネームスペースのTopicsクラスがこの辺りの処理の為のメソッドを持っています。

トピックを追加するレコードのIDとトピック名を指定してトピックを追加します。
(第1引数はコミュニティのIDでコミュニティに対してトピックを追加する時でなければ、nullを指定します。)

String communityId = null;
String recordId = 'a04U000000Jj29h';
String topicName = 'トピックテスト';
ConnectApi.Topic objTopic = ConnectApi.Topics.assignTopicByName(communityId, recordId, topicName);

トピックのIDを指定して削除します。
(第1引数のコミュニティIDの扱いは追加の時と同じです。)

String communityId = null;
String topicId = '0TOU00000008ePB';
ConnectApi.Topics.deleteTopic(communityId, topicId);

トピックが追加されているレコードの一覧はTopicAsssignmentオブジェクトから取得できます。

Select Id, EntityId, TopicId FROM TopicAssignment WHERE TopicId = '0TOU00000008eP6OAI'

EntityIdにレコードのID、TopicIdにトピックのIDが入っています。
(組織でコミュニティが有効化されている場合はオブジェクトにNetworkIdカラムが追加され、ここにコミュニティのIDが入ります。)

・権限
トピック機能を扱うにはトピックの権限とレコードに対する権限が必要です。

一般ユーザ権限説明
トピックを割り当てる レコードへのトピックの追加・削除に必要です。
トピックを作成 トピックそのものを作成するのに必要です。
トピックを削除 トピックそのものを削除するのに必要です。
トピックを編集 トピックそのものを編集するのに必要です。

トピックを割り当てるには対象のレコードを更新できる必要があります。
参照権限のみの場合は、参照はできますが、割り当てはできません。

トピック機能は種類の異なるオブジェクトを関連づける事もできるので、うまく使って効果的にレコードを整理してみてください。

5. レコードの閲覧日時と参照日時を参照する

最近使ったXXX的な一覧を作ってみたくなったことはありませんか。
まさにそのためだけに作られたような項目が Summer'13 から各オブジェクトに追加されています。

「LastReferencedDate」と「LastViewedDate」がその項目です。

この2つの項目はどちらも読み取り専用の項目で、違いは項目の値が更新されるタイミングです。
詳細は次の表にまとめましたのでご覧ください。

 LastReferencedDateLastViewedDate
レコードの詳細画面を見たとき 更新される 更新される
レコードを画面からルックアップして参照項目に設定したとき 更新される 更新されない

このように画面で操作したときは上のタイミングで項目が更新されるのですが、Apexからの操作の場合は何もしなければこの2項目は更新されません。
Apexから更新したい場合は次のオプションを付けたSELECT文を発行することでこれらの項目を更新することができます。

詳細画面を見たときと同じ更新を行う
  ・・・ 「FOR VIEW」オプションを付与します。

SELECT Id,Name,AccountId,LastViewedDate,LastReferencedDate FROM Contact
WHERE ID='003U00000024dJgIAI' FOR VIEW

レコードを画面からルックアップして参照項目に設定したときと同じ更新を行う
  ・・・ 「FOR REFERENCE」オプションを付与します。

SELECT Id,Name,AccountId,LastViewedDate,LastReferencedDate FROM Contact WHERE
ID='003U00000024dJgIAI' FOR REFERENCE

機会があったら使ってみてください。

それでは。

2013年4月23日 (火)

コンテンツ配信

Salesforceには、ファイルを共有する機能がいくつかありますが、その中でも、コンテンツ配信はファイル共有の方法を細かく制御することができるため、知っていると何かと便利です。

また、メモ&添付ファイルやドキュメントでは、Salesforce内でしかファイル共有できませんが、コンテンツ配信機能を使うと、Salesforceのアカウントを持たない人にもファイルを共有できます

Chatterファイルでもできるのですが、Chatterファイルに比べて、コンテンツ配信機能では、↓のようなこともできるようになっています。

・閲覧者にファイルのダウンロードを許可するのか、オンライン表示だけを許可するのかを制御できる(ファイルの内容は見せたいけど、ファイルは渡したくない場合に便利)
・有効期限を設定できる
・パスワードを設定できる
・コンテンツが参照/ダウンロードされた回数を追跡できる

手軽にファイル共有するならChatterファイル、ファイル共有の方法を細かく制御する必要がある場合はコンテンツ配信と、使い分けるとよいでしょう。

○使用方法

1. [設定] → [アプリケーションの設定] → [カスタマイズ] → [コンテンツ配信] → [設定] で、「コンテンツ配信を有効化」をONにします。

20130423_1_2

2. コンテンツ配信をしたいオブジェクトのページレイアウトで、関連リストに「関連コンテンツ」を追加します。

 ※「関連コンテンツ」の『コンテンツの検索』または『すべての検索』で、登録済のコンテンツを検索して、レコードに関連付けることができます。

20130423_2

20130423_3

3. 「関連コンテンツ」の『コンテンツの配信』をクリックして、新しいコンテンツ配信を作成します。

  ライブラリから検索して、既に作成したコンテンツを選択する方法と、
  ローカルのファイルをアップロードして、新規コンテンツを作成する方法があります。

20130423_4

4. 配信するコンテンツを選択したら、コンテンツ配信の設定を行います。下記の項目を設定できます。

配信方法
  ・受信者にブラウザでの参照を許可
  ・受信者に ○○での参照を許可(※ ○○はxlsなど)
  ・受信者に PDF形式での参照を許可

配信の設定
  ・最初に参照またはダウンロードされたら私に通知
  ・コンテンツに対するアクセス権を削除(有効期限
  ・コンテンツへのアクセスにパスワードが必要(パスワード有無

20130423_5

5. 設定を保存したら、配信作成完了です。
  配信用のリンクとパスワードが表示されるので、それをメールに貼って配信の通知をします。

20130423_6

  配信後は、↓の配信設定画面で設定変更できます。参照/ダウンロードの状況も確認できます。

20130423_7

  「最初に参照またはダウンロードされたら私に通知」を設定していると、↓の通知が自分宛に届きます。

20130423_8

2013年4月 4日 (木)

リリースの監視

Force.com IDEから組織にメタデータ/ソースコードをリリースするとき、実行されるテストコードが多いと結構時間がかかります。IDE上では、リリースの進捗状況やエラーの発生状況は表示されないので、いつリリースが終わるのか、エラーが発生しているのかが分からず、不安になります。

また、リリースが完了してから、Force.com IDEに結果が表示されるまでにはタイムラグがあるので(大体数分ですが、遅いときは数十分かかることもあります。ちなみに、タイムラグはメタデータAPIが非同期であるために発生します。)、IDEの画面だけを見ていると、実はリリースがもう終わってることに気が付かなかったりします。

こんなことを防ぐために、セールスフォースにはリリースの監視機能があります。リリースの監視機能によって、リリースの進捗状況とエラーの発生状況を把握でき、あとどのくらいでリリースが完了するのかを大体予測することができます。

使い方は、リリースをしている最中に、

[設定] → [アプリケーションの設定] → [リリース] → [リリースの監視]

を見るだけです。

↓のように、「処理中のリリース」「完了したリリース」が表示されます。
※但し、完了したリリースでも7日間経つと表示されなくなります。

20130404_1

リリースの監視で表示される情報の意味を記載しておきます。

・状況

説明
キュー 待ち状態
処理中 メタデータ/ソースコードのチェック処理中
テスト実行中 テスト実行中(現在実行中のテストメソッドが表示される)
完了 リリース正常終了 (但し、テストのカバレッジ75%未満だとリリース失敗するので注意!
エラーで完了 リリース異常終了 (チェック処理エラー または テスト失敗)

・コンポーネント
 リリースするメタデータ/ソースコードの数

・テスト
 テストの進捗状況とエラー発生状況
 テスト完了数/テスト総数 (エラー発生件数) で表示
 リリースに要する時間のほとんどはテストの時間なので、テストの進捗状況から
 リリースにあとどのくらい時間がかかるかを予測することができます。

リリースの監視では、エラーが発生してもエラーの内容までは教えてくれないのがちょっと残念なところです。エラーの内容を知るには、IDEのリリースが完了するのを待つ必要があります。この辺りは今後の改善を期待したいところです。

2012年10月23日 (火)

レポートのアクセス権限設定

レポートのアクセス制御として、

公開レポートを実行させたいけど、編集・削除はさせたくない
・公開レポートを新規作成させたいけど、編集・削除はさせたくない

などのニーズがあるかと思いますが、

レポートのアクセス権限は、設定がちょっとややこしいので、表にまとめてみました。

レポートの「実行」「作成」「変更・削除」をする権限があるかないかは、

・レポートフォルダの公開先
・レポートフォルダのアクセス権限
・プロファイルで付与されている権限

で決まります。

○レポートの実行 の権限あり/なし

プロファイルで「レポート実行」権限が付与されている場合は、非表示フォルダ以外にあるレポートを実行可能です。

プロファイルで「すべてのデータの参照」権限が付与されている場合は、すべてのレポートを実行可能です。

レポートフォルダ
の種類(公開先)
レポートフォルダ
のアクセス権限
プロファイルで
付与されている権限
レポート実行 すべての
データの参照
公開フォルダ(※1) 参照のみ
公開フォルダ 参照・更新
非表示フォルダ(※2) 参照のみ ×
非表示フォルダ 参照・更新 ×
共有フォルダ(※3) 参照のみ
共有フォルダ 参照・更新
個人フォルダ(※4)

○:権限あり
×:権限なし
-:関係なし

※1 公開先で「このフォルダは、ポータルユーザを含むすべてのユーザがアクセス可能です」
   または「このフォルダは、ポータルユーザを除き、すべてのユーザがアクセス可能です」
   を選択したフォルダ
※2 公開先で「このフォルダはすべてのユーザから非表示となります」を選択したフォルダ
※3 公開先で「このフォルダは次のグループに含まれるユーザのみアクセス可能です」を選択したフォルダ
※4 「私の非公開カスタムレポート」フォルダ

○レポートの新規作成 の権限あり/なし

プロファイルで「レポートの作成とカスタマイズ」権限が付与されている場合は、アクセス権限が「参照・更新」に設定されている公開フォルダ、共有フォルダ 及び 個人フォルダにレポートを作成可能です。

プロファイルで「公開レポートの管理」権限が付与されている場合は、すべてのフォルダにレポートを作成可能です。

レポートフォルダ
の種類(公開先)
レポートフォルダ
のアクセス権限
プロファイルで
付与されている権限
レポートの作成
とカスタマイズ
公開レポート
の管理
公開フォルダ 参照のみ ×
公開フォルダ 参照・更新
非表示フォルダ 参照のみ ×
非表示フォルダ 参照・更新 ×
共有フォルダ 参照のみ ×
共有フォルダ 参照・更新
個人フォルダ

○レポートの変更・削除 の権限あり/なし

プロファイルで「レポートの作成とカスタマイズ」権限が付与されている場合は、個人フォルダのレポートのみ変更・削除可能です。

プロファイルで「公開レポートの管理」権限が付与されている場合は、すべてのフォルダのレポートを変更・削除可能です。

レポートフォルダ
の種類(公開先)
レポートフォルダ
のアクセス権限
プロファイルで
付与されている権限
レポートの作成
とカスタマイズ
公開レポート
の管理
公開フォルダ 参照のみ ×
公開フォルダ 参照・更新 ×
非表示フォルダ 参照のみ ×
非表示フォルダ 参照・更新 ×
共有フォルダ 参照のみ ×
共有フォルダ 参照・更新 ×
個人フォルダ

2012年1月 6日 (金)

メールの送受信の制限

Salesforce導入時に、メールの送受信の制限を調べることが多いので、まとめてみました。(Winter '12時点での制限となりますので、その旨ご了承ください。)

「メール to ケース」「Apexによる送信メール」「ワークフロー系のメール」「それ以外のメール」で、それぞれ別にカウントされるのがポイントです。

対象 1日あたりの送受信件数
メール to ケース 2500通
Apexによる送信メール 1000通
・ワークフローの電子メールアラート
・承認プロセスの電子メールアラート
の合計
ユーザライセンス数(※1)×1000通
(但し、最大200万通まで)
上記以外のメール送受信の合計

・活動からのメール送信
・メール一括送信(※2)
・登録情報照会
・オンデマンド メール to ケース
など
ユーザライセンス数(※1)×1000通
(但し、最大100万通まで)

※1 メール送信が可能なユーザライセンス数の合計
  (Salesforceライセンス、Salesforce Platformライセンス、Chatter Onlyライセンスなどが含まれる)

※2 一度に送信可能な件数は、下記のようにエディションにより異なる
・Professional Edition:250通
・Enterprise Edition:500通
・Unlimited Edition:1000通

<参考>
Salesforce のエディションと制限
日次ワークフローメール制限

2011年7月31日 (日)

画面のURLとURLパラメータ

Salesforceは、URLとそのパラメータを指定するだけで、様々な画面を表示できます。
今回は代表的な画面のURLとそのパラメータをご紹介します。

○ベースURL
ベースとなるURLは、インスタンス毎に決まっており、↓のようになります。
https://<インスタンス名>.salesforce.com

以降のURLでは、ベースURLは省略して表記します。
例)/home/home.jsp ⇒ https://na7.salesforce.com/home/home.jsp

○代表的な画面のURL


画面 URL
ホーム /home/home.jsp
すべてのタブ画面 /home/showAllTabs.jsp
高度な検索画面 /search/AdvancedSearch
設定画面 /ui/setup/Setup
システムログ画面 /_ui/common/apex/debug/ApexCSIPage
ヘルプ画面 /help/doc/user_ed.jsp
タブ画面 /<オブジェクトPrefix>/o (URLFOR($Action.<オブジェクト名>.Tab) でURL作成可)
新規画面 /<オブジェクトPrefix>/e (URLFOR($Action.<オブジェクト名>.New) でURL作成可)
詳細画面 /<レコードID> (URLFOR($Action.<オブジェクト名>.View, <レコードID>) でURL作成可)
編集画面 /<レコードID>/e (URLFOR($Action.<オブジェクト名>.Edit, <レコードID>) でURL作成可)
Visualforceページ /apex/<Visualforceページ名>
ファイルダウンロード画面 https://c.<インスタンス名>.content.force.com/servlet/servlet.FileDownload?file=<ファイルID>

○オブジェクトPrefix

各オブジェクトにはPrefixが割り当てられています。
標準オブジェクトは予め決まったPrefixが割り当てられています。
カスタムオブジェクトは作成時に任意の3桁のPrefixが割り当てられます。
割り当てられたPrefixは、Force.com IDEのスキーマブラウザで確認することができます。

オブジェクト名 オブジェクトPrefix
ユーザ 005
リード 00Q
取引先 001
取引先責任者 003
商談 006
契約 800
ケース 500
ソリューション 501
レポート 00O(ゼロゼロオー)
ダッシュボード 01Z
ドキュメント 015

○URLパラメータ

URLパラメータは多数ありますが、利用する場面が多そうなものを↓に記載します。

1. 全般

URLパラメータ 意味
retURL 遷移元画面のURL
isdtp デスクトップモード vw、mnなどを指定すると、ヘッダー、サイドバーが非表示になる。ビュー画面やレポート画面で使用可能。

2. 新規・編集画面

URLパラメータ 意味
cancelURL キャンセル時に遷移するURL
saveURL 保存時に遷移するURL
標準項目ラベル(※1) デフォルト値 値を指定 例)acc9=Hot
カスタム項目ラベル(※2) デフォルト値 値を指定 例)00NA0000009ZZZZ=Hoge
標準項目ラベル+_lkid(※3) 標準項目の参照先レコードIDのデフォルト値 レコードIDを指定 例)acc3_lkid=001A000000i1zzz
カスタム項目ラベル+_lkid(※4) カスタム項目の参照先レコードIDのデフォルト値 レコードIDを指定 例)CF00NA0000009YYYY_lkid=001A000000i1yyy

※1 標準項目ラベルは、lea9:リード.携帯、acc2:取引先名のように、あらかじめ決められているラベルを指定します(新規・編集画面のHTMLソースで確認可能)。

※2 カスタム項目ラベルは、項目の設定画面のURLに表示される項目IDを指定します。参照項目の場合は、CF+項目IDを指定します。

※3 標準項目ラベルと同時に指定します。

※4 カスタム項目ラベルと同時に指定します。

3. リストビュー

拡張リストビューは、「設定」→「カスタマイズ」→「ユーザインタフェース」で、「拡張リストを有効化」または「リストビューでのドラッグアンドドロップスケジュール設定を有効化」にチェックが入っている場合に表示されます。画面下部に、ページングの表示があるビューは、拡張リストビューです。

URLパラメータ 意味
fcf ビューID
page 表示するページ番号
rowsperpage(リストビューのみ) 1ページに表示する行数
lsi(リストビューのみ) ソート列番号 2:2列目で昇順ソート、-2:2列目で降順ソート
lsc(リストビューのみ) 頭文字(A,B,・・・Z,ア,カ・・と表示されている部分) -1:すべて、2:C、26:ア
rolodexIndex(拡張リストビューのみ) 頭文字(A,B,・・・Z,ア,カ・・と表示されている部分) -1:すべて、2:C、26:ア
lsr(リストビューのみ) 表示開始行番号
rlid(リストビューのみ) 関連リスト名 標準オブジェクト:RelatedContactList、RelatedOpportunityListなど
カスタムオブジェクト:主従/参照項目のID(※5)

※5 rlid=RelatedOpportunityList&id=<親レコードのID>のように指定すると、親レコードの関連リストが表示されます。

4. レポート

URLパラメータ 意味
break[n](nは番号) 集計項目 項目名を指定 例)break0=OWNER
colDt_c 期間条件-日付項目 項目名を指定 例)colDt_c=DUE_DATE
colDt_q 期間条件-範囲 curfy:当会計年度、current:当会計四半期、cury:本年、currentq:当四半期、thismonth:今月、thisweek:今週、today:今日、last7:過去7日間。custom:カスタム など
sdate 期間条件-開始 yyyy/MM/dd
edate 期間条件-終了 yyyy/MM/dd
scope 表示スコープ user:私の○○○、team:私のチームの○○○、organization:すべての○○○
pc[n](nは番号) 条件-項目 項目名を指定 例)pc0=LAST_ACTIVITY
pn[n](nは番号) 条件-条件 eq:次の文字列と一致する、ne:次の文字列と一致しない、lt:<、gt:>、le:<=、ge:>=、co:次の文字列を含む、nc:次の文字列を含まない、sw:次の文字列で始まる、in:次の値を含む、ex:次の値を含まない
pv[n](nは番号) 条件-値
details 詳細表示 yes:表示、no:非表示
sort ソート項目 項目名を指定 例)sort=ACCOUNT.NAME

5. ログイン画面

例えば、↓のURLにアクセスすると、自動的にログインし、レポートタブ画面を表示します(%2Fは「/」をURLエンコードしたもの)。
https://login.salesforce.com/?un=hoge@gmail.com&pw=hoge1234&startURL=%2F00O%2Fo
ユーザ名とパスワードが知られても問題ない場合は便利です。

URLパラメータ 意味
un ユーザ名
pw パスワード
startURL ログイン成功時に遷移するURL

2011年7月 4日 (月)

Salesforceの開発で使うリファレンスと早見表

Salesforceの開発でよく利用しているリファレンス早見表をまとめてみました。基本的に英語ですが、一部日本語に翻訳されているものもあります。

すぐ使えるように右側のサイドバーにも記載しておきますので、開発で困った時に参照して下さい。

■Developer's Guide(リファレンス)
・Apex  HTML | PDF | 日本語PDF | ガバナ制限
・Visualforce  HTML | PDF
・Web Services API  HTML | PDF | 日本語PDF
・Bulk API  HTML | PDF
・REST API  HTML | PDF | 日本語PDF
・Metadata API  HTML | PDF
・Migration Tool  HTML | PDF
・AJAX Toolkit  HTML | PDF
・Data Loader PDF | 日本語PDF

■早見表 (日本語)
数式
Apex
Visualforce
Web Services API
Chatter

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上
でのWebアプリケーション開発
エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

会社紹介

  • 株式会社フレクトは、
      ・認定コンサルタント
      ・認定上級デベロッパー
      ・認定デベロッパー
    が在籍している、セールスフォースパートナーです。
    また、heroku partnersにも登録されています。
    herokuパートナー
    株式会社フレクト
    Salesforce/Force.com
    導入支援サービス
    弊社の認定プロフェッショナルが支援致します。
    ・Visualforce/Apexによるアプリ開発
    ・Salesforceと連携するWebアプリ開発
    も承っております。
    セールスフォースご検討の際は、
    お気軽にお問合せください。

Twitter

リファレンス

■Developer's Guide(リファレンス)
・Apex  HTML | PDF | 日本語PDF | ガバナ制限
・Visualforce  HTML | PDF
・Web Services API  HTML | PDF | 日本語PDF
・Bulk API  HTML | PDF
・REST API  HTML | PDF | 日本語PDF
・Metadata API  HTML | PDF
・Migration Tool  HTML | PDF
・AJAX Toolkit  HTML | PDF
・Data Loader PDF | 日本語PDF

■早見表 (日本語)
数式
Apex
Visualforce
Web Services API
Chatter