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 null 檢查來避免在未設定時返回那些。

任何 HTTP 客戶端都可用於測試此 Web 指令碼。這是使用 curl 的樣子:

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 指令碼沒有真正的錯誤檢查。如果你未傳入名稱或傳入已使用過的名稱,則會看到錯誤。