alfresco
Webスクリプト
サーチ…
前書き
WebscriptはAlfrescoの機能モジュールで、情報を表示するだけでなく、Alfresco内でいくつかのことを行うこともできます(例:ワークフローの実行、ファイル、ユーザー、グループ、その他のエンティティの操作)。
すべてのWebスクリプトには、code(.js、.java)とFreemakerテンプレート(.ftl)の2つの主要な部分があります。
Webscriptには、.propertiesファイルを追加で使用することもできます。パートは、context.xmlファイルでペアになります(Springフレームワークロジック)。
このファイルに記述されているURLにバインドされています。
Hello World Web Script
こんにちは世界のウェブスクリプトを作りましょう。 Webスクリプトには、ディスクリプタ、コントローラ、およびオプションでビューがあります。これらのファイルは命名規則に従う必要があります。
この記述子の名前はhelloworld.get.desc.xmlです。
<webscript>
<shortname>Hello World</shortname>
<description>Hello world web script</description>
<url>/example/helloworld?name={nameArgument}</url>
<authentication>user</authentication>
</webscript>
このWebスクリプトがURL「/ example / helloworld」にマップされ、ユーザー認証が必要であることを記述子が宣言していることがわかります。記述子はnameという引数も宣言します。
ここにコントローラがあります。これはhelloworld.get.jsという名前です。
model.foo = "bar";
このコントローラはJavaScriptで書かれていますが、コントローラはJavaで記述することもできます。もう少し作業すれば、コントローラを他の言語で書くこともできます。
このコントローラはあまり機能しません。これは単に "foo"というモデルに新しい変数を追加し、 "bar"という値を与えます。
あなたのコントローラは、様々なルートスコープ変数にアクセスできます。これらの変数はすべて公式ドキュメントに記載されています 。
最後に、ビューを見てみましょう。 helloworld.get.html.ftlという名前です
<html>
<body>
<p>Hello, ${args.name!"name not specified"}!</p>
<p>Foo: ${foo}</p>
</body>
</html>
名前から、このビューがFreemarkerテンプレートとして実装され、HTMLが出力されることがわかります。このビューはモデルから "foo"の値を取得し、Webスクリプトに渡されたname引数も取得します。 name引数が指定されていない場合、テンプレートはデフォルトのテキストを提供します。
代わりにXMLまたはJSONを生成したい場合は、名前を変更して、それに応じてテンプレート実装を更新します。
配置
Webスクリプトをクラスパスにデプロイするか、リポジトリにアップロードすることができます。たとえば、このWebスクリプトをリポジトリにアップロードして展開するには、次の手順を実行します。
- これらの3つのファイルをData Dictionary / Web Scripts Extensionsにアップロードします
- http:// localhost:8080 / alfresco / s / indexに移動し、「Webスクリプトのリフレッシュ」をクリックしてWebスクリプトをリフレッシュしてください。
- http:// localhost:8080 / alfresco / s / example / helloworldに移動してWebスクリプトに移動しますか?name = Jeff
Folder Maker:POSTを処理するWebスクリプト
Hello World Web ScriptはGET HTTPメソッドを処理します。しかし、サーバー上にデータを作成したい場合はどうすればよいでしょうか?そのためには、WebスクリプトがPOSTを処理する必要があります。
Company Homeに新しいフォルダを作成する簡単な例を示します。次のようなJSON本体でPOST呼び出しを行うことによって呼び出されます。
{'name':'testfolder'}
必要に応じて、タイトルや説明を本文の一部として次のように渡して、フォルダに追加することもできます。
{
'name':'testfolder',
'title':'test title',
'description':'test description'
}
この記述子は、foldermaker.post.desc.xmlと呼ばれます。
<webscript>
<shortname>Folder Maker</shortname>
<description>Creates folders</description>
<family>Examples</family>
<url>/example/folders</url>
<format default="json"></format>
<authentication>user</authentication>
</webscript>
オプションの "family"要素は、WebスクリプトのインデックスにWebスクリプトをグループ化する便利な方法です。 "format"要素は、このWebスクリプトがJSONを返すことを宣言します。
コントローラはfoldermaker.post.json.jsと呼ばれます:
var name = title = desc = null;
var name = json.get('name');
try {
title = json.get('title');
} catch (err) {}
try {
desc = json.get('description');
} catch (err) {}
var folder = companyhome.createFolder(name);
var needsSave = false;
if (title != null) {
folder.properties['cm:title'] = title;
needsSave = true;
}
if (desc != null) {
folder.properties['cm:description'] = desc;
needsSave = true;
}
if (needsSave) {
folder.save();
}
model.id = folder.nodeRef.toString();
model.name = name;
model.title = title;
model.description = desc;
このコントローラーの名前に "json"が付いていることに注意してください。これはAlfrescoにJSONペイロードを期待するように指示します。 Alfrescoは自動的にJSONを解析し、 "json"という名前のルート変数に入れます。
コントローラは、JSONから名前、タイトル、および説明を取得し、 "companyhome"というルートスコープ変数を使用してフォルダを作成します。
これらのプロパティでタイトルまたは説明が渡された場合、保存されます。
新しいフォルダのノード参照と同様に渡された値は、ビューに制御を渡す前にモデルに設定されます。
ビューの名前はfoldermaker.post.json.ftlです。
{
<#if title??>
"title": "${title}",
</#if>
<#if description??>
"description": "${description}",
</#if>
"id": "${id}",
"name": "${name}"
}
このfreemarkerはJSONとしてモデルに設定された値を返すだけです。タイトルと説明が常に存在するとは限りません。したがって、ビューでは、ifステートメントに組み込まれているFreemarkerヌルチェックを使用して、設定されていない場合にそれらを返さないようにします。
どんなHTTPクライアントでも、このWebスクリプトをテストすることができます。カールを使用すると、次のようになります。
jpotts$ curl -uadmin:admin -H "content-type: application/json" -X POST "http://localhost:8080/alfresco/s/example/folders" -d "{'name':'testfolder','title':'test title', 'description':'test desc'}"
{
"title": "test title",
"description": "test desc"
"id": "workspace://SpacesStore/cc26a12f-306b-41f1-a859-668f11fc2a54",
"name": "testfolder"
}
curlは基本認証資格情報を渡していることに注意してください。この場合、「admin」を使用しています。この例ではCompany Homeにアイテムを作成するため、適切な権限を持つユーザーを使用する必要があります。
このWebスクリプトには実際のエラーチェックはありません。名前を渡さないか、既に使用されている名前を渡すとエラーが表示されます。