サーチ…


前書き

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スクリプトをリポジトリにアップロードして展開するには、次の手順を実行します。

  1. これらの3つのファイルをData Dictionary / Web Scripts Extensionsにアップロードします
  2. http:// localhost:8080 / alfresco / s / indexに移動し、「Webスクリプトのリフレッシュ」をクリックしてWebスクリプトをリフレッシュしてください。
  3. 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スクリプトには実際のエラーチェックはありません。名前を渡さないか、既に使用されている名前を渡すとエラーが表示されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow