cancel
Showing results for 
Search instead for 
Did you mean: 

Solution: tag multiple files at once

zbennett
Champ in-the-making
Champ in-the-making
Hi all,

I've developed a very simple process for tagging multiple files at once. It relies on repository actions/rules and a couple lines of JavaScript, and it's all described below. Once you're all set up, you will be able to make a file inherit tags from a folder you move it into. My example is used for an Image Gallery, so my rule also moves files out of the tagged folders and back into the Image Gallery Document Library.

I am running Alfresco Community Edition v3.3 on my local machine and I am using the Alfresco Share interface.

——————————————-

First, we need to create a JavaScript file with a couple lines of code in it. This is easy, even for people who know nothing about JavaScript. How is it easy, you ask? It's easy because I'm going to tell you exactly what you need to do!

Open Notepad and copy the following code into your blank text file:
//Alfresco auto-tagger
//compliments of Zach Bennett, Eagle Productivity Solutions
//two lines of code
//free for anyone to use
//no license, no strings attached

//get tags from parent (folder) node
var tagArray = document.parent.getTags();

//add the tags to the document node
document.addTags(tagArray);

Now go to File -> Save As… Name your file "tagger.js" and save it to your desktop (or wherever you feel is appropriate). That's all there is to creating the JavaScript file, now we just need to upload it to Alfresco.

Go to your Repository
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/add_script/1_go_to_repo.jpg[/img]

Dive into the Data Dictionary
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/add_script/2_go_to_data_dict.jpg[/img]

And then into Scripts
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/add_script/3_go_to_scripts.jpg[/img]

Then just select Upload and browse to tagger.js (that JavaScript file you created)
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/add_script/4_click_upload.jpg[/img]

Now your script is ready to use! All that is left do is create a couple folders and a rule.

In this example, I created a folder called "auto-tagger" in my Image Gallery's Document Library. I then created a rule that runs the JavaScript code I wrote. My intention was to put temporary folders inside the auto-tagger folder, each with a set of tags that I could reuse over and over.

On the auto-tagger folder, select Manage Rules
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/1_select_manage_rules.jpg[/img]

Click Create Rules
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/2_click_create_rules.jpg[/img]

Give the rule a name, and make sure the check the 'Rule applies to subfolders' check box
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/3_name_and_rule_applies_to_subfolders.j...[/img]



*** Very important edit ***

You need to set the criteria so this rule only applies to Content items and NOT Folders (unless you want to make the same mistake I made!)
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/3andahalf_set_criteria.jpg[/img]


Under Perform Action, select Execute script
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/4_select_execute_script.jpg[/img]

And in the drop-down box that appears, you can now select tagger.js, which is the JavaScript file we created earlier
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/5_select_tagger.jpg[/img]

To make sure this folder stays empty (which was important for my purpose of an Image Gallery), we will add another action to the rule.

Click the plus symbol (+) to the right side of this rule
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/6_add_action.jpg[/img]

For this action, select Move
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/7_select_move.jpg[/img]

Then select where you want files to be moved to. I wanted files to be moved to the main Document Library of my Image Gallery site, but you may want to do things differently
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/8_select_location.jpg[/img]

And finally, click Create
[img]http://zandadev.com/zach/alfresco_auto_tag_guide/create_rule/9_click_create.jpg[/img]


Now that the rule is created (and applied to subfolders of auto-tagger), you can create folders inside of the auto-tagger folder and add tags to them. Once you do that, can can move files into (or upload directly to) those subfolders to make them inherit the appropriate tags. Any files created in or added to those subfolders will automatically be moved to the location you selected above (like my Image Gallery Document Library).


I hope this helps - happy tagging!
34 REPLIES 34

sasquatch58
Champ in-the-making
Champ in-the-making
Also check the script functionality using a web (Share) interface and see if the script works.
There used to be a difference in functionality between web based and CIFS based connections. For the latter, Event based scripts worked OK but needed more knowledge to achieve than using aspects and rules.
Cheers, Sasquatch

cesarista
World-Class Innovator
World-Class Innovator
I contributed in many threads in Alfresco Spanish Forum some time ago, and now I do it less frequently in English Forum. I read the autottager.js script and I found it very smart and simple. I prepared some new javascript code for name-based auto-tagging and categorizing under a defined space via content rule. For example, a file named "ECMReport.pdf" is automatically tagged as "ecm" and "report" when created or added, if these tags are previously used.

autotagger2.js


var docuname       = document.name;
var docuname_lower = docuname.toLowerCase();
var tagArray = [];
var taggable_array = ["PATH:\"/cm:categoryRoot/cm:taggable/*\""];
for each(var tag in taggable_array){
  var nodes = search.luceneSearch(tag);
  for each(var node in nodes) {
    var x = node.name.toLowerCase();
    var y = docuname_lower.indexOf(x);
    if (y >= 0) {
      tagArray.push(node.name);
    }
  }
}
document.addTags(tagArray);
document.save();


Consider now for example that you categorize your business documents with three main axis defined in categories (i.e: document type, product and technology). You can extend the main array with the three root paths for the correspoding vocabulary (known as parent category) and then adding tags or categories. Something like this:

autocategorizer.js


var docuname = document.name;
var docuname_lower = docuname.toLowerCase();
var catArray = [];
var category_array = ["PATH:\"cm:generalclassifiable/cm:DocumentType/*\"","PATH:\"cm:generalclassifiable/cm:Product/*\"","PATH:\"cm:generalclassifiable/cm:Technology/*\""];
for each(var cat in category_array){
  var nodes = search.luceneSearch(cat);
  for each(var node in nodes) {
    var x = node.name.toLowerCase();
    var y = docuname_lower.indexOf(x);
    if (y >= 0) {
      catArray.push(node);
    }
  }
}
document.addAspect("cm:generalclassifiable");
document.properties["cm:categories"] = catArray;
document.save();


Tested in Alfresco 4.2.c CE

This is part of my Alfresco blog at:

http://www.zylk.net/es/web/guest/web-2-0/blog/-/blogs/name-based-autocategorization-or-tagging-in-al...

freddy96
Champ in-the-making
Champ in-the-making
Hello user Use <B> LongPathTool</B> for your problem solution.

sowjanya
Champ in-the-making
Champ in-the-making
Hi,

I have followed above tutorial, it works fine.
But in my case i want multiple documents to get tagged with multiple taggers. Please help me with this.

For example i want some documents to tag with 'hr' and some documents to tag with 'test-tagger' when i do bulkimport.Please provide me a solution to this problem. I doesn't understand how to change javascript file you mentioned above i.e. 'tagger.js' to meet my requirements. I am new to Alfresco.

jamesge
Champ in-the-making
Champ in-the-making
Get Design & create custom app for your business with our app builder Get Design & create custom app for your business with our app builder Create My Free App is a unique platform