Monday, December 28, 2009

JavaScript To Create Spaces and Move Content to specific Spaces based on Name

// JavaScript Document

var rootSpaceName = companyhome.childByNamePath("Chandu"); //returns chandu
var childList = rootSpaceName.children;
var count = childList.length;
var test = new Array();

for(var i=0; i
{
var childName = childList[i].properties.name;
var child = childList[i];

if(!child.isContainer)
{
var newSpace = childName.substring(0,4);
var ind = 0;

if(!contains(childList, newSpace, test))
{
var newSpaceName = rootSpaceName.createFolder(newSpace);
child.move(newSpaceName);
test[ind++]=newSpaceName;
}
else
{
var existingSpace = rootSpaceName.childByNamePath(newSpace);
child.move(existingSpace)
}
}
}

function contains(childList, newSpace,test)
{
for(var i = 0; i < childList.length; i++)
{
if(childList[i].properties.name == newSpace)
{
return true;
}
}
for(var i = 0; i < test.length; i++)
{
if(test[i].properties.name == newSpace)
{
return true;
}
}
return false;
}


Thursday, December 10, 2009

Audit Configuration in Alfresco

Auditing is disabled by default, To enable auditing, some changes we need to made.
 here i explained in detailed where we need to change different audit related files.

go to auditConfig.xml, U can find this file in tomcat\webapps\alfresco\WEB-INF\classes\alfresco folder
change the value of enabled to true in place of false.

------------------------------------------------------------
<Audit xmlns="http://www.alfresco.org/model/audit/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" enabled="true" auditInternal="false" mode="all">
----------------------------------------------------------------------
**and copy this file into extension folder.

Next go to extension folder in alfresco root i.e.,\tomcat\shared\classes\alfresco\extension\

create a new file, name it as a custom-audit-services-context.xml and add this below code
-----------------------------------------------------------------------------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
<!-- The configuration of the audit model -->

<bean id="auditConfiguration" class="org.alfresco.repo.audit.AuditConfigurationImpl">
<property name="config">
<value>alfresco/extension/auditConfig.xml</value>
</property>
</bean>
</beans>
--------------------------------------------------------------------------------------------------

to turn on debug for audit information change log4j.properties which is located in

\tomcat\webapps\alfresco\WEB-INF\classes      uncomment the line  which is shown below...

log4j.logger.org.alfresco.repo.audit.model=DEBUG


also you can enable alfresco-global.properties which is located in \tomcat\shared\classes
---------------------------------------
#Audit Configuration
   audit.enabled = true
----------------------------------------

Also Enable file service and folder service in auditConfig.xml

-------------------------------------------------------------------------------
<!-- The File/Folder Service -->

<Service name="FileFolderService" mode="none">
<Method name="rename" mode="all"/>
<Method name="move" mode="all"/>
<Method name="copy" mode="all" auditInternal="true"/>
<Method name="create" mode="all"/>
<Method name="delete" mode="all"/>
<Method name="makeFolders" mode="all"/>
<Method name="getWriter" mode="all"/>
<Method name="getReader" mode="all"/>
</Service>

<Service name="ContentService" mode="none">
<Method name="getWriter" mode="all"/>
<Method name="transform" mode="all"/>
<Method name="getReader" mode="all"/>
</Service>
-------------------------------------------------------------------------------


Restart the server  you will find tomcat screen like shown below


and add some documents to alfresco change some properties for that  documents like opening,editing, and set permissions to that documents
Next go to ViewDetails on that document you have edited, click preview in template and select show_audit.ftl from the dropdown menu. you should be able to see all of the actions you just carried out on that document.
you will find the screen as shown below.









Bookmark and Share

Wednesday, December 9, 2009

Writing a Hello World Dashlet for Alfresco Share

 Alfresco Share is the new social computing application of Alfresco 3.0. It is built upon Surf Framework, a light-weight, component-based, REST-oriented web application framework which allows extension through scripting and templating.


In this KB, we will go through the basic steps to create a new Hello World dashlet and then deploy and test it on Alfresco Share.
Just like developing any other webscript, let us first create a new XML file, name it as helloworld.get.desc.xmland add following lines


It provides basic configuration information about the dashlet such as name, description and url for the service endpoint. The key element of this configuration file is the family setting which has to be user-dashlet in order for Alfresco share to recognize it as a dashlet and make it available for end user to select when they customize their share dashboards.
Since this is a simple Hello World dashlet, we really don’t need the javascript component or we can just create an empty javascript file with the name helloworld.get.js.
Now let us work on the presentation part of this dashlet, a freemarker template with the namehelloworld.get.html.ftl.


As we can see, it prints out the “Hello Word” text as the dashlet body as well as a “Hello World” title.
To make a step further, we can also create a message properties file and reference the messages inside the freemarker template. So let us create a properties file helloworld.get.properties and put the following entry in it
hello.world = Hello World
Once the properties file is ready, we can reference the hello world message using API ${msg(”hello.world”)} in the freemarker template file.


Now with all the files ready, we can deploy them to Alfresco Share. Since Alfresco Share will look for its webapp classpath for the scripts, we can create a new folder demo under the share\WEB-INF\classes\alfresco folder and place all our files over there.
To make Alfresco Share to load the new dashlet, we need to go to Share webscript management page, e.g.http://localhost:8080/share/service/.
Hello World Dashlet
Click the Refresh Web Scripts button at the bottom of the page and if you see the number of total webscript incremented by one, the dashlet has been deployed successfully.
Log on to Alfresco Share and click  Customize Dashboard button and you will see the “Hello World” dashlet is there and is available to be added to your dashboard.


Collected from  http://drquyong.com/myblog/?cat=15

Friday, December 4, 2009

To Create Spaces Using JavaScript API



var mainFolder = space.childByNamePath("Mobile Services");

if(mainFolder == null && space.hasPermission("CreateChildren"))
{
 mainFolder = space.createFolder("Mobile Services")
}

var customersFolder = mainFolder.childByNamePath("Customers");

if(customersFolder == null && mainFolder.hasPermission("CreateChildren"))
{
 customersFolder = mainFolder.createFolder("Customers")
}

 var  custFolderNames = new Array("Airtel", "Idea");

for (var i=0; i<2; i++)
{
 var subCustomersFolder = customersFolder.childByNamePath(custFolderNames[i]);

 if(subCustomersFolder == null && customersFolder.hasPermission("CreateChildren"))
 {
  subCustomersFolder = customersFolder.createFolder(custFolderNames[i])
 }

}

Tuesday, December 1, 2009

JavaScript API Examples in Alfresco



Script to get entire alfresco folder structure using recursion


-----------------------------------------------------------------------------------------------

// JavaScript Document

var log = "Script Excecuted at "   new Date()   "\n\n";
var node;

var logFile = companyhome.childByNamePath("log.txt");

if (logFile == null)
{
   logFile = userhome.createFile("log.txt");
}

for(i=0; i<companyhome.children.length; i  )
{
    var childName = companyhome.children[i];
  
    if(childName != null)
{
if(childName.isContainer)
{
   log  = childName.properties.name   "\t"    childName.displayPath   "\n" ;
          recursion(childName);  
       }
    
else
        log  = childName.properties.name   "\t"    childName.displayPath   "\n" ;
}
}

function recursion(node)
{
  if(node != null)
  {
    for(var j=0; j<node.children.length; j  )
   {
     if(node.children[j] != null)
     {
       if(node.children[j].isContainer)
       {
       log  = node.children[j].properties.name   "\t"    node.children[j].displayPath   "\n" ;
       recursion(node.children[j]);  
       }
       else
       {
            log  = node.children[j].properties.name   "\t"    node.children[j].displayPath   "\n" ;    
        }
       }
    }
  }
}

logFile.content  = log;

__________________________________________________________________


Script to send Email to Multiple users in Alfresco.
-----------------------------------------------------------------------------------------------
var mail = actions.create("mail");
var recep = new Array();
var i = 0;
recep[0] = "a@gmail.com";
recep[1] = "b@gmail.com";
//doc = document.properties.name;
for(i=0;i
{
 mail.parameters.to = recep[i];

mail.parameters.subject = "Hello from JavaScript";
mail.parameters.from = "sukumarpant@alfresco.com";
//mail.parameters.template = root.childByNamePath("Company Home/Data Dictionary/invite/invite-email.ftl");
mail.parameters.text = "some text, in case template is not found" ; 
mail.execute(document);

}
---------------------------------------------------------------------------


Create Backup of a Document
Creates a backup of a document as it is added to a space:

// find the backup folder - create if not already exists
var backupFolder = space.childByNamePath("Backup");
if (backupFolder == null && space.hasPermission("CreateChildren"))
{
   // create the folder for the first time
   backupFolder = space.createFolder("Backup");
}
if (backupFolder != null && backupFolder.hasPermission("CreateChildren"))
{
   // copy the doc into the backup folder
   var copy = document.copy(backupFolder);
   if (copy != null)
   {
      // change the name so we know it's a backup
      copy.name = "Backup of " + copy.name;
      copy.save();
   }
}


Create Backup of a Document And Log Doc Properties

Creates a backup of a document and logs the doc properties to a log text file:

// find the backup folder - create if not already exists
var backupFolder = space.childByNamePath("Backup");
if (backupFolder == null && space.hasPermission("CreateChildren"))
{
   // create the folder for the first time
   backupFolder = space.createFolder("Backup");
}
if (backupFolder != null && backupFolder.hasPermission("CreateChildren"))
{
   // copy the doc into the backup folder
   var copy = document.copy(backupFolder);
   if (copy != null)
   {
      // change the name so we know it's a backup
      var backupName = "Backup of " + copy.name;
      copy.name = backupName;
      copy.save();
   }
   
   // record the time of the backup to a log file
   var logFile = backupFolder.childByNamePath("backuplog.txt");
   if (logFile == null)
   {
      logFile = backupFolder.createFile("backuplog.txt");
   }
   if (logFile != null)
   {
      logFile.content += "File: " + backupName +
                         "\tDate: " + new Date().toGMTString() +
                         "\tSize: " + copy.size + "\r\n";
   }
}



Append Copyright Line To File

Appends a copyright line of content to plain text and HTML files:
if (document.hasPermission("Write"))
{
   if (document.mimetype == "text/plain")
   {
      document.content += "\r\n\r\nCopyright (C) 2006";
   }
   else if (document.mimetype == "text/html")
   {
      document.content += "

Copyright © 2006";
   }
}





Create Document, Make it Versionable, Modify It

Creates a document, makes it versionable, checks it out, modifies the content of the working copy, checks it in again and then repeats the process but checks in the document with a version history note and as a major version increment:
// create file, make it versionable
var doc = userhome.createFile("checkmeout.txt");
doc.addAspect("cm:versionable");
doc.content = "original text";

// check it out and update content on the working copy
var workingCopy = doc.checkout();
workingCopy.content = "updated text 1";

// check it in
doc = workingCopy.checkin();

// check it out again
workingCopy = doc.checkout();
workingCopy.content = "updated text 2";

// check it in again, but with a version history note and as major version increment
doc = workingCopy.checkin("a history note", true);





Add Aspects

Adding several aspects to a document:
var props = new Array(1);
props["cm:template"] = document.nodeRef;
document.addAspect("cm:templatable", props);

props = new Array(1);
props["cm:lockIsDeep"] = true;
document.addAspect("cm:lockable", props);

props = new Array(1);
props["cm:hits"] = 1;
document.addAspect("cm:countable", props);


Return Result Value

Returning a result value. This is useful for scripts that are processed using URLs via the Script Command Servlet, as the results are returned as the HTML response from the servlet:
function result()
{
   return "The name of my home space is: " + userhome.name;
}
result();


Change Mime Type of a Document

Changes the mimetype of a document after setting the content:
var file = userhome.createFile("testfile.html");
file.content = "some HTML here";
file.mimetype = "text/html";



Create Document and Transform it

Creates document content and converts it to new formats using the transformation API:
// create a plain text doc and convert to PDF, generated file will be placed in same space as original
var doc1 = userhome.createFile("transform_me1.txt");
doc1.mimetype = "text/plain";
doc1.content = "This is plain text";
var trans1 = doc1.transformDocument("application/pdf");

// create an HTML doc and convert to plain text, generated file will be created under the companyhome space
var doc2 = userhome.createFile("transform_me2.html");
doc2.mimetype = "text/html";
doc2.content = "This is an HTML document!";
var trans2 = doc2.transformDocument("text/plain", companyhome);

// create an HTML doc and convert to flash swf file, generated file will be created under the companyhome space
var doc3 = userhome.createFile("transform_me3.html");
doc3.mimetype = "text/html";
doc3.content = "This is an HTML document!";
var trans3 = doc3.transformDocument("application/x-shockwave-flash", companyhome);



Creating different child node types, including via a specific named child association and with default properties

var node1 = userhome.createNode("create test1.txt", "cm:content");
node1.content = "node1 content";

var node2 = userhome.createNode(null, "sys:base");

var props = new Array();
props["cm:name"] = "create test3.txt";
var node3 = userhome.createNode(null, "cm:content", props);

props["cm:name"] = "node name4.txt";
props["cm:title"] = "node title4";
var node4 = userhome.createNode(null, "cm:content", props, "cm:contains");

var result = "nodes created ok";
result;






Deleting Special Charterers and white Spaces from a String Using JavaScript

--------------------------------------------------------------------------

<html>
<head>

<script language="JavaScript">

<!--
var temp = new String('Certificate of Origin (issued by Beneficiary)');
document.write(temp '<br>');
temp = temp.replace(/[^a-zA-Z 0-9] /g,'').toUpperCase();
var temp2 = temp.replace(/\s /g,'');
document.write(temp2 '<br>');
//-->

</script>

</head>

<body>

</body>

</html>
------------------------------------------------------------------