Importación y creación carpeta

Hemos intentado hacer de OpenKM una aplicación lo más intuitiva posible, sin embargo siempre viene bien algún consejo.
Forum rules
Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
Post Reply
gcosta
Gold Boarder
Gold Boarder
Posts: 214
Joined: Thu Dec 05, 2013 7:43 am

Importación y creación carpeta

Post by gcosta »

Buenos días, tengo un script que lo que hace es crear una carpeta si no existe y importar los ficheros del servidor al OpenKM.

Bien, si la carpeta existe la importación funciona correctamente, si la carpeta no existe me encuentro con lo siguiente:

1. Si ejecuto la tarea del crontab desde el OpenKM manualmente todo funciona correctamente, crea la carpeta y realiza la importación.
2. si la tarea se ejecuta automaticamente desde el crontab y la carpeta no existe no la crea y no realiza la importación.

Alguien sabe a que puede ser debido que no cree la carpeta si la tarea es ejecutada automaticament y si si es ejecutada manualmente? es la misma tarea!

Gracias.

Code: Select all

import com.openkm.core.*;
import com.openkm.api.*;
import java.io.*;
import com.openkm.module.db.stuff.DbSessionManager;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
 
String token = DbSessionManager.getInstance().getSystemToken();
OKMDocument document = OKMDocument.getInstance();
OKMFolder folder = OKMFolder.getInstance();
String mes = "";
String ano = "";
 
public void autoImport(String okmPath, File fldpath){
  try {
    print("Scanning " + fldpath.getName() + "<br>");
	Date now = new Date();
	String dateString = now.toString();
	System.out.println(" 1. " + dateString);
	SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
	System.out.println(" 2. " + format.format(now));
	SimpleDateFormat format = new SimpleDateFormat("MM");
	System.out.println(" MES. " + format.format(now));
	mes = format.format(now);
	SimpleDateFormat format = new SimpleDateFormat("yyyy");
	System.out.println(" ANY. " + format.format(now));
	ano = format.format(now);

    for (File file : fldpath.listFiles()) {
      print("Importing " + file.getName() + "<br>");
	try {
	  if (file.isDirectory()) {
	    try {
	      folder.createSimple(token, okmPath + file.getName());
	    } catch (ItemExistsException ie) {
	      print("folder already exists<br>");
	      // Folder already exists - just ignore exception
	    }
	    autoImport( okmPath + file.getName() + "/", file);
	  } else {
	    // Check if file is still being written to
	    long length = file.length();
	    Thread.sleep(1000);
	    if (file.length() > length) continue;  // Skip file this time
	    document.createSimple(token, okmPath + file.getName(), new FileInputStream(file));
		
		//iniciem Workflow accepthours
		List formElements = new ArrayList();
		String UUID = document.getProperties(token, okmPath + file.getName()).getUuid(); //agafem uuid del document a iniciar Workflow
		System.out.println("UUID: " + UUID); 
		int idWorflow = 19; //id del workflow que volem arrancar
		OKMWorkflow.getInstance().runProcessDefinition(token, new Double(idWorflow).longValue(), UUID, formElements); //iniciem Workflow

	  }
	  print("Created " + okmPath + file.getName() + "<br>");
	} catch (Exception e) {
	  print ("Exception:" + e + "<br>");
	  // Something bad happened to prevent import. Skip to next file.
	 continue;
	}
       file.delete();
     }
  } catch (Exception e) {
    print("Exception: " + e + "<br>");
  }

}
    public void month_folder(String path) {
	try {
		Date now = new Date();
		String dateString = now.toString();
		System.out.println(" 1. " + dateString);
		SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
		System.out.println(" 2. " + format.format(now));
		SimpleDateFormat format = new SimpleDateFormat("MM");
		System.out.println(" MES. " + format.format(now));
		mes = format.format(now);
		SimpleDateFormat format = new SimpleDateFormat("yyyy");
		System.out.println(" ANY. " + format.format(now));
		ano = format.format(now);

		
		//creem carpeta mes
		String pathc = path + ano + "/" + mes;
		OKMFolder.getInstance().createSimple(null, pathc);
		//OKMPropertyGroup.getInstance().addGroup(null, path, "okg:ROLE_USER");
		//okmPath =  path + "/" + ano + "/" + mes + "/";
	} catch (Exception e) {
	    print("Exception: " + e + "<br>");
	}
	
}

month_folder("/okm:root/carpeta/carpeta/carpeta/");
autoImport("/okm:root/carpeta/carpeta/carpeta/" +  ano + "/" + mes + "/", new File("/var/carpeta/carpeta"));

jllort
Moderator
Moderator
Posts: 11240
Joined: Fri Dec 21, 2007 11:23 am
Location: Sineu - ( Illes Balears ) - Spain
Contact:

Re: Importación y creación carpeta

Post by jllort »

El problema es claro, si te fijas estas utilizando algún metodo con el token null:

Code: Select all

OKMFolder.getInstance().createSimple(null, pathc);
Cuando el token es null, a la aplicación se le esta indicando que utilice la sesión bajo la que se esta ejecutando el crontab. En el caso de la ejecución manual, la sesión es la sesión del usuario, en el caso de la ejecución automática, la sesión no existe y esta dando un error. Como el crontab se ejecuta en un thread a parte, este error no queda logeado en el catalina.log y no sabes que esta pasando.

Aquí te apunto 2 consejos:
1- Yo no soy muy fan de los scripts, porque no los puedes debugar, mi consejo es crear clases de crontab en java -> jar ( si no recuerdo mal en el entorno portable tenemos un ejemplo de tarea de crontab https://sourceforge.net/projects/openkmportabledev/ ).
2- Meter siempre un try {} catch (Exception e ) y enviar la excepción o algun tipo de mensaje por correo electronico ( MailUtils.send etc.... ). No me acuerdo si en la versión community existe la clase StackTraceUtils -> que te permite convertir la excepción a la típica traza de texto, para que lo recibas por mail sea lo mas verbose posible.

brucecy92
Fresh Boarder
Fresh Boarder
Posts: 2
Joined: Mon May 18, 2020 1:47 am

Re: Importación y creación carpeta

Post by brucecy92 »

Thanks for sharing

Post Reply