alfresco
웹 스크립트
수색…
소개
Webscripts는 Alfresco의 기능 모듈로 일부 정보를 표시하거나 Alfresco 내부에서 몇 가지 작업을 수행 할 수 있습니다 (예 : 작업 흐름 실행, 파일, 사용자, 그룹 또는 기타 항목 사용).
모든 웹 스크립트에는 code (.js, .java)와 Freemaker 템플릿 (.ftl)의 두 가지 주요 부분이 있습니다.
Webscript는에서 사용 된 텍스트 문자열을 가진 추가 .properties 파일을 가질 수 있습니다. 파트는 context.xml 파일에서 쌍으로됩니다 (Spring 프레임 워크 논리).
이 파일에 설명 된 URL에 바인딩됩니다.
Hello World 웹 스크립트
안녕하세요 세계 웹 스크립트를 만들어 보겠습니다. 웹 스크립트에는 설명자, 컨트롤러 및 선택적으로보기가 있습니다. 이러한 파일은 이름 지정 규칙을 따라야합니다.
이 디스크립터의 이름은 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>
설명자는이 웹 스크립트가 "/ example / helloworld"URL에 매핑되고 사용자 인증이 필요하다는 것을 알 수 있습니다. 설명자는 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"값을 가져오고 웹 스크립트로 전달 된 이름 인수도 가져옵니다. name 인수가 지정되지 않으면 템플리트는 일부 기본 텍스트를 제공합니다.
XML 또는 JSON을 생성하려면 대신 이름을 변경 한 다음 그에 따라 템플릿 구현을 업데이트 할 수 있습니다.
전개
웹 스크립트를 클래스 경로에 배치하거나 저장소에 업로드 할 수 있습니다. 예를 들어 저장소에 업로드하여이 웹 스크립트를 배포하려면 다음 단계를 따르십시오.
- 이 3 개의 파일을 Data Dictionary / Web Scripts Extensions에 업로드하십시오.
- http : // localhost : 8080 / alfresco / s / index 로 이동하여 "웹 스크립트 새로 고침"을 클릭하여 웹 스크립트를 새로 고칩니다.
- http : // localhost : 8080 / alfresco / s / example / helloworld? name = Jeff로 이동하여 웹 스크립트로 이동 하십시오.
Folder Maker : POST를 처리하는 웹 스크립트
Hello World 웹 스크립트는 GET HTTP 메소드를 처리합니다. 그러나 서버에 데이터를 생성하려면 어떻게해야할까요? 웹 스크립트가 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"요소는 웹 스크립트 색인에 웹 스크립트를 그룹화하는 편리한 방법입니다. "format"요소는이 웹 스크립트가 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으로 되돌립니다. 제목과 설명이 항상 존재하는 것은 아니므로, 뷰는 Freemarker 널 체크를 if 문에 내장하여 설정되지 않은 경우 반환하지 않습니다.
모든 HTTP 클라이언트를 사용하여이 웹 스크립트를 테스트 할 수 있습니다. 다음은 컬을 사용하는 모습입니다.
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"이 사용됩니다. 이 예제는 회사 홈에 항목을 생성하기 때문에이를 수행 할 수있는 적절한 권한이있는 사용자를 사용해야합니다.
이 웹 스크립트에는 실제 오류 검사가 없습니다. 이름을 전달하지 않거나 이미 사용 된 이름을 전달하면 오류가 표시됩니다.