Buenos dias.
Gracias a Angel Borroy quien me orientó para agregar un boton a myfiles de alfresco Ejemplo,
pero he intentado crear una carpeta o un archivo a traves del boton y no he podido solucionar
he mirado javascript este ejemplo y no me resulta. Al igual que Doc
pero sigo sin poder crearlo
cualquier ayuda u orientacion me serviria mucho.
// 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);
Quizá es la parte que le falta al tutorial: la conexión con el servidor Alfresco mediante Web Scripts o JavaScript de servidor. El principal problema es que ese JavaScript que estás utilizando es de servidor, no de cliente. ¿Dónde lo estás utilizando? ¿En qué fichero?
Veamos si con algo de ayuda puedes continuar el trabajo.
Desde la parte de JavaScript (en la extensión de YUI para el onClick del botón) puedes invocar al repositorio mediante una llamada Ajax a un Web Script del repositorio.
Para realizar la llamada desde Share, utiliza algún ejemplo basado en Alfresco.util.Ajax.request
Para desarrollar el Web Script en repo (contendrá parte de ese código JavaScript que has descrito arriba), puedes consultar Web script controller script | Alfresco Documentation
En cualquier caso, necesitarás que la lógica de creación de carpeta sea realizada en Repo (alfresco.war) y que el envío de datos y la respuesta sea tratada por Share (share.war). Esto equivaldría a dos proyectos Alfresco SDK (repo y share) o a un proyecto All-In-One con parte de repo y parte de share.
en la acción del botón custom-button-myfiles.js pero no me funciona
es decir creo la lógica de carpetas a través del webscript y lo invoco a través ejemplo basado en Alfresco.util.Ajax.request ?
He seguido desarrollando el ejemplo aquí:
https://github.com/angelborroy/alfresco-add-menu-sample
Espero que te sirva de ayuda. Esta es una de las partes menos documentadas de Alfresco...
Share es una aplicación web de cliente que no contiene lógica de negocio. Por tanto, si el botón necesita realizar operaciones en el repositorio de Alfresco será necesario desarrollar esa lógica en un proyecto de Repo que sea invocado desde Share a través de una invocación REST.
En esta segunda parte se describen componentes del proyecto de Repo add-menu-dl-repo
y una modificación en el proyecto add-menu-dl-share
para invocar a la lógica de repositorio.
Alfresco dispone de una API de desarrollo de servicios REST denominada Web Script. En este caso vamos a desarrollar un servicio REST que crea un fichero en la carpeta indicada. Por convención, las operaciones de creación en las APIs REST se realizan mediante HTTP POST y por comodidad vamos a realizar el intercambio de información en formato JSON.
Pueden desarrollarse otro tipo de Web Scripts mediante HTTP GET, PUT o DELETE o enviar los parámetros de la URL.
La lógica del Web Script será desarrollada utilizando la API JavaScript de servidor de Alfresco basada en Rhino, aunque podría desarrollarse de manera equivalente utilizando la API Java.
Los Web Scripts suelen constar de:
Creamos el fichero webscripts/keensoft/files/createfile.post.desc.xml
en nuestro proyecto de repositorio Alfresco SDK estándar. Es importante que el fichero esté bajo el directorio webscripts
y que incluya como extensión el verbo del HTTP (post
en este caso) seguido de desc.xml
. Las carpetas intermedias keensoft\files
son arbitrarias, pueden crearse cualquier otras.
Este fichero define:
<webscript>
<shortname>Create file Sample Web Script</shortname>
<description>Create sample file at destination</description>
<url>/files/create</url>
<authentication>user</authentication>
<format default="json"></format>
</webscript>
A continuación definimos la lógica del servicio mediante la API JavaScript de repositorio de Alfresco. Es importante notar que este JavaScript es de servidor y que es por tanto equivalente a la API Java del producto.
Para ello creamos el fichero webscripts/keensoft/files/createfile.post.json.js
. Requiere ser creado en la misma carpeta que el descriptor y que la extensión sea el verbo del HTTP (post
en este caso) y el formato de los datos en la petición (json
en este caso).
La implementación realizada extrae la información del objeto JSON destination
que es enviado en la petición (es el NodeRef de una carpeta) y crea un fichero newFile.txt
con el contenido original text
en esa carpeta. Por último pone la información del fichero creado en el objeto model
para que pueda ser utilizada en la vista FTL.
// extract arguments from JSON
var destination = json.get("destination");
// search for folder
var folder = search.findNode(destination);
// create sample file
var doc = folder.createFile("newFile.txt");
doc.content = "original text";
// put information for FTL view
model.doc = doc;
Construimos la respuesta JSON en el fichero webscripts/keensoft/files/createfile.post.json.ftl
, que incluye como extensión el verbo HTTP (post
en este caso), el formato de la respuesta (json
) y el tipo de archivo (ftl
).
En esta plantilla FTL (FreeMarker) disponemos de todos los datos que hayamos incluido en el objeto model
en el controlador (doc
en nuestro caso). A continuación formamos el JSON incluyendo algunos valores del objeto doc
.
{
"doc": {
"nodeRef" : "${doc.nodeRef}",
"name" : "${doc.name}"
}
}
Una vez realizados estos pasos, deberíamos ser capaces de crear un fichero newFile.txt
en la carpeta con NodeRefworkspace://SpacesStore/5418807b-cf50-4f74-85a2-f72bd3daa383
realizando la siguiente petición:
curl -X POST \
http://localhost:8080/alfresco/s/files/create \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H 'content-type: application/json' \
-d '{ "destination" : "workspace://SpacesStore/5418807b-cf50-4f74-85a2-f72bd3daa383" }'
El bloque autorización en este ejemplo incluye admin:admin
pero es posible que deba ser cambiado en caso de que las credenciales de acceso a Alfresco sean diferentes.
Una vez que hemos construido el Web Script y está disponible, podemos realizar la invocación a la API REST desde nuestros componentes YUI de Share utilizando la clase de ayuda Alfresco.util.Ajax.request
. En el ejemplo vamos a modificar el fichero custom-button-sharedfiles.js
de la carpeta resources/META-INF/sp/modules
del proyecto Alfresco Share SDK add-menu-dl-share
.
Debajo del alert
existente realizamos las siguientes operaciones:
successCallback
) y callback de error (failureCallback
)dataObj
onRequestSucess
Alfresco.util.PopupManager.displayMessage
...
// Write your own code
alert("Shared files: " + destination);
// Invoke async repo Web Script by using HTTP POST and JSON
Alfresco.util.Ajax.request(
{
method: Alfresco.util.Ajax.POST,
url: Alfresco.constants.PROXY_URI + "/files/create",
dataObj:
{
destination: destination
},
requestContentType: Alfresco.util.Ajax.JSON,
successCallback:
{
fn: function onRequestSuccess(response)
{
var json = Alfresco.util.parseJSON(response.serverResponse.responseText);
Alfresco.util.PopupManager.displayMessage(
{
text: "File created: " + json.doc.name + " (" + json.doc.nodeRef + ")"
})
},
scope: this
},
failureCallback:
{
fn: function onRequestFailure()
{
Alfresco.util.PopupManager.displayMessage(
{
text: "File has not been created!"
})
},
scope: this
}
});
Una vez realizado este cambio, cuando el botón "Botón" de la barra de herramientas de la Biblioteca de Documentos sea pulsado en la página "Ficheros compartidos", se creará un fichero "newFile.txt" en esa carpeta.
Angel Borroy Buen trabajo
Me ha sido muy útil tu ayuda, gracias por la información
quiero hacerte otra consulta el webscript el controlador lo hice con java. como puedo recuperar los valores de dataObj
en el controlador java ?
las carpetas las estoy creando con FileFolderService.
Me alegro de que vayas progresando.
Vamos a ver si te apañas con esto y si no, ampliaré el tutorial.
Tienes un buen ejemplo sobre cómo parsear el JSON de una WebScriptRequest en https://github.com/share-extras/js-console/blob/master/javascript-console-repo/src/main/java/de/fme/...
En esa misma clase encontrarás cómo parsear los parámetros de la WebScriptRequest en caso de que vengan en la query string https://github.com/share-extras/js-console/blob/master/javascript-console-repo/src/main/java/de/fme/...
Ya me dices cómo te va.
Hola Angel Borroy yo puedo reemplazar el dataObj por dataForm ? estoy haciendo algo similar estoy usando asprise de prueba el captura la imagen de escaner ya la implementé alfresco pero no se como puedo enviarla al controlador js para crear el archivo y guardarlo en el repositorio.
la verdad no he dado como enviarla
Discussions about Alfresco Content Services and Alfresco Process Services in Spanish
Related:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.