Page 1 of 1

Consultas sobre Tareas Programadas!

PostPosted:Fri Jan 11, 2013 8:24 pm
by muyprax
Hola que tal ,estoy usando la versión 6.2 comunidad. He leido la documentación http://wiki.openkm.com/index.php/Crontab ; y la que más me interesa es http://wiki.openkm.com/index.php/Cronta ... h_metadata . He intentado de todas las maneras intentar hacer un script(muy simple) y lo ejecuto en tareas programadas desde el panel de administración y nunca hace nada. Soy muy malo con el inglés así que tampoco entiendo muy bien la documentación de wiki de OpenKM.

el código que intenté hacer para crear 5 simples carpetas son:
Code: Select all
package asdf;

import com.openkm.api.*;

public class JarSample {
    public static void cronTask() {
        for (int i=0;i<5;i++) {
            String path = "/okm:root/fld_" + i;
            OKMFolder.getInstance().createSimple(null, path);
        }
    }

    public static void main(String[] args) {
        cronTask();
    }
}
y ejecuté en las tareas programadas y nada...

aparte de esto tengo la consulta de como poder importar las librerías de OpenKM para luego, al exportar en ficheros .JAR las contenga ya que según el log tampoco puede cargar las librerías de OpenKM(en este caso com.openkm.api.*) y por último si el lenguaje en dónde se deben programar el script puede ser Java( soy tan malo con el inglés que hay partes que realmente no entiendo y en una de esas sólo se pueden programar en BASH).

Eso , espero puedan ayudarme.-

Saludos!

Re: Consultas sobre Tareas Programadas!

PostPosted:Sat Jan 12, 2013 6:04 pm
by jllort
El problema lo tienes con el token = null. Es decir si esto lo ejecutas mientras estas logeado te funcionará bien, pero sino te fallará. Tienes que utilizar el token del usuario system.
Code: Select all
String systemToken = DbSessionManager.getInstance().getSystemToken();
OKMFolder.getInstance().createSimple(systemToken, path);
Esto ya debería funcionar mejor. También es bueno mirar el log del servidor catalina.log para ver si te aparece algun error cuando lo ejecutas.
Cuando estas programando la tarea que parametros le pones 0 0 * * * ? o la ejecutas manualmente ?

Re: Consultas sobre Tareas Programadas!

PostPosted:Mon Jan 14, 2013 6:17 pm
by muyprax
Lo ejecutaba manualmente. Gracias me funcionó perfecto, ahora se como hacer correr los scripts.

Ahora bien , te explico lo que quiero realmente hacer a ver si me das algún consejo porfavor:

Tengo distintos tipos de documentos(facturas[cliente,proveedor] , proyectos , planos).
En primera instancia, quería hacer algo parecido a ESTO , pero me di cuenta que si bien es una buena solución para importar una lista de ficheros de manera "automática" tiene la gran desventaja(según yo) de que no se puede aplicar desde otro lugar que no sea el mismo servidor (ya que importa los archivos desde una carpeta local de este). Entonces lo otro que se me ocurrió pero no se si se pueda hacer es subir una colección de ficheros con nombres estructurados y luego desde el mismo servidor , desde una tarea programada o desde "Administración -> Automatización -> ExecuteScripting(action)" aplicarle las reglas de propiedad y mover los documentos a sus respectivas carpetas.

Me gustaría saber que opinas de esto o si tienes algún otro tipo de solución que conozcas para poder aplicarlo , estoy intentando que el proceso sea lo más simple posible.-

Saludos y de antemano gracias

Re: Consultas sobre Tareas Programadas!

PostPosted:Tue Jan 15, 2013 10:55 pm
by jllort
- Relativo a como copiar ficheros, hay distintas opciones, en el ejemplo que tienes se esta accediendo a ficheros locales, pero también puedes acceder a ficheros de red, es decir carpetas compartidas en red desde el propio servidor.

- Relativo a subir todos los ficheros en una misma carpeta, pues efectivamente tambien te funcionará bien, simplemente en vez de obtener los ficheros del servidor tienes que sacar el listado de ficheros de un determinado nodo getchildren ( etc... ) y operar con ellos ( esto no tiene mucho misterio ).

Re: Consultas sobre Tareas Programadas!

PostPosted:Wed Jan 16, 2013 6:37 pm
by muyprax
Ok muchas gracias ya tengo claro el procedimiento...pero como siempre tengo otro problema ahora y no se porqué...

estoy intentando compilar este código en el scripting para fiarme de que funcione después en las tareas programadas de OpenKM :
Code: Select all
import com.openkm.api.OKMDocument;
import com.openkm.api.OKMRepository;
import com.openkm.automation.AutomationException;
import com.openkm.bean.Document;
import com.openkm.core.AccessDeniedException;
import com.openkm.core.DatabaseException;
import com.openkm.core.FileSizeExceededException;
import com.openkm.core.ItemExistsException;
import com.openkm.core.PathNotFoundException;
import com.openkm.core.RepositoryException;
import com.openkm.core.UnsupportedMimeTypeException;
import com.openkm.core.UserQuotaExceededException;
import com.openkm.core.VirusDetectedException;
import com.openkm.extension.core.ExtensionException;
import com.openkm.module.db.stuff.DbSessionManager;
import java.awt.Desktop;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.io.*;
import java.util.*;

String fileName="";
String carpeta="C:/Users/SERVER/Desktop/documentos/";
String token = DbSessionManager.getInstance().getSystemToken();
String contractUUID = "6d64b4d3-c4ae-4fc4-9196-9416e067a1ef";
String path=OKMRepository.getInstance().getNodePath(token, contractUUID);
File folder = new File(carpeta);
File[] files = folder.listFiles();
Process p = Runtime.getRuntime().exec ("C:/tesseract/tesseract.exe C:/Users/SERVER/Desktop/documentos/plantilla.jpg C:/Users/SERVER/Desktop/documentos/plantilla.txt");

for (int i=0; i < files.length ; i++){
    if (!files[i].getName().contains("plantilla")){
        fileName = files[i].getName();
        path=path+"/"+fileName;
        Document doc = new Document();
        doc.setPath(path);
        FileInputStream fis = new FileInputStream(files[i]);
        doc = OKMDocument.getInstance().create(token, doc, fis);
        path=OKMRepository.getInstance().getNodePath(token, contractUUID);
    }
}
y me da error en la penúltima línea del IF anidado en el for.
Code: Select all
//doc = OKMDocument.getInstance().create(token, doc, fis);

error:
Sourced file: inline evaluation of: ``import com.openkm.api.OKMDocument; import com.openkm.api.OKMRepository; import . . . '' : target exception : at Line: 39 : in file: inline evaluation of: ``import com.openkm.api.OKMDocument; import com.openkm.api.OKMRepository; import . . . '' : .create ( token , doc , fis ) Target exception: java.lang.NullPointerException
Creo que estoy 100% seguro que el error está acá ya que he compilado todas las otras líneas una por una y funcionan , se cae aquí...

Gracias

Re: Consultas sobre Tareas Programadas!

PostPosted:Fri Jan 18, 2013 6:50 pm
by jllort
Un consejo, el scripting tiene un comportamiento un poco singular, es decir cuando creas variables del tipo String path = "texto" y despues a lo largo del código haces operaciones del tipo path ="otro texto"; te puedes encontrar con la sorpresa de que el valor del path no se ha canviado. Lo que te aconsejo cuando utilices variables globales cuyo valor vaya a cambiar y que sean de tipo texto es que las declares sin el tipo String es decir definir la variable por primera vez como path="texto"; ya sé que es un poco flipante, pero esto es así.

Te esta dando un error de null pointer ( algo esta a null ). Antes de entrar en el método de la línea 39 lo que haría seria imprimir los objecto por pantalla con un print("").

Si lo quieres ejecutar con el crontab mejor que el scripting yo lo que utilizaría seria la clase java que extiende del crontab ( tal y como se indica en la wiki ) y registrar un .jar ( esto te funcionará mucho mejor y ademas podrás debugarlo !!! que eso fijo que te interesará ). Por cierto si lo haces así la película del String olvídala, porque obviamente en un jar las variables hay que definirlas como toca.

Para finalizar este script parece interesante, cuando lo hayas terminado estaría bien si lo puediesemos compartir con el resto de la comunidad en la wiki.

Re: Consultas sobre Tareas Programadas!

PostPosted:Fri Jan 18, 2013 7:17 pm
by muyprax
Gracias Joseph , en efecto lo que estaba intentado hacer era utilizar tesseract para subir automaticamente ficheros desde mi servidor local...Ahora esto ha cambiado ya que finalmente utilizaré un OMR open source y automatizaré el proceso a través de plantillas subiendo los ficheros y llenando con metadatos para su posterior búsqueda. Para finalizar mis dudas con respecto a scripting quería saber como puedo settearle el autor de quién subió el archivo al documento ya que al subirlo me aparece que el que subió el fichero fue "SYSTEM".

Aunque parezca ridículo , luego de que me respondiste pegué el código en el Scripting y lo compilé y funcionó sin hacer ningún cambio, lo que claramente valida tu hipótesis del comportamiento de los String en la pestaña SCRIPTING de OpenKM. Por último , me gustaría saber que me recomendarías tu , si utilizar las tareas programadas(CRONTAB) o el proceso de automatización(AUTOMATION) de OpenKM para realizar este script de subida automática de ficheros utilizando plantillas OMR. Yo estaba pensando en utilizar el sistema de Automatización ya que me imaginaba subiendo varios documentos a OKM:ROOT/ con su respectiva plantilla de reconocimiento(previo a la subida por supuesto que habrá una categorización manual de documentos) y que bajo este proceso los tomara y los derivara a sus respectivas carpetas pero aún no se la forma de poder incluir en un arreglo todos los ficheros de la carpeta root (lo que si se hacer de manera local gracias al ejemplo que te puse en el post de arriba) , tu me mencionaste algo de getChildren() pero he buscado y no encuentro ningún ejemplo de eso asi que supongo que lo haré de la manera local, pero no se si con crontab o automation.

Gracias.


PD: Con respecto a compartirlo por la comunidad, por supuesto que lo haré sin ningún problema , es lo mínimo que puedo hacer después de todo lo que me has ayudado. El único problema es que no tengo ni idea de como compartirlo, ya que es primera vez que trabajo con este tipo de software open source xD, si me puedes decir tu como puedo hacerlo lo haré una vez haya finalizado.

Re: Consultas sobre Tareas Programadas!

PostPosted:Sun Jan 20, 2013 10:12 am
by jllort
- Cuando hayas terminado si que nos interesaria tu opinión sobre el ORM open source u otro que hayas utilizado ( el feedback siempre es interesante ).

- Relativo a la clase getChildren() aqui esta toda la api y clases de openkm http://doxygen.openkm.com/6.2.x/ y en concreto aquí OKMDocument que tiene el método getChildren para sacar todos los documentos de una carpeta http://doxygen.openkm.com/6.2.x/d1/d5c/ ... rvice.html (ENTONARE EL MEA CULPA en la version community aun no se ha propagado un cambio de la profesional por el método getChilds pasará a llamarse getChildren ).

- Yo te aconsejo el utilizar el crontab -> crear una clase en java ( no en scripting ) -> crear un jar y ejecutarlo desde el crontab. Te lo digo porque de esta forma puedes montarte un entorno de desarrollo y debugar el java de dentro de este jar y esto obviamente con el scripting estas muerto porque ahí como mucho puedes generar un log en un fichero ( cosa que en ambos casos no es mala idea o como mínimo controlar los errores y enterarse de que ha ido bien y que ha ido mal ). En función de si esto tiene que ser en mas o menos tiempo real la tarea la puedes programar para que se ejecute cada minuto o una vez al dia ( si es posible lo segundo podrías enviar un correo de informe de todo lo que ha ido bien y si algo ha ido mal ).

- Para finalizar si quieres compartir el proyecto que vayas a hacer simplemente contacta con nostros a través del formulario de contacto http://www.openkm.com/es/contacto.html con la url de este post o simplemente comentando el tema y te proporcionaremos un correo electrónico donde enviarnos lo que quieras compartir. También podrías subir un .zip en el foro mismamente.

Re: Consultas sobre Tareas Programadas!

PostPosted:Mon Jan 21, 2013 7:50 pm
by muyprax
Perfecto, entonces lo haré todo en un .JAR .

Lo que haré será editar el código fuente del OMR en cuestión y añadirle las librerías necesarias a ese proyecto para poder generar el .JAR . La duda que tengo es como poder añadirle todas las librerias de OpenKM que necesito para poder hacer las operaciones que estan arriba, ya que obviamente en NetBEANS todas las referencias a objetos de OpenKM me aparecen sin referencia y por lo tanto me dan errores , o no es necesario hacerlo, osea que si genero el .JAR y lo dejo como tarea programada, el mismo sistema reconocerá sus propias librerias?? En caso de requerir importar las librerías de OpenKM, no dispongo de los .java de OpenKM , solo los .class y la verdad es que no se como se importan a NetBEANS :/

Gracias denuevo.

Re: Consultas sobre Tareas Programadas!

PostPosted:Thu Jan 24, 2013 4:01 pm
by jllort
Lo suyo es que te montes el entorno de desarrollo con eclipse y lo tendras mas facil. Efectivamente con el jar creado las librerias dentro de openkm las encontrará el solito.

Re: Consultas sobre Tareas Programadas!

PostPosted:Mon Jan 28, 2013 3:01 pm
by muyprax
Me encantaría utilizar la versión del desarrollador y tengo claro que via este camino se me simplificaría todo , pero el gran problema es que como te expliqué en este post , no puedo acceder a la versión desarrollador utilizando eclipse, tu me mostraste un código que no me reconoció en el cmd de windows que era el de utilizar maven desde la consola asi que estoy trabado aquí. La única manera con la que he podido hacer funcionar el crontab es con archivos .bsh y ahora mismo estoy trabado ya que como me mencionaste, el comportamiento de los String es distinto al normal y no me contatena unos valores que son necesarios para implementar mi proceso de subida de ficheros...
Code: Select all
public static String reverse(String cadena){
    String num="";
    for (int i=cadena.length()-1 ; i >= 0 ; i--)
        num=num+cadena.charAt(i);   
    return num;
}
                    
public static String getNumDocumento(List childs) {
    GWTDocument gwt = childs.get(childs.size()-1);
    String cadena=childs.get(childs.size()-1).getName();
    String num = "";

    for (int i=cadena.length()-1 ; i >= 0 ; i--) {
        if (cadena.charAt(i) == '.') {
            i--;

            for(int j=i; j>=0 ; j--) {
                if (!cadena.charAt(j) == '_')
                    num=num+cadena.charAt(j);
            }
            break;
        }
    }

    return this.reverse(num);
}
Los charAt() no los concatena con el string NUM y las comparaciones charAt().equals simplemente no las tomaba por eso tuve que utilizar la comparación antigua '==' . Por último también intenté no definir el tipo de variable String como me mencionaste y aún asi no funciona. Creo que mi mejor camino es lo de la versión desarrollador, si pudieras explicarme un poco mejor lo de Maven te lo agradecería ya que nunca he trabajado con él :/

Gracias!

Re: Consultas sobre Tareas Programadas!

PostPosted:Wed Jan 30, 2013 10:03 am
by jllort
Creo que será lo mas limpio, seguiremos con el otro post.