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.
Solved! Go 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();
}
}
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
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
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
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: ");
}
}
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
Disculpa mi ignorancia como hago eso, hay algún ejemplo en el cual guiarme? es que la verdad solo e programado en java swing
Esto es un ejemplo de invocación a la API REST de Alfresco https://github.com/techblue/alfresco-restclient
Totalmente compatible con Swing
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;
}
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>
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
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.