Index: /trunk/prototype/api/controller.php
===================================================================
--- /trunk/prototype/api/controller.php	(revision 6373)
+++ /trunk/prototype/api/controller.php	(revision 6384)
@@ -489,5 +489,5 @@
 
 		    if( $return === false )
-		return( false );
+			return( false );
 
 		    if( isset($return) )
@@ -535,19 +535,14 @@
 	}
 	
-	public static function finalizeCommit( $TX, $params, $original, $method )
-	{
-	    $TX['rollback'] = !!!$params['properties'];
-
-	    if( $params['properties'] && is_array($params['properties']) && isset($params['properties']['id']) )
-		$TX['id'] = $params['properties']['id'];
-
-	    self::$tx[ $params['URI']['service'] ][] = array_merge( $TX, $original['URI'], array( 'service' => $params['URI']['service'], 'method' => $method ) );
-
-	    if( isset($commit) && $commit )
-	    {
-		if( !self::call( 'commit', $params['URI'], false, self::$tx[ $params['URI']['service'] ] ) )
-		    self::call( 'rollback', $params['URI'] , false, self::$tx[ $params['URI']['service'] ] );
-
-		unset( self::$tx[ $params['URI']['service'] ] );
+	public static function finalizeCommit( $method, $params, $original, $TX = array() )
+	{
+	    if( $TX !== false )
+	    {
+		$TX['rollback'] = !!!$params['properties'];
+
+		if( $params['properties'] && is_array($params['properties']) && isset($params['properties']['id']) )
+		    $TX['id'] = $params['properties']['id'];
+
+		self::$tx[ $params['URI']['service'] ][] = array_merge( $TX, $original['URI'], array( 'service' => $params['URI']['service'], 'method' => $method ) );
 	    }
 
@@ -568,7 +563,5 @@
 
 		if( isset($params['URI']['concept'])  && !self::fire( 'before', $method, $params, $original ) )
-		   return( !isset($TX) ? empty($params['properties']) ? false : $params['properties'] : self::finalizeCommit( $TX, $params, $original, $method ) );
-
-		
+		   return( self::finalizeCommit( $method, $params, $original ) );
 
 		if( $params && !$params['service'] )
@@ -592,5 +585,5 @@
 
 		    if( !self::fire( 'before', $method, $params, $original, true ) )
-			return( !isset($TX) ? empty($params['properties']) ? false : $params['properties'] : self::finalizeCommit( $TX, $params, $original, $method ) );
+			return( self::finalizeCommit( $method, $params, $original, isset($TX) ? $TX : false ) );
 		}
 
@@ -632,5 +625,5 @@
 		if( isset($params['URI']['service']) )
 		    if( !self::fire( 'after', $method, $params, $original, true ) )
-			return( !isset($TX) ? empty($params['properties']) ? false : $params['properties'] : self::finalizeCommit( $TX, $params, $original, $method ) );
+			return( self::finalizeCommit( $method, $params, $original, isset($TX) ? $TX : false ) );
 
 		if( isset($URI['concept']) )
@@ -641,5 +634,15 @@
 
 		if( isset( $TX ) )
-		    self::finalizeCommit( $TX, $params, $original, $method );
+		{
+		    self::finalizeCommit( $params, $original, $method, $TX );
+		    
+		    if( isset($commit) && $commit )
+		    {
+			if( !self::call( 'commit', $params['URI'], false, self::$tx[ $params['URI']['service'] ] ) )
+			    self::call( 'rollback', $params['URI'] , false, self::$tx[ $params['URI']['service'] ] );
+
+			unset( self::$tx[ $params['URI']['service'] ] );
+		    }
+		}
 	    }
 	    catch( Exception $e )
@@ -726,6 +729,11 @@
 		      $URI['id'] = $result['id'];
 
-		self::$tx[ $URI['service'] ][ count(self::$tx[ $URI['service'] ]) - 1 ]['order'] = $order;
-		self::$tx[ $URI['service'] ][ count(self::$tx[ $URI['service'] ]) - 1 ]['id'] = $URI['id'];
+		$index =  count(self::$tx[ $URI['service'] ]) - 1;
+
+		self::$tx[ $URI['service'] ][ $index ]['order'] = $order;
+		self::$tx[ $URI['service'] ][ $index ]['id'] = $URI['id'];
+
+		if( !isset(self::$tx[ $URI['service'] ][ $index ]['concept']) )
+		    self::$tx[ $URI['service'] ][ $index ]['concept'] = $URI['concept'];
 
 		foreach( $postpone as $linkTarget => $dt )
Index: /trunk/expressoMail1_2/js/search.js
===================================================================
--- /trunk/expressoMail1_2/js/search.js	(revision 6365)
+++ /trunk/expressoMail1_2/js/search.js	(revision 6384)
@@ -576,6 +576,6 @@
 							$.each(data, function(index, value) {
 								fail = false;
-								if(typeof value != 'object' || !(value['id'])){
-									fail = true;
+								if(typeof value === 'string'){
+									fail = value;
 								}
 							});
@@ -591,5 +591,11 @@
 									$('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");		
 								}
-								alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.");
+								
+								switch( fail )
+								{
+								    case '#FollowupflagMessageIdError': alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id."); break;
+								    case '#FollowupflagParamsError': alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários."); break;
+								}
+								
 								return false;
 							}
Index: /trunk/expressoMail1_2/js/draw_api.js
===================================================================
--- /trunk/expressoMail1_2/js/draw_api.js	(revision 6332)
+++ /trunk/expressoMail1_2/js/draw_api.js	(revision 6384)
@@ -1737,8 +1737,8 @@
 				headers_msgs.followupflagged.id = DataLayer.put('followupflagged', headers_msgs.followupflagged);
 				DataLayer.commit(false, false, function(data){
-					var fail = false;
+					var fail = 'success';
 					$.each(data, function(index, value) {
-						if(typeof value != 'object' || !(value['id'])){
-							fail = true;
+						if(typeof value === 'string'){
+							fail = value;
 						}
 					});
@@ -1747,13 +1747,22 @@
 					'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited")
 					.html('<img src="../prototype/modules/mail/img/flagEditor.png">');
-
-					if (!fail) {
-						$('#td_message_followup_' + messageClickedId + ', ' + 
-						'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor);
-						updateCacheFollowupflag(messageClickedId, msg_folder, true);
-					} else {
-						$('#td_message_followup_' + messageClickedId + ', ' + 
-						'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");
-						alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id."); 
+					
+					switch( fail )
+					{
+					    case '#FollowupflagMessageIdError': {
+						    $('#td_message_followup_' + messageClickedId + ', ' + 
+						    'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");
+						    alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id."); break;
+					    }
+					    case '#FollowupflagParamsError': {
+						    $('#td_message_followup_' + messageClickedId + ', ' + 
+						    'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");
+						    alert("Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários."); break;
+					    }
+					    default : {
+						    $('#td_message_followup_' + messageClickedId + ', ' + 
+						    'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor);
+						    updateCacheFollowupflag(messageClickedId, msg_folder, true);
+					    }
 					}
 				});
