Obtener Enlace Público al crear documento

cancel
Showing results for 
Search instead for 
Did you mean: 
wifer
Active Member

Obtener Enlace Público al crear documento

Jump to solution

Estoy realizando el ingreso de documentos desde una función java con CMIS, mi pregunta cómo puedo obtener el enlace publico que se muestra al hacer clic en compartido. Ya que éste se genera al momento de hacer clic en compartir y no al momento de la creación del documento.

1 Solution

Accepted Solutions
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

Bueno logré mi propósito, aunque no tan funcional, pero funciona

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

/**

*

* @author Fernando Bustos

*/

public class Pruebados {

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // TODO code application logic here

        System.setProperty("webdriver.chrome.driver", "D://chromedriver.exe");

    // Initialize browser

    WebDriver driver=new ChromeDriver();

    // Open

    driver.get("http://localhost:8080/share");

    driver.findElement(By.id("page_x002e_components_x002e_slingshot-login_x0023_default-username")).sendKeys("usuario");

    driver.findElement(By.id("page_x002e_components_x002e_slingshot-login_x0023_default-password")).sendKeys("contraseña");

    driver.findElement(By.id("page_x002e_components_x002e_slingshot-login_x0023_default-submit-button")).click();

    driver.get("http://localhost:8080/share/page/document-details?nodeRef=workspace://SpacesStore/541e29ae-c160-4c35...");

    driver.findElement(By.id("template_x002e_node-header_x002e_document-details_x0023_default-quickshare")).click();

    String cod = driver.findElement(By.id("template_x002e_node-header_x002e_document-details_x0023_default-quickshare-input")).getAttribute("value");

    System.out.print(cod.split("/")[5]);

    driver.close();

    }

   

}

View solution in original post

12 Replies
angelborroy
Alfresco Employee

Re: Obtener Enlace Público al crear documento

Jump to solution

Para que se genere el enlace público, debes utilizar la función quick share.

Esta función no está disponible a través de la API CMIS, por lo que tendrás que utilizar la API REST. 

Puedes consultarla en: QuickShare - "share" some content => enable public/unauthenticated access | Alfresco Documentation 

Hyland Developer Evangelist
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

Disculpa mi pregunta, como se implementa eso?. Ya que mi idea es obtener el sharedid al momento de crear el documento y registrarlo en la base de datos de un sistema desarrollado en java con swing

angelborroy
Alfresco Employee

Re: Obtener Enlace Público al crear documento

Jump to solution

Supongo que estarás utilizando Apache Chemistry para invocar a Alfresco mediante CMIS. 

Puedes acceder de igual manera a la API REST utilizando un cliente REST desde Java, por ejemplo GitHub - techblue/alfresco-restclient: Rest client written in java to consume Alfresco RESTful servi...  

No obstante, quizá sea más sencillo que utilices un HttpClient o similar para realizar tu propia integración Java Http client and Json 

Hyland Developer Evangelist
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

La verdad que soy nuevo en la programación con alfresco sin embargo para registrar documentos desde el sistema java en swing lo realizo con el siguiente método;

public static final String ALFRESCO_API_URL = "http://localhost:8082/";
public static final String ATOMPUB_URL = ALFRESCO_API_URL + "alfresco/api/-default-/public/cmis/versions/1.0/atom";

     public void saveVersioning(File file, String filename, String userName, String pwd, String docId)
            throws Exception {

            SessionFactory factory = SessionFactoryImpl.newInstance();
            Map<String, String> parameters = new HashMap<String, String>();

            // User credentials.
            parameters.put(SessionParameter.USER,userName);
            parameters.put(SessionParameter.PASSWORD, pwd);

            // Connection settings.
            parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
            parameters.put(SessionParameter.ATOMPUB_URL, ATOMPUB_URL); // URL to your CMIS server.
            parameters.put(SessionParameter.AUTH_HTTP_BASIC, "true" );
           
            List<Repository> repositories = factory.getRepositories(parameters);
//            for (Repository r : repositories) {
//            }           
            Repository repository = repositories.get(0);
            Session session = repository.createSession();
           
           
           
//          Folder root = session.getRootFolder();  /*Obtener la carpeta raiz*/
            Folder root = (Folder) session.getObjectByPath("/00000"); /*Seleccionar directorio específico*/
           
           
            // Did it work?
            ItemIterable<CmisObject> children1 = root.getChildren();
            System.out.println("- Contenido:");
            for (CmisObject o : children1) {
                System.out.println(o.getName());
            }
                       
              String mimetype = "application/pdf";

            byte[] buf = IOUtils.toByteArray(new FileInputStream(file));
            ByteArrayInputStream input = new ByteArrayInputStream(buf);


            ContentStream contentStream = session.getObjectFactory().createContentStream(filename, buf.length, mimetype, input);
           
            Map<String, Object> properties = new HashMap<String, Object>();
            properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
            properties.put(PropertyIds.NAME, filename);
            Document doc = root.createDocument(properties, contentStream, VersioningState.MAJOR);
            System.out.println("Document ID: " + doc);  
           
              /*AQUI ES DONDE NECESITO SABER EL SHAREDID DEL DOCUMENTO CREADO*/    
        
           
          
        }

Realizando consultas en interner intente implementar 

QuickShareDTO dto = quickShareService.shareContent(nodeRef); que recomienda en Five steps you can use to figure out how anything in Alfresco Share really works | ECM Architect  

pero no se como obtener WebScriptRequest para aplicar éste método que me recomiendan:

public void shareid(WebScriptRequest req){
        try{
           
            Map<String, String> params = req.getServiceMatch().getTemplateVars();
             NodeRef nodeRef = WebScriptUtil.getNodeRef(params);
           
            QuickShareDTO dto = quickShareService.shareContent(nodeRef);
           
            Map<String, Object> model = new HashMap<String, Object>(1);
            model.put("sharedDTO", dto);
            System.out.print("modelo "+model);
            }
        catch (InvalidNodeRefException inre)
        {
             throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to find node: ");
        }
      
    }
angelborroy
Alfresco Employee

Re: Obtener Enlace Público al crear documento

Jump to solution

Estás confundiendo la capa, ese ejemplo usa otra API diferente.

En tu caso tienes que usar la API REST, que puede ser usada mediante un simple HTTP GET. Usa el navegador, curl o wget para explorar la API. También puedes encontrarla en http://localhost:8080/alfresco/s/ y después busca el método que necesitas para ver qué parámetros necesita la invocación:

QuickShare - "share" some content => enable public/unauthenticated access | Alfresco Documentation 

Hyland Developer Evangelist
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

Disculpa mi ignorancia como hago eso, hay algún ejemplo en el cual guiarme? es que la verdad solo e programado en java swing

angelborroy
Alfresco Employee

Re: Obtener Enlace Público al crear documento

Jump to solution

Esto es un ejemplo de invocación a la API REST de Alfresco https://github.com/techblue/alfresco-restclient


Totalmente compatible con Swing

Hyland Developer Evangelist
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

Disculpe Ángel Borroy que le siga molestando, pero me podría ayudar, puse a prueba el siguiente método y funciona para obtener el ticket de alfresco pero quise adaptarlo para que me saque el shareid no me funciona que necesito agregarle?

static public String getAlfTicket(String _userName, String _password)   {
      URL url;
      HttpURLConnection connection = null;
      try
      {
         String urlParameters = "{ \"username\" : \"" + _userName +"\", \"password\" : \"" + _password +"\" }";
        
         // Create connection
//         url = new URL("http://localhost:8080/alfresco/service/api/login"); /*para obtener el ticke*/
         url = new URL("http://localhost:8080/alfresco/service/api/internal/shared/share/workspace/SpacesStore/c5702cb0-952c-4b0e-8e88-6d8051eda32f");
        
         connection = (HttpURLConnection) url.openConnection();

         connection.setRequestMethod("POST");
         connection.setRequestProperty("Content-Type", "application/json");
         connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
         connection.setRequestProperty("Content-Language", "en-US");
         connection.setUseCaches(false);
         connection.setDoInput(true);
         connection.setDoOutput(true);

          try ( // Send request
                  DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
              wr.writeBytes(urlParameters);
              wr.flush();
          }

         // Get Response
         InputStream is = connection.getInputStream();
         BufferedReader rd = new BufferedReader(new InputStreamReader(is));
         String line;
         StringBuilder response = new StringBuilder();
         while ((line = rd.readLine()) != null)
         {
            response.append(line);
            response.append('\r');
         }
         rd.close();
         String _jsonResponse = response.toString();
         System.out.print(_jsonResponse);
      }
      catch (Exception e)
      {
         e.printStackTrace();
         return null;
      }
      finally
      {
         if (connection != null)
         {
            connection.disconnect();
         }
      }
      return _ticket;
   }‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍
wifer
Active Member

Re: Obtener Enlace Público al crear documento

Jump to solution

Me podría ayudar a integrar esa funcionalidad, es lo único que necesito.

2016-09-21 16:18 GMT-05:00 angelborroy <alfresco-ext@jiveon.com>:

Alfresco Community

<https://community.alfresco.com/?et=watches.email.thread>

Re: Obtener Enlace Público al crear documento

reply from Angel Borroy

<https://community.alfresco.com/people/angelborroy?et=watches.email.thread>

in Spanish User Group - View the full discussion

<https://community.alfresco.com/message/751851-re-obtener-enlace-público-al-crear-documento?commentID=751851&et=watches.email.thread#comment-751851>