Quantcast
Channel: aegif Labo Blog
Viewing all 244 articles
Browse latest View live

Alfrescoにカスタムindicatorを追加しよう(evaluatorも追加するよ)の巻

$
0
0
こんにちは。最近よく全身筋肉痛になる大谷です。

先日、弊社の花見兼BBQがあって家族を連れて行ったのですが、娘と遊んだり抱っこしたりしてたら見事に筋肉痛になりました。運動不足の賜物なので、もうそろそろ何がしかの運動を再開しないとまずいなと気持ちを新たにしている年度明けです。

前置きはさておき、今回はAlfrescoのindicatorとevaluatorを紹介したいと思います。以下の記述は現時点での最新バージョンであるAlfresco Community Edition 4.2.fに基づいています。


indicatorとは?


indicatorとはドキュメントの左上に表示されるアイコンのことで、ドキュメントの状況に応じてアイコンの表示/非表示を制御することができます。例えば標準のAlfrescoでは、ワークフローが回っているドキュメントや、特定のアスペクト(EXIF等)が付いているドキュメントにアイコンが表示されます。



デフォルトのindicatorは、以下のファイルの<indicators>セクションで定義されています。

<tomcat_dir>/webapps/share/WEB-INF/classes/alfresco/share-documentlibrary-config.xml
<indicators>
<!-- Being edited by current user -->
<indicator id="editing" index="10">
<evaluator>evaluator.doclib.indicator.editing</evaluator>
</indicator>
<!-- Locked by current user -->
<indicator id="lock-owner" index="10">
<evaluator>evaluator.doclib.indicator.lockOwner</evaluator>
</indicator>
<!-- Locked with owner identified by cm:owner property -->
<indicator id="locked" index="10" icon="lock-owner-16.png">
<evaluator>evaluator.doclib.indicator.lockedOwner</evaluator>
<labelParam index="0">{jsNode.properties.owner.displayName}</labelParam>
<labelParam index="1">{jsNode.properties.owner.userName}</labelParam>
</indicator>
<!-- Locked with owner identified by cm:lockOwner property -->
<indicator id="nodeLock" index="10" icon="lock-owner-16.png" label="status.locked">
<evaluator>evaluator.doclib.indicator.nodeLocked</evaluator>
<labelParam index="0">{jsNode.properties.cm_lockOwner.displayName}</labelParam>
<labelParam index="1">{jsNode.properties.cm_lockOwner.userName}</labelParam>
<override>locked</override>
</indicator>
<!-- Google Docs Editing -->
<indicator id="google-docs-editing" index="10">
<evaluator>evaluator.doclib.indicator.googleDocsEditing</evaluator>
<override>editing</override>
</indicator>
...

カスタムindicatorを追加したい場合は、このような設定を追加する必要があります。


evaluatorとは?


evaluatorとは、このindicatorやドキュメントアクションの表示条件を指定するものです。条件に応じてtrueもしくはfalseを返すというシンプルなもので、indicatorやアクションなど、Alfresco Shareの様々な場所で、条件指定のパラメータとして利用されています。実際に、デフォルトで定義されているindicatorを見てみても、evaluatorセクションにてどのevaluatorを使うかが指定されています。

デフォルトで利用可能なevaluatorは、以下のファイルで定義されています。

<tomcat_dir>/webapps/share/WEB-INF/classes/alfresco/slingshot-documentlibrary-context.xml
<!-- Being edited by the current user -->
<bean id="evaluator.doclib.indicator.editing" class="org.alfresco.web.evaluator.doclib.indicator.EditingEvaluator" />
<!-- Locked by the current user -->
<bean id="evaluator.doclib.indicator.lockOwner" class="org.alfresco.web.evaluator.doclib.indicator.LockOwnerEvaluator" />
<!-- Locked by another user -->
<bean id="evaluator.doclib.indicator.locked" class="org.alfresco.web.evaluator.doclib.indicator.LockedEvaluator" />
<!-- Locked by another user, indicated by cm:owner property (no cm:lockOwner) -->
<bean id="evaluator.doclib.indicator.lockedOwner" class="org.alfresco.web.evaluator.ChainedMatchAllEvaluator">
<property name="evaluators">
<list>
<ref bean="evaluator.doclib.indicator.locked" />
<ref bean="evaluator.doclib.indicator.hasOwner" />
<ref bean="evaluator.doclib.indicator.noLockOwner" />
</list>
</property>
</bean>
...

独自のevaluatorを定義するにはこのような設定を追加する必要がありますが、具体的には以下の2通りの方法があります。
  1. 既存のevaluatorを利用してカスタムevaluatorを定義する
  • evaluator bean定義においてparent属性で親evaluatorを指定する
  • propertyセクションでプロパティを指定する
  • カスタムevaluatorクラスを作成する
    •  org.alfresco.web.evaluator.BaseEvaluatorクラスを継承し、boolean evaluate()をoverrideして条件判定ロジックを記述する
    • このカスタムevaluatorクラスについてのevaluator bean定義を追加する
    1.は、既存のevaluatorで実現可能な条件判定を行う場合に利用でき、xmlの設定を追加するだけで実現することができます。例えば、特定のタイプやアスペクト、属性値を判定したり、複数の条件の組み合わせで判定する場合などに利用できます。


    カスタムindicatorを追加しよう


    というわけで、早速カスタムindicatorを追加してみようと思います。今回のサンプルでは、更新日から1日以内のドキュメントにアイコンを表示するようなindicatorを作ります。

    1. indicatorを定義する


    まず、indicatorを定義します。定義は以下のとおり、share-config-custom.xmlに記述します。

    <tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml
    <alfresco-config>
    <config evaluator="string-compare" condition="DocumentLibrary">
    <indicators>
    <indicator id="new-arrival" index="5">
    <evaluator>evaluator.doclib.custom.newArrival</evaluator>
    </indicator>
    </indicators>
    </config>
    </alfresco-config>

    Alfrescoをインストーラでインストールした場合などは既にshare-config-custom.xmlが存在すると思うので、その時は上記内容をマージしてください。

    まず、indicatorセクションでは以下の属性を指定できます。
    • index :indicatorアイコンの表示順序。index値の小さいものから順に表示されます。
    • icon : アイコンファイル。省略すると、/res/components/documentlibrary/indicators/{id}-16.png が使われます。
    • label :アイコンのツールチップラベルのリソースキー。省略すると、status.{id}が使われます。
    また、indicatorセクション内ではevaluatorセクションで表示条件を指定します。ここで指定するのはevaluatorのクラス名ではなくbean idです。evaluator.doclib.custom.newArrivalはデフォルトでは定義されていないevalutorですが、後ほど説明します。その他にも設定可能な項目がありますが、詳しくはAlfrescoのHelpを参考にしてください。

    上記の例ではicon属性が省略されているため、new-arrival-16.pngという画像ファイルが表示されます。当然デフォルトでは入っていないので、以下のディレクトリに適当な画像(16x16)を追加してください。

    <tomcat_dir>/webapps/share/components/documentlibrary/indicators/new-arrival-16.png

    2. メッセージリソースを追加する


    次に、ツールチップ用のメッセージリソースを追加します。先ほどの定義ではlabel属性も省略されていたので、リソースキーはstatus.new-arrivalとなります。必要なのは以下の2ファイル、メッセージファイルを読み込むためのbean定義ファイルとメッセージファイル本体です。

    <tomcat_dir>/shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN''http://www.springframework.org/dtd/spring-beans.dtd'>

    <beans>
    <bean id="evaluator.doclib.custom.newArrival" class="jp.aegif.alfresco.sample.CustomEvaluator"/>
    <bean id="share.custom.resources" class="org.springframework.extensions.surf.util.ResourceBundleBootstrapComponent">
    <property name="resourceBundles">
    <list>
    <value>alfresco.messages.custom-messages</value>
    </list>
    </property>
    </bean>
    </beans>


    <tomcat_dir>/shared/classes/alfresco/messages/custom-messages.properties
    # status.new-arrival=新着
    status.new-arrival=\u65b0\u7740

    1つ目のファイルのファイル名は*-context.xmlであれば何でも構いません(Alfrescoが自動的に読み込んでくれます)。evaluator.doclib.custom.newArrivalというidのbean定義については、後ほど説明するので今は無視してください。

    3. evaluatorを追加する


    最後にevaluatorを追加します。今回は更新日(cm:modifiedプロパティ)から1日未満か否かを判別するevaluatorが必要ですが、デフォルトで定義されているevaluatorだけでは実現できないため、カスタムevaluatorを作成します。

    前述のとおり、org.alfresco.web.evaluator.BaseEvaluatorクラスを継承し、boolean evaluate()をoverrideして条件判定ロジックを記述します。以下にサンプルコードを記載します。

    package jp.aegif.alfresco.sample;

    import java.util.Date;
    import org.alfresco.web.evaluator.BaseEvaluator;
    import org.json.simple.JSONObject;
    import org.springframework.extensions.surf.util.ISO8601DateFormat;

    public class CustomEvaluator extends BaseEvaluator {
    @Override
    public boolean evaluate(JSONObject jsonObject) {
    String modifiedDateString = (String)((JSONObject)getProperty(jsonObject, "cm:modified")).get("iso8601");
    Date modifiedDate = ISO8601DateFormat.parse(modifiedDateString);
    Date now = new Date();
    if (now.getTime() - modifiedDate.getTime() < 24*60*60*1000) {
    return true;
    }
    return false;
    }
    }

    jsonObjectにドキュメントのメタデータ等が入っているので、そこからcm:modifiedプロパティの値を取得し、現在の時刻と比較します。コンパイルしたらjarでパッケージングするなどして、Alfresco Shareのクラスパス上にコピーします(<tomcat_dir>/webapps/share/WEB-INF/lib/ 等)

    また、このクラスを新しいevaluatorとしてAlfrescoに認識させるためのbean定義を記述する必要がありますが、それが前述のevaluator.doclib.custom.newArrival beanになります。

    以上でカスタムindicatorの準備は完了です。


    動作確認しよう


    では、実際に動作確認をしてみましょう。カスタムモジュールを配置したら、Alfrescoを再起動します。
    Alfrescoが起動したら、リポジトリもしくはサイトのドキュメントライブラリにアクセスしてみましょう。ファイルをアップロードすると、更新から1日経っていないドキュメントに新着アイコンが表示されるはずです。もちろん、1日以上経ったドキュメントには新着アイコンが表示されません。



    というわけで、今回はindicatorとevaluatorのカスタマイズについて紹介しました。比較的簡単に追加できますので、みなさんも是非挑戦してみてください。なお、ここで紹介したコードはこちらにありますので必要に応じて参照いただければと思います。

    Private cloud vs. public cloud for document management

    $
    0
    0
    I sometimes get asked: "Why set up a private cloud for your company's document management, when offers like Office365 and Dropbox for Business are available?"

    Security

    If your company's information is one of its main assets, don't give it to third parties.

    As revealed by Snowden, the NSA spies at the root of public clouds' infrastructure. And ironically, one of Dropbox's board members is an ex-US Secretary of State famous for authorizing wiretapping.

    Dropbox, Office365, Google Docs store your documents unencrypted, out of your control, where they have high chances of getting spied on. Think you are not interesting enough for spies? Think again, most surveillance targets are innocent civilians.

    Integration

    Document management is not alone in the world.
    Your company has tools for messaging, scheduling, custom relationship management, business intelligence.
    Public cloud offers just do not integrate with any of these tools.

    Going a step further, many real-world companies extend beyond the Internet.
    Even if not, soon will come a day where you want to:
    • Integrate with a printing system
    • Scan efficiently (customer applications, resumes, ...)
    • Unify data from CCTV videos, fire sensor reports, and any other source of information.
    Such real-world integration is common in on-premise document management solutions, but cloud offers are light-years away from it.

    The CMIS protocol is designed to facilitate integration with document management systems. It is implemented by 99% of on-premise document management systems, but only by a single public cloud document management (Alfresco Cloud).

    Real workflows

    Public cloud document management offers typically have poor workflow engines. In addition, all companies are different and have not only different business processes, but different ways of controlling their business processes. All public cloud offers totally lack this flexibility.

    A real workflow engine can be extended, adapting itself to your workflows.
    Dropbox does not even have workflows. Office365 has simplistic workflows in which your business processes won't fit well, making your whole company less efficient, and irritating your employees. The engine should adapt to your workflows, not the other way round.

    Sustainability

    Choosing a private cloud offer means locking yourself with a particular public cloud vendor. While this is true with all non-open-source products, the problem is worse here because the vendor can limit your number of users, number of documents, storage space, and anything they want to limit.

    While $125 per user might sound reasonable right now, it might sound less so when suddenly your company needs to let 200 external contractors access to a folder. That is a scalability issue.
    Also, your vendor will change its pricing in the future, and it might not be at your benefit.

    Migrating from an on-premise vendor to another is doable thanks to the CMIS standard. On the other hand, it is nearly impossible to migrate out of a public cloud offer without losing the metadata, document relationships, and versions history.

    Quality of Service

    Dropbox outages happen frequently. Office365 rolls up new (buggy) releases just when your company is extremely busy and can't afford to take any risk.

    With your private cloud, you have the freedom to:
    • Define the QoS (Quality of Service) you need.
    • Roll out changes only when your staff is not already 100% busy.

      Agility

      Public cloud offers like Office365 and Google Docs rely on heavy factorization to be competitive. Just try contacting Google and asking them to fix one of their bugs: You probably won't have any impact, even if the bug is extremely important for your company.

      Indeed, factorization comes with a total lack of flexibility. Public clouds are so big they can't afford to reconfigure a server for your particular needs.

      Conclusion

      On the other hand, what is good with public cloud for document management?
      In most cases, private cloud is the most rational solution.

      Alfresco 4.2の使い方 - ユーザ管理・グループ管理

      $
      0
      0
      こんにちは。大谷です。
      今回は、Alfresco 4.2の使い方のうち、Alfrescoをエンドユーザが使い始める前に最低限行う必要のある管理タスクについてまとめてみました。

      なお、インストール方法についてはAlfresco4.0をインストールしてみよう(インストーラ編)Alfresco4.2をインストールしてみよう(手動インストール編)に詳細が載っていますので参考にしてください。


      管理者でログインする


      まずは管理者ユーザでログインし、Alfrescoを使い始めるための一通りの準備を行います。

      ブ ラウザで http://<サーバIP>:<ポート番号>/share/ (例えば http://localhost:8080/share/ 等)にアクセスし、管理者ユーザのユーザ名とパスワードを入力します。ユーザ名はadmin、パスワードはデフォルトでadminとなっています(インス トーラを使ってインストールした場合は、インストールウィザードで指定したパスワードになります)。


      ログインに成功すると、ユーザダッシュボード画面が表示されます。
      このユーザダッシュボード画面には様々な情報が集約して表示されますが、「ダッシュボードのカスタマイズ」アイコンをクリックして表示内容をカスタマイズすることもできます。

      ヘッダに並ぶアイコンは各機能へのリンクになっており、ユーザダッシュボードやマイファイル(ユーザごとのフォルダ)、共有ファイル、サイト、リポジトリ、その他の管理アクションの画面へ飛ぶことができます。

      また、画面右上のユーザ名をクリックすると、自身のユーザ情報やパスワード変更、ログアウト等のメニューが表示されます。




      ユーザを登録する


      続いて、Alfrescoにユーザを登録します。管理系のメニューには画面上部の「管理者ツール」からアクセスします。まず「管理者ツール」をクリックします。


      すると、以下のように管理者コンソールが表示されるので「ユーザー」をクリックしてユーザ管理画面に移動しましょう。例えば「a」と入力して検索を行うと以下のように検索結果が表示されます。


      デフォルトの状態では、admin(管理者ユーザ)と2人のサンプルユーザが登録されていますが、サンプルユーザは無効状態になっています(赤色のアイコン)。

      で は、新規ユーザを追加してみましょう。「新規ユーザー」をクリックすると、以下のような画面が表示されるので、「名」、「姓」(表示に使用)、「Eメー ル」、「ユーザー名」(ログインに使用)、「パスワード」、「パスワードの確認」を入力し、「ユーザーの作成」をクリックします。



      登録が完了したら、作成したユーザを検索してみましょう。

      ここで注意が必要なのは、Alfresco上では名前が「名」「姓」の順に表示されるということです。例えば、姓名を逆に登録するなどの運用対応が考えられます。

      また、Alfrescoはユーザの一括登録(インポート)にも対応しています。「Alfrescoのユーザインポート機能を試す」に詳しい方法が書かれていますので参考にしてください。


      グループを登録する


      続いて、Alfrescoにグループを登録します。
      アクセス権管理等にグループを用いることで、管理の手間を削減することができます。

      まず、管理者コンソールの「グループ」をクリックします。
      すると、グループ画面が表示されるので、「閲覧」ボタンをクリックします。


      グループの一覧が表示されるので、「新規グループ」アイコンをクリックします(小さいアイコンで分かりにくいですが、ツールチップで分かります)。


      次に、グループ情報を入力します。以下のように入力して「グループの作成」をクリックします。IDはAlfresco内部での処理等に利用され、表示名はグループ表示の際に利用されます。


      正常に追加されると一覧に表示されるので、先ほど追加したグループをクリックし、「ユーザーの追加」アイコンをクリックします(これまた分かりづらいです…)。



      検索ダイアログが表示されるので、追加するユーザを検索し、「追加」ボタンをクリックします。
      これを繰り返し、グループにユーザを追加していきます。


      削除する場合は、ユーザにマウスカーソルを当て、「ユーザーを取り除く」アイコン(×アイコン)をクリックします。また、グループのメンバにグループを指定することも可能です。


      Alfresco 4.2の使い方 - リポジトリとサイトの準備をしよう

      $
      0
      0
      こんにちは。大谷です。

      前回の記事「Alfresco 4.2の使い方 - ユーザ管理・グループ管理」に引き続き、Alfrescoを使い始めるための準備のお話をしたいと思います。

      ユーザ・グループを登録して早速利用開始!と言いたいところなのですが、実はAlfrescoにはコンテンツ管理を行う方法が2種類あります。この2種類は「リポジトリ」と「サイト」と呼ばれるものです。
      そこで今回は、その2種類の概要と特徴、利用シナリオを説明し、それぞれの準備方法を紹介しようと思います。


      リポジトリ vs サイト


      まずは、リポジトリとサイトについて、それぞれがどういうもので、何ができて何ができないのか、どのように選択すればよいかを説明します。

      リポジトリ

      ざっくり言うと、リポジトリとはお馴染みのファイルサーバ、共有フォルダと同様で、ルートフォルダ以下にツリー構造のフォルダを作成し、適切に権限を付与してコンテンツ管理を行うものです。

      サイト

      サイトとは、部署、プロジェクトなどチームごとのコラボレーションスペースを提供し、その単位で各種情報を共有しようというものです。その箱をサイトと呼び、サイトごとに以下のツールを利用することが可能です。
      • サイトダッシュボード: サイトごとにアクティビティ等の情報を集約表示する画面
      • 文書ライブラリ: リポジトリとほぼ同等のコンテンツ管理ツール
      • 議論: 掲示板(discussionが「議論」と訳されてしまっています…)
      • Wiki: 一般的なWiki
      • ブログ: 一般的なブログ
      • カレンダー: チームのイベントを管理するもの
      • リンク: URLリンクのリスト
      • データリスト: 課題やToDo等のリストを管理するツール

      リポジトリとサイトの大きな違いはコンテンツ管理以外のツールの有無と、チーム単位での情報共有ということになりますが、その他にも以下のような違いがあります。
      • リポジトリではユーザ/グループ単位で権限管理を行うが、サイトの文書ライブラリではサイトで与えられるロールごとに権限管理を行う。
      • Microsoft Office連携(オンライン編集機能)はサイトの文書ライブラリのみで利用可能

      以上を踏まえて、以下にリポジトリとサイトの利用シナリオを挙げてみます。
      もちろん、要件によっては逆のもので対応できる場合もあるでしょうし、併用するという選択肢もあります。

      リポジトリを利用すべきシナリオ

      • ユーザ単位での厳密な権限管理が必要な場合
      • コンテンツ管理以外のコラボレーションツールを利用する必要がなく、なるべくシンプルなUIが求められる場合
      • コンテンツ管理プラットフォームとして、主に他システムとの自動的なコンテンツのやりとりに利用され、ユーザが介在する場面が少ない場合

      サイトを利用すべきシナリオ

      • コンテンツ管理以外のコラボレーションツールを利用する場合
      • 組織、プロジェクトごとの情報共有に主眼が置かれている場合


      では、続いてリポジトリとサイト、それぞれの使い方を見てみましょう。


      リポジトリを使ってみる


      まずはリポジトリにアクセスしてみましょう。リポジトリはAlfrescoインストール時にデフォルトで準備されているため、特別な設定は必要ありません。
      Alfrescoのヘッダにある「リポジトリ」をクリックします。

      すると、以下のような画面が表示されますが、これがリポジトリのルートフォルダになります。

      画面左にツリー構造のフォルダがあり、画面右にはカレントフォルダ内のコンテンツ一覧が表示されますが、これはファイルサーバや共有フォルダと全く同じイメージだと思ってもらって結構です。
      基本的な使い方も同じで、フォルダを作成し、ファイルをアップロードしていきます。ファイルの詳細な情報を参照するためには、ファイル名もしくはサムネイルをクリックして詳細画面を表示します。「ダウンロード」をクリックするとファイルをダウンロードすることができます。


      実際にアクセスしてみると、リポジトリのルートフォルダ以下にはData DictionaryやSites、IMAPホームなどのシステムフォルダが見えることが分かると思います。これらは一般ユーザであればリードオンリーですが、これらを見えないようにしたい場合には「共有ファイル」機能を利用することもできます。ヘッダから「共有ファイル」をクリックしてみましょう。

      今度はリポジトリと同等のUIがシステムフォルダ無しで表示されたかと思います。実は、ここではリポジトリルートの「共有」フォルダ以下が見えるようになっており、システムフォルダを隠ぺいするための手軽な手段となります。ヘッダの「リポジトリ」リンクを設定で非表示にして、サイトと共有ファイルを併用するという運用も考えられます。


      サイトを使ってみる


      次に、サイトの使い方を説明します。サイトはAlfrescoインストール時にサンプル用サ イト「Sample: Web Site Design Project」が用意されているので、どのようなものかを知るためにはこのサイトにアクセスしてみるのが一番です。「あなたのサイト」ダッシュレット、もしくはヘッダの「サイト」からアクセスすることができます。しかし、実際にサイトを使い始めるためには新しいサイトを準備する必要があります。

      まずはサイトの作成から

      では、早速サイトを作ってみましょう。
      まずは上記画面の「サイトを作成」をクリックしましょう。すると以下の画面が表示されるので、必要な項目を入力します。


      公開レベルについては以下の通りです。
      • 公開: 全ユーザに公開され、ユーザは自由にサイトへ参加することができます。参加していなくてもサイト内のコンテンツを閲覧することができます(書き込みはできません)。
      • 条件付き公開: 全ユーザに公開されますが、サイトへの参加にはサイト管理者の承認が必要です(ユーザは参加リクエストを投げることができます)。参加していないユーザはサイト内のコンテンツにアクセスできません。
      • 非公開: サイト管理者が招待したユーザにしか公開されません。
      ここでは公開レベルを「公開」にしてみましょう。必要な情報を入力して「OK」をクリックすると、以下のようにサイトが作成され、サイトダッシュボードが表示されます。

      次に、「サイトの設定オプション」アイコン→「サイトのカスタマイズ」をクリックします。

      サイトのカスタマイズ画面が表示されるので、サイトで利用するツールをドラッグ&ドロップで追加・削除します。

      最後に「OK」ボタンを押すと、追加されたコンポーネントがサイトダッシュボードに追加されます。なお、全てのコンポーネントが表示されていない場合は「その他」をクリックすると残りのコンポーネントが表示されます。


      サイトにメンバーを招待する

      サイトの準備が完了したら、サイトにユーザを招待します。
      公開の場合では、ユーザがサイトに参加しなくてもサイト内の情報にアクセス可能ですが、その場合はゲスト権限でのアクセスになります。 より強い権限でのアクセスを許可するためには、サイト管理者がユーザを招待する必要があります。
      では、早速ユーザを招待してみましょう。

      まず、「ユーザーの招待」アイコンをクリックします。

      サイトメンバー画面が表示されるので、ユーザを検索して「追加」ボタンをクリックし、「役割の選択」から付与する役割を設定します。各役割の詳細はAlfresco Helpを参照してください。

      招待するユーザを設定したら、「招待」ボタンをクリックします。これで招待処理が完了ですが、最後にユーザ側で招待の承認を行う必要があります。なお、招待したけど承認されていないユーザは、「保留中の招待者」から確認することができます。

      招待されたユーザでAlfrescoにログインすると、ユーザダッシュボードの「あなたのタスク」ダッシュレットに招待の通知が表示されます。

      これをクリックすると以下の画面が表示されるので、「承認」をクリックします。

      以上で招待とそれに対する承認が完了し、設定した役割でのサイトへのアクセスが可能になります。

      サイトの文書ライブラリにアクセスする

      最後に、サイトの文書ライブラリにアクセスしてみましょう。サイトダッシュボードから「文書ライブラリ」をクリックすると以下の画面が表示されますが、これが文書ライブラリのルートフォルダになります。

      基本的な操作感はリポジトリとほぼ同じですが、両者には前述の違いがあることに注意が必要です。
      ま た、文書ライブラリはサイトごとに生成されるため、サイトをまたぐ形でのコンテンツ共有ができないことに注意が必要です。その必要がある場合は、 両サイトの参加ユーザを包含する形のサイトを別途作成してそちらで共有する、リポジトリ(もしくは共有ファイル)を併用する等の対処が必要になります。

      第21回Alfresco勉強会が開催されました

      $
      0
      0
      こんにちは。寺下です。

      先日4/23(水)に21回目のAlfresco勉強会が開催されました。
      この勉強会ではいつも2つ発表があるのですが、今回は参加者の方が知りたい内容と発表予定の内容がちょっとズレていたため、発表を1つ次回以降に回すことにして、その時間を使って質疑応答に充てることになりました。Alfrescoの認証連携の仕組みやampファイルを適用すると実際は何が起こっているのか、といった内容についてご質問があり、実際に設定ファイル等を画面に映しながらご説明することができたので、自分で調べるよりは早く疑問を解消できたのではないかと思います。参加者の方の希望によってはこういう進め方もアリですね。

      ちなみに、次回以降に回すことになったのはAlfrescoのマルチテナントの話でした。おそらく次の勉強会で発表することになると思うので、興味のある方はぜひ参加していただければと思います。

      というわけで、今回の発表は以下の1件でした。

      Alfresco Workdesk ConfiguratorによるPluginの設定変更方法

      発表資料はこちら

      前回に引き続きAlfresco Workdesk関連の内容です。WorkdeskはExplorerやShareとは違い、Configuratorというツールを使用して比較的簡単にUIをカスタマイズすることができるようになっています。今回の発表では具体的に要件を設定してそれを実現するための設定方法をご紹介する、という内容ではなく、より基本的なConfiguratorの使い方(インストール方法含む)についてご紹介しました。WorkdeskのPluginは大きく分けて4種類あり、それぞれに非常に多くの設定項目があるため、Configuratorでどの設定を変えればどこが変わるのか色々試してみていただければおもしろいと思います。

      さて、次回の勉強会は6月25日(水)に開催予定です。たくさんの方のご参加をお待ちしております。参加申し込みはこちらからお願いします。

      Alfrescoでファイルを別のAlfrescoインスタンスに転送する(レプリケーションジョブ)

      $
      0
      0
      こんにちは。週末に富士芝桜まつりに行ってきたものの六分咲きで不完全燃焼なおおたにです。

      芝桜は見ごろでは無かったのですが、当日は天気がよく富士山がとても綺麗でした。下の写真は新倉山浅間公園の忠霊塔で撮ってきたものです。周囲の木々は桜なので、春にはもっと綺麗な景色を眺めることができるようです。約400段の階段を登る必要がありますが、おすすめスポットです。


      さて、今回は、あるAlfrescoに保存されているファイルを別のAlfrescoリポジトリに転送する(一方通行で同期する)レプリケーションジョブという機能を説明したいと思います。以下では、Alfresco Community 4.2.f に基づいて説明します。


      レプリケーションジョブとは


      レプリケーションジョブとは、あるAlfresco上の特定のフォルダを、別のAlfrescoリポジトリに転送する機能です。特定のフォルダ以下のファイルだけを、別のAlfresco上で公開したい、という要件を実現することができます。この機能の主な特徴は以下のとおりです。

      • 転送は一方通行で、転送先のフォルダは転送元のフォルダと同期されます。つまり、転送元でファイルが削除されると、転送先でもファイルが削除されます。
      •  転送先のフォルダパスを選べません。必ず転送元のフォルダパスと同じ場所に転送されます。
      •  転送先のファイルをロックすることができます(リードオンリーモード)。リードオンリーモードの場合、転送先のAlfrescoでは転送されたファイルを削除することができません。


      レプリケーションを有効にする


      デフォルトの状態ではレプリケーションが無効になっているため、設定を変更してレプリケーションを有効にする必要があります。

      まずは、alfresco-global.propertiesでレプリケーションを有効にする設定を行います。なお、replication.transfer.readonlyをtrueに設定すると、前述のリードオンリーモードとなります。

      <tomcat_dir>/shared/classes/alfresco-global.properties
      replication.transfer.readonly=true
      replication.enabled=true


      続いて、share-config-custom.xmlでレプリケーション先のAlfrescoを設定します。ファイルが無い場合は以下の内容のファイルを新規作成し、既に存在する場合はconfigセクションを既存のalfresco-configセクションに追加します。なお、repositoryIdは、http://<転送先AlfrescoサーバIP>:<ポート番号>/alfresco/service/cmis/index.html にブラウザでアクセスし、CMIS Repository Informationを展開すると確認できますので、そのリポジトリIDを入力します。その後のShare URLも転送先Alfrescoサーバのものを入力してください。

      <tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml
      <alfresco-config>
      <config evaluator="string-compare" condition="Replication">
      <share-urls>
      <share-url repositoryId="7519130f-0305-46f5-b27a-ffe51f3084f6">http://127.0.0.1:7080/share/</share-url>
      </share-urls>
      </config>
      </alfresco-config>


      上記2ファイルの設定が終わったら、Alfrescoを再起動しましょう。


      転送先サーバへの接続を設定する


      続いて、転送先Alfrescoへの接続設定を行います。adminユーザでAlfrescoにログインし、「リポジトリ」→「Data Dictionary」→「Transfers」→「Transfer Target Groups」→「Default Group」に移動し、フォルダtestを作成します。フォルダtestの「プロパティを編集」をクリックし、転送先サーバIP(ホスト名)、ポート番号、パス(このままでOK)、プロトコル、認証情報を入力し、「有効」にチェックを付けて「保存」をクリックします。



      レプリケーションジョブを設定する


      以上で、レプリケーションジョブの準備が完了しました。あとはレプリケーションジョブを設定するたけです。adminユーザでAlfrescoにログインし、適当に転送対象フォルダを作成してファイルを追加しておきます。続いて、「管理者ツール」→「レプリケーションジョブ」を開き、ジョブの作成」をクリックします。


      ソースアイテムに転送対象フォルダを選択し、転送ターゲットに転送先サーバ接続設定を指定します。スケジュール実行が必要な場合はその開始日時と間隔を指定します。最後に「有効」にチェックを付けて「ジョブの作成」をクリックします。





      テストしてみよう


      では、早速テストしてみましょう。ジョブを作成すると「レプリケーションジョブ」画面に戻るので、先ほど作成したジョブの「ジョブの実行」をクリックしてみましょう。ジョブ実行後、しばらくしてから画面をリロードしてみて「最後のジョブは成功しました。」と表示されたらテスト成功です。



      転送先のAlfrescoにログインし、転送対象フォルダが同期されていることが確認できると思います。なお、転送先のファイルには転送されてきたことを示すアイコンが表示されます。さらに、リードオンリーモードの場合は削除やプロパティの編集ができないようになります。



      今回の内容は以上になります。詳しい設定方法はAlfrescoのオンラインヘルプに載っていますので参考にしてください。


      Liferayアップグレードの流れと注意点

      $
      0
      0
      こんにちは。ドラゴンクエスト・ファイナルファンタジー両シリーズとも1作もプレイしたことのないおおたにです。

      まあ子供のころにコンシューマ機を持っていなかったのが原因なんですが、例えばドラクエのレベルアップ音とかモンスターとか呪文とか、何となくは知っていますがあまりなじみがないため、エニックスとかスクウェアとかそういう話題には笑顔だけで対応するしかありません。

      そんなこんなで最近は、子供にコンシューマ機を買い与えることについて考えています。 賛否両論ある話ですよね。実体験からすると経験の幅が広がる事が将来にわたってプラスに働くと思うのでそこは買い与えるつもりでいるのですが、やはりそれに執着してしまうことで逆に幅が狭まるだろうから、買い与えるタイミングをどう判断するか迷いどころです。

      というわけで(どういうわけだ!)、今回はLiferayのアップグレード(バージョンアップ)の方法と気を付けるべき点について見ていきます。ターゲットとしているLiferayのバージョンは、6.0、6.1、6.2あたりです。

      # ちなみに個人的には、レベルアップ音よりも宝箱開ける音、呪文じゃなくて半キャラずらしの肉弾戦の方がなじみがあります。というわけで、なかなか一般的な会話として出しにくいネタなわけですね。はい、ただ言いたいだけですすいません…。


      Liferayアップグレードの大まかな流れ


      まず、Liferayをアップグレードする際に必要なデータは以下の2つです。
      • データベース
      • ファイルシステム上のファイル(文書ライブラリ等で管理されるファイルのストア)

      基本的にはこの2つを新しいバージョンのLiferayに食わせれば、あとは自動的にLiferayがアップグレードの処理を行ってくれます。では、もう少し具体的にLiferayアップグレードの流れを見てみましょう。

      1. 新バージョンのLiferayをインストールする(起動はしない)
      2. 旧Liferayを停止する
      3. 文書ライブラリストアを必要に応じて新Liferayにコピーする
      • ローカルファイルシステム上で管理していれば、<liferay_dir>/data/document_library を旧Liferayから新Liferayにコピーする
      • DBやNAS上で管理していれば、ファイルのコピーは必要ない(portal-ext.propertiesの確認・見直しは必要)
    • 旧Liferayのportal-ext.propertiesを新Liferayにコピーし、設定の見直しを行う
      • バージョンの違いによる設定項目の追加/廃止などを反映する
      • DBの接続設定、文書ライブラリのストア設定(dl.store.impl)まわりを確認する
      • その他、アップグレード時のバージョンの違いを吸収するための設定を行う(後述)
    • 新Liferayを起動する
      • catalina.outをtailし、アップグレード時に問題が発生しないか監視しておく
    • 新Liferayに追加のプラグインやカスタムモジュールをデプロイする
    • [データベースもアップグレードや移行が必要な場合] 他のDBにデータをエクスポートする
      • Control Panel -> Configuration -> Server Administration -> Data Migrationで他のDBにデータをexportする
      • その後portal-ext.propertiesのDB接続設定を変更してLiferayを再起動するだけで移行完了
    • インデックスをリビルドする
      •  Control Panel -> Configuration -> Server Administration ->Resources -> Reindex all * indexes.
      • catalina.outをtailして進捗状況を監視しておく

      以上が基本的な流れです。 DBのスキーマ変更などのアップグレード処理は新Liferay初回起動時に全て自動で行われます。


      注意点(主にportal-ext.propertiesの設定について)


      Liferayに限りませんが、ソフトウェアはバージョンを重ねるにつれて新しい機能が実装されたり、既存機能の仕様が変更されたりします。そのため、Liferayをアップグレードする際にはそのバージョンに応じて適切な設定を行っておく必要があります。

      例えば、Liferay 6.1からLiferay 6.2にアップグレードする際には、以下の設定をportal-ext.propertiesに追記する必要があります。
      passwords.encryption.algorithm.legacy=SHA

      これは、デフォルトのパスワード暗号化アルゴリズムが6.1と6.2で異なるためで、この設定を追加しないとアップグレード後、ユーザログインで失敗するようになってしまいます。

      また、6.1系のアップグレードプロセスにはアップグレード後にコントロールパネルにアクセス出来なくなるという既知の問題があるため、以下の設定をportal-ext.propertiesに追記する必要があります(アップグレード時だけ設定し、アップグレードが完了したら削除しましょう)。
      verify.frequency=-1

      その他、必要な設定についてはLiferayのユーザガイドに詳細が書かれています。


      まとめ


      簡単に紹介させていただきましたが、Liferayアップグレードが簡単に実施できることをお分かり頂けましたでしょうか。もちろん、カスタムポートレットやテーマ、プラグインを利用している場合は、それらがアップグレード後も使えるか確認して必要に応じて修正する必要があります。しかし、Liferayはそれらのカスタムモジュールをコアと比較的疎結合な形で実装することができるので、それなりに現実的なものとしてアップグレードを検討できると思います。

      今回紹介した内容はLiferayのユーザガイドにも記載されているので、詳しい情報が必要な方はこちらも見てみてください。

      CmisSync now on Facebook: Like us and win 5 free ebooks "Alfresco CMIS"!

      $
      0
      0
      CmisSync is now on Facebook!
      Like us to enter the raffle to win the ebooks "Alfresco CMIS" :-)
      272 pages, $20 value. The raffle will choose 5 winners on the 6th of June.


      The book Alfresco CMIS, despite its title, is useful for any CMIS server. Alfresco is mostly used as an example, which is convenient because Alfresco is easy to set up and comes with CMIS out-of-the-box.
      I got this book and loved it, so I run this small raffle to jump-start our Facebook page :-)

      The book is centered on practical usage rather than theory, which is great for implementers who want to quickly create a CMIS client. Other CMIS books tend to cover the CMIS specification with all the details needed to implement a CMIS server... which is not needed for 99% of us.

      The first chapter describes what CMIS is good for, the main ways to use it, and quickly explains the necessary concepts.

      After a minute of server-side installation, the reader is already running AtomPub-based requests to list a folder or create a document. The third chapter covers more advanced operations like check-out, permissions, relationships and searching. The fourth chapter is where it goes Alfresco-specific, explaining how CMIS is implemented in Alfresco, just skip it if you are not on Alfresco.

      One of the most useful parts is the fifth chapter, which details how to access a CMIS server with Java in order to create, move, modify and delete content, manage versions, permissions, relationships, and generally whatever you would want to do with a repository. The book covers secondary types, a new concept in CMIS 1.1, a much nicer to to handle Alfresco's aspects than what is described in older documentation.

      The new trend is to use CMIS via scripting, and the book devotes a whole chapter to the topic, guiding the reader into writing CMIS clients in plain JavaScript, JQuery, Groovy, and Spring Surf. CMIS is indeed a great way to create Alfresco Share extensions.

      The "I" in CMIS is for Interoperability, and the last chapter puts this in context by having you single-handedly implement useful interconnections between Alfresco and big names of the Open Source Enterprise world such as Drupal and Mule.

      CmisSync for Mac OS X: beta released!

      $
      0
      0
      CmisSync, the ECM synchronization tool, is now available for Mac!



      You can now synchronize between Alfresco/Documentum/FileNet/SharePoint/etc and your Mac.
      - Automatically downloads/uploads changes
      - Allows you to work even when offline
      - Smart conflict resolution

      This is a beta version, with the following bugs remaining:
      - No activity indicator when downloading
      - Japanese: Mac OS X transforms パ (1 character) into ハ゜ (2 characters)

      Don't hesitate to use it, we are waiting for your feedback at CmisSync@aegif.jp
      Professional support is available from Aegif at 120USD per user per year, please contact us at the email address above to learn more.

      CmisSync for Macのベータ版をリリースしました

      $
      0
      0
      はじめまして、今年3月にAegifに入社した相馬です。
      入社後からずっと関わってきたCmisSyncのMac版が、ようやくベータ版としてお披露目できるようになりました。

      CmisSyncをご存じない方のために簡単に説明いたしますと、CMISという文書管理の標準規格に対応している文書管理サーバとローカルのPC間で自動的にファイルの同期をすることができるソフトです。機能としてはDropBoxやOneDriveを想像していただくと近いのですが、CMIS規格に対応しているサーバであれば同期可能なので同期先がサービス提供元に限られることがなく、また、複数の種類のECMサーバと同期することができます。
      Microsoft社のSharePointもCMIS規格に対応していますので、CmisSyncを使うとMacとの間で同期が可能です。これは結構便利ではないでしょうか?

      CmisSyncについて詳しくはこちらのサイトをご覧ください。Macのベータ版も右下の「DOWNLOAD NOW!!」からダウンロードしていただけます。

      なお、現時点ではベータ版のため、
      • いわゆるUTF-8-MAC問題により、環境によっては一見同じ名前のファイル・フォルダがサーバ上に重複して同期される場合がある
      • GUIの対応言語が英語のみ
      といった制限と機知の問題があります。
      特にUTF-8-MACの問題は日本語の場合、濁点・半濁点を含むファイル・フォルダ名で発生してしまいますので、申し訳ありませんがベータ版では日本語環境での利用は非推奨とさせていただきます。

      正式版に向けて皆様からのご意見、バグリポートをお待ちしております!
      cmissync@aegif.jp

      日本初のLiferayプラチナパートナーに認定されました

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

      早速ですが、弊社、日本初のLiferayプラチナパートナーに認定されました!(パチパチ)

      Liferay社がイージフを日本初のプラチナパートナーに認定 | プレスリリース | お知らせ | aegif
      Liferayがイージフ社を日本初のプラチナパートナーに認定 - All Liferay Press Releases | Liferay

      プラチナパートナーになるためには、Liferayサブスクリプションの年間売上やLiferay認定技術者数などの制約があります。今回はLiferay社に弊社の貢献や技術力が認められたということなので、素直に嬉しい出来事であるとともに、今後もより一層Liferayに注力すべく気の引き締まる思いであります。

      ちなみに、Liferayのサービスパートナー制度では、パートナーを主にシルバー、ゴールド、プラチナの3レベルに分けています。パートナーは全世界で140社ほどあり、そのうちのプラチナパートナーは25社、アジアでは2社、日本では弊社1社ということになります(2014年6月現在)。


      かくして、弊社Liferayチームはお祝いの寿司(回らないやつ)にありつけたわけであります。いやーとてもおいしくいただきました、回らない寿司。
       

      Alfresco 4.2のMicrosoft Office連携(オンライン編集機能)をSSL化する

      $
      0
      0
      こんにちは。最近めっきり運動不足なおおたにです。

      あまりに運動不足なので久々にテニスを再開しようと考えていたところ、なかなか興味深いガジェットがソニーから出てました。SSE-TN1というものです。ざっくり言うと、テニスのプレーをリアルタイムに分析してくれるセンサーです。ラケットのグリップエンドに付けて使うもので、ショットの種類を始め、インパクトの位置やラケット速度、ボールの回転や速度などを分析してくれます。さらに、動画を撮影しながら分析することで、ショットの質を動画と併せて確認できるとか。詳しくはこちらとかでレビューされてますので参考までに。

      ただし、このセンサーに対応しているラケットがYONEXの一部モデルのみというところには注意が必要です。ちょうど道具を一通り買い換えようと思っていたところだったのですが、色々試打した結果他社のラケットを買ってしまいました(まあはやりのBabolatです)。これからラケットを買おうという方、そしてガジェット好きな方は是非ご一考を。

      というわけで、今回はAlfresco 4.2のMicrosoft Office連携(オンライン編集)機能について書いていこうと思います。


      AlfrescoのMicrosoft Office連携とは?なぜSSL化するのか?


      以前、「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」という記事でAlfrescoのMicrosoft Office連携について説明しましたので、詳しくはそちらをご覧ください。この設定を行うと、Alfresco上のファイルをMicrosoft Officeで直接開き、編集、保存できるようになります。

      この機能は、AlfrescoがSharePointの振りをすることで実現しているのですが、この記事では1つ問題を棚上げしていました。それは、以下のどちらかを行わないとMicrosoft Officeでファイルを開けないというところで、後者についてしか説明していませんでした。
      • 通信をSSL化する
      • クライアントPCのレジストリをいじる
      前者の方がより好ましい解決方法ですので、以下ではこのSSL化の方法について説明していきます。


      どこをSSL化するのか?


      これは、Microsoft OfficeとAlfresco間の接続をSSL化するということになります。AlfrescoはVTIモジュールと呼ばれるSharePointのフリをするためのモジュールを用意しており、Microsoft Officeとの通信はこのVTIモジュールが担当します。VTIモジュールは、Alfrescoサーバ上のjettyにホストされ、デフォルト7070番で通信します(もちろん変更可能です)。SSL化すべきはこのVTIモジュールということです。


      SSLの設定を行う


      以下、具体的な手順を説明するのですが、まずはMicrosoft Office連携機能をインストールしましょう。手順は「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」を参考にしてください。

      準備ができたら早速SSLの設定を行っていきましょう。今回はテスト用の自己署名証明書を作成しますが、実運用に向けては正統な証明書を準備する必要があります。

      1. 自己署名証明書を作成する

      まずはSSL用の自己署名証明書(いわゆるオレオレ証明書)を作成します。以下のコマンドを実行します(以下はWindowsでのものですが、Linuxも同様です)。キーストアのパスやパスワードは適宜変更してください。
      > %JAVA_HOME%/bin/keytool.exe -genkeypair -alias alfresco -keystore D:/alfresco/alf_data/keystore/vti.ssl.keystore -storepass changeit -keypass changeit  -keyalg RSA -validity 365 -keysize 2048 -storetype JKS


      2. VTIの設定を変更する

      続いて、VTIモジュールの設定を変更します。以下の2つのファイルを弄る必要があります。まずはalfresco-global.propertiesに以下の3プロパティを設定します。vti.server.ssl.keystoreは先ほど作成したキーストアのパス、vti.server.ssl.passwordは先ほど指定したパスワードを設定します。

      <tomcat_dir>/shared/classes/alfresco-global.properties
      vti.server.external.protocol=https
      vti.server.ssl.keystore=D:/alfresco/alf_data/keystore/vti.ssl.keystore
      vti.server.ssl.password=changeit

      続いて、vti-context.xmlというVTIモジュールの定義ファイルを修正します。vtiServerConnectorのbean定義が2つあるので、non-SSL用をコメントアウトし、SSL用のものを有効にします。

      <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/module/org.alfresco.module.vti/context/vti-context.xml
      <!-- Use this Connector for plain text (non-SSL) communications -->
      <!--
      <bean id="vtiServerConnector" class="org.mortbay.jetty.bio.SocketConnector">
      <property name="port">
      <value>${vti.server.port}</value>
      </property>
      <property name="headerBufferSize">
      <value>32768</value>
      </property>
      </bean>
      -->
      <!-- Use this Connector instead for SSL communications -->
      <!-- You will need to set the location of the KeyStore holding your -->
      <!-- server certificate, along with the KeyStore password -->
      <!-- You should also update the vti.server.protocol property to https -->
      <bean id="vtiServerConnector" class="org.mortbay.jetty.security.SslSocketConnector">
      <property name="port">
      <value>${vti.server.port}</value>
      </property>
      <property name="headerBufferSize">
      <value>32768</value>
      </property>
      <property name="maxIdleTime">
      <value>30000</value>
      </property>
      <property name="keystore">
      <value>${vti.server.ssl.keystore}</value>
      </property>
      <property name="keyPassword">
      <value>${vti.server.ssl.password}</value>
      </property>
      <property name="password">
      <value>${vti.server.ssl.password}</value>
      </property>
      <property name="keystoreType">
      <value>JCEKS</value>
      </property>
      </bean>


      早速試してみよう


      以上の設定が終わったら、Alfrescoを再起動して http://localhost:8080/share/ にアクセスしてみましょう。もしレジストリを非SSLでの認証を許可するために弄ってある人は、元に戻してPCを再起動しておきます。あとは「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」の記事にある手順でオンライン編集を実行し、「このWebサーバーへのアクセスは規定で無効になっています。...」のダイアログが表示されずにMicrosoft Officeでファイルを開ければ設定成功です。

      もちろん本番環境で利用する際は自己署名証明書では問題なので、適切な証明書を適用する必要があります。また、更に詳しい説明はAlfresco Documentationを参照してください。

      今回の説明は以上になります。是非VTIモジュールのSSL化に挑戦し、快適なオンライン編集ライフを楽しんでください(って何だ!)

      Activiti BPM Platformことはじめ4(レポートを追加してみよう)

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

      今回はActiviti BPM Platformのレポート機能について紹介します。Activitiは簡易的なレポーティング機能を備えており、シンプルなレポートであればActivitiのみで完結して出力することができます。以下では新しいレポートを作成してみたいと思います。なお、Activitiのインストール、利用方法については以下の記事を参考にしてください。

      Activiti BPM Platformことはじめ(インストール方法とか)
      Activiti BPM Platformことはじめ2(Activiti Explorerの使い方とか)
      Activiti BPM Platformことはじめ3(Activiti Modelerの使い方)


      レポートの仕組み


      Activitiにおけるレポートの実体はプロセスです。具体的には、レポートのデータを生成するスクリプトを実行するプロセスということになります。レポートを実行すると、プロセス開始時のフォームでパラメータを入力し、それを受けてスクリプトが実行されて結果が出力されます。


      カスタムレポートを追加してみよう


      というわけで、早速カスタムレポートを追加してみましょう。レポート定義=プロセス定義なので、Activiti ModelerやEclipse Designer(Eclipseのプラグインですね)などで定義を作成してActivitiにデプロイするという流れになります。ここでは、ユーザごとのワークフロー開始数を表示するレポートを作ってみたいと思います。なお、今回はActiviti 5.15.1を使っています。

      1. 新規モデルを追加する

      Activiti Explorerにユーザkermitでログインし、「Processes」->「Model workspace」に移動して「New Model」をクリックします。Nameに「Sample Model」と入力し、「Activiti Modeler」を選択して「Craete
      」をクリックします。


      2. レポート定義(プロセス定義)を作成する

      自動的にActiviti Modelerの画面に遷移するので、まずはプロセスの属性を設定します。ここで重要なのは、Target namespaceをactiviti-reportとすることです。Activitiはこの属性を見てレポート用のプロセス定義であることを識別します。
      • Name : Sample Report
      • Target namespace : activiti-report

      続いて、Start event、Script task、End eventを以下のように接続、設定します。
      • Start event
        • Id : start
        • Name : start
        • Form properties : 後述
      • Script task
        • Id : createReport
        • Name : createReport
        • Script format : js
        • Script : 後述
      • End event
        • Id : end
        • Name : end

      Start eventのForm properties属性については、Start eventの属性設定欄のForm propertiesをクリックし、以下の内容を入力して「Ok」をクリックします。Start eventのフォーム設定は、一般的にはワークフロー開始時の情報入力のために使われますが、レポートにおいてはレポート出力に必要なパラメータを指定するために使われます。
      • Id : chartType
      • Name : Chart Name
      • Type : enum
      • Required : Yes
      • 選択肢
        • Id : pieChart, Name : Pie chart
        • Id : barChart, Name : Bar chart

      Script taskのScriptも同様に属性設定欄のScriptをクリックし、以下のスクリプトを入力して「Ok」をクリックします。

      importPackage(java.sql);
      importPackage(java.lang);
      importPackage(org.activiti.explorer.reporting);

      var reportData = new ReportData();
      var dataset = reportData.newDataset();
      dataset.type = execution.getVariable("chartType");
      dataset.description = "Test Report ";

      var result = ReportingUtil.executeSelectSqlQuery("SELECT START_USER_ID_, count(ID_) FROM ACT_HI_PROCINST where START_USER_ID_ is not null group by START_USER_ID_");
      while (result.next()) {
      dataset.add(result.getString(1), result.getLong(2));
      }
      execution.setVariable("reportData", reportData.toBytes());


      最後に、画面左上のSaveアイコンをクリックし、表示された保存ダイアログで「Save」をクリックします。保存が完了したら画面右上の×をクリックしてActiviti Modelerを終了します。

      コードについて補足すると、実行変数reportDataにReportData型のオブジェクトを格納することで、このオブジェクトを使ったレポート表示が行われます。また、ReportingUtil#executeSelectSqlQuery()を使うとDBに対して直接クエリを発行することができるので、レポート内容の取得によく利用されます。

      3. レポート定義をデプロイする

      自動的にActiviti Explorerの「Processes」->「Model workspace」に戻るので、先ほど作ったSample Modelを選択して画面右上の「Deploy」を実行します。


      デプロイに成功すると、「Reports」->「Generate reports」に「Sample Report」が表示されるようになります。



      動作確認してみよう


      では、動作確認してみましょう。Chart typeを選択して「Generate report」をクリックすると、指定した形式でユーザ毎のプロセス数が表示されるはずです。


      どうでしょうか。単純なレポートであれば比較的簡単に作成できることがお分かり頂けたかと思います。皆さんも是非カスタムレポートにチャレンジしてみてください。なお、今回はActiviti Modelerを使いましたが、このツールの制約により定義できないような項目がある場合にはEclipse Designerを利用するとよいかと思います。

      第22回Alfresco勉強会が開催されました

      $
      0
      0
      こんにちは。寺下です。この1年くらい体重が右肩上がりだったので何か手を打たないとこのままズルズルいってしまうと危機感を抱き、先々週くらいから弁当を持参するようにしています。ランチで外食に行ってしまうと、ごはんおかわり無料とか麺大盛り無料とかいう誘惑に抗い難く、ついつい食べ過ぎてしまうんですよね。そんなわけで弁当生活を始めたんですが、初めてなので当然弁当スキルなどなく、まずはできることからということで今のところ冷凍食品に頼っています。ただ、やってから気付いたんですがこの冷凍食品が普通においしい。僕の肥えてない舌では焼売とか店で出てきても気付けないんじゃないかと思われるレベル。このまま冷凍食品に頼る日がしばらく続きそうです。

      さて、ここから本題ですが6/25(水)に22回目のAlfresco勉強会が開催されました。
      今回もいつもどおり発表テーマを2つ用意してあったのですが、まだAlfrescoをインストールしただけであまりちゃんと触っていないという参加者の方が多かったため、発表は1つだけにして残りを質疑応答にするという前回と同じ形式で行いました。また、最後に少し時間があったのでAlfrescoの新しいWebクライアントであるWorkdeskを画面を見ながら簡単にご紹介させていただきました。今回見送った2つ目の発表は「Workdeskの検索テンプレートの作り方」だったのですが、これについては次回の勉強会で発表したいと思います。

      今回発表した方の内容は、前回の予告どおりAlfrescoのマルチテナントについてでした。以下、簡単にご紹介します。詳しい内容は発表資料を見ていただければと思います。

      Alfrescoのマルチテナント機能


      発表資料はこちら

      発表者は戸谷で、テナントの作り方やテナントを指定してログインする方法といったマルチテナント機能の使い方から始まり、各テナントのコンテンツの保存場所を分ける方法、カスタムモデルやWebScriptをテナント毎に管理することができるか、等の内容について紹介してくれました。最後にマルチテナントでは使えない機能の説明もあり、この機能を使用するかどうか検討する際には参考になるのではないかと思います。

      次回の勉強会は8月27日(水)に開催予定です。たくさんの方のご参加をお待ちしております。参加申し込みはこちらからお願いします。

      LiferayのDocuments and Mediaポートレットでウイルススキャンを行う

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

      先日、社員旅行で房総半島を訪れました。弊社の社員旅行は宿/夕食以外全て自由行動というゆるい感じなので、うちはマザー牧場や鴨川シーワールドを見て回りました。

      マザー牧場のモルちゃん。ダッコできます。かわええええ!

      さらに、今年の社員旅行は12歳未満お断りな宿に子連れで泊まれるという何ともありがたい企画でして(くわしくはこちら)、まあ子連れじゃ食べられないような料理をいただいたりしたわけです。ちなみに、料金は自分+同伴者1人+自分の子供分は全て会社が負担してくれるので、重ね重ねとてもありがたいです。

      子連れではなかなか食べられないコース料理。美味しくいただきました。

      もちろん子供向けにも本気料理が…。味見しましたが、とても美味しかった。

      夜には蛍とウミホタルを見に行くツアーがあったので参加しましたが、臆病なうちの娘(3歳)はずっと号泣しておりました。まあ暗いので仕方ないですね…。

      こんな感じで今年も社員旅行を楽しんだわけですが、聞くところによると来年は弊社10周年とのことで、もうひと頑張りしてくれるとのこと。今から楽しみで仕方ありません。海外期待しちゃっていいのかな…

      さて、前置きが長くなってしまいましたが、今回はLiferayのDocuments and Mediaポートレットでウイルススキャンを行う方法についてお話ししたいと思います。アップロードされたファイルのウイルスチェックというのはよく伺う要望なのですが、Liferayはその仕組みをデフォルトで備えています。具体的には、ウイルススキャンツールを別途導入し、そのツールとの連携設定を施すだけで実現できます。以下ではその設定手順を説明します。


      まずはClam AntiVirusのインストールから


      まず初めに、ウイルスチェックツールClam AntiVirusをインストールします。Clam AntiVirusであればLiferayがデフォルトで対応しており、簡単な設定だけで連携することができます。

      インストール方法はOSによって異なるのですが、Windowsであればインストーラでインストールし、CentOSであればyumにRPMforgeリポジトリを追加してyum installで導入します。必要に応じて、clamscanコマンドをパス無しで実行できるようにパスを通してください。


      Liferayでウイルススキャンの設定を行う


      続いて、Liferay側でClam AntiVirusとの連携設定を行います。portal-ext.propertiesに以下の2行を追加します。

      dl.store.antivirus.enabled=true
      dl.store.antivirus.impl=com.liferay.portlet.documentlibrary.antivirus.ClamAntivirusScannerImpl

      設定はこれだけ、とても簡単です。設定が終わったらLiferayを再起動します。


      動作確認してみよう


      設定が終わったら早速動作確認してみましょう。事前準備として、クライアントPCのリアルタイムスキャンを切っておくか、そのようなツールが入っていないPCをクライアントとして利用しましょう。クライアントPCにリアルタイムスキャンが設定されていると、テスト用のウイルスファイルが自動除去されてしまってテストができないからです。

      テスト用のウイルスファイルをこちらからダウンロードし、このファイルをLiferayのDocuments and Mediaポートレットにアップロードします。正しく動作していると、以下の2点が確認できるはずです。
      • 画面に「Documents and Media is temporarily unavailable」と表示され、ファイルアップロードに失敗します。
      • ログファイル(catalina.out)に「com.liferay.portlet.documentlibrary.antivirus.AntivirusScannerException: Virus detected in...」と出力されます。ウイルスが検出されてExceptionが投げられていることが分かります。
      もしファイルアップロードに成功してログに何も出力されない場合は、clamscanというコマンドを実行できるか否か、設定が正しく追記されているか等を確認してください。


      いかがでしょうか。Liferayのウイルススキャン機能が比較的簡単に設定できることがお分かり頂けましたでしょうか。是非みなさまもお試しいただければと思います。


      Alfresco 5.0がリリースされたので早速インストールしてみた(Windows編) &新機能の紹介を少々

      $
      0
      0
      こんにちは。大谷です。

      今回は先日リリースされたAlfresco Community 5.0.aをWindowsにインストールする手順と、5.0.aの新機能について紹介したいと思います。インストールについてはデフォルトの簡易インストールで進めます。データベースとしてPostgreSQL、アプリケーションサーバとしてTomcatがインストールされます。


      インストール手順


      1. Alfrescoのダウンロードサイトからインストーラをダウンロードする。

      2. インストーラを実行する。

      3. インストーラの言語を指定する。


      4. 次へをクリックし、インストールの種類を「簡易」に設定して次へをクリックする。


      5. インストール先フォルダを指定して次へをクリックする。デフォルトではC:\Alfrescoにインストールされます。


      6. 管理者パスワードを入力し、次へをクリックする。


      7. 次へをクリックするとインストールが開始する。無事インストールされることを確認する。


      以上でインストール完了です。alfrescoPostgreSQL、alfrescoTomcatの2サービスが追加されているはずです。これらのサービスを起動し、しばらくしてブラウザで http://localhost:8080/share にアクセスして以下のログイン画面が表示されて、管理者用のパスワードを入力してログインに成功したら準備完了です。




      もしうまく動作しない場合は、 C:\Alfresco\tomcat\logs\alfrescotomcat-stderr.yyyy-mm-dd.log を確認してみてください。以下のようなログが出力されている可能性があります。

       2014/07/02 11:48:20 org.apache.catalina.core.StandardContext listenerStart
       致命的: クラス org.alfresco.web.app.ContextListener のアプリケーションリスナの設定中にエラーが発生しました
       java.lang.UnsupportedClassVersionError: org/alfresco/web/app/ContextListener : Unsupported major.minor version 51.0 (unable to load class org.alfresco.web.app.ContextListener)


      この場合は、コマンドプロンプトで以下のコマンドを実行します。

       c:\alfresco\tomcat\bin\tomcat7w //ES//alfrescoTomcat

      以下のようにTomcatのサービス設定ダイアログが表示されるので、JavaタグのJava Virtual Machineのパスが C:\Alfresco\java\jre\bin\server\jvm.dll になっていることを確認し、異なる場合は修正してください。上記エラーが出ている場合は、既存のJavaインストール(しかも1.6以下)を指していることが多いです。



      修正したらAlfrescoサービスを再起動し、ブラウザでアクセスしてログイン画面が表示されることを確認します。


      Alfresco 5.0の新機能


      続いて、Alfresco 5.0の新機能について見ていきましょう。大きく分けると検索機能の強化とプレビュー機能の強化が挙げられます。

      検索機能の強化


      Alfresco 5.0での一番大きな変更点が、検索機能の強化になります。主な機能強化は以下のとおりです。
      • ファセット検索と検索結果の絞り込み
      • 検索文字列を複数指定した場合の挙動がOR検索からAND検索に変更
      • 検索結果画面からのコンテンツアクション実行
      • インスタント検索(画面右上の検索ボックスでのリアルタイム検索結果表示)




      ファセット検索はもちろん大きな機能強化なのですが、個人的にはAND検索とアクション実行が嬉しいところです。これまで要件としてよく出てきていた内容で、ありがちなカスタマイズ項目だったりしました。

      プレビュー機能の強化


      Alfresco 5.0ではプレビューの機能も大幅に強化されています。主な変更点は以下のとおりです。
      • プレビューがHTML5ベースとなり、Flashが不要になった
      • プレビューでの検索やPDF形式でのダウンロード
      • 動画の疑似ストリーミング(プログレッシブダウンロード)


      Flashが不要になったことで、より多くのクライアントでプレビュー機能を利用できるようになりました。また、大容量の動画ファイルをダウンロードすることなく再生できるようになったため、このようなメディアファイルを管理する環境での使い勝手も大きく向上するものと思われます。

      その他の新機能


      • リッチテキストエディタの改善
      • サイトマネージャ
      これまでは各サイトを訪問してサイトの設定を変更する必要がありましたが、Alfresco 5.0では管理者向けにサイトの一覧と簡単な管理を行えるUIが追加されました。


      その他にも細かいところで様々な改善がなされていたりしますが、主要な機能強化は以上になります。


      本エントリは以上になりますが、いかがでしたでしょうか。まずはAlfresco 5.0をインストールし、簡単に触ってみて使用感を確認していただければと思います。

      Liferay WEBコンテンツのストラクチャーとテンプレートの紹介

      $
      0
      0
      こんにちは、かわべです。本格的な夏ですが、近年は夏になると夕立を通り越したゲリラ豪雨があったりしますよね。天気が怪しいときはアメッシュを定期的にチェックして帰るタイミングを逃さないようにしているのですが、ときどき失敗してしばらく帰れなくなります。今回は雨が止むのを待つ間にブログを書くことにしました。

      以前にWEBコンテンツについて紹介した際にはスルーしてしまったWEBコンテンツのストラクチャーとテンプレートについて簡単に紹介したいと思います。

      WEBコンテンツのストラクチャーとテンプレートとは?

      WEBコンテンツを作成する際にはストラクチャーを選択します。インストールした直後のLiferayには、タイトルとHTMLコンテンツを要素として備えたデフォルトのストラクチャーのみ存在しています。HTMLエディタで編集できるので自由度は高いですが、決まった構造のコンテンツを繰り返し作成するには手間がかかることもありますし、作成者によって違う見た目になってしまうかもしれません。同じ種類のWEBコンテンツを何度も作成する場合は、入力する要素の構造(ストラクチャー)と各要素の表示方法(テンプレート)を事前に定義しておけば、どのユーザでも簡単に同じ見栄えのコンテンツが作成できるようになります。

      今回はデモ目的で作成した「社長あいさつ」というWEBコンテンツのストラクチャーとテンプレートを例として見ていきます。
      とてもシンプルな例なのですが、使用するとこのようなWEBコンテンツが作成できるようになります。

      では、まずはストラクチャーから追加していきます。以下の手順はすべて管理者権限のあるユーザで実行しています。

      ストラクチャーの追加

      「システム管理→コンテンツ→WEBコンテンツ」と移動してWEBコンテンツの管理画面へと移動し、そこから「管理→ストラクチャー」を選択すると、ストラクチャーの管理画面が表示されます。ここからストラクチャーの新規追加や、既存のストラクチャーの編集ができます。


      左側にWEBコンテンツに定義できる様々な項目が用意されています。ドラッグ&ドロップで項目を追加後、設定タブで表示値などを変更してストラクチャーを作成していきます。
      先ほどの「社長あいさつ」のストラクチャーは以下のような定義にしました。



      「内容」はHTML、「感想をお聞かせください」はページヘのリンクとなっています(これはサイト内のページへのリンクになります)。

      テンプレートの追加

      次に、作成したストラクチャーに対応するテンプレートを作成します。ストラクチャーの管理画面から「テンプレートの管理→追加」をクリックすると、テンプレートの作成/編集画面に遷移します。


       テンプレートの記述方法としてFreeMarker、拡張可能スタイルシート言語、Velocityが選択できるようになっています。今回はFreeMarkerで作成してみましょう。といっても、Liferay 6.2でのテンプレートエディタは高機能なので、ストラクチャーの要素を表示させるのは非常に簡単です。
      ストラクチャーで定義した要素は左ペインに用意されているので、必要な場所でクリックするだけで表示可能な状態でテンプレートに追加されます。


      テンプレートエディタ上部のコメントにもあるように、変数やメソッドの自動補完機能も備わっています。


      ストラクチャーで定義した要素以外でWEBコンテンツが持っている値(例:タイトル)を表示させたい場合は以下のように記述します。

      ${.vars['reserved-article-title'].data}

      FreeMarkerで記述する場合、変数名にダッシュ等が含まれる場合のFreeMarkerの記述方法Velocityの変数一覧が参考になるかと思います。

      さて、今回の「社長あいさつ」はhtmlのタグなども含めて、最終的に以下の内容でテンプレートを記述しました。


      デフォルト値の設定

      ストラクチャーを利用したWEBコンテンツの各要素にはデフォルト値を設定することができます。この機能も試してみましょう。ストラクチャーの管理画面から、今度は「デフォルト値の編集」を選択します。


      表示される画面から、先ほど作成した感想リンク付きのテンプレートをデフォルトのテンプレートとして設定します。そして、「感想をお聞かせください」のリンクからは感想メールフォームのページへ遷移したいので、リンクのデフォルト値を「感想フォーム」として保存します。これは同じサイトに予め作成してあるページです。



      これで準備は完了です。あとはこのストラクチャーを利用して好きなだけWEBコンテンツを作成しましょう。

      ストラクチャーを利用したWEBコンテンツの作成

      WEBコンテンツを作成するときに「社長あいさつ」ストラクチャーを選ぶと、デフォルト値の設定が反映された状態でコンテンツ作成画面が表示されます。




      内容を適当に入力して保存し、どのように表示されるか見てみると…



      こんな感じに表示されました。タイトル、内容、リンクが存在します。タイトルは<h3>要素として強調されています。また、リンク部分はテンプレートで指定したクラスに合わせてcssを適用しているので、ボタン風に表示されています。
      感想リンクをクリックすると、感想フォームのページに飛ぶことができます。



      ストラクチャーとテンプレートのいいところ

      今回のはかなり単純な例ですが、ストラクチャー・テンプレートを適切に定義するとコンテンツ作成の手間が大幅に省けることがおわかりいただけるかと思います。もちろんストラクチャーやテンプレートを準備するユーザとコンテンツの作成者を別のユーザにすることも可能なので、コンテンツ作成者には難しい知識は必要ありません。

      また、ストラクチャーは作成時に親を指定することで既存のものを拡張して作成することができます。例えば今回の「社長あいさつ」を拡張し、アイキャッチ用の写真を追加するのも簡単です。



      WEBコンテンツの管理画面ではストラクチャーごとの閲覧ができますし、アセットパブリッシャーで特定のストラクチャーを持つWEBコンテンツのみを表示させるように設定することもできるので、コンテンツ管理も捗ります。




      おわりに

      WEBコンテンツでストラクチャーとテンプレートを利用するメリットが伝わったでしょうか。同種類のコンテンツを複数作成することが予めわかっている場合はぜひ利用してみてください!

      The CmisSync context menu: Check out documents, modify metadata

      $
      0
      0
      Context: CmisSync synchronizes documents between Alfresco and your PC:


      NEW: We implemented a CmisSync context menu for Windows Explorer:


      From this context menu, you can check out a document.
      This will lock the document for you, so that you can edit it:


      The same dialog also allows you to easily modify metadata of the document:


      You can even modify metadata when offline. It will be synchronized as soon as you are back online.

      The CmisSync context menu is part of CmisSync Business, which also includes Single-Sign-On and professional support.

      第23回Alfresco勉強会が開催されました

      $
      0
      0
      こんにちは。てらしたです。ちょっと報告が遅くなってしまいましたが、先日8/24(水)に第23回Alfresco勉強会が開催されました。
      今回は参加者の方がまだあまりAlfrescoを触っていないとのことだったので、用意していたWorkdeskの検索テンプレートの作り方の発表は再度保留にして、より入門的な内容の発表のみにしました。Workdeskについては次回、ある程度Alfrescoを使っていてカスタマイズ等にも興味がある参加者が多い場合にご紹介したいと思います。とはいえ今回のように初心者の方が多い可能性もあるため、入門っぽい内容のものも用意しておこうかなと考えています。

      Alfresco Community 5.0をインストールする

      発表資料はこちら

      Community Editionの最新版である5.0.aのインストーラを配布し、実際に手元の環境にインストールして起動してみよう、という内容で弊社の大谷の発表でした。Windowsの場合にハマるポイントと解決方法の紹介があったり、最後に余談として5.0の新機能の紹介もあったり、Alfresco初心者の方への内容としては非常によかったのではないかと思います。

      次回の勉強会は10月15日(水)に開催予定です。たくさんの方のご参加をお待ちしております。参加申し込みはこちらからお願いします。

      Alfresco Community 5.0の検索BOXとIMEの相性が悪い

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

      Alfresco Community 5.0.aの検索BOX(画面右上の検索ツール)ですが、4.2系から若干仕様が変わり、日本語IMEとの相性が悪いようです。具体的には、日本語変換を確定させる時にEnterキーを押すと、そのまま検索が実行されてしまいます。検索文字列を追加入力できず、とても不便です。なお、この現象はChromeでは起きず、IE、Firefoxでのみ発生します(Safariでも起きるかもしれないです)。

      原因は、検索BOXのキー入力イベントの拾い方にあるようです。Alfrescoのコードを見てみると、4.2系ではEnterキーのkeydownを拾って検索を行っているのですが、5.0.aではkeyupを拾うようになっています。IMEでの日本語変換確定時のイベント発火はブラウザによって異なりますが(詳しくはこちら)、この結果として一部のブラウザで日本語変換確定時に検索も実行されてしまうようです。

      これを直すには、従来のようにEnterキーのkeydownで検索を行うようにすればよいので、当該箇所(SearchBox.jsの255目くらい)を以下のように修正します。また、このSearchBox.jsを圧縮したSearchBox-min.jsも新しく作り直します。オンラインのJavaScript圧縮サービスなどを利用してください。修正部分はクライアントサイドJavaScript(静的ファイル)なので、Alfrescoの再起動は必要ありません(ブラウザのキャッシュクリアくらいは必要かも…)。

      <tomcat_dir>/webapps/share/js/alfresco/header/SearchBox.js
      ...
      DomAttr.set(this._searchTextNode, "id", "HEADER_SEARCHBOX_FORM_FIELD");
      DomAttr.set(this._searchTextNode, "placeholder", this.message("search.instruction"));
      // on(this._searchTextNode, "keyup", lang.hitch(this, function(evt) {
      on(this._searchTextNode, "keydown", lang.hitch(this, function(evt) {
      this.onSearchBoxKeyUp(evt);
      }));
      ...

      これでChrome以外のブラウザでも日本語変換確定時に検索が行われないようになりましたでしょうか。keyupをkeydownに変更することによる副作用はまだ詳しく調査していませんが、ひとまずはこの修正で様子を見てみようと思います。
      Viewing all 244 articles
      Browse latest View live