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