SFDC:Lightning Experienceとナビゲーション処理
SFDC:組織で共通の数式項目を用意する方法
Salesforceのカスタマイズで便利な数式項目ですが、不特定多数のオブジェクトで共通で利用できるような式の場合、一箇所で管理できると便利だと思います。
そんなときはカスタム設定が便利です。設定種別が階層型のカスタム設定なら数式項目からでも$Setupで呼び出す事が可能です。これを利用すればカスタム設定に登録した値を複数のオブジェクトで参照することが可能です。
・・・なのですが、カスタム設定には作成できるデータ型に数式項目が用意されていません。そのため『本日の曜日』をセットするといったことは通常できません。
この問題の解決方法ですが、Apexをスケジュール登録して実行する機能を利用することで解決できます。
定期的に実行するApexバッチを登録して処理を行うときに利用する機能ですが、バッチ以外のApex処理も実行することが可能です。これを使って1日1回カスタム設定の値を更新するようにすれば値を動的に変更できるかと思います。
けっこう頑張らないといけない感じですが、組織で共通の数式項目を用意する方法としてはこういったやり方が考えられました。
SFDC:Salesforce Summer 2016 - Osaka Keynote
Salesforce Summer 2016 OsakaのKeynote動画が公開されていたので見てみました。
動画はYoutubeのJPsfdcのチャンネルから見れます。
日本市場へのコミット
- Salesforce Ventures Japan
- ベンチャー企業への継続的な投資を行っている
- 第二データセンター開設
- 関西地区に間もなくオープン
新しいテクノロジーモデル
- インフラではなくイノベーションに注力
- マルチテナントクラウドコンピューティング
- 各社のビジネス固有の要件に対応
- 拡張性に優れたメタデータプラットフォーム
- 信頼性の高いエンタープライズクラウド
- セキュリティ | 可用性 | パフォーマンス
アプリケーションをつくるときにインフラに時間をかけずに作れる環境を用意した。データのためのデータ、メタデータを用意することでテクノロジーの進化にあわせてバージョンアップを円滑に進められるようにした。セキュリティやログ管理やバックアップなど企業向けクラウドとして世界トップレベルの管理を実現。
新しいビジネスモデル (Salesforceのビジネスモデル)
- 従来課金モデル
- Custommer Sucessチーム
- 大規模なエコシステム、コミュニティ
今までIT資産を持つと始めに高いコストが必要になった。Salesforceでは利用した分だけ料金が発生する仕組みなので利用開始時に高コストが発生することが無い。(極端な話だと使ってみてイマイチだったらいつでもやめられるイメージ → 主導権は顧客が持てる仕組み)
Custommer Sucessチームがあるので、顧客の悩みなどの相談に乗れる仕組みがある。(利用方法のアドバイス、パフォーマンス向上にはどうすればいいかなど)
新しい社会貢献
Salesforceの1 : 1 : 1モデルの話。社会貢献に力を入れてる話。
事例紹介
- 総務省
- ビームス
カスタマーカンパニーの実現 (セッションのまとめ)
- 新しいカタチで顧客と繋がる
- スマートフォンからビジネスを動かす
- One to Oneのカスタマージャーニーを描く
- 顧客をより理解する
Sales Cloud 担当 EVP アダム・プリッツァーさんの話
Salesforce - 17年間に渡るイノベーションの積み重ね
- セールス
- サービス
- マーケティング
- Chatter
- 年3回のリリース
- マルチテナントインフラストラクチャ
- 拡張性の高いプラットフォーム
数年かけてプラットフォームを再構築
- 2013 : モバイルエクスペリエンスを再構築 (Salesforce1 Mobile)
- 2014 : プラットフォームを再構築 (Salesforce1 Lighnting)
- 2015 : エクスペリエンスを再構築 (Lightning Experience)
ビジネスをモバイルへ、Salesforceでできることをモバイルからできるように。
Lightning ですべてのエクスペリエンスがつながる
- エクスペリエンス・プラットフォーム・エコシステム
- どんなデバイスでも共通のエクスペリエンスを
- Lightning Componentをつくればドラッグ&ドロップでエクスペリエンスに追加できる
CRMのグローバルリーダー
業界トップクラスの7つのアプリがひとつのプラットフォームに
Sales Cloud
- マジックアドランドでSFA部門の「リーダー」の評価を獲得
- セールスオートメーションアプリケーションの市場シェア1位 (2014年)
Service Coud
- マジックアドランドでCRMカスタマーエンゲージメントセンター部門の「リーダー」の評価を獲得
- カスタマーサービスアプリケーションの市場シェア1位 (2014年)
Marketing Cloud
- マジックアドランドでデジタルマーケティングハブ部門の「リーダー」の評価を獲得
Community Cloud
- マジックアドランドで水平型ポータル部門の「リーダー」の評価を獲得
App Cloud
- マジックアドランドでエンタープライズアプリケーションPaas部門の「リーダー」の評価を獲得
Sales Cloud Lightning
『世界No.1のセールスアプリ』
- それぞれのスタイルにあった営業
- Lightning Platformとそのエコシステム
- スピーディーな営業
- Salesforce CPQ
- Microsoft製品との連携
- スマートな営業
- Salesforce IQ Inbox
- Sales Wave App
- 場所を選ばない
- Salesforce1モバイルアプリ
Analytics Cloud
『先進のアナリティクスプラットフォーム』
- すべてのユーザがあらゆるデータと繋がる
- Wave Platform
- ほしい答えをリアルタイムに入手
- Sales Wave App, Service Weve App
- インサイトからアクションを起こす
- Waveアクション
- どこからでも意思決定
- Waveモバイルアプリ
App Cloud Lightning
『世界No.1のクラウドアプリ開発環境』
- 誰もが手軽にアプリを開発
- Lightningアプリケーションビルダー
- プロセスビルダー
- 最新の開発エクスペリエンス
- Heroku Enterprise
- Lightning Design System
- No.1の業務アプリエコシステム
- AppExchange
- Lightningコンポーネント
- 信頼、拡張、連携
- Salesforce Shield
- Connect
- Thunder
Salesforce CPQ
『Lightning Experienceで実現するQuote-to-Cashソリューション』
- 見積りの精度を向上
- わかりやすい見積り書を簡単に作成
- ブランドを反映した提案書を短時間に作成
- カスタムテンプレートで個々のビジネスニーズに対応
- 見積りから入金までのプロセスを自動化
- リード獲得から売上計上までのジャーニーを効率化
Salesforce CPQは新しい製品です。
Service Cloud Lightning
『世界No.1のカスタマーサービスアプリ』
- つながるサービス
- Lightning Platformとそのエコシステム
- スピーディーなサポート
- Lightning サービスコンソール
- オムニチャンネルサポート
- スマートなサービス
- Service Wave App
- 個別化したService
- Service CloudのSOS機能
- Field Service Lightning
Marketing Cloud
『No.1のマーケティングアプリ』
- One to oneのカスタマージャーニー
- ジャーニービルダー
- あらゆるチャンネル、デバイスに対応
- メール、モバイル、ソーシャル、広告、Web、IOT
- 予測マーケティング
- プレディレクティブジャーニー
- つながるCRM
- 顧客ライフサイクルに渡るエクスペリエンスの向上
Community Cloud
『No.1のコミュニティプラットフォーム』
- ビジネスプロセスと連携
- ファイルやレコード、データの取り込み
- スピーディーにつながる
- Lihgnitngコミュニティビルダー
- コミュニティテンプレート
- AppExchangeのLighnting Component (New)
- スマートにつながる
- コンテンツやおすすめのパーソナライズ
- あらゆる場所でつながる
- ブランディングを反映したモバイルエクスペリエンス
Field Service Lightning
『今秋、国内で一般提供を開始』
- すべてのサービス関係者がつながる
- エージェント
- ディスパッチャー
- 屋外
- 遠隔地の作業員のためのツール
- スケジュール調整、作業要員の派遣を自動化
- 技術者のスキル
- 予定の空き状況
- 現在地にもとづきサービススケジュールの自動調整
- 作業をリアルタイムに管理
- 作業手順や状況をあらゆるデバイスから更新可能
Field Service Lightningは新登場の機能
さいごに
こんな感じでした。
SFDC:REST APIで組織の制限情報を取得
REST APIでSalesforce組織の制限情報を取得する方法についてです。海外のDEVELOPERがTwitterで共有していました。
取得方法は次の通り。Workbenchで動作確認するのが簡単です。
/services/data/v37.0/limits
実行結果はこんな感じです。
データストレージやファイルストレージの情報も取得できます。
このときの設定から確認できるストレージ利用状況です。
Remainingは残りの利用できる数値が表示されるみたいです。
SFDC:プレリリース環境でWinter'17を試してみました
プレリリース環境でWinter'17を試してみました。Winter'17版プレリリース環境へのサインアップは『8/18』、リリースノートの公開は『8/19』の予定ですが既存のプレリリース環境は既にアップデートされているみたいです。
Twitterのタイムラインで動かしてみたツイートをしている方が何人かいたので、昔作成していたプレリリース環境にログインして試してみました。
リリースノートはまだなので新機能の確認はできませんが、Lightning Experienceの新しいナビゲーションは確認することができました。
「Winter'17でデザインを変更します」とアナウンスがあったときは、「えっ..」と思ったりもしたのですが、実際に動かして見るとこのナビゲーションの方が使いやすかったです。
Summer'16までのナビゲーションは1つのプロファイルに1つナビゲーションしか紐付けできなかったため、少し設定しずらい部分があったのですが、新しいナビゲーションはSalesforce Classic版と同じで1つのプロファイルに複数のアプリケーションを紐付けて利用できるので、利用者にあわせて柔軟なカスタマイズができそうでした。
またアプリケーションランチャーからは、個別のタブにもアクセスできるようになっていました。
アプリケーションを切り替えなくてもVisualforceタブなどに直接アクセスができるみたいです。
これでSalesforce Classicのときの『+』タブと同じような使い方ができました。
ナビゲーションの仕様が変更されたので、Summer'16までのナビゲーションの設定はどうなったのかなと確認したところ、アプリケーションの設定にアクセスできるように変更されていました。
とりあえず簡単に動かしてみて確認できたのはこんな感じです。Winter'17の新機能はリリースノートが公開されてから確認しようかなと思います。
SFDC:Salesforce MVPについての話
だいぶ前ですがこういう記事を書いてる方がいました。
SFDC:開発者コンソールからのApex実行権限
Apexの処理は通常システム権限で実行されますが、開発者コンソールなどからApexを実行するとき、『匿名ブロック内』で実行する場合は、現在のユーザのオブジェクトレベルの権限と項目レベルの権限で実行される仕様となっています。
開発者コンソールから実行するときはちょっとした動作確認とかだったりするのであまり気にすることがなかったなと思いました。
SFDC:Winter'17 Lightning ナビゲーションのカスタマイズを試してみました
プレリリース環境のWinter'17バージョン組織でLightning ナビゲーションのカスタマイズを試してみました。Summer'16までのナビゲーションは表示するタブの設定ぐらいしかできませんでしたが、Winter'17の新しいナビゲーションはロゴや色の設定ができるようになったみたいです。設定のナビゲーションメニューからアプリケーションをカスタマイズできます。
最初に確認してみたのですが、セールスやマーケティングなどの標準アプリケーションはロゴやナビゲーションのカスタマイズはできませんでした。
ですがShow in Lightning Experienceといった設定が追加されていました。
ナビゲーションをカスタマイズできるアプリケーションですが、『New Lightning App』のボタンから作成する必要があるみたいです。
こちらが設定画面です。
こんな感じでアイコンや色のカスタマイズを指定することができました。
ユーティリティバーの有効化という設定もありました。Lightning Voice関係の機能だと思います。
ナビゲーションに表示するタブの設定はこんな感じ。
最後にこのナビゲーションを利用できるプロファイルを指定して設定完了です。
これでアプリケーションランチャーに表示されるようになりました。
実際にアクセスしてみると設定どおりにロゴが表示されました。Experienceにはブランドロゴを表示する機能が無かったのでWinter'17から表示できるようになったのは良かったと思います。
色についてはメニューの線の色が変更されるみたいです。自分のイメージはこんな感じになると思っていたのでちょっと思っていたのとは違いました。(設定が他にあるのか今後できるようになるのかもしれません。)
ひとまずLightningナビゲーションの設定はこんな感じでした。ブランドロゴが設定できるようになったので、また1つClassicでできた機能がLightning Experienceに追加されたなと思いました。
SFDC:NG-LIGHTNINGを試してみました
Angular2を使った開発でLightning Design Systemを利用できるNG-LIGHTNINGを試してみました。
ng-lightning - Native Angular 2 components and directives for Lightning Design System
使い方はトップページのGetting startedに記載されています。
ヘッダーメニューのComponentを選択すると、各コンポーネントのサンプルコードが確認できました。
HTML側のコードだけではなく、TypeScript側のコードも確認することができます。
NG-LIGHTNINGはGitHubで公開されています。
リポジトリの中にはdemoフォルダも用意されていました。
demoフォルダについて
demoフォルダをみたとき、NG-LIGHTNINGをちょっと動かすためのデモアプリだと思ったのですが、これはNG-LIGHTNING事態の開発に参加したい開発者向けの動作確認用に用意されたものみたいです。
詳細はng-lightning/DEVELOPER.mdファイルに記載がありました。
まずはgit cloneの実行です。
$ git clone git@github.com:ng-lightning/ng-lightning.git
ng-lightningフォルダに移動します。
$ cd ng-lightning/
npm installを実行します。
$ npm install $ npm run typings
runコマンドを実行。
$ npm run build $ npm run demo
別タブでnpm startを実行。
$ npm start
http://localhost:1111にアクセスするとLoadingと表示されるようになりました。ただエラーがでていたのでどこか手順が間違えているっぽいです。
ちなみにテストコマンドの方は正常に実行することができました。
$ npm test
とはいえNG-LIGHTNINGの開発に参加したい人向けなので、普通に利用する場合はここまでチェックする必要はないと思います。NG-LIGHTNINGのサイトで確認できたことはこんな感じです。
SFDC:Ionic2とNG-LIGHTNINGの組み合わせを試してみました
まずはIonic2の準備から。
$ npm install -g ionic@beta $ ionic start cutePuppyPics --v2 $ cd cutePuppyPics $ ionic serve
Ionic2にはTypeScriptを利用する環境も全て整っています。
続いてng-lightningのインストールです。
$ npm install --save ng-lightning
もしかすると次のライブラリも必要かも
$ npm install --save @salesforce-ux/design-system@^2.0.1 $ npm install --save tether@^1.2.0
インストールできたら実際にバッチを表示してみます。まずはtsファイルの変更です。
home.ts
import {Component} from '@angular/core'; import {NavController} from 'ionic-angular'; import {NGL_DIRECTIVES} from 'ng-lightning/ng-lightning'; @Component({ directives: [NGL_DIRECTIVES], templateUrl: 'build/pages/home/home.html' }) export class HomePage { constructor(private navCtrl: NavController) { } type = 'inverse'; private types: string[] = ['default', 'shade', 'inverse']; change() { this.type = this.types[(this.types.indexOf(this.type) + 1) % 3]; } }
続いてhome.htmlの変更です。
<ion-header> <ion-navbar> <ion-title>Home</ion-title> </ion-navbar> </ion-header> <ion-content padding class="home"> <h2>Welcome to Ionic!</h2> <p> This starter project comes with simple tabs-based layout for apps that are going to primarily use a Tabbed UI. </p> <p> Take a look at the <code>app/</code> directory to add or change tabs, update any existing page or create new pages. </p> <ngl-badge>Badge</ngl-badge> <ngl-badge type="default">Default</ngl-badge> <ngl-badge type="info">Info</ngl-badge> <ngl-badge type="success">Success</ngl-badge> <ngl-badge type="warning">Warning</ngl-badge> <ngl-badge type="error">Error</ngl-badge> <div class="slds-m-top--large"> Type: <code>{{type}}</code> <ngl-badge [type]="type" class="slds-m-horizontal--large">Badge</ngl-badge> <button type="button" nglButton="neutral" (click)="change()">Change</button> </div> </ion-content>
最後にindex.htmlの変更です。(SLDSのCSS読み込みを追加)
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Ionic</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> <link rel="stylesheet" href="https://npmcdn.com/@salesforce-ux/design-system@^2.0.2/assets/styles/salesforce-lightning-design-system.min.css"> <link ios-href="build/css/app.ios.css" rel="stylesheet"> <link md-href="build/css/app.md.css" rel="stylesheet"> <link wp-href="build/css/app.wp.css" rel="stylesheet"> </head> <body> <!-- This is Ionic's root component, where the app will load --> <ion-app></ion-app> <!-- cordova.js required for cordova apps --> <script src="cordova.js"></script> <!-- Polyfill needed for platforms without Promise and Collection support --> <script src="build/js/es6-shim.min.js"></script> <!-- Zone.js and Reflect-metadata --> <script src="build/js/Reflect.js"></script> <script src="build/js/zone.js"></script> <!-- The bundle which is built from the app's source code --> <script src="build/js/app.bundle.js"></script> </body> </html>
これでSLDSのバッチを表示することができました。
その他いろいろ試してみようと思ったのですが、ボタンコンポーネント利用時に次のエラーが発生してしまいました。
解決方法があるかは確認できませんでした。Ionic2とNG-Lightningはもしかすると相性がよくないかもしれません。
とりあえず今回試してみた結果はこんな感じです。Ionic2との組み合わせがうまくいったらいいなと思ったのですが、ちょっと簡単にはできそうにありませんでした。
SFDC:emptyRecycleBinでゴミ箱のレコードを削除
Salesforceのゴミ箱からレコードを削除したい場合、ApexのDabase Classにある『emptyRecycleBin』で削除することができます。
利用方法はこんな感じ。ゴミ箱のレコードを取得したい場合は『ALL ROWS』を利用します。
Map<Id,Account>accMap = new Map<Id,Account>([Select id.name from Account where Type='xyz value' ALL ROWS]); List<ID> accIds = new List<Id>(accmap.keyset());// Getting correct Ids Database.emptyRecycleBin(accIds);
SFDC:LEXのレコードページと活動の登録機能について
Lightning Experienceにはレコードページから素早く活動を登録できる機能がついています。
この活動登録機能ですが、活動が許可されたオブジェクトなら必ず表示される機能だと思っていました。App Builderでも特にカスタマイズできるコンポーネントではありません。
ですがこの活動機能をカスタマイズする方法がきちんと用意されていました。この活動登録はパブリッシャーアクションとして扱われています。
なので次のようにパブリッシャーアクションから除外すると
活動の入力ボックスを非表示にできます。
このように新規行動・新規ToDo・活動の記録の3つの機能から必要な機能のみ選択して表示させるといった使い方が可能となっていました。(もし右側の活動コンポーネント自体を除外したい場合はAppBuilderでカスタマイズできます。)
LEXのレコードページと活動の登録機能についてはこんな仕組みとなっています。
SFDC:レコードIDの15桁表現と18桁表現の検証
SalesforceのレコードIDには大文字/小文字を区別する15桁の形式と、大文字/小文字を区別できない外部システムとの連携用に用意された18桁の形式が用意されています。
15桁のレコードIDはレコード詳細ページのURLなどで確認できます。
18桁のレコードIDはApexのSOQLクエリで取得したときに確認できます。
このレコードIDの桁数について、項目自動更新やプロセスビルダー、Apexトリガやレポート、数式で扱うときにどのように扱われるかというのをまとめてみようと思います。
レポートから参照したとき
まずはレポートからレコードIDを表示させたときです。この場合は15桁のIDが表示されました。
レポートのエクスポート機能で取得したIDは15桁表示となります。
数式で参照したとき
数式で取得した場合です。
これは通常15桁の形式で表示されます。
数式には『CASESAFEID』という関数が用意されています。これを利用することで18桁に変換することが可能です。
先ほどのレポートからエクスポートしたときに18桁に変換したい場合は数式で対応する方法があります。
ワークフロールールの項目自動更新でセット
ワークフロールールの項目自動更新でセットした場合です。
これも通常は15桁で扱われます。
ですが項目自動更新では数式と同じ関数が利用できるので『CASESAFEID』を使って18桁に変換することも可能です。
Apexでセット
それではApex経由でセットした場合についてです。今回は開発者コンソールからApexを実行して検証してみます。
Apexで扱うときは以下の形式が考えられます。
- sObject型
- String型
- ID型
開発者コンソールから次の処理を実行して確認してみました。
Sample__c s = [SELECT Id,Name FROM Sample__c LIMIT 1]; String recordIdForString = s.Id; Id recordIdForId = s.Id; System.debug('レコードID (sObject型) = ' + s.Id); System.debug('レコードID (String型) = ' + recordIdForString); System.debug('レコードID (ID型) = ' + recordIdForId);
どれも18桁として扱われました。
ApexトリガなどでレコードIDを差し込んだ時は通常は18桁として扱われます。もし15桁に変換したい場合はString型の変数にセットする際にSubStringを使って対応すれば変更できます。
このあたりの詳細はSalesforce Developer Blogにまとめられています。
プロセスビルダー
プロセスビルダーから更新する場合です。ワークフロールールと同じと思われますが、実際に試してみると結果が違ったりする可能性もあるのできちんと確認してみました。
検証してみた結果ですが、プロセスビルダーでもCASESAFEID関数を利用することができました。これで状況に応じて15桁と18桁のどちらをセットするか選択できました。
まとめ
Apexは通常18桁で扱われますがSubStringなどで15桁に変換することが可能です。ワークフロールールやプロセスビルダー、数式は通常15桁で扱われ、CASESAFEID関数を使って18桁に変換することができます。
レポートの場合は15桁で扱われ、エクスポートしたときも15桁だったのでデータ連携などでそのまま利用するときは注意が必要そうです。
15桁と18桁どちらに合わせるか悩みどころですが、基本的には18桁で扱うようにした方が安心だと思われます。
最後にCASESAFEID関数ですが、コンパイルサイズが大きいという注意点があるそうです。
たいていのことは、「気合い」と「根性」で乗り越えられるものだ!!:【salesforce】idを18桁にするCASESAFEIDについてだゼイ。
あまり複雑な数式をつくるとコンパイルサイズの上限エラーで困ったことになるケースも多々あるのでこのあたりの制限があることは意識しておいた方が良いと思います。(数式から他の数式を参照した場合など)
Heroku:create-react-app-buildpackを試してみました
React開発の雛形を用意できるcreate-react-appコマンドですが、これで生成したファイルをHerokuに簡単にデプロイできるcreate-react-app-buildpackについての記事が公開されていました。
使い方
アプリの生成からHerokuデプロイまでに実行するコマンドです。
$ npm install -g create-react-app $ create-react-app my-app $ cd my-app $ git init $ heroku create -b https://github.com/mars/create-react-app-buildpack.git $ git add . $ git commit -m "react-create-app on Heroku" $ git push heroku master $ heroku open
Step1.アプリの起動まで
create-react-appコマンドを実行できるようにインストールします。(初回だけ)
$ npm install -g create-react-app
アプリの雛形ファイルを生成してディレクトリを移動します。
$ create-react-app my-app $ cd my-app
次のコマンドを実行するとlocalhost:3000でアプリを動かすことができます。
$ npm start
Step2. gitコミットとHerokuデプロイ
まずは.gitファイルを生成します。
$ git init
Herokuアプリを作成します。-bオプションとURLを指定することでビルドパックを利用できるみたいです。
$ heroku create -b https://github.com/mars/create-react-app-buildpack.git
GitコミットしてからHerokuにデプロイします。
$ git add . $ git commit -m "react-create-app on Heroku" $ git push heroku master
エラーになっていなければ次のコマンドでHerokuアプリにアクセスできます。
$ heroku open
すごく簡単にHerokuへのデプロイを行うことができました。以前、create-react-appコマンドについて使い方を確認した際に、buildフォルダ内のファイルだけをデプロイするようにして対応していました。
create-react-app-buildpackを使うことでその辺りの手順がすごく楽になったと思います。
2回目以降のデプロイについて
初回デプロイは-bオプションをつかってデプロイを実行しました。二回目以降のデプロイはどうなるかも確認してみました。
まず、画面の表示を一部変更してみます。
次のコマンドを実行してコミットとHerokuへのデプロイを実行します。
$ git status $ git add . $ git commit -m "commit" $ git push heroku master
実行後にHerokuアプリにアクセスしてみると変更結果が反映されていました。
『$ npm run build』コマンドでビルドしてからでないとデプロイできないかなと思ったりもしたのですが、create-react-app-buildpackを利用すればそのあたりの手順も省略することができました。
Heroku Createコマンドでアプリ名を指定
- bオプションを指定する際に、アプリ名も指定できるかについても確認してみました。
$ heroku create tyoshikawa1106-react-buildpack -b https://github.com/mars/create-react-app-buildpack.git
特にエラーもなく正常に実行できました。
create-react-app-buildpackの使い方ドキュメント
より詳しい使い方についてですが、GitHubに使い方がまとめられているみたいです。
例えばカスタマイズの方法についても紹介されていました。create-react-appで生成したときデフォルト設定ではbuildディレクトリにビルド後のファイルが生成されます。このディレクトリ構成を変更したい場合はstatic.jsonファイルを用意してそこに設定情報を記載することでカスタマイズできるみたいです。
create-react-app-buildpackを試してみた結果はこんな感じです。便利なcreate-react-appコマンドですが、Herokuに簡単にデプロイできるようになってより使いやすい環境を用意できるようになったと思います。
SFDC:Salesforce もくもく会 #11 に参加しました
8月19日にTokyo Salesforce Developer Group主催のもくもく会 #11 に参加しました。
今回はSalesforce Marketing CloudのSocial StudioについてLTをやらせてもらいました。Marketing CloudはDeveloper Edtionが用意されていないので、普段はあまり触れる機会が無い製品だと思います。少し前に運良くSocial Studioを触ることができる機会を手にすることがてきたので、どのような使い方ができるのか調べてみてLTをやりました。
LTで使ったスライドはこちらです。
TwitterやFacebookなどのソーシャルメディアを活用している企業で活躍してくれる製品だと思います。
もくもく会でやったこと
ちょっとうまく行かなくて困っている問題について他の開発者の人たちに相談に乗ってもらいました。
その中の1つがGit Cloneで取得したコードとMavensMateの紐付けについてです。自分で調べた手順だとgit fetchやgit resetコマンドを実行する必要があったのでそこをよりシンプルにやる方法が無いか聞いてみました。
以前調べた方法
Git CloneからSalesforceプロジェクトを準備する手順
以下の手順で簡単に対応できたみたいです。
1. Git Cloneでコードを取得
Git Cloneでコードの取得します。この時点ではMavensMateの設定ファイルが存在しない状態となっています。
2. Create Mavens Mate Projectで設定ファイルの作成
プロジェクトのフォルダで右クリックするとMavensMateメニュー内に『Create MavensMate Project..』が存在します。
『Create MavensMate Project..』を選択するとMavensMateのプロジェクト作成画面が表示されます。プロジェクト名にはフォルダ名が自動でセットされましたが、あとはいつもどおりユーザ名とパスワードを入力してプロジェクトを作成できます。
作成したプロジェクトは指定したワークスペース先に生成されるのだけ意識しておくと良いと思います。これでGit CloneしたコードにMavensMateの設定ファイルを追加することができました。
.gitファイルなども反映されるようになっています。git logコマンドを試してみたところ正しく実行できました。
この流れでGit Cloneで取得したコードにMavensMateの設定ファイルを追加することができました。git fetchやgit resetコマンドの実行も不要になりシンプルな手順になったと思います。
今回のもくもく会でやったことはこんな感じです。他にもいろいろな話が聞けたりして楽しかったです。
SFDC:積み上げ集計項目の条件指定と数式項目
DiscussionForumを見ていて積み上げ集計項目の条件指定で数式項目は利用できたっけと思い、ちょっと確認してみました。
雑ですが数式項目を用意して・・・
積み上げ集計項目を作成すると・・・数式項目は指定することができました。
ただ値の指定は固定値になるので親レコードの特定の項目と一致という条件までは設定できなさそうです。
SFDC:静的リソースへのデプロイで試してみたこと
『gulp-jsforce-deploy』をつかって静的リソースへのデプロイを行う方法を覚えたので実際にそれを使った開発を試してみました。
環境構築方法はこんな感じです。
SFDC:Salesforce Development 2016 - Part 1 - tyoshikawa1106のブログ
プロジェクトのファイル構成はこんな感じになっています。
devstaticresourcesフォルダで『.resource』形式に変換する前のファイルを管理しています。(ここでJSやCSSを開発)
staticresourcesフォルダで『.resource』形式に変換後のファイルを管理します。この中にあるファイルをSalesforce組織の静的リソースにデプロイします。
静的リソースでデプロイ後はこんな感じ。
gulp-jsforce-deployを使えば次のコマンドでpkgフォルダ内のファイルをSalesforce組織にデプロイできます。
$ foreman run gulp deploy
静的リソースへのデプロイもこれで対応できたのですが、基本的にstaticresourceフォルダ内のファイルがすべてデプロイされます。デプロイ対象はpackage.xmlで対象を指定することで制御できますが、毎回変更するのは少し面倒だなと思いました。
また、package.xmlをデプロイ時に毎回変更する場合はコミット時に前回作業者が指定したファイル名で更新されてしまいます。.gitignoreで管理対象外に指定する方法も考えられますが、それも少し面倒かなと思いました。
ということでpackage.xmlで管理する以外の方法を考えてみました。
今回試してみたのは.resource形式に変換する箇所を制御する方法です。devstaticresourcesフォルダ内でJSファイルやCSSファイルを開発して、作業後に.resource形式に変換してstaticresourcesフォルダに格納していたので、.resource形式に変換する対象を制御することで、package.xmlを変更せずにデプロイ対象を制御できると思います。
.resource形式への変換はGulpをつかって行っています。gulpfile.jsの処理内で対象のファイル名を指定する方法を思いついたのですが、直接指定する方法だと、コミット時に前回作業者が指定したファイル名が残ってしまうのがイマイチでした。(.gitginoreで除外するもの少しイマイチ...)
そこで『foreman』をつかった方法を試してみました。『foreman』を利用すればgulpの処理内でも『.env』ファイルの値を参照できるようになります。gulp-jsforce-deployが使っている方法を参考にしました。
.envファイルはこんな感じ。カンマ区切りで複数のファイルを指定できます。
.envファイルはgitのリポジトリで管理する必要が無いので、前回作業者が指定したファイル名が残ることがありません。また、作業前に毎回自分で用意する必要があるので、うっかり他のファイル名を指定してデプロイしてしまうトラブルも回避できると思います。
staticresourcesフォルダ内のファイルはすべてデプロイ対象となるので、pkg/staticresources のファイルはGitリポジトリから除外するようにしました。これで作業対象外のファイルがデプロイされることを回避できると思います。
staticresourcesもGitのバージョン管理をした方がいいと思いますが、これはsrcフォルダ側で管理すればいいと思います。
foremanと.envファイルを利用することでこんな感じで静的リソースデプロイの仕組みを用意できました。
SFDC:force exportとGit管理の対象ファイル
Salesforceの標準カスタマイズの情報はForce.com CLIを利用すると簡単にエクスポートできます。オブジェクトやページレイアウト、カスタム表示ラベルなど、ほぼすべての情報を取得できるはずです。
force exportコマンドを実行するだけでエクスポートできますが、このときに、ページ、クラス、トリガ、静的リソースも一緒にエクスポートされます。ですが、ページやクラスなどはsrcフォルダ側で管理していることが多いと思います。このままだと2重でバージョン管理することになってしまうので、gitignoreで管理対象外にしてしまう方が良さそうかなと思いました。
最初、package.xmlで制御してしまおうかと考えたのですが、force exportコマンド実行時にはpackage.xmlの内容に関係無く全てのファイルがエクスポートされるみたいです。
この方法ではpagesフォルダやclassesフォルダのエクポート自体は行われてしまいますが、それでもGitリポジトリ側にコミットされることは無いので差分として扱われずに済むと思います。
これでページやクラスなどの開発コードはsrcフォルダ側でバージョン管理してそれ以外の標準カスタマイズ情報はmetadataフォルダで管理するという運用ができるとかなと思います。
関連記事
SFDC:Search The Force.comを試してみました
Salesforceの情報を検索できる『Search The Force.com』というサイトが公開されています。
利用画面はこんな感じです。
例えば『apex』と入力すると検索候補が表示されます。
検索結果はこんな感じです。
エゴサーチしてみるとこんな感じでした。
Salesforce関係の検索をしたいときは便利そうです。
SFDC:Trailhead - Dreamforce & Beyond (2016版)
TrailheadにDreamforceについてのモジュールが公開されています。
Get to Know the Dreamforce Campus Unit | Salesforce Trailhead
Get to Know the Dreamforce Campus
- セッション、展示会、および他のイベントが配置されている場所
- Dreamforceのキャンパスを回避するための最も効率的な方法
- クラウドエキスポとSalesforceのキャンプ場で見つけること
- Dreamfestについて
Dreamforceキャンパス
イベント、セッション、またはエリアの焦点 | ロケーション |
IT、開発者、管理者、およびトレイルヘッドゾーン | モスコーンウェスト |
マーケティング | パレスホテル |
クラウドエキスポとSalesforceのキャンプ場 | モスコーニ南 |
基調講演とDreamtalks | モスコーニ・ノース、モスコーンウェスト、およびイエルバ・ブエナ・シアター |
セールス、サービス、およびSMB | マリオットマーキスホテル |
ハンズオントレーニング、認定、およびSalesforceの大学 | ヒルトンホテル |
Salesforce.org、非営利団体、および高等教育 | セントフランシスホテル |
産業 | インターコンチネンタルホテル |
パートナーズ | パークセントラルホテル |
Cloud Expo
Salesforceのエコシステムを体験できる
サンフランシスコの食事スポット
Dreamfest
Dreamfestは信じられないほどのライブ音楽、料理、飲み物のパーティー。
Make the Most of Your Time at Dreamforce
- Dreamforceの参加者、パートナー、およびSalesforceの従業員とのネットワーク。
- Dreamforceイベントの異なるタイプの利点を理解します。
- Dreamforceで恩返しするためのさまざまな方法を知っています。
- Dreamforce中に健康を維持。
- Dreamforce後の成功のために自分自身を設定します。
Salesforce LIVE
基調講演スペシャルゲスト
- メリンダ・ゲイツ(共同議長、ビル&メリンダ・ゲイツ財団)
- デボラ・デュガン(最高経営責任者(CEO)、[RED])
- ビリー・ジーン・キング(スポーツアイコンと人道)
- パトリシア・アークエット(アカデミー賞受賞者と活動家)
- トニー・ロビンス(生活とビジネス戦略家)
- キャプテンマーク・ケリー(宇宙飛行士、NASA)
- キャプテン・スコット・ケリー(宇宙飛行士、NASA)
- ダニエル・ゴールマン(著、心理学者、科学ジャーナリスト)
- ラリー・ブリリアント、MD MPHのDSC(議長、スコールグローバル脅威基金)
Dreamforceハッシュタグ
#DF16
新しいイベント
Dreamtalksでインスピレーションスピーカーとの25分の会話
Dreamforceのセッション待ち時間
会場に入るまでに列ができたときの対応
- 待っている間に友達を作る。行がネットワークに大きなチャンスです!あなたは、同じイベントで...あなたが持っている必要があり、同じもののためのラインにいる何か共通点が。製作に潜在的な親友!
- 次のセッションを研究しています。何をしているあなたはラインで待っていますか?セッションのトピックのより良い理解を得るためにあなたのスマートフォンを使用してください。
- スナック。それはDreamforceのような多忙なイベントの間に食べることを忘れがちです。行は、あなたがかまを持っているし、あなたのエネルギーアップするのに最適な時間です。
Extend Your Dreamforce Experience
- 効果的にあなたの会社内のあなたのDreamforceの経験を共有しています。
- セッションのプレゼンテーションの録画を検索します。
- 継続的な学習のための踏み台としてDreamforceを使用してください。
あなたが学んだことを共有します
Chatterやブログ、開発者コミュニティなどで共有しましょう。