วันจันทร์ที่ 21 ตุลาคม พ.ศ. 2556

How to add user to Alfresco Sites without invite

โดยปกติแล้วเวลาเราจะ Add Users เข้าไปใน Sites ของ Alfresco นั้นเราจะใช้วิธีการ Invite บุคคลนั้นๆ ผ่านเมนู Invite จากนั้นบุคคลนั้นต้อง Accept Invitation ถึงจะเข้าไปอยู่ใน Site ได้ 

ปัญหาคือบางกรณีเราต้องการทำ Pre Invite Users ให้เรียบร้อยก่อนที่จะเริ่มใช้งานจริง ซึ่งสามารถทำได้ผ่าน REST API ของ Alfresco ครับโดย API ที่เราจะใช้งานคือ Membership API http://wiki.alfresco.com/wiki/Repository_RESTful_API_Reference#Membership

ขั้นแรกเราต้องมี REST Client ก่อนครับ ในส่วนนี้จะใช้ตัวไหนก็ได้นะครับ แต่ผมแนะนำให้เป็น Postman ครับ (ความชอบส่วนตัว) http://www.getpostman.com/

การ Add member สามารถทำได้ผ่าน POST Method ครับโดยรายระเอียดของ Membership POST Method มีดังนี้

Adds a new membership to the site.
POST /alfresco/service/api/sites/{shortname}/memberships
Requirements:
  • Default Format: json
  • Authentication: user
  • Transaction: required
  • Format Style: any
Definition:
  • Id: org/alfresco/repository/site/membership/memberships.post
  • Description: classpath:alfresco/templates/webscripts/org/alfresco/repository/site/membership/memberships.post.desc.xml

ซึ่งรายละเอียดได้ได้บอก JSON Format เรามา ดังนั้นผมจึงเข้าไปดู Code ว่า Format ที่จะใช้งานเป็นอย่างไร  ซึ่งสรุปได้ดังนี้
  1. role : กำหนดเป็น SiteConsumer, SiteContributor, .....
  2. member ที่จะ Add เข้าไปใน Site (person หรือ group)
    1. person : กำหนดเป็นชื่อ userName ของบุคคลที่จะ Add เข้าไปใน Site
    2. group : กำหนดเป็น groupId โดยต้องมี GROUP Prefix ด้วย
Example


จากตัวอย่างเป็นการ Add User tantai เข้าไปที่ site other โดยให้สิทธิ์เป็น SiteContributor สังเกตว่าผมใส่ Basic Authentication และ Content-Type ไว้เรียบร้อยแล้ว โดยเมื่อกด Send Request แล้วสำเร็จ จะได้ผลลัพธ์คือ


เท่านี้เราก็สามารถ Add Member เข้าไปใน Site ได้แล้วครับ แต่ว่าจะทำได้ทีละคน ดังนั้นเราอาจใช้ Python Script หรืออะไรก็ตามทำ loop เพื่อ Add Member ทีละเยอะๆ ได้ครับ
Continue Reading...

วันพุธที่ 16 ตุลาคม พ.ศ. 2556

How to list all user in Alfresco

บน Alfresco หากเราต้องการที่จะ list user ทั้งหมดออกมาดูจะสามารถหลายวิธี แต่ผมจะแนะนำวิธีง่ายๆ 2 วิธีคือ
  1. แก้ไข share-config-custom.xml ให้ default search length มีค่าเป็น 0 จากนั้นพิมพ์ * ที่ช่อง User Search ได้ทันที
  2. เขียน Script ลง JavaScript Console (http://share-extras.github.io/addons/js-console/) โดยใช้ Person Service ไปดึงค่าออกมา แล้ว log result เพื่อไปทำเป็น Report ต่อไป
โดยตัว Script  สามารถเขียนได้ดังนี้

var ctx = Packages.org.springframework. web.context.ContextLoader.getCurrentWebApplicationContext();
var personService = ctx.getBean("personService");
var all = personService.getAllPeople().toArray();
for (var i = 0 ; i < all.length ; i++) {
  var node = utils.getNodeFromString(all[i]);
  logger.log(node.properties.email + "," + node.properties.firstName + "," + node.properties.lastName + "," + node.properties.userName);
}
Continue Reading...

วันอังคารที่ 8 ตุลาคม พ.ศ. 2556

How to comment to Document with JavaScript in Alfresco

ในบางกรณี เราอาจจำเป็นต้องใช้ JavaScript เพื่อไป Comment เอกสารแต่การที่จะ Comment เอกสารนั้นด้วย JavaScript API ของ Alfresco นั้นไม่ง่ายเลย ผมจึงทำ Function สำหรับ Comment ไปยัง node ของเอกสารไว้เพื่อง่ายต่อการใช้งานภายหลัง
function commentNode(nodeRef, comment) {
   var node = search.findNode(nodeRef);

   if(!node.hasAspect("fm:discussable")) {
      node.addAspect("fm:discussable");
   }
   if(!node.hasAspect("fm:commentsRollup")) {
      node.addAspect("fm:commentsRollup");
   }

   var forums = node.childAssocs["fm:discussion"];
   var forum;
   if(forums.length === 0) {
     forum = node.createNode(node.properties.name + " discussion", "fm:forum", "fm:discussion");
   } else {
     forum = forums[0];
   }

   var topics = forum.childAssocs["cm:contains"];
   var topic;
   if(topics == null || topics.length === 0) {
     topic = forum.createNode("Comments", "fm:topic", [], "cm:contains", "cm:Comments");
   } else {
     topic = topics[0];
   }

   var now = new Date();
   var name = "comment-" + now.getTime();
   var mypost = topic.createNode(name, "fm:post", [], "cm:contains", name);

   mypost.content = comment;
}
ตัว Function จะรับ NodeRef และ CommentText ไปจากนั้นนำ NodeRef ไปหา Node จริง จากนั้น check ว่า Node นั้นมี Aspect discussable กับ commentRollup หรือไม่ โดยหากไม่มีจะใส่ Aspect ให้

จากนั้นตรวจสอบว่ามีการทำ Child Association กับตัว discussion และตัว contains ไว้หรือยัง โดยหากยังก็ให้ Create Child Association ด้วย จากนั้นก็ add comment ลงไปครับ
Continue Reading...

Blogroll

About