第39回 Alfresco勉強会
Share UIカスタマイズの第一歩
2017年6月21日
Moritaka Soma
自己紹介
相馬 盛孝
オープンソースコンサルティングチーム所属
Alfrescoのカスタマイズやサポートをしています
最近はVR技術に興味があります
本日の発表内容
本日の発表内容:
これからAlfresco ShareのUIカスタマイズを
行おうと考えている方のとっかかりと
なりそうな初歩的内容をご紹介
• Surf Extension Modulesの紹介
• Share Headerのカスタマイズ
• 簡単なUI挙動の変更
環境
環境:
Alfresco SDK 3.0 (All-In-One Project)
• Alfresco Platform 5.2.e
• Alfresco Share 5.2.d
*共にAlfresco SDK 3.0のデフォルトで
選択されているバージョンです
Alfresco SDKの使い方については割愛します…
環境
現状のAlfresco SDK 3.0 AIOの注意点:
Share Servicesが適用されているのに、
「Alfresco is running without Share Services.
See your System Administrator for more details.」
というメッセージが出てしまう。
https://github.com/Alfresco/alfresco-sdk/issues/445
src/test/resources/share/share-config-custom.xml の
<endpoint-url>${alfresco.repo.url}/alfresco/api</endpoint-url> を
<endpoint-url>${alfresco.repo.url}/api</endpoint-url> と修正することで
対処可能です。
Surf Extension Modules
Surf Extension Modulesとは?:
Surf Extension Modules are the main tool
to use when adding, updating, or hiding content
in the Share User Interface (UI). *
* http://docs.alfresco.com/5.2/concepts/dev-extensions-share-surf-extension-modules.html
意訳:
Share UIで、要素の追加・更新・削除(隠蔽)
カスタマイズを行う上でのメインツール
Surf Extension Modules
Surf Extension Modules:
RuntimeにModuleデプロイの有効/無効を切り替える
ことが可能です。
http://<host>:<port>/share/page/modules/deploy
デバッグやテストの際、便利です。
Surf Extension Modules
Alfresco SDKでは
<artifactId>-share-jar/src/main/resources/alfresco/
web-extension/site-data/extensions
フォルダにモジュール定義のxmlを配置します。
例: custom-header-extension-modules.xml
<extension>
<modules>
<module>
<id>Custom Share Header Menu</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
</module>
</modules>
</extension>
Surf Extension Modules
モジュール定義の説明:
:
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
:
この例では、Alfresco Shareの
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/header/
以下に配置される、WebScriptのjavascriptに対して、
Alfresco SDK上で
<artifactId>-share-jar/src/main/resources/alfresco/web-extension/
site-webscripts/jp/aegif/share/header/
以下の、同名のjavascriptファイルを追加して実行することで、
カスタマイズを行う定義となります。
他にも様々な定義を行うことができますが、今回は割愛します…
Share Headerのカスタマイズ
Share Header:
比較的カスタマイズの要望が多い部分です。
• 不要なメニュー項目を隠したい
• ワークフローは使わないのでタスク項目を隠したい
• SSOを使うので明示的にログアウトさせたくない
• よく使う項目を追加したい
• ごみ箱へ1クリックで移動したい
• 検索フィールドのメッセージが中途半端なので修正したい
etc…
Share Headerのカスタマイズ
カスタマイズ方法:
Share HeaderはAikauのWidgetとして実装されているため、
Share HeaderのWebScriptが作成するオリジナルのWidget
モデルを、Surf Extension Modulesを利用して変更することで
カスタマイズを行います。
Share Header
WebScript
Original
Widget
モデル
Surf Extension
Module
作成 変更
Customized
Widget
モデル
Share Headerのカスタマイズ
対象Widgetの調査:
ShareでClient Debug Modeを有効*にし、Debug Menuの
「Toggle Developer View」で、対象項目を調べるのが簡単です。
アイコンをクリックすることで、WidgetのIDと取得のための
Snippetを確認できます。
*SDKから起動した場合Client Debug Modeは有効化されています。
Share Headerのカスタマイズ
Surf Extension Module作成:
Share Headerのモデルを返すWebScriptのJavascriptは
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/share/header/share-header.get.js
なので、以下のSurf Extension Moduleを作成。
<artifactId>-share-jar/src/main/resources/alfresco/web-extension/site-data/extensions
custom-header-extension-modules.xml :
<extension>
<modules>
<module>
<id>Custom Share Header Menu</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.header</targetPackageRoot>
<sourcePackageRoot>jp.aegif.share.header</sourcePackageRoot>
</customization>
</customizations>
</module>
</modules>
</extension>
Share Headerのカスタマイズ
項目の消去:
Share Headerのモデルを修正するJavascriptは
<artifactId>-share-jar/src/main/resources/alfresco/web-extension/site-webscripts
/jp/aegif/share/header/share-header.get.js
として、以下の内容で作成します。
// Hide Task Menu Item
widgetUtils.deleteObjectFromArray(model.jsonModel, "id", "HEADER_TASKS");
widgetUtils.deleteObjectFromArray()という便利ユーティリティが使えるので、
IDが判れば簡単に消去することが可能です。
Share Headerのカスタマイズ
項目の追加:
ShareのHeaderを返すWebScriptは
<artifactId>-share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/
share/header/share-header.get.js
このファイルでimportされている、
<artifactId>-share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/
share/imports/share-header.lib.js の中で
function generateAppItems() {
var appItems = [
{
id: "HEADER_HOME",
name: "alfresco/menus/AlfMenuBarItem",
config: {
id: "HEADER_HOME",
label: "header.menu.home.label",
targetUrl: getUserHomeTargetUrl()
}
},
:
:
このような感じで、メニューの内容をJSONとして定義しているので参考にします。
Share Headerのカスタマイズ
項目の追加:
オリジナルのJSON定義を参考にして、Share Headerのモデルを修正するJavascriptに
以下の内容を追加します。
// Add Trash-can to Header Menu Items
var headerMenu = widgetUtils.findObject(model.jsonModel, "id", "HEADER_APP_MENU_BAR");
if (headerMenu != null) {
headerMenu.config.widgets.push({
id: "HEADER_CUSTOM_TRASH_CAN_LINK",
name: "alfresco/menus/AlfMenuBarItem",
config: {
label: "ごみ箱",
targetUrl: "user/" + encodeURIComponent(user.name) + "/user-trashcan"
}
});
}
Share Headerのカスタマイズ
検索フィールドのカスタマイズ:
検索フィールドのWidgetを調べると
alfresco/header/SearchBox というWidgetであることが分かる
Alfresco ShareのソースコードからこのWidgetを調べると、
aikau-1.0.101.3.jar に含まれる
META-INF/js/aikau/1.0.101.3/alfresco/header/SearchBox.js
がWidgetの実体であることがわかる。
Share Headerのカスタマイズ
alfresco/header/SearchBox :
実体のjavascriptファイルを確認すると、
/**
* The placeholder text to set in the main input field.
*
* @instance
* @type {string}
* @default
*/
placeholder: "search.instruction",
/**
* @instance
* @type {boolean}
* @default
*/
liveSearch: true,
文言やLiveSearchの有効/無効設定がプロパティになっていて、
config経由で設定できることが分かる
Share Headerのカスタマイズ
検索フィールド文言の変更:
Share Headerのモデルを修正するJavascriptに
以下の内容を追加する。
// Change Search Placeholder Message
widgetUtils.findObject(model.jsonModel, "id", "HEADER_SEARCH").config.placeholder = "検索";
*本来は表示したい文言をメッセージとして定義し、そのkeyを指定します。
Share Headerのカスタマイズ
検索フィールドLiveSearchの停止:
Share Headerのモデルを修正するJavascriptに
以下の内容を追加する。
// Disable Live Search
widgetUtils.findObject(model.jsonModel, "id", "HEADER_SEARCH").config.liveSearch = false;
デモ
ご質問など
ありがとうございました。

More Related Content

PPTX
Share UIカスタマイズ Widget編
PPTX
開発者向けAlfrescoのご紹介(2013/03/27 JJUG ナイトセミナー「Java製OSS特集」発表資料)
PDF
Alfresco study29 activitymonitoring
PPTX
0からわかるAlfresco
PPTX
0からわかるAlfresco 2017年1月版
PPTX
Alfresco study32 introducing5.1
PDF
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
PDF
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと
Share UIカスタマイズ Widget編
開発者向けAlfrescoのご紹介(2013/03/27 JJUG ナイトセミナー「Java製OSS特集」発表資料)
Alfresco study29 activitymonitoring
0からわかるAlfresco
0からわかるAlfresco 2017年1月版
Alfresco study32 introducing5.1
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと

What's hot (20)

PPTX
Alfresco Bulk Import toolのご紹介
PPTX
Alfresco Javascript Consoleのご紹介
PDF
2013.6.18 NemakiWare & CmisSync ワークショップ
PPTX
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
PDF
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
PDF
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
PDF
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
PPTX
Alfresco勉強会#26 alfresco community 5.0でssoを設定する
PPTX
Alfresco紹介
PDF
Alfresco ce 4.2の新機能
KEY
Alfresco Google Docs連携
PDF
20140129 alfresco addons
PDF
Alfresco勉強会#15 alfresco 4をインストールしてみよう!
PDF
【第1.5回勉強会】後編 alfrescoの基本操作
PDF
20130801 alfresco study17customizemap
PDF
【20140521 第1回勉強会】後編 alfrescoの基本操作
PDF
Alfresco day technical update
PPTX
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
PDF
【Alfresco勉強会】インストール手順書(windows azure)
PDF
【20140521 第1回勉強会】前編 alfrescoのインストール
Alfresco Bulk Import toolのご紹介
Alfresco Javascript Consoleのご紹介
2013.6.18 NemakiWare & CmisSync ワークショップ
Alfresco勉強会#31 alfresco 5.0にウイルススキャン機能を実装してみる
Alfresco勉強会#21 Alfresco Workdesk Configuratorによるpluginの設定変更方法
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
全社情報共有サイトへの Alfresco Community 5 導入事例紹介 - 第27回Alfresco勉強会
Alfresco勉強会#26 alfresco community 5.0でssoを設定する
Alfresco紹介
Alfresco ce 4.2の新機能
Alfresco Google Docs連携
20140129 alfresco addons
Alfresco勉強会#15 alfresco 4をインストールしてみよう!
【第1.5回勉強会】後編 alfrescoの基本操作
20130801 alfresco study17customizemap
【20140521 第1回勉強会】後編 alfrescoの基本操作
Alfresco day technical update
Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう
【Alfresco勉強会】インストール手順書(windows azure)
【20140521 第1回勉強会】前編 alfrescoのインストール
Ad

Viewers also liked (8)

PDF
Alfresco study37 alfresco_ng2_components
PDF
Alfresco勉強会#40 QRコードによる文書の振り分け
PDF
Alfresco study presentation 38th customize How-To WebDAV
PDF
Alfresco study41 alfresco_sdk3_introduction
PDF
Alfresco勉強会#28 メタデータテンプレート
PPTX
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
PPTX
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
PDF
[Alfresco]ドキュメントライブラリのUIカスタマイズ
Alfresco study37 alfresco_ng2_components
Alfresco勉強会#40 QRコードによる文書の振り分け
Alfresco study presentation 38th customize How-To WebDAV
Alfresco study41 alfresco_sdk3_introduction
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#28 alfresco 5.0の検索機能をみてみよう
[Alfresco]ドキュメントライブラリのUIカスタマイズ
Ad

Similar to Share UIカスタマイズの第一歩 (20)

PDF
Secret of Firefox
PDF
Firefox OS App Manager
PDF
2014年を振り返る 今年の技術トレンドとDockerについて
PDF
さくらのIoT Platformを使ってみよう ~OSC大阪編~
PDF
20100416 devlove(flex) final
PPTX
Mozapps installがなくなったことへの不平不満
PDF
17-D-1 Azure開発の極意 ~2011年版~
PPTX
[関東Firefox OS 勉強会10th 講演資料] リクルートにおけるFirefox osアプリへの取り組み
PPTX
fluxflex meetup in Tokyo
PPTX
インフラチームとCCoEの関係.pptx
PDF
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
PDF
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
PDF
XPagesDay 2013 Closing Session
PPTX
Fluxflex meetup 2011 in Tokyo
PDF
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
PPTX
DreamTXセッションから読み解くAI活用の現状と展望
PDF
OSC2013@FUKUOKA
PPTX
Thing.jsについて
PDF
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
PPTX
Windows Azure PHP Tips
Secret of Firefox
Firefox OS App Manager
2014年を振り返る 今年の技術トレンドとDockerについて
さくらのIoT Platformを使ってみよう ~OSC大阪編~
20100416 devlove(flex) final
Mozapps installがなくなったことへの不平不満
17-D-1 Azure開発の極意 ~2011年版~
[関東Firefox OS 勉強会10th 講演資料] リクルートにおけるFirefox osアプリへの取り組み
fluxflex meetup in Tokyo
インフラチームとCCoEの関係.pptx
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
XPagesDay 2013 Closing Session
Fluxflex meetup 2011 in Tokyo
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
DreamTXセッションから読み解くAI活用の現状と展望
OSC2013@FUKUOKA
Thing.jsについて
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
Windows Azure PHP Tips

Share UIカスタマイズの第一歩