Quantcast
Channel: tyoshikawa1106のブログ
Viewing all 1438 articles
Browse latest View live

SFDC:RemoteActionで添付ファイルを登録する方法

$
0
0

Visualforceではapex:inputFileタグをつかってファイルアップロードを実現できますが、RemoteActionで添付ファイルを登録したい場合、JS側の処理で対応する必要があります。


まずアップロードファイルの選択は普通のinputFileタグを使って行います。

<input type="file" name="attamentFile" id="attamentFile" />


ファイルの存在判定、種別判定はこんな感じです。

var uploadFile = document.getElementById('attamentFile');
var file = uploadFile.files[0];
if (!file) {
    alert('ファイルを選択してください。');
    return false;
}
if (!file.type.match(/(image.*)/)) {
    alert('Imageファイルを選択してください。');
    return false;
}


File周りの処理はFileReaderを使って対応します。

var reader = new FileReader();
reader.onloadend = function() {
    var dataURL = reader.result;
    // Apexに渡す値をセット
    var apexWrapper = {
        account : helper.getAccountObject(),
        fileName : file.name,
        fileSize : file.size,
        uploadFile : dataURL.match(/,(.*)$/)[1]
    };
    
    // 保存処理を実行
    doSaveByApex(apexWrapper);
};
reader.readAsDataURL(file);

これでファイル名、ファイルサイズ、Blob型の値を用意できるので後はApex側で処理すればファイルアップロードを実行できます。

サンプルコード

ザックリですがサンプルコードです。

https://gist.github.com/tyoshikawa1106/6ba50544a8d4cbcd48de


取引先名を入力して、アップロードするファイルを選択します。
f:id:tyoshikawa1106:20160126032712p:plain


Saveボタンをクリックすると取引先が作成され、詳細ページが表示されます。
f:id:tyoshikawa1106:20160126032755p:plain


添付ファイル関連リストに正しくファイルが保存されていることを確認できます。
f:id:tyoshikawa1106:20160126032836p:plain


ファイルを参照するときちんとアップロードした画像が表示されるので問題なく処理できていると思います。
f:id:tyoshikawa1106:20160126032935p:plain


RemoteActionをつかってファイルアップロードを行う方法は上記のとおりです。


SFDC:AngularJSでファイル添付ができるVFページをつくってみました

$
0
0

AngularJSでファイル添付ができるVFページをつくってみました。

入力画面

f:id:tyoshikawa1106:20160127025407p:plain

確認画面

f:id:tyoshikawa1106:20160127025425p:plain

保存実行結果

f:id:tyoshikawa1106:20160127025442p:plain:w300

Thanks画面

f:id:tyoshikawa1106:20160127025516p:plain


ちゃんと保存処理が実行されていて
f:id:tyoshikawa1106:20160127025606p:plain


添付ファイルも登録できています。
f:id:tyoshikawa1106:20160127025627p:plain


エラーメッセージはこんな感じです。
f:id:tyoshikawa1106:20160127025708p:plain:w400

開発のポイント

共通変数

AngularJSでは別々のコントローラで共通で利用できる変数は、factoryで用意できます。

var app = angular.module("Controllers", []);
        
// 共通変数:Account
app.factory('Wrapper', function() {
    return {
        Account : {
            Name : 'salesforce.com',
            AccountNumber : 'SF-001'
        },
        Attachment : {
            FileName : '',
            FileSize : '',
            UploadFile : ''
        }
    };
});
inputFileと複数ページ

VFページの開発にはapex:inputFileタグが用意されています。reRenderが利用できなくなるなどの制約がありますが、一番の問題はapex:inputFileで選択したファイル情報をApexクラス側の変数に保持して、画面遷移などの操作を行うとビューステートエラーが発生してしまうことです。


今回のように複数のページにまたがってファイル情報を保持したい場合は、Apex側の変数に保持するのを諦めてJS側で対応する方が良さそうです。

apex:formとngRoute

AngularJSでシングルページアプリケーションを開発する場合、ngRouteを利用すると思います。これを利用する場合、apex:formの宣言ができなくなってしまいます(たぶん)。その結果、apex:input系のタグが利用できなくなるので注意が必要です。


少し前にSalesforce Advent Calendar 2015でVFとAngularについての記事を投稿しました。


その記事内ではngRouteを利用しないページで試していたので気づきませんでしたが、ngRouteを利用するとVFページとしては別々に用意していくので、呼び出し元の親ページでapex:formタグを宣言して置いても、各ページ内には存在しない扱いになってしまいます。


むりやり宣言してもapex:formタグがng-appの中にあるとエラーになったりするのでそのあたりの注意が必要になります。
f:id:tyoshikawa1106:20160127030617p:plain

サンプルコード

今回つくったサンプルページのコードです。

SFDC :Service Cloud 開発概要 - 後編 - Webセミナーを見てみました

$
0
0

Service Cloud 開発概要 - 後編 - Webセミナーを見たのでメモです。
f:id:tyoshikawa1106:20160127190055p:plain

  • メール-to-ケース / Web-to-ケース
  • Live Agent
  • セルフサービステンプレート
  • その他 (SNSサポート、リアルタイムビデオサポート)

メール-to-ケース / Web-to-ケース

メールもしくは外部Webサイトからケースを作成できる機能。

メール-to-ケース

f:id:tyoshikawa1106:20160127180909p:plain

Web-to-ケース

f:id:tyoshikawa1106:20160127181025p:plain


メール-to-ケースを使うときは実際のメールアドレスからケース作成用のアドレスに転送する形で利用する。
Web-toケースで生成されたHTMLは最低限のものなのでCSSなどでカスタマイズして利用する。
どちらもほぼリアルタイムに取り込むことができる。


マクロを使うとクリックひとつでケースにナレッジを添付したりできる。

Live Agent

お客様と直接チャットできるようになる機能。
Webinar内で設定方法を一から紹介してくれていました。

  • オムニチャネルの設定
  • サービスプレゼンス状況の設定
  • ユーザの有効化 (Live Agent権限を追加する)
  • プロファイル/権限セットでサービスプレゼンス状況の利用権限を追加


上記準備ができたらLive Agentの設定を行える。
いろいろ設定を行うとチャットのコードが生成される。
f:id:tyoshikawa1106:20160127182842p:plain

このコードとリリースコードを使って外部サイトに埋め込める。


設定後、ServiceCloud ConsoleにLive Agent関係の設定が追加される。
ここで有効化するとServiceCloudコンソールからチャットができるようになる。

セルフサービステンプレート

元はCommunity Cloudの機能
f:id:tyoshikawa1106:20160127183652p:plain


こういうの
f:id:tyoshikawa1106:20160127183843p:plain


コミュニティビルダー関係の話でした。
f:id:tyoshikawa1106:20160127184138p:plain

  • その他 (SNSサポート、リアルタイムビデオサポート)
SNSサポート

Twitterなどのソーシャルアカウント上のやり取りをServiceCloudConsoleから行うことができるみたいです。
f:id:tyoshikawa1106:20160127185012p:plain

リアルタイムビデオサポート - Salesforce SOS

有償の機能。ビデオチャットでやりとりできる。顧客はAndroid/iOSのモバイルアプリからサポートに接続して仕様する。(モバイルアプリに埋め込めるようになっている)
f:id:tyoshikawa1106:20160127185246p:plain


一時的に中断されても復帰することが可能とのことです。


日本ではパイロット機能。
f:id:tyoshikawa1106:20160127185428p:plain

Q&A

  • 生成されるコードに埋め込まれたIDは環境依存する可能性がある。(メタ情報なのでもしかすると同じになるかも。)
  • コミュニティ作成時にナピリのテンプレートならオブジェクトを外部ユーザに公開できる。(設定が少し複雑とのこと)
  • コミュニティテンプレートを使うときは、新しくコミュニティを作成する流れになるそうです。
  • ケースレイアウト設定のフィードビューからデザインをおしゃれにできる


聞き間違えがなければこんな感じでした。録画版楽しみ。

SFDC:VisualforceとAngularJSで登録ページをつくってみました

$
0
0

VisualforceとAngularJSで入力ページをつくってみました。CSS部分はLightning Design Systemを利用していています。

f:id:tyoshikawa1106:20160130143604p:plain


apexタグに頼らないJavaScript Remoting中心の作りになっています。
f:id:tyoshikawa1106:20160130171348p:plain

ページ構成

ページ構成は以下のとおりです。

  • AngularValidation.page
    • 利用時に呼び出すメインのページ
  • AngularValidationInput.page
    • 最初に表示される入力ページ
  • AngularValidationResult.page
    • 保存後に表示される詳細ページ
  • AngularValidationAppJs.page
    • Angularのルーティング情報を記載したJS
  • AngularValidationControllerJs.page
    • 保存や値セットなどの処理を記載したJS

※サンプルなのでServiceやdirective関係の処理はControllerJsにまとめて記載してします。

画面の動き

最初の入力ページで値をセットします。
f:id:tyoshikawa1106:20160130173209p:plain


正しく登録情報を入力して保存ボタンをクリックすると、RemoteActionでApex処理を呼び出し取引先責任者を登録します。保存処理後、メッセージが表示され詳細ページに移動します。(確認メッセージはSweetAlertを利用して表示しました。SFDC標準スタイルの影響でボタン部分のデザインが正しく表示されませんでしたが、デモ用なのでそのままにしました。)
f:id:tyoshikawa1106:20160130173415p:plain


詳細ページはこんな感じになっています。
f:id:tyoshikawa1106:20160130173615p:plain


詳細ボタンをクリックすると登録レコードの詳細ページが表示されます。
f:id:tyoshikawa1106:20160130173714p:plain


画面の動きはこんな感じです。日付の登録だけちょっと雑につくってあるので9時間ずれて保存されています。

入力チェック

今回やりたかったことのメインです。必須チェックや文字数チェックなどをリアルタイムで判定する必要があったため、Anuglarを利用してみました。

AngularJSでは『ng-message』を利用するとエラー発生時にメッセージを表示することができます。(その他、ng-showなどでも表示の有無を切り替えたりできます。)
f:id:tyoshikawa1106:20160130174309p:plain

必須チェック

inputタグに『required』を宣言すると『ng-message』で必須チェックができるようになります。
f:id:tyoshikawa1106:20160130174425p:plain

文字数上限チェック

inputタグにng-maxlengthを宣言すると最大文字数のチェックができます。(最小文字数を判定する属性も用意されています。)
f:id:tyoshikawa1106:20160130174604p:plain

入力形式のチェック

例えばinput type="email"を宣言して、不正な形式で入力した際にng-message="email"でエラーメッセージを表示できます。
f:id:tyoshikawa1106:20160130174910p:plain


input type="date"など他の形式でも同様です。
f:id:tyoshikawa1106:20160130175041p:plain

別の入力値との一致判定

別の入力値との一致判定をチェックしたい場合は、自作のdirective処理を用意します。
f:id:tyoshikawa1106:20160130175251p:plain


directiveで用意したmatch処理は次のように呼び出して使用できます。
f:id:tyoshikawa1106:20160130175626p:plain


これでよくある再入力確認を実装できます。
f:id:tyoshikawa1106:20160130175717p:plain

正規表現チェック

独自の入力規則通りに入力されているかチェックしたい場合、ng-patternをつかって正規表現チェックが可能です。
f:id:tyoshikawa1106:20160130180024p:plain


電話番号の入力などで利用できます。
f:id:tyoshikawa1106:20160130180103p:plain


エラーメッセージの表示に使用したng-messageですが、利用したい場合、『angular-messages.js』を読み込む必要があります。
f:id:tyoshikawa1106:20160130180546p:plain


また、AppJsの処理で"ngMessages"の宣言を忘れずに行う必要があります。
f:id:tyoshikawa1106:20160130180648p:plain

ボタンの活性/非活性

AngularJsでは入力フォームのエラーを判定して活性/非活性を簡単に切り替えることができます。

活性

f:id:tyoshikawa1106:20160130181244p:plain

非活性

f:id:tyoshikawa1106:20160130181447p:plain


これを利用するにはformタグとname属性を宣言する必要があります。novalidateを宣言するとブラウザ側の入力チェックを無効にできるみたいです。
f:id:tyoshikawa1106:20160130181718p:plain


あとは、切り替えたいタグに『ng-disabled="inputForm.$invalid"』という感じで宣言してあげると反映されます。
f:id:tyoshikawa1106:20160130181837p:plain


自分がうっかりハマってしまったミスとして、エラーチェックはmg-messageの有無に関わらず実行されます。メッセージが表示されていないからといってエラーになっていないというわけでありませんでした。(裏でエラーになっていることに気づかずなんで切り替わらないんだろう・・と悩んでました。)


$invalidなどの詳細はこちらです

https://docs.angularjs.org/api/ng/type/form.FormController

入力チェックのタイミング

AngularJsにはフォーカスが外れたタイミングや値が変更されたタイミングを判定することもできます($dirtyなど)。ng-classと組み合わせて、値変更後にエラーチェックを行い、エラーの場合、CSSを追加というような使い方ができます。
f:id:tyoshikawa1106:20160130183044p:plain


デモ動画とサンプルコード

今回つくったサンプルページのデモ動画です。


サンプルコードはこちらです。

さいごに

今回、CSS部分はLightning Design Systemを利用しました。これにより自分でCSSを用意することなく実装することができました。Lightning Design Systemは本当に便利なCSSフレームワークだと思います。


またLighting Design Systemを利用することでLightning Experienceでもそのまま利用できるデザインを実現できます。
f:id:tyoshikawa1106:20160130185039p:plain


参照ページ(Read Only)もこの通りです。
f:id:tyoshikawa1106:20160130185153p:plain


S1ページでももちろん利用できます。
f:id:tyoshikawa1106:20160130185805j:plain:w200


ただ...Lightning Design Systemとは関係ないところの話ですが、PCで動いた画面をS1アプリで利用しようとした際に、実装方法が悪いのか入力時に画面が表示されなくなったりしました。(directiveで用意した別項目との値一致判定の処理を使用すると発生。)
f:id:tyoshikawa1106:20160130191112j:plain:w200


VFページをS1アプリとして利用する場合は思わぬ落とし穴があるみたいなので注意が必要そうです。


とりあえず、Lightning Design Systemは最高だと思いました。

Lightning Design System

SFDC:RemoteActionと複数ファイルのアップロード

$
0
0

JavaScript Remotingでファイルの一括アップロードする方法についてです。

f:id:tyoshikawa1106:20160131002119p:plain

input type="file"にmultiple属性を宣言することで一括アップロードが可能になります。accept属性でアップロード対象を特定のファイル種別に絞込できます。

<input type="file" name="attamentFile[]" id="attamentFile" multiple="multiple" accept="image/*" />

セットしたファイル情報はdocument.getElementByIdで取得したあと、.filesで取得することができます。

var uploadFile = document.getElementById('attamentFile');
uploadFile.file
// ファイル数 → uploadFile.file.length

f:id:tyoshikawa1106:20160131004046p:plain


ファイルの読み込み処理は『FileReader』を利用します。
f:id:tyoshikawa1106:20160131004430p:plain


注意点としてFileReaderは非同期処理となります。そのため複数アップロードのためにループ処理を行うときは実行順序を意識する必要があります。


AngularJSでは$q.defer()をつかって実行順序を制御できます。
f:id:tyoshikawa1106:20160131004700p:plain


$q.deferについてはこちらが参考になりました。


RemoteActionでApexクラスに値を渡す必要がありますが、Wrapperクラスを用意して渡す方法があります。
f:id:tyoshikawa1106:20160131005229p:plain

f:id:tyoshikawa1106:20160131005254p:plain

f:id:tyoshikawa1106:20160131010027p:plain


という感じでファイルアップロード処理を実装できました。


サンプルコード

SFDC:モバイルアプリの開発環境構築 (ハイブリッド開発編)

$
0
0

Salesforceモバイルアプリのハイブリッド開発についてです。

f:id:tyoshikawa1106:20160118202650p:plain

Getting Started with Hybrid Development Unit | Salesforce Trailhead

ハイブリッド開発の種類

f:id:tyoshikawa1106:20160118202817p:plain

ハイブリッド開発のための Mobile SDK のインストール

f:id:tyoshikawa1106:20160118203100p:plain


androidの場合はこちら。
f:id:tyoshikawa1106:20160118203138p:plain


あとはDeveloper環境と接続アプリケーションの設定が必要になります。
f:id:tyoshikawa1106:20160118203218p:plain

開発環境の準備と開発の流れ

Mobile SDK ハイブリッドアプリケーションを作成する前に、Node.js、Mobile SDK npm パッケージ、Cordova ビルドツールをインストールする必要があります。

接続アプリケーションの設定

ざっくりこんな感じです。
f:id:tyoshikawa1106:20160118205501p:plain

コールバックURLは一時的な値にして後で変更します。

mysampleapp://auth/success

Node.js と npm をインストールする

Node.jsは公式サイトからインストールします。

https://nodejs.org/en/

f:id:tyoshikawa1106:20160118204014p:plain

Cordova ビルドツール(Cordova コマンドラインをインストール)

f:id:tyoshikawa1106:20160118203417p:plain

Apache Cordova


npm installコマンドでインストールできるみたいです。

$ npm install -g cordova

f:id:tyoshikawa1106:20160118203719p:plain

詳細は公式サイトに記載があります。
f:id:tyoshikawa1106:20160118203552p:plain

forcedroid または forceios をインストール

forcedroid (Android用)
$ sudo npm install -g forcedroid
forceios (iOS用)
$ sudo npm install -g forceios


今回はiOS用で進めます。
f:id:tyoshikawa1106:20160118204543p:plain

ハイブリッドアプリケーションを作成する

インストールしたパッケージに応じて「forcedroid create」または「forceios create」と入力します。

今回はiOSアプリなのでこちら。

$ forceios create


以下のプロパティを指定します。(値は任意)

  • アプリケーション種別: hybrid_local
  • アプリケーション名: MyTrailHybridLocal
  • ターゲットディレクトリ: TrailHybridApps
  • パッケージ名: com.mytrail.hybrid
  • (forceios のみ) 組織名: com.mytrail.hybridlocal
  • (forceios のみ) 接続アプリケーション ID: 接続アプリケーションからコンシューマキーを貼り付けます
  • (forceios のみ) 接続アプリケーションコールバック URI: 接続アプリケーションからコールバック URL を貼り付けます

f:id:tyoshikawa1106:20160118214449p:plain

注意

f:id:tyoshikawa1106:20160118214818p:plain


正常に実行できるとこんな感じです。
f:id:tyoshikawa1106:20160131220436p:plain


ターゲットディレクトリに指定した『TrailHybridApps』の中に必要なファイル一式が作成されます。
f:id:tyoshikawa1106:20160131220700p:plain

ハイブリッドアプリケーションの実行

次のコマンドで実行できます。

$ cordova emulate ios

f:id:tyoshikawa1106:20160131221025p:plain


実行するとエミュレータが起動してSalesforceのログインページが表示されます。
f:id:tyoshikawa1106:20160131221120p:plain:w200


ログイン後は次のようにユーザ一覧が表示されました。
f:id:tyoshikawa1106:20160131221404p:plain:w200

初期表示画面の設定

ログイン後に最初に表示される画面を変更したい場合は、bootconfig.jsonファイルを編集します。
f:id:tyoshikawa1106:20160131221807p:plain


次のようにStartPageのところを"/apex/VFPageName"という感じで指定するとVisualforceページを表示できるようになります。(たぶんこんな感じ...)
f:id:tyoshikawa1106:20160131222020p:plain


こちらのサイトがわかりやすかったです。

Force.comをmBaaSとして利用したハイブリッド(Cordova)アプリ開発

SFDC:モバイルアプリの開発環境構築 (ネイティブ iOS 開発編)

$
0
0

Salesforceモバイルアプリのネイティブ iOS開発についてです。

f:id:tyoshikawa1106:20160131225014p:plain

Getting Started with Native iOS Development Unit | Salesforce Trailhead

はじめに

以下の3つの対応を行います。詳細は上記リンク先に記載があります。

  • XCodeインストール
  • Salesforce Mobile SDKインストール
  • Nodeインストール
  • 接続アプリケーション作成

補足

途中で『pod: command not found』というエラーが発生する可能性があります。次のGemコマンドでcocoapodsをインストールすれば解決すると思います。

$ gem install cocoapods --pre

手順

次のコマンドでiOS プロジェクトを作成します。

$ forceios create

以下のプロパティを指定します。(値は任意)

  • アプリケーション種別: native
  • アプリケーション名: MyTrailNativeApp
  • ターゲットディレクトリ: TrailiOSApps
  • パッケージ名: com.mytrail.ios
  • (forceios のみ) 組織名: MyApps, Inc.
  • (forceios のみ) 接続アプリケーション ID: 接続アプリケーションからコンシューマキーを貼り付けます
  • (forceios のみ) 接続アプリケーションコールバック URI: 接続アプリケーションからコールバック URL を貼り付けます


正常に実行されると次のようにファイルが作成されます。
f:id:tyoshikawa1106:20160131232156p:plain


作成された『MyTrailNativeApp.xcodeproj』はXCodeから開くことができます。
f:id:tyoshikawa1106:20160131232353p:plain


上部にあるアイコンからビルドできます。(赤枠で囲った部分)
f:id:tyoshikawa1106:20160131232528p:plain


ただし、実行前に接続アプリケーションの情報を設定に追加する必要があるみたいです。設定ファイルは「RemoteAccessConsumerKey」を条件にしてすると見つかると思います。「RemoteAccessConsumerKey」と「OAuthRedirectURI」に接続アプリケーションのConsumer KeyとCallback URLがセットされるように変更します。


こんな感じで進めればビルドが成功してエミュレータが起動したのですが、改めて試したらエラーになってしまいました。

'SalesforceRestAPI/SFRestAPI.h' file not found


設定手順の動画はこちらです。

参考記事


関連記事

SFDC:AngularJSのng-disabledでボタンの連続クリック操作をブロックする

$
0
0

保存ボタンをクリックするときですが、連続でクリックされて処理が複数回実行されないようにブロックしなくてはいけないケースがあると思います。AngularJSの場合、ng-disabledで簡単に対応することができます。


サンプルです。デフォルトではLockボタンが活性でUnLockボタンが非活性になっています。

Lockボタンクリック前

f:id:tyoshikawa1106:20160201181310p:plain

Lockボタンクリック後

f:id:tyoshikawa1106:20160201181256p:plain


HTML側は次のようになります。ng-disabledではOR条件なども利用することが可能です。

<div class="slds-m-top--medium">
    <button class="slds-button slds-button--destructive" ng-click="doLock($event)" ng-disabled="inputForm.$invalid || isLocked">Lock</button>
    <button class="slds-button slds-button--brand" ng-click="doUnLock($event)" ng-disabled="inputForm.$invalid || !isLocked">UnLock</button>
</div>


JS側です。変数『$scope.isLocked』を用意してクリック時に値を切り替えます。

var myApp = angular.module('myApp', ['ngMessages']);
myApp.controller('mainCtrl', ['$scope', function($scope) {
    $scope.accName = 'salesforce.com';
    $scope.isLocked = false;
    
    $scope.doLock = function(event) {
        event.preventDefault();
        $scope.isLocked = true;
        console.log('Lock!!');
    };
    
    $scope.doUnLock = function(event) {
        event.preventDefault();
        $scope.isLocked = false;
        console.log('UnLock!!');
    };
}]);


これだけで活性/非活性を切り替えて画面に反映することができます。今回、2つのボタンの活性/非活性を切り替えただけですが、実際は保存ボタン処理の最初で、保存ボタンを非活性にしてすべての処理が完了後に活性に戻します。これで連続クリックなどの操作をブロックできると思います。


注意点として、保存後に画面遷移を行うようなケースです。画面遷移処理が呼び出された後、ボタンを活性に戻す処理が実行されると、一瞬だけボタンが活性状態で表示されます。細かいところですが、画面遷移時にはボタンは活性に戻さないようにすると綺麗かなと思います。


ロック中はスピナーなどを表示すると使いやすいかもしれません。
f:id:tyoshikawa1106:20160201183111p:plain


Lightning Design Systemにもスピナー画像がいくつか用意されています。

<div class="slds-m-top--medium">
    <button class="slds-button slds-button--destructive" ng-click="doLock($event)" ng-disabled="inputForm.$invalid || isLocked">Lock</button>
    <button class="slds-button slds-button--brand" ng-click="doUnLock($event)" ng-disabled="inputForm.$invalid || !isLocked">UnLock</button>
    <div class="slds-spinner--medium slds-m-top--medium" ng-Show="isLocked">
        <img src="{!URLFOR($Resource.SLDS0121, '/assets/images/spinners/slds_spinner_brand.gif')}" alt="Loading..." />
    </div>
</div>


活性/非活性はng-disabledでしたが、表示/非表示の切り替えはng-Showまたはng-Hideで対応できます。

デモ動画

サンプルコード


SFDC:メールアラートの差出人メールアドレスと組織のアドレス

$
0
0

ワークフロールールと組み合わせてメールを送信できるメールアラート機能ですが、差出人をカスタマイズすることができます。

f:id:tyoshikawa1106:20160201224950p:plain


デフォルトでは『現在のユーザのメールアドレス』のみ選択できますが、組織のアドレスを用意することで、差出人として指定できるようになります。
f:id:tyoshikawa1106:20160201225305p:plain


こちらが組織のアドレス作成後の選択リストです。
f:id:tyoshikawa1106:20160201225431p:plain


このように実行時のユーザではなく、部署名やチーム名などを差出人として利用したい場合は組織のアドレスを作成することで対応できます。ちなみに組織のアドレスに登録できるメールアドレスは重複登録できません。同じアドレスで表示名を別のものとして登録するとエラーになります。
f:id:tyoshikawa1106:20160201225743p:plain


もうひとつ、プロセスの自動化設定でデフォルトのワークフローユーザを指定することができます。
f:id:tyoshikawa1106:20160201230218p:plain


このデフォルトのワークフローユーザもメールアラートの差出人として指定できます。
f:id:tyoshikawa1106:20160201230423p:plain


メールアラートの差出人はこのように追加することができました。

Android:HomebrewでAndroid SDKをインストール

$
0
0

MacでAndroidの開発環境を構築しようと思ったのですが、SDKをダウンロードしたりパス指定をしたりと少し大変な感じでした。もっと簡単にできないかなと思ったら次のサイトで紹介されていました。

橋本商会 » Android開発環境をインストールしなおした


Homebrewを使ってインストールできたみたいです。

$ brew info android
$ brew install android
$ which android


『brew info android』を実行すると次のように表示されます。
f:id:tyoshikawa1106:20160201235647p:plain


『brew install android』を実行するとこうなりました。
f:id:tyoshikawa1106:20160201235631p:plain


『which android』はパスを確認できます。
f:id:tyoshikawa1106:20160201235805p:plain


これでandroidコマンドが実行できます。
f:id:tyoshikawa1106:20160201235852p:plain


実行するとAndroid SDK Managerが表示されます。
f:id:tyoshikawa1106:20160201235930p:plain:w300


確認できたのはここまでですが、とりあえずAndroid SDKのインストールはHomebrewを使えばあっという間でした。

SFDC:メールや電話型項目の文字数上限について

$
0
0

入力画面で文字数の上限を決めるとき、特に指定がなければ、テキスト型だと255文字、ID型だと18文字...という感じで最大文字数が決まっています。今まで必要になることがなかったので意識していませんでしたが、電話とメールの最大文字数についての記載が見当たりませんでした。

f:id:tyoshikawa1106:20160202152930p:plain


なんとなく255文字かなと思ったのですが、Twitterで教えてもらえた情報によると80文字までとなっていたみたいです。


まずはメールアドレスです。80文字のサンプルアドレスを用意しました。

samplexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@example.com

これは問題なく登録できます。続いて1文字追加した81文字のサンプルアドレスをコピペで入力します。

sample2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@example.com

すると次のように上限を超えた部分が自動で除外されました。
f:id:tyoshikawa1106:20160202153837p:plain


Apexから強引に登録するとどうなるかも確認してみました。きちんとExceptionエラーで弾かれるみたいです。
f:id:tyoshikawa1106:20160202154520p:plain


電話型の場合は40文字が最大となっていました。

090-000-111111111111111111111111111111111

f:id:tyoshikawa1106:20160202154947p:plain


FAX型も40文字でした。
f:id:tyoshikawa1106:20160202155308p:plain


ここまで確認して気づいたのですが、AppExchangeに公開されているテーブル設定取得で項目定義見れば全部確認できました。
f:id:tyoshikawa1106:20160202155359p:plain


標準の項目定義には記載がありませんが、ちゃんと上限が決まっていて保存できないようになっていました。

追記

あと今まであまり気にする必要がありませんでしたが、カスタムオブジェクトのName項目は80文字までですが、標準のName項目はオブジェクトによって違ったみたいです。

取引先の場合

f:id:tyoshikawa1106:20160202234542p:plain

商談の場合

f:id:tyoshikawa1106:20160202234613p:plain

SFDC:オブジェクト項目の文字数を取得する方法

$
0
0

apexタグに頼らずにJavaScript Remotingを中心に開発する場合は入力欄の文字数上限にも注意が必要になります。AngularJSの場合はng-maxlength属性で簡単に指定できたりします。
f:id:tyoshikawa1106:20160203230312p:plain


とはいえオブジェクト画面から項目の文字数を1つ1つ確認していくのは大変です。カスタム項目の場合は後から文字数が変更される可能性も考えられます。


『$ObjectType』を利用することで簡単に解決できます。良くラベル取得でお世話になる『$ObjectType』ですが、次のように記載すると項目の文字数を取得することが可能です。

{!$ObjectType.Contact.Fields.LastName.Length}


使用例です。メッセージ側にも埋め込むことができます。これによりmaxlengthで指定した値とメッセージで表示する値を間違えて入力するようなミスも防止することができます。
f:id:tyoshikawa1106:20160203231348p:plain


こんな感じになります。
f:id:tyoshikawa1106:20160203231608p:plain


上記のとおり項目の文字数上限を取得したいときは$ObjectTypeが便利です。ちなみにこの$ObjectTypeはApexクラス側では利用することができません。自分はあまり必要になったことがなかったのですが、Apex側で項目の文字数上限値を取得したい場合は次の処理で取得できます。

Schema.SObjectType.Contact.fields.LastName.Length

f:id:tyoshikawa1106:20160203232109p:plain

f:id:tyoshikawa1106:20160203232124p:plain:w300


このようにApex側ではSchemeを使って対応できるようになっています。


$ObjectTypeにはLabelやLength以外にもいろいろ用意されています。HelpTextの情報を取得する処理には何回かお世話になりました。詳細は開発者ガイドにまとめられています。

関連記事

SFDC:Spring'16 新機能説明会 Webinarのメモ

$
0
0

f:id:tyoshikawa1106:20160205181333p:plain

メモ部分

  • Lightning Experience
    • 有効化のためのLightningセットアップツールの情報がより充実した。プレビューやリンクの追加。
    • ナビゲーション・メニューのカスタマイズが可能になった。
      • アプリケーション
      • カスタムオブジェクト
      • Visualforceタブ
      • Lightningコンポーネントタブ
      • Canvasアプリケーション
      • Webタブ
      • ナビゲーションメニューは最大10個作成可能
      • クラシックのアプリケーションという考え方はExperienceではなくなる。
  • App Builder
      • 選択リストに候補を表示できる
      • レコードのホームのカスタマイズ(Pilot)
      • 活動タブなどのところに独自タブを追加できる。
  • プロセスビルダー
      • プロセスの実行順序をビルダー上のマウス操作だけで並び替えできるようになった。
        • 今までは別バージョンを作成し直す必要があった。
      • その他いろいろ使いやすくなった。
    • ブラウザキャッシュ
      • デフォルトで有効状態(設定で有効/無効切り替え可能)
      • 通信を少なくしてパフォーマンス向上
      • Lightnig Applicationから実行された場合は機能しない
    • グローバル選択リスト(Beta)
      • 選択リスト値の再利用ができる
      • 頻繁に利用するsねんたくリスト値を一つの場所で間rにできる
      • 4000以上のIdea Exchangeポイントを獲得した待望の新機能
      • 選択リストの値をクリーンに保つ
      • 値の作成に対する制限
        • リストに無い値をAPIなどで強制登録するのを防止できる
    • セキュリティヘルスチェック
      • Lightning 及び Classicで利用可能
      • 即時スキャン・分析が可能
      • その他いくつか記載がありました。
      • Salesforce組織無いで利用できるみたい
  • デモ
    • Excepriceの設定メニューは対応していない機能はアクセスできない。クラシックから。
    • グローバル選択リストの定義を理由する際は、カスタム項目の選択リスト作成時に設定が追加されている。
  • Apex & VF & Lightning Component
    • Visualforce for Lightning Experience (Beta)
      • VFをLEXナビゲーションメニューに追加できる
      • UIThemeコンテキスト編集でユーザが見ているビュー(S1, Classic, LEX)を取得できる
        • $User.UITheme, $User.UIThemeDisplayedなどやUserInfo.getUiTheme(), getUiThemeDisplayd()
      • LEXではヘッダー及びサイドバーは常に非表示。ページタイトルの指定も不可
      • window.locationではなく、sforce.oneを利用すること
      • StaticURLを生成する機能が動作しない場合がある
        • {!URLFOR(...)}
        • jsのnavigateToSObject(recoredId)
      • 幾つかのVFによるアクションの上書きはLEXでは動作しない
        • 選択リストに対するアクション
        • 関連リストに対するアクション
      • apex:iframeは非推奨
    • Lightning Out(beta)
      • Lightnig ComponentをVisualforceページで利用できる
      • Node.jsやGmailのHTMLテンプレートでもLightning Componentsを利用できる
        • サードパーティライブラリで利用可能。
      • LigthnigコンポーネントをClassicとLEXの両方に対応するときに便利
      • LightningコンポーネントタブはClassicからはアクセス不可
    • aura:tokendsタグがプレビュー版として利用できる
      • デザイン用の変数として利用できる(background-colorとか?)
      • セキュアなクライアントキャッシュでパフォーマンスの向上
    • Apexテストの機能拡張
      • よく使うApexクラスをテストスイートとして予め登録しておけるようになる
      • エラー発生時のテスト実行の停止が可能になる
        • 失敗回数が一定数を超えた時にテスト実行を停止するしきい値が設定可能
      • ApexテストないでレコードのCreatedDateをテスト用に変更可能
        • System.Test.setCreatedDate
      • いくつかバグ修正
        • 通貨からcurrency to decimal comparisions
        • 特定の状況でMIXED_DML_OPERATIONエラーがでる
        • test.startTestを読んだ際のLIMITクリア
      • Apex Flex QueueJobの位置確認ができる
    • Lightning Component
      • アクセスチェックの強化
      • accessシステム属性がないResourcesにアクセスした場合、ブラウザコンソールに警告が発生
      • Summer'16からは警告ではなくアクセス不可になる
      • formatによるカスタム表示ラベルの動的な利用
  • APIの機能拡張
    • レポート/ダッシュボードのプライベートフォルダを検索するためのallPrivateスコープが利用可能になる
    • DISTANCE()による地理位置情報ベースクエリのサポート
    • convertCurrencty()による通貨変換
    • FORMAT()による数値、日付、時刻、通貨のフォーマット変換
    • ストリーミングAPIの機能拡張
      • 汎用ストリーミング・イベントのリプレイ(GA)
        • 過去24時間に発生したイベントであればサブスクライバは接続していない間に発生したイベントを受信可能
        • 通知メッセージにreplayIdが追加
        • replayオプションでどのイベントから通知を受けるか指定
      • PushTopicストリーミングイベントのリプレイ(Beta)
    • REST API
      • parameterizedSearch
        • 検索文字列をparameterとして渡しグローバう検索が可能
      • Sobjectリレーション
        • オブジェクトとに関連する別のオブジェクトを取得できる(...という感じのことが書いてあった。)
      • reportMetadataに機能追加
    • ログインエンドポイントとしてwww.salesforce.comの廃止
      • login.salesforce.comを利用すること
    • その他
      • Bulk APのJSONサポート
      • Wave REST APIの正式リリース
      • ..などなど
    • 認証とIdentity
      • 新しいSalesforce Authenticator
        • 2要素認証に利用可能なモバイルアプリケーション
        • 位置情報を利用して、信頼されたロケーションからのアクセスであることを確認
      • プラットフォームの暗号化
        • コミュニティのデータ暗号化
        • メールの添付ファイルの暗号化
  • 変更セット
    • Wave Analtyticesようのコンポーネントが選択できる
    • Sandboxテンプレートがいろいろ改善
    • Sandbox作成/リフレッシュ後にタスク実行できる(Apexを呼び出せる)
      • SandboxPostCopyインターフェースをimplement
  • 重要な更新
    • 鍵管理権限はデフォルトでは付与しない
      • 使うときは有効化すること
    • メールテンプレートとレターヘッドにおけるスクリプトの使用不可
    • お知らせJavascriptは利用不可(CSSハックなども同様)

Q & A

Q, Force.com EEのナビゲーションメニューの上限は
A, EEの場合は10個まで。この制限はPEかEEかの依存しかない。


Q, ナビゲーションメニュー作成時のラベルはトランスレーションワークベンチなどで多言語化することは可能でしょうか。
A, 多言語化可能。タブのトランスレーションワークベンチが適用される。


Q, Lightning OutでVisualforceページ上にLightningコンポーネントを表示した場合、Classicの標準CSSの影響を受けたりするのでしょうか。
A, 基本、Lightning OutはVFのCSSの影響を受けないようになっている。自分で強引にやろうとするとVF側の影響を受ける可能性は考えられる。


Q, グローバル選択リストの利用はLEXで使えるか
A, 利用は可能。設定はまだClassicのみ。


聞き間違えがなければこんな感じでした。

SFDC:AngularJSのng-patternと正規表現をつかった電話番号の入力チェックについて

$
0
0

AngularJSのng-patternをつかって電話番号の形式チェックで正規表現がうまく書けなくて悩んでいたのですが、やりたかったことがそのまま解説された記事がQiitaで公開されていました。


正規表現を簡単に検証できるサイトはこちらとのことです。

正規表現の読み方

上記記事に全部書いてあることですが、自分用の勉強メモです。

\d = 半角数字を表す

  • 例) \d\d-\dの場合は「半角数字が2個の後にハイフン1個半角数字が1つ」を表す


末尾のg = グローバルオプション

  • gあり : 一致する文字列をすべて抽出
  • gなし : 最初の1件が見つかったら検索終了


{n,m} や {n}

  • 文字の個数を表すメタ文字
  • \d{3}の場合は3文字の数字のみ一致する
  • \d{3,5}の場合は3文字から5文字の数字のみ一致する
  • \d{3}-\d{2}と指定した場合 → 123-12 のいう値が一致する


[-(]や[-)]

  • ハイフンまたは括弧を表す
  • 例) \d{3}[-(]\d{1}[-)]\d{2}の場合以下の文字列が一致する
    • 111-1-11
    • 111(1)11
    • 111(1-11
    • 111-1)11

f:id:tyoshikawa1106:20160206123537p:plain


[ ] 中のハイフン

  • [a-c]というように[ ] 中のハイフンを宣言した場合、aまたはbまたはcというように文字の範囲を表す
  • [-ac]や[ac-]の場合はaからcの文字範囲またはハイフンを表すみたいです。

f:id:tyoshikawa1106:20160206123937p:plain


という感じみたいです。謎の文字列に見えていたものがようやく何を意味していたのかわかるようになった気がします。


これも記事内のサンプルを真似たものですが、以下のような場合

0[1-9]\d{0,3}[-(]\d{1,5}[-)]\d{1,5}
  1. 0から始まる
  2. 1から9までの数値を1文字入力
  3. 数値を0文字から3文字まで入力
  4. ハイフンか括弧「(」を入力
  5. 数値を1文字から5文字まで入力
  6. ハイフンか括弧「)」を入力
  7. 数値を1文字から5文字まで入力

という意味でした。
f:id:tyoshikawa1106:20160206125141p:plain

ng-patternで試してみました

今回は括弧は不要なのでこんな感じ

0[1-9]\d{0,3}-\d{1,5}-\d{1,5}

ng-patternで指定したら何故か反応しなかったのですが、先頭に『/^』を宣言して末尾に『$/』を宣言したら解決しました。なので次のようになります。

ng-pattern="/^0[1-9]\d{0,3}-\d{1,5}-\d{1,5}$/"

f:id:tyoshikawa1106:20160206130108p:plain

0120-12345-12345

これはOK
f:id:tyoshikawa1106:20160206125523p:plain

090-12345-12345

これもOK
f:id:tyoshikawa1106:20160206125726p:plain

090(12345)12345

括弧は除外しているのでNG
f:id:tyoshikawa1106:20160206130302p:plain

01-123-123

これもOK
f:id:tyoshikawa1106:20160206130437p:plain

0X-123-123

半角英数時のみ許可しているのでXが入るとエラー
f:id:tyoshikawa1106:20160206130528p:plain

01201234512345

区切り文字がない場合はエラー
f:id:tyoshikawa1106:20160206133443p:plain


これでやりたかったことがうまくいきました。

その他の方法

最大10文字まで、数字またはハイフンのみ許可したい場合はこうでした。

ng-pattern="/^[-0-9]{0,10}$/"

10文字以下で数値のみ
f:id:tyoshikawa1106:20160206132835p:plain

11文字以上で数値のみ
f:id:tyoshikawa1106:20160206132912p:plain

10文字以下でハイフンあり
f:id:tyoshikawa1106:20160206132952p:plain

ひとつ、もしかして・・・と思ったことがあったのですがちゃんと全角数字もエラーにしてくれました。
f:id:tyoshikawa1106:20160206133918p:plain


海外の電話番号に出てくる先頭の+記号を許可したい場合はこんな感じっぽいです。

ng-pattern="/^[\+]?[-0-9]{0,10}$/"

f:id:tyoshikawa1106:20160206133110p:plain

先頭以外に+を宣言するとエラー
f:id:tyoshikawa1106:20160206133142p:plain


だいぶ使い方がわかった気がします。Qiitaに投稿されていた「正規表現入門・その1」すごく勉強になりました。

SFDC:Force.comサイトで不正なURL入力時に画面遷移する方法

$
0
0

Force.comサイトでは不正なURL入力時のエラー画面をエラーページ設定で指定することができます。

f:id:tyoshikawa1106:20160207173018p:plain


例えばこんな感じです。
f:id:tyoshikawa1106:20160207173143p:plain


エラーページではなく、TOPページなど特定のURLへ画面遷移させたい場合もあると思います。その場合は、pageタグでactionを宣言して移動したいURLを指定することで対応できます。

<apex:page showHeader="false" action="https://www.salesforce.com/jp/">
</apex:page>

f:id:tyoshikawa1106:20160207173756p:plain



上記のように宣言後、存在しないURLを指定すると
f:id:tyoshikawa1106:20160207173937p:plain


actionで指定したURLのページに移動させることができます。
f:id:tyoshikawa1106:20160207174009p:plain


Force.comサイトで不正なURLへの対応はこのように行うことができます。

追記

カスタム表示ラベルなどURLを変数指定する場合、actionにそのまま指定するとエラーになります。
f:id:tyoshikawa1106:20160208102500p:plain


次のようにURLFOR関数を利用することで解決できます。

<apex:page showHeader="false" action="{!URLFOR($Label.SitesTopPageUrl)}">
</apex:page>

SFDC:【改良版】RemoteActionと複数ファイルのアップロードについて

$
0
0

少し前にRemoteActionをつかってファイルアップロードする方法についてブログにまとめました。


これを書いた後ですが、テストのときに大きめのファイルをアップロードしたところ、とあるエラーが発生してしまいました。『Input too long. 』というエラーです。
f:id:tyoshikawa1106:20160209011013p:plain


このInput too longエラーの原因ですが、大きいファイルを1回でアップロードしようとすることで発生するみたいです。1つのファイルを分割して登録していくという対応が必要になるとのことです。


これについての詳細はこちらのブログで詳しく解説されていました。
f:id:tyoshikawa1106:20160209011705p:plain

Uploading Attachments to Salesforce using Javascript Remoting | ForceAdventure


上記ブログで紹介されていた対応方法でInput too longエラーの問題は解決しました。


ですが、今回は1ファイルのアップロードだけでなく複数ファイルの一括アップロードもできるようにする必要がありました。そのためループ処理でRemoteActionをファイル件数分実行してみたのですが、次のエラーが発生しました。

Cannot read property 'tid' of undefined


検索してみるとRemoteAction処理が正常に呼び出せなかった時に発生するみたいでした。1ファイルのアップロードなら3MBのファイルでもアップロードできたのですが複数ファイルをアップロードしようとするとエラーになります。おそらく非同期処理のRemoteActionが並列実行されるとエラーになる感じではないかと思います。


RemoteActionが順番に実行されれば解決するかと思いAngularJsのPromiseなどで頑張ってみたのですが、この方法ではうまくいきませんでした。


そのときの試行錯誤のイメージがこちらです....

https://gist.github.com/tyoshikawa1106/eb8b3a5f0c9eb48894de


考えられる対応方法は一通り試してみたのですがうまくいく気配がなかったので、何か参考になる情報はないか探してみたところ、まさしくやりたいことについてまとめてくれているブログがありました。

f:id:tyoshikawa1106:20160209013149p:plain

Salesforce MVP Brings Multi-file Uploading to Salesforce


これをベースに試してみたところ、大きいファイルサイズの一括アップロード処理を動かすことができました。


実際にアップロード処理を行っているときのデモ動画です。


完成したサンプルコードはこちらになります。


結局Promiseをつかった非同期制御は必要なかったみたいです。試行錯誤していたときは複雑な感じの書き方になっていたのですが、実際に動いたコードはすごくスッキリしていました。


いくつかのパターンを確認してみて、1ファイルのアップロードも複数ファイルの一括アップロードも1MBを超える大きなファイルのアップロードも正常に実行できたので、RemoteActionのファイルアップロードはこの方法で対応できそうです。


このファイルアップロード処理は他の場面でも汎用的に利用出来そうな感じでした。


とりあえず、海外の開発者の方がブログにまとめていてくれて本当に助かりました。

JavaScriptでFileAPIを利用するときの注意

$
0
0

ファイルアップロード処理実装後、IEで動作確認した際に、readAsBinaryString処理でエラーが発生しました。

f:id:tyoshikawa1106:20160210103844p:plain


この問題はreadAsBinaryStringをreadAsArrayBufferに変更することで解決しました。こちらのブログでわかりやすく紹介されていました。


サンプルコードです。

SFDC:ログインページでTrustを表示してみました

$
0
0

ログインページにTrustを表示してみました。
f:id:tyoshikawa1106:20160212010907p:plain

https://trust.salesforce.com/trust/jp/


私のドメインを有効化するとログインページのカスタマイズができるようになります。このとき右側のスペースに任意のサイトを表示したり、画像を表示したりできるのですが、何か表示して便利なものはないかと思い試してみました。
f:id:tyoshikawa1106:20160212011253p:plain


ちなみに表示できるサイトはHTTPSになっている必要があります。
f:id:tyoshikawa1106:20160212011505p:plain


またログインが必要になるサイトだったりすると『X-Frame-Options』エラーになることもありました。
f:id:tyoshikawa1106:20160212012031p:plain


悩んだらとりあえずTrust表示しとくと以外と便利かもしれません。

SFDC:コミュニティユーザとForce.comサイト

$
0
0

コミュニティユーザとForce.comサイトについてです。ひさしぶりにサイト開発の勉強でもしようかなとDev環境で一から設定を進めていました。


カスタマーポータルユーザでサイトからログインしたい場合はログイン設定ボタンからログイン許可を行う必要がありました。
f:id:tyoshikawa1106:20160213160304p:plain


少し前にカスタマーポータルユーザが廃止されコミュニティユーザとして用意することになりました。コミュニティユーザもポータルユーザと同じ方法でログインできるだろうと設定画面をみると有効化が行えませんでした。
f:id:tyoshikawa1106:20160213160456p:plain


ひょっとしてコミュニティユーザはサイトからログインできないの...?と少し焦ったのですが、コミュニティユーザの場合仕組みが少し異なりました。


コミュニティでは設定でログインページをVisualforceに変更できます。
f:id:tyoshikawa1106:20160213160716p:plain


なのでForce.comサイトで用意したログインページではなくコミュニティ用に用意されたログインページからログインすればいいみたいです。


ちなみにログインページにVisualforceページを指定する際に『 コミュニティゲストユーザがアクセスできるページのみを選択できます』とエラーが発生することがあります。
f:id:tyoshikawa1106:20160213161120p:plain


ここで出てくる『 コミュニティゲストユーザ』とはForce.comサイトのゲストユーザと同じものです。なのでサイト設定画面の公開アクセス設定ボタンからゲストユーザ向けプロファイル設定画面に移動してアクセス権限を追加するとエラーが発生しなくなります。
f:id:tyoshikawa1106:20160213161649p:plain


f:id:tyoshikawa1106:20160213161702p:plain
※ゲストユーザプロファイルの行き方は他にもあるかも。


コミュニティユーザがログインして利用する外部サイトを用意する手順はこんな感じでした。コミュニティ用のURLに変わるっぽいので少し勝手が違いましたが、ログイン不要な部分はForce.comサイトで公開して、ログイン後はコミュニティ側に移動して対応する流れになるみたいです。

追記

SFDC:コミュニティユーザとForce.comサイト - その2

$
0
0

コミュニティユーザとForce.comサイトについてです。今までポータルユーザでサイトにログインできましたが、コミュニティユーザになってから少し勝手が変わりました。


詳細はこちら。


とりあえずコミュニティの設定でログインページをVisualforceに変更可能なことまで確認できました。
f:id:tyoshikawa1106:20160213160716p:plain


ログインページの設定は変更できたのですが、コミュニティ設定画面にエラーページの設定などが見つかりませんでした。コミュニティはサイトのようにエラーページを設定したりできないのかと悩んでいた所、Twitterで対応方法を教えてもらいました。


コミュニティの設定画面ではなく、コミュニティのサイト設定ができたみたいです。
f:id:tyoshikawa1106:20160214004255p:plain


コミュニティ用のサイト設定画面です。
f:id:tyoshikawa1106:20160214004526p:plain


こちらは通常のサイト設定画面。
f:id:tyoshikawa1106:20160214004605p:plain


最初、共通の設定画面が表示されているだけだと思いましたがよくよく見てみると細かいところが違っていました。ここの設定画面からエラーページの設定が可能になっているみたいです。
f:id:tyoshikawa1106:20160214005111p:plain


エラーページを設定することできちんと反映されました。
f:id:tyoshikawa1106:20160214010448p:plain


今までのポータルユーザとコミュニティユーザは少し設定の流れが異なりました。サイトURLとコミュニティのURLは別のものになるのでログインが必要でコミュニティを使うときはちょっと注意が必要そうです。

Viewing all 1438 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>