Monday, August 31, 2015

LiferayのLDAP連携

最近は涼しくなってきましたね。残暑はあるのでしょうか。暑さに弱いので、できればこのままいってもらいたいナクラです。
今日はLiferayのLDAP連携について書きたいと思います。
わたしも社内のご多分に漏れずMacを利用しているので
LDAPとしてはOpenLDAPを利用します。
OpenLDAPのインストールについては、こちらの記事を参考にしてください。

さて、Liferayではユーザ情報としてはメールアドレスが必須になります。
従ってLDAP側では メールアドレス付きのユーザを作成しておく必要があります。
上記のリンクの記事を参考にOpenLDAPを入れていただいた場合、
メールアドレス情報付きのユーザを作成するには、
slapd.confファイルに
include         /private/etc/openldap/schema/cosine.schema
include         /private/etc/openldap/schema/inetorgperson.schema
のような形で、cosine.schemaとinetorgpersion.schemaをインクルードする
設定を追記してください。

LDAP:ユーザの作成

次には、LDAP上にユーザを作成していきましょう。
今回はApache Directory Studioを使って作っていきます。
まず、Apache Directory Studioを起動します。
右下のConnectionビューの「New Connection」をクリックします。


 
新しいコネクションを設定するウィンドウが開くので、コネクション名とホスト名、ポート名などを設定します。
今回はコネクション名はsample_liferay、ホスト名はlocalhost、ポート番号は389とします。(ホスト名やポート番号は、実際にLDAPをインストール環境にあわせてください。)


Nextをクリックすると、認証の設定画面に変わるので、
Bind DN or user:の部分にはslap.confのrootdnの値を設定します。
Bind passwordにはrootpwで設定した値(slappasswdコマンドで生成した値を入れている場合は、生成時に設定したパスワード文字列)を入力します。



Finishをクリックします。
右側のLDAP Browserビューに新しくコネクションが追加されます。
まず、slap.confのsuffixに該当する組織を作成します。
右クリックしてNew > New Context Entryと選択します。
エントリ作成の画面が表示されます。


Create entry from scratchにチェックが入っている状態で、Nextをクリックします。
エントリのオブジェクトクラスを設定する画面が表示されるので、dcObjectを選択して、Addボタンを押します。
同じようにしてorganizationUnitを選択してAddボタンを押して、項目に追加します。
追加が終わったらNextボタンをクリックします。




Distinguished Nameを設定する画面が表示されるので、slap.confのsuffixの設定と同じものを入力します。 (例 dc=aegif,dc=jp)



Nextをクリックすると、次のような画面が表示されるので、ouに値を設定してFinishをクリックします。ouは組織名です。設定する値はなんでも構いません。



 次にユーザを作成します。先ほど作ったコンテクストエントリを右クリックして、New > New Entryと選択します。先ほどと同じようなエントリ作成の画面が表示されます。Create entry from scratchにチェックが入っている状態で、Nextをクリックします。
エントリのオブジェクトクラスを設定する画面が表示されるので、inetOrgPersonを選択して、Addボタンを押します。



NextをクリックするとRDNを設定する画面が表示されます。
ここではLiferayに必要な情報を追加していきます。スクリーン名、メールアドレス、姓、名などを入れていきます。項目名は事前に利用するクラスによって使えるものが決まって来ます。

Nextをクリックして、Finishをクリックします。

これで、LDAP側にユーザが作成できました。
次はLiferay側の設定をしましょう。


LiferayのLDAP設定

Liferayサーバを起動して、管理者でログインします。
コントロールパネルに移動し、ConfigurationのPortal Settingsをクリックします。
右側のメニューでAuthenticationをクリックします。
LDAPタブを選択します。次の画面が表示されます。



 EnabledのチェックボックスとImport Enabledのチェックボックスにチェックを入れて、保存をクリックします。
次にLDAP ServerのAddボタンをクリックします。
サーバの追加画面が表示されます。
Server Nameを入力し、
Default ValuesにOpenLDAPにチェックを入れてReset Valuesをクリックします。



 これでOpenLDAPに則した項目マッピングがされるようになります。ただし、Connectionの部分は、自分の環境に合わせて設定が必要です。



 Base Provider URLはホストサーバのURLとポート番号、Base DNにはslap.confのsuffixの値、Principalにはrootdnの値、Credentialsにはrootpwに該当するパスワード文字列を設定します。
これで設定はできました。一応、画面を下にスクロールして、User Mappingの項目を確認してください。LDAPサーバで登録したユーザ情報と項目がマッチするように設定されています。基本的にはデフォルトのままでOKですので、このままSaveボタンをクリックします。

以上、で設定が完了しました。
しばらくすると同期処理が走って、LDAPで作成したユーザがLiferay側にも作成されます。(デフォルトでは同期のタイミングは10分おきになっています。設定を変更したい場合はportal-ext.propertiesファイルに ldap.import.interval = XX と設定してください XXは任意の数字で分単位です)


まとめ

LiferayのLDAPサーバとの連携は非常に簡単です。
既存のLDAPサーバを連携する場合は、LiferayのLDAP設定から始めてもらえれば大丈夫です。ユーザと同じようにして、グループの設定も可能です。
Liferayの運用の場面で良くある話ですが、大量のユーザの追加をUIから行うのは大変なので、LDAP連携の機能を利用してユーザの管理を行うと作業が楽になるでしょう!

Tuesday, August 11, 2015

Liferayのパーソナライゼーションについて

ナクラです。
ひさびさにブログを書く事になりました。
いつまで続けられるか分かりませんが
今後は力の限り、Liferayの機能を紹介していきたいと思います。

さて、今回のトピックは「パーソナライゼーション」です。
Wikipediaなどを参考にすると、「パーソナライゼーション」とは、個人向けにカスタマイズを行うことを指すようです。
ポータルの概念で捉えると、「ポータルにアクセスしたユーザ毎に、表示する内容をそのユーザ向けに変更すること」になります。
Liferayでもいろいろな形でパーソナライズを行うための機能が用意されています。


能動的パーソナライズと受動的パーソナライズ

Liferayのパーソナライゼーション機能について見ていく前に、2つのパーソナライズ方針について整理しておきましょう。
これを仮に「能動的パーソナライズ」と「受動的パーソナライズ」と呼ぶ事にします。
「能動的パーソナライズ」の定義は「ユーザ自身が自分で、表示する内容を変更すること」です。例としては、個人のブログサイトが分かりやすいでしょう。ユーザがブログサイト上で自分でブログを書いたり、ページのレイアウトを変更したり、バナーを貼ったりといったことを行います。
 「受動的カスタマイズ」の定義は「ユーザの属性情報を元に自動で表示する内容を変更すること」です。
この例としては、会員制キャンペーンサイトなどがあります。
サイトにログインした会員に対して、会員の持っているポイント情報や、最近購入した商品、おすすめの商品など個別のユーザごとに表示するコンテンツが変わってくるものになります。

それでは、Liferay上でこれらのパーソナライズの機能をどのように実現しているのか見ていきましょう。

Liferayの能動的パーソナライズ

Liferayでは能動的パーソナライズとして2つの機能が用意されています。
1つ目は、個人用サイトの機能です。
ユーザを作成した際に、ユーザ自身が管理者となった「プロフィール」という名前の公開サイトと「ダッシュボード」という名前の非公開サイトが自動的に作成されます。
この個人用サイトではユーザがページやページの要素を設定できるため、非常に高い自由度があります。
Liferayにログインすると、自分の名前が表示されています。
その部分をクリックすると「プロフィール」と「ダッシュボード」が表示されます。
クリックすると、それぞれ個人用のサイトが表示されます。



個人用のサイトが表示されたら、その上で自由にポートレットを配置したり、コンテンツを表示したりできるようになります。



2つ目は、ページのカスタマイズ機能です。Liferayではページを作成する際に、ポートレットをページの上に配置していくのですが、それはページのレイアウトに従って配置されます。
以下の図は2列のレイアウトを表しています。



Liferayではデフォルトで様々なレイアウトが用意されていて、3列のレイアウトや1段目を1列、2段目を2列にするといったレイアウトなども用意されています。
ページのカスタマイズ機能はこのレイアウトの一部だけを、ユーザに解放し、そこだけは、ユーザが自由にポートレットを配置できるようにします。
カスタマイズの設定はまず サイトの管理権限のあるユーザでカスタマイズ設定したいサイトのページにアクセスして、画面上部のドックバーから「システム管理」➡「ページの編集」をクリックします。



ページの管理画面が表示されるので、カスタマイズ設定をするページをクリックします。
ここではHomeのページを選択します。右側のメニューでページ毎に設定できる項目が表示されるので、その中にある「カスタマイズの設定」メニューをクリックします。そうすると以下のようなカスタマイズ設定の画面が表示されます。
 ユーザにカスタマイズを解放したいレイアウトのエリアのチェックボックスにチェックを入れて保存します。



これで、Homeページを表示すると、カスタマイズを解放したレイアウトはユーザが自由にポートレットの追加や削除が可能になりますが、レイアウトを解放していない部分は固定になります。



Liferayの受動的パーソナライズ

Liferayでは受動的パーソナライズとして、アクセス権限管理機能が使えます。
ポータルの一般的な機能として、ユーザの持つ権限によって、ポートレットやコンテンツに対してのアクセス権の設定が行えるので、これを利用してページに配置したポートレットを見せたり、見せなくしたりできます。この機能はユーザ毎に設定するわけではないので厳密に言うとパーソナライゼーションとは外れるのですが、サイトコンテンツの表示を見せたり、見せなくする方法としてはよく使われる方法です。
本格的に受動的パーソナライズを行うにはルールエンジンと連携します。LiferayはDroolsといったルールエンジンと連携するプラグインが提供されています。(このプラグインはエンタープライズエディション専用のプラグインとなっています。)
ルールエンジンを活用すれば、アクセス管理で行うよりも柔軟な形のパーソナライゼーションが可能となります。
例えば、ユーザの住所の情報から、近くの地域で行われているイベントを抽出して表示するようなことが可能になります。
ルールエンジンとの連携については、また将来のブログで紹介させていただければと思います。

以上で、簡単ではありますが、Liferay で実現されているパーソナライゼーションについて見てきました。
ポータル製品の性格上、一般的なCMSに比べてパーソナライゼーションについての機能は充実しているのがお分かりいただけたかと存じます。
これらの機能を活用して、ダイナミックで魅力のあるサイトを構築してください。

それでは、また次回のLiferay紹介でお会いしましょう!


Thursday, July 23, 2015

Alfresco Community 4.2.c〜fでIE11だとログインできない問題への対処方法

こんにちは、そうまです。

今回はAlfresco Community 4.2.c〜fでIE11だとログインできない問題の対処方法についてまとめました。

この「IE11でログインできない」問題は比較的有名ですので、ネット上で探してみると対処方法は見つかります。しかし、記載された対処方法のみを行った場合に別の問題が起きてしまうことがありましたので、今更感がありますがエントリーを書いてみました。
なお、この問題は最新のAlfresco Community 5.0.xでは解消されています。

1. login.get.html.ftlファイルの修正

この問題について検索すると良く提案されている対策です。
ログインボタンのid属性を削除すると、IE11でもログインができるようになります。

<tomcat_dir>/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/guest/login.get.html.ftl
57行目:
<input type="submit" id="${el}-submit" class="login-button" value="${msg("button.login")}"/>
<input type="submit" class="login-button" value="${msg("button.login")}"/>
ただし、id属性を削ってしまった影響として、ログインボタンが以下のようにブラウザデフォルトのスタイルに変化してしまいます。


 2. login.cssの修正

デフォルトのスタイルとなってしまったログインボタンをAlfrescoのスタイルとなるように修正しましょう。idでの指定ができなくなりましたので、以下のclassでスタイルを指定した記述を追加します。
<tomcat_dir>/webapps/share/components/guest/login.css
.form-fields.login .form-field input.login-button {
  background-color: #ffa028;
  border-color: #ffa028;
  border-style: solid;
  color: #FFFFFF;
  font-family: Open Sans Bold,Arial,sans-serif;
}
これで、元どおりのスタイルが適用されたログインボタンとなります。



3. login.jsの修正

1.2.の対処方法だけで修正ができているように見えるのですが、実はid属性を削除したことで、javascriptエラーが発生するようになっています。
このエラーはブラウザをデフォルトの設定で使用している場合は表示されませんが、ブラウザでスクリプトのデバッグを行う設定となっていると、ログインボタンを押したときにエラーダイアログが表示されます。

例えばIE11の場合、[インターネットオプション]-[設定]-[ブラウズ]で、「スクリプトのデバッグを使用しない (Internet Explorer)」のチェックを外すと、以下のダイアログが表示されます。



Alfrescoを利用するだけであれば問題にならないかもしれませんが、Alfrescoでの開発の途中など、デバッグ有効にしているとログイン毎にダイアログが表示されて煩わしいため、これも対応しましょう。  

<tomcat_dir>/webapps/share/components/guest/login.js
90行目付近:
 this.widgets.submitButton.set("disabled", true);
 if (null != widgets.submitButton)
 {
     this.widgets.submitButton.set("disabled", true);
 }

109行目付近:
 this.widgets.submitButton = Alfresco.util.createYUIButton(this, "submit", null, {
    type: "submit"
 });
 if (null != this.widgets.submitButton)
 {
     this.widgets.submitButton = Alfresco.util.createYUIButton(this, "submit", null, {
        type: "submit"
     });
 }

なお、Alfrescoから利用されるのはlogin.jsをminifyしたlogin-min.jsですので、修正したlogin.jsからlogin-min.jsを作り直す必要があります。
 javascriptのminifyには様々なツールが提供されていますが、AlfrescoにはYUI Compressorが同梱されていますのでこれを利用します。
$ cd <tomcat_dir>/webapps/share/components/guest/
$ mv login-min.js login-min.js.orig
$ java -jar ../../WEB-INF/lib/yuicompressor-2.4.7.jar login.js -o login-min.js

これで、エラーも発生しなくなりました。

Alfresco Community 5.0.dに続きAlfresco One Enterprise 5.0.1がリリースされた現在ですが、まだまだAlfresco Community 4.2系を継続利用する環境もあると思いますので、その際の参考になれば幸いです。

Thursday, June 25, 2015

Alfresco勉強会#28 でAlfresco 5.0の検索機能について紹介しました。

こんにちは。おおたにです。

先日、弊社オフィスにてAlfresco勉強会#28が開催されました。当日の様子はこちらの記事にも書いてある通りですが、たくさんの方が集まり色々な質問が飛び交いました。発表は先ほどの記事のメタデータテンプレートと私の「Alfresco 5.0の検索機能をみてみよう」の2本立てでした。

私の発表では、Alfresco 5.0で大幅に強化された検索機能の紹介と、その中でも特にファセット検索(検索結果の絞り込み)のGUI上での設定方法について紹介しました。簡単にフィルタを追加できるので、実際にAlfrescoを利用する際にも有用な機能かと思います。


最後に、2点ほどお知らせをば。

お知らせ1 : 
次回、第29回Alfresco勉強会は2015/08/26(水)です。参加登録はこちらからお願いします。発表します、こういう話が聞きたいです等、どしどしフィードに書き込んでください。

お知らせ2 : 
2015/07/06(火)、弊社においてミニセミナー「パターン別ドキュメント管理のキーポイント 〜Alfresco, NemakiWareなどを例として〜」が開催されます。一概に文書管理と言っても目的に応じていくつかのパターンがあり、それぞれにおいて必要とされる機能やシステム導入時に考慮すべき事項が異なってきます。本セミナーでは、AlfrescoやNemakiWareと言ったECM製品を例にいくつかのパターンの文書管理の勘所を紹介しますので、ご興味をお持ちの方は是非ご参加ください!

Alfresco勉強会#28 メタデータテンプレートの作り方について発表しました

こんにちは。てらしたです。

昨日6/24に第28回Alfresco勉強会が開催され、Alfresco Shareのドキュメントリストに表示される属性情報を条件によって切り替えるためのカスタマイズ(メタデータテンプレート)について発表しました。
せっかくカスタムモデルを作って属性情報を追加したのにコンテンツの詳細画面を開かないとその属性が見れないというのは不便、ドキュメントリストにも表示したい、といった要件を満たすためのカスタマイズです。
Evaluatorの定義の仕方や使い方はメタデータテンプレートだけでなく、インジケータやアクションのカスタマイズをする場合も参考になると思います。


今回の勉強会は私が知る限りたぶん過去最高に参加者が多く、質疑応答も今までで一番活発だったのではないかと思います。私の発表の中でも、参加者の方からの質問でメタデータテンプレートが検索結果画面のリストには効いていないという発見があったりしました(下調べ不足という話でもありますが・・・。すみません。)

さて、次回のAlfresco勉強会は8月26日(水)です。次回もたくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第29回Alfresco勉強会

こういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。そもそもAlfrescoって何ができるの?というところから教えてほしい、といった要望でもかまいません。もちろん発表も大歓迎です。

Friday, May 22, 2015

AlfrescoのZipダウンロード機能が文字化けで使えない場合の対処法

こんにちは。最近花粉症っぽい症状がぶり返しているおおたにです。同僚に聞いたところ、イネ科の花粉がこの時期に飛ぶらしいとのことで、近いうちにアレルギー検査をしてこの症状の原因を突き止めたいと思っています。

さて、今回はAlfresco 4.2系以降で利用可能な「Zip形式でダウンロード」機能に関して起こりがちな問題と解決方法について説明します。


「Zip形式でダウンロード」機能とは


「Zip形式でダウンロード」機能は、複数のフォルダやファイルを一括ダウンロードする機能で、選択したフォルダもしくはファイルをZip形式で圧縮してダウンロードします。Alfresco 4.2において実装された機能で、現行のAlfresco 5でも利用することができます。





Zip形式ダウンロードを行うとファイル名が文字化けして展開できないことがある


とても便利な機能なのですが、Windows 7(もしくはそれ以前)においては、ファイル名が文字化けして展開できないことがあるという問題があります。MBCSのファイル名、例えば全角文字を含むようなファイル名のものを「Zip形式でダウンロード」でダウンロードしてみましょう。

Archive.zipというファイルがダウンロードされるので、エクスプローラで開いてみます。すると、以下のように文字化けしてしまうことがあります。なお、Windows 8やMac, Linuxでは文字化けせず、Windows 7以前でのみ文字化けします。



これは、Alfrescoが生成するZipファイルでは格納されているファイル名がUnicodeで記録されているにも関わらず、Windows 7以前ではファイル名をShiftJISとして認識しようとしていることに起因します。Mac等で生成したZipファイルをWindowsで開こうとすると文字化けすることがあるのと同じ問題です。


2つのワークアラウンド


この問題、既にAlfresco JIRAに報告されていますが、Alfresco側で手当てする予定は無いようなので、クライアント側で対処する必要があります。対処法としては以下の2つがあります。

1. Unicodeファイル名に対応したアーカイバを利用する
 Zipファイルの展開にエクスプローラではなくUnicodeファイル名に対応したサードパーティのアーカイバ(7-Zip等)を利用することで、文字化けせず適切に展開することができます。

2. Windowsの修正プログラムを適用する
 どうしてもMicrosoft謹製のエクスプローラで開きたいという場合は、各クライアントPCにこちらの修正プログラムを適用することで、Unicodeファイル名を適切に扱うことができるようになります。

2.の修正プログラムを適用すると、先ほどのArchive.zipも文字化けせずに展開できるようになります。



本記事は以上となります。ファイル一括ダウンロードを利用したいという方は是非お試しください。


Monday, May 11, 2015

Zero-configuration CmisSync

We just developed a new feature in CmisSync: Zero-configuration

Until now, CmisSync users had to go through a 3-steps wizard to add each synchronized folder they need:



That's not needed anymore!

CmisSync can now figure out all of this when it is started for the first time, by contacting a management server. This management server knows what this user needs to sync where and with what synchronization settings.

That's right, the user does not have to do anything: Install, run, and you're done: Syncing starts immediately without a single click.

Benefits for the user:
  • Zero time taken,
  • Zero configuration mistakes,
  • All of the right folders synchronized at the right place.
Benefits for the I.T. department:
  • Less support calls from users,
  • Fine-tuned configuration,
  • Reproducible environments,
  • Controlled load on the servers.
Zero-configuration CmisSync requires CmisSync Business and works better with Single Sign-On. To take advantage of Zero-configuration CmisSync, contact us.