Sök…


Introduktion

Webbskript är funktionella moduler i Alfresco, som bara kan visa lite information eller också göra några saker inuti Alfresco (t.ex. köra arbetsflöde, arbeta med filer, användare, grupper eller andra enheter).

Varje webbskript har två huvuddelskoder (.js, .java) och Freemaker-mall (.ftl)

Webscript kan också ha ytterligare .egenskapsfil med textsträngar som används i. Delar är parade i filen context.xml (vårramens logik).

Den är bunden till vilken URL som beskrivs i den här filen.

Hello World Web Script

Låt oss göra ett hejwebbskript. Webbskript har en deskriptor, en controller och, valfritt, en vy. Dessa filer måste följa en namnkonvention.

Den här deskriptorn heter 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>

Du kan se att deskriptorn förklarar att detta webbskript kommer att mappas till en URL, "/ exempel / helloworld", och att det kräver autentisering av användare. Beskrivaren förklarar också ett argument som heter namn.

Här är regulatorn. Det heter helloworld.get.js.

model.foo = "bar";

Den här kontrollen är skriven i JavaScript men kontroller kan också skrivas i Java. Med lite mer arbete kan du också skriva kontroller på andra språk.

Den här kontrollen gör inte så mycket. Den lägger bara till en ny variabel till modellen som heter "foo" och ger den ett värde på "stapel".

Din controller har tillgång till en mängd olika variabler för root scoped som alla är dokumenterade i den officiella dokumentationen .

Slutligen, låt oss titta på vyn. Den heter helloworld.get.html.ftl

<html>
  <body>
    <p>Hello, ${args.name!"name not specified"}!</p>
    <p>Foo: ${foo}</p>
  </body>
</html>

Du kan se från namnet att den här vyn implementeras som en Freemarker-mall och matar ut HTML. Den här vyn hämtar värdet på "foo" från modellen och den tar också namnet argumentet som skickades till webbskriptet. Om ett namnargument inte anges innehåller mallen viss standardtext.

Om du ville producera XML eller JSON istället kan du - bara ändra namnet och uppdatera din mallimplementering i enlighet därmed.

Spridning

Webbskript kan distribueras till klassvägen eller laddas upp till förvaret. Följ stegen nedan för att distribuera detta webbskript genom att ladda upp till förvaret:

  1. Ladda upp dessa tre filer till Data Dictionary / Web Scripts Extensions
  2. Uppdatera webbskripten genom att gå till http: // localhost: 8080 / alfresco / s / index och klicka på "Uppdatera webbskript".
  3. Navigera till webbskriptet genom att gå till http: // localhost: 8080 / alfresco / s / exempel / helloworld? Name = Jeff

Folder Maker: Ett webbskript som hanterar POST

Hello World Web Script hanterar GET HTTP-metoder. Men vad händer om du vill skapa data på servern? För att ditt webbskript ska hantera POST.

Här är ett enkelt exempel som skapar nya mappar i företagets hem. Det åberopas genom att ringa ett POST-samtal med en JSON-kropp som ser ut som:

{'name':'testfolder'}

Alternativt kan du lägga till en titel eller en beskrivning i mappen genom att skicka in dem som en del av kroppen, som:

{
  'name':'testfolder',
  'title':'test title',
  'description':'test description'
}

Beskrivaren kallas 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>

Det valfria "familjeelementet" är ett bekvämt sätt att gruppera webbskript i webbskriptindex. Elementet "format" förklarar att detta webbskript returnerar JSON.

Styrenheten kallas 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;

Lägg märke till att denna controller har "json" i sitt namn. Detta säger Alfresco att förvänta sig en JSON nyttolast. Alfresco kommer automatiskt att analysera JSON och lägga den i en rotvariabel som kallas "json".

Styrenheten tar tag i namn, titel och beskrivning från JSON och skapar mappen med rotomfattningsvariabeln som heter "företagshome".

Om en titel eller beskrivning ges i dessa egenskaper sparas.

Värdena som skickades in samt den nya mappens nodreferens ställs in på modellen innan kontrollen överlämnas till vyn.

Vyn heter foldermaker.post.json.ftl:

{
  <#if title??>
  "title": "${title}",
  </#if>
  <#if description??>
  "description": "${description}",
  </#if>
  "id": "${id}",
  "name": "${name}"
}

Denna freemarker återspeglar bara värdena som anges på modellen som JSON. Titeln och beskrivningen kanske inte alltid finns, så vyn använder Freemarker-nollkontrollen inbyggd i ett if-uttalande för att undvika att returnera dem om de inte var inställda.

Alla HTTP-klienter kan användas för att testa detta webbskript. Så här ser det ut med att använda 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"
}

Observera att curl passerar i grundläggande autentiseringsuppgifter. I det här fallet använder det "admin". Eftersom det här exemplet skapar objekt i företagets hem måste du använda en användare som har rätt behörighet för att göra det.

Det här webbskriptet har inget felkontroll. Om du inte anger ett namn eller anger ett namn som redan har använts ser du ett fel.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow