多対多リレーションを持つ必要のあるオブジェクトを作成するといったことはけっこうあると思います。こういうオブジェクトは連結オブジェクトと呼ばれると大雑把に考えていましたが、ただ多対多リレーションというだけでは連結オブジェクトとは呼ばなかったみたいです。
連結オブジェクトの正しい定義としては、「2 つの主従関係を持つカスタムオブジェクト」と決まっていました。
連結オブジェクトの定義についてはこんな感じです。
多対多リレーションを持つ必要のあるオブジェクトを作成するといったことはけっこうあると思います。こういうオブジェクトは連結オブジェクトと呼ばれると大雑把に考えていましたが、ただ多対多リレーションというだけでは連結オブジェクトとは呼ばなかったみたいです。
連結オブジェクトの正しい定義としては、「2 つの主従関係を持つカスタムオブジェクト」と決まっていました。
連結オブジェクトの定義についてはこんな感じです。
コミュニティユーザの判定方法についてです。SOQLクエリを実行する場合「AccountID」または「ContactID」に値が存在するかで判定することが可能です。また、「IsPortalEnabled」という項目でもチェックすることができます。
その他の方法として『UserType』項目を利用する方法があります。
このライセンスタイプのユーザは、自分が直接所有するデータ、またはカスタマーポータルのロール階層で自分よりも下位に位置するユーザが所有するデータ、およびそのユーザと共有するデータを参照、編集できます。
UserType項目の便利なところはUserInfo.getUserTypeで取得できることです。ログインユーザの情報がほしい場合は、SOQLクエリを実行せずに取得できます。
String userType = UserInfo.getUserType(); System.debug(userType);
もちろんSOQLクエリによる取得も可能です。
SELECT Name,UserType,AccountId,ContactId,IsPortalEnabled FROM User
小ネタですが、UserType項目は選択リスト型でtoLabelをつかった翻訳も可能です。
SELECT Name,toLabel(UserType),AccountId,ContactId,IsPortalEnabled FROM User
(UserTypeを翻訳する必要はほぼないと思いますが...)
コミュニティユーザの判定方法はこんな感じです。
Salesforceがセキュリティ的な理由でTLS1.0のサポートを終了します。
時期についてはこんな感じです。
へー、そうなんだ。と思っていたのですが、この対応により一部開発ツールに影響が出るみたいです。
以下のようなツールが例として紹介されていました。(対応方法も一緒に紹介されています。)
上記も影響がありますが、その他の影響がありそうなツールとしてSublimeやAtomなどから開発する際に利用するMavens Mateもこの対応の影響をうけるみたいです。(TLS1.0無効化の影響でエラーが発生していました。)
ちょっと検索して確認してみたところ、この件についてはMavensMateのGitHubにIssuesとして登録されていました。
Issueのコメントを読んでいるとMavens Mateのバージョン7(β版)の場合はエラーにならない的なことが書いてありそうでした。とりあえずTLS関連のエラーに遭遇したい場合は、ここのIssuesを確認しておけば解決方法が紹介されていそうです。
Discussion ForumにはBest Answerの機能がついています。質問投稿者が回答になった投稿を選択できる機能です。投稿にマウスを当てたタイミングで選択リンクが表示されるようになっていました。
Android アプリの作成コマンド
$ sudo npm install forcedroid -g $ forcedroid create native MyTrailNative TrailAndroidApps com.mytrail.android NO (Default)
Android Studioの準備
Installing the Android SDK | Android Developers
forcedroid プログラムでは、汎用コンシューマ ID とコールバック URI を使用してアプリケーションを作成します。アプリケーションを公開する前に、これらの設定を接続アプリケーション の値に置き換える必要があります。ここで、それを実行しましょう。
UTF-8 に準拠しているテキストエディタで、プロジェクトのターゲットディレクトリの \
remoteAccessConsumerKey の値を接続アプリケーション のコンシューマキーに置き換えます。
oauthRedirectURI の値を接続アプリケーション のコールバック URL に置き換えます。
これでエミュレータを起動できました。
ログイン時に次のエラーがでた。接続アプリケーション周りの設定ができていないかも。
一からやり直したら取引先責任者一覧を表示できました。
最低限の処理ですが@futureのサンプルです。
Trailheadではチャレンジの中で実際にApexクラスを作成するケースがあります。そのときに作成済みなのに『No Apex class named』というエラーが発生することがあります。
No Apex class named 'AnimalLocatorMock' was found - Salesforce Developer Community
どうやら一度削除して作りなおせばいいみたいです。
最低限のコードですがApexバッチのサンプルです。
最低限ですが、Queueableのサンプルです。enqueueJob.clsは開発者コンソールから実行する処理。実行結果は設定のApexジョブから確認できます。
Lightning Design Systemと入力フォームのサンプルです。2列表示、3列表示も問題なく表示できました。
SalesforceのMeetup Groupについて簡単にまとめてみました。
Meetup Groupはこちら
SalesforceのTrailheadにシングルサインオン設定の方法が紹介されていたので試してみました。
ユーザの編集画面を表示。Federation IDに値を入力します。
こちらのデモ用ページを利用します。
http://axiomsso.herokuapp.com/Home.action
SAML Identity Provider & Testerリンクをクリック。
Download the Identity Provider Certificateリンクをクリック。証明書をダウンロードできます。
セキュリティのコントロールのSingle Sign-On Settingsから設定。有効化のチェックを付けてから。Newボタンをクリック。
SAML Identity Provider & Testerのページに戻り、generate a SAML responseリンクをクリック。ここに必要事項を入力していく。
こんな感じになります。
次の画面でログインボタンをクリックすると
これでSalesforceにログインできました。
Trailheadのやつです。
$ npm install -g cordova forceios or $ sudo npm install -g cordova forceios
$ forceios create Enter your application type (native, hybrid_remote, or hybrid_local): hybrid_local Enter your application name: firstapp Enter the output directory for your app (defaults to the current directory): Enter your company identifier (com.mycompany): com.mycompany.firstapp Enter your organization name (Acme, Inc.): MyCompany, Inc. Enter your Connected App ID (defaults to the sample app’s ID): [Enter the consumer key of the connected app created in step 1] Enter your Connected App Callback URI (defaults to the sample app’s URI): myapp://auth/success
$ cd firstapp
$ cordova plugin add cordova-plugin-console $ cordova plugin add cordova-plugin-statusbar
$ cordova build
なぜか大量の警告がでましたが、とりあえず動きました。
コレ関係あるかも
If the build fails in Xcode, select the firstapp target, click the Build Settings tab, search for bitcode, select No for Enable Bitcode, and try again.
conf.xmlに追加
<preference name="DisallowOverscroll" value="true"/> <preference name="StatusBarOverlaysWebView" value="false" /> <preference name="StatusBarBackgroundColor" value="#ffffff" /> <preference name="StatusBarStyle" value="default" />
To modify the application to use ForceJS:
1. Download forcejs.
2. Copy the force.js file in the firstapp/www/js folder.
3. Delete forcetk.mobilesdk.js and jquery.js from the firstapp/www/js folder
4. Open firstapp/www/index.html in your favorite code editor and make the following changes:
5. Remove the jquery script tag
6. On the next line, replace js/forcetk.mobilesdk.js with js/force.js
7. Open www/js/app.js in your favorite code editor and examine the code.
8. Notice that, as it is, the code works with a direct reference to the Mobile SDK plugin. As a result, you can only run the app on device or in an emulator: you can't test it in the browser first and run it on device later.
9. Remove the existing code, and replace it with the following code:
force.init({ // Replace with the consumer key of the connected app you created in step 1. appId: "YOUR_CONSUMER_KEY" }); force.login(function() { force.query('SELECT Id, Name FROM User LIMIT 10', function (response) { var html = ''; var users = response.records; for (var i = 0; i < users.length; i++) { html += '<li class="table-view-cell">' + users[i].Name + '</li>'; } document.getElementById('users').innerHTML = html; }); });
cordova build
$ sudo npm install -g force-server
$ cd www
$ force-server
$ force-server --help
force-serverコマンドは次のインストールコマンドで利用できるようになります。
$ sudo npm install -g force-server
force.jsをダウンロードして次のファイルを用意します。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <script src="js/force.js"></script> <script src="js/index.js"></script> </head> <body> <p>Hello</p> </body> </html>
function showContacts() { force.query('SELECT Name, Phone FROM Contact LIMIT 20', function(data) { var contacts = data.records; for (var i=0; i < contacts.length; i++) { console.log(contacts[i].Name); } }, function(error) { alert("Can't load contacts: " + error); }); } force.init({ // Replace with the consumer key of the connected app you created in step 1. appId: "接続アプリケーションのコンシューマキー" }); force.login(showContacts, function(error) { alert('Authentication failed: ' + error); });
※force.js内にも接続アプリケーションのコンシューマキーを指定する必要があります。接続アプリケーションアプリケーションは事前に設定しておきます。
ファイルの準備ができたら次のコマンドを実行します。
$ force-server
これでlocalhost:8200が利用できるようになります。またローカル環境からSalesforceのレコードにアクセスできることも確認できました。
通常のコミュニティの画面はこんな感じです。左上の歯車アイコンから管理画面に移動できます。
管理画面はこんな感じ
管理→設定でテンプレートを変更できます。
テンプレート選択画面はこちら。ナレッジを有効にしていない場合はNapiliテンプレートを利用します。
コミュニティ管理画面のヘッダーメニューからコミュニティビルダーを起動できます。
新規コミュニティビルダーでは、コミュニティのブランド設定、ページの作成およびカスタマイズ、ドラッグアンドドロップ操作の Lightning コンポーネントの追加、カスタムナビゲーションの作成、コミュニティのページの管理などを簡単に行うことができます。
製品のナビゲーション
コミュニティビルダーの機能:
ブランドエディタ
コミュニティのカラーパレットの選択、色の編集、画像やフォントの変更、カスタム CSS の適用を行います。
ページエディタ
コミュニティのページのカスタマイズおよび編集、Lightning コンポーネントの追加などを行います。
ページマネージャ
標準およびオブジェクトページの作成、コミュニティのページの管理などを行います。
設定
コミュニティのプロパティの設定、テンプレートバージョンの更新、カスタムコードの追加などを行います。
ブランドプロパティ
組織のブランドと一致するように、コミュニティのスタイルを更新します。カラーパレットでは色を精確に調整できます。まったく同じ色を再現するために、カスタム画像やロゴをアップロードすることも可能です。
ページエディタ
Lightning コンポーネントのページへのドラッグアンドドロップ、ページの構造の表示、コンポーネントのプロパティの編集などを行います。
コミュニティメニュー
Site.com Studio およびコミュニティ管理に移動します。
ページ
コミュニティ内のどのページ (エラーページを含む) にもすばやく移動できます。
デバイスのプリセット
異なるデバイスでコミュニティがどのように表示されるかを確認します。
ページコンテンツ
ページコンポーネントを選択して編集し、変更がすぐに有効になることを確認します。
プレビューモード
プレビューを使用して編集するページに移動してから、プレビューモードを閉じて変更を行います。ポップアウトボタンを使用すると、サイト全体を新しいブラウザウィンドウでプレビューできます。
公開
変更内容を公開して、コミュニティ内の全員が更新を使用できるようにします。
コンポーネントのプロパティ
ページまたは [ページ構造] ペインのコンポーネントを選択して、プロパティを編集します。
ヘッダーイメージの設定はブランドエディタから行います。
Header Imagesを選択して画像をアップロードします。
これで設定完了です。アップロード時のトリミング機能はなさそうでした。
企業ロゴはCompany Imageから設定できます。ヘッダー部分に表示されました。
コミュニティページのフォント種別や色のカスタマイズはブランドエディタで設定できます。
コミュニティの各ページのタイトルなどを変更できるみたいです。
下記設定が可能です。
共通のヘッダータグを記載できるみたいです。
テンプレートのアップデートが行えるみたいです。
いろいろできそうでしたが、ちょっとドラッグ&ドロップして確認するぐらいでは、使い方を把握できませんでした。きちんと時間をかけて覚える必要がありそうです。
標準で用意されているボタンなどのコンポーネントですが、利用方法が決まっているみたいです。クリック後の操作などは自動で設定されていました。基本的にLightning Componentとして用意されたものみたいです。
海外の開発者の方が公開してくれたブログ、Building an Ionic2 App with the Salesforce Mobile SDKを試してみました。Ionic2は現在ベータ版です。
Building an Ionic2 App with the Salesforce Mobile SDK - Oyecode
次のコマンドでIonic2とcordovaの環境を用意します。
$ cd desktop $ cd work $ sudo npm install -g ionic@beta $ sudo npm install -g cordova
次のコマンドでIonicアプリを作成します。
$ ionic start myApp salesforce $ cd myApp $ ionic platforms update ios $ ionic plugin add https://github.com/forcedotcom/SalesforceMobileSDK-CordovaPlugin
次のコマンドでemulateコマンドが実行できるようになります。
$ npm install -g ios-sim
次のコマンドでビルドが実行されます。
$ ionic build ios
ビルドエラーが発生したら次のコマンドで解決するかも・・・
$ ionic platform remove ios $ ionic platform add ios
次のコマンドでエミュレータが起動します。
$ ionic emulate ios
エミュレータのtargetが見つからないというようなエラーがでた場合は次のコマンドで解決できると思います。
$ ionic emulate ios --target="iPhone-6, 9.2"
9.2はOSのバージョン、XCodeのDeviceメニューから確認できます。
・・・自分の環境ではエミュレータに正しく表示されましせんでした。
続きです。
$ sudo npm install -g force-server $ cd www/ $ force-server
先ほどのiOSエミュレータではうまく行きませんでしたが、force-severの方はうまくいきました。
接続アプリケーションのCallbackURLと複数URLの指定についてです。
OAuth認証の時に必要になるCallbackURLですが、ひとつの接続アプリケーションに複数指定することが可能です。
CallbackURLは認証時に自動で遷移するURLではなく、認証時に遷移できるURLとなっています。なので遷移を許可したURLという感じになっているみたいです。
最初にSDKMANコマンドをインストールして利用できるようにします。
サイトの手順どおりにコマンドを実行すれば大丈夫でした。
$ curl -s get.sdkman.io | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh" $ sdk version
次にSpringコマンドをインストールして利用できるようにします。
$ sdk install springboot $ spring --version
途中で『Do you want springboot 1.3.3.RELEASE to be set as default? (Y/n): 』と質問があります。Defaultバージョンの話だと思います。『Y』と入力しておきました。
これでSpring Boot CLIの準備が完了しました。『app.groovy』ファイルを用意して動作確認します。
@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }
ちょっと時間がかかりますがつぎのように実行されます。
localhost:8080にアクセスするとHello World!と表示されます。
検索していたらbrewコマンドをつかったもっと簡単なインストール方法が紹介されていました。
SalesforceのCSSFramework、Lightning Design SystemですがBower経由でダウンロードすることができます。
bower install salesforce-lightning-design-system --save
Bowerですが、bower.jsonを用意すれば複数のライブラリをまとめてダウンロードすることができます。
{ "name": "angular-tutorial", "description": "A starter project for AngularJS", "version": "0.0.0", "homepage": "https://github.com/tyoshikawa1106", "license": "MIT", "private": true, "dependencies": { "angular": "1.4.x", "angular-mocks": "1.4.x", "jquery": "~2.1.1", "angular-route": "1.4.x", "angular-resource": "1.4.x", "angular-animate": "1.4.x", "salesforce-lightning-design-system": "1.0.x" } }
bower.jsonを用意したあとは次のコマンドだけで大丈夫です。
$ bower install
これでLightning Design Systemをはじめ、jQueryやAnuglarなどのライブラリをまとめてダウンロードできます。