0

I need to update the ReadOnly properties on alfresco like 'cm:creator or cm:created' so I create a java-backed webscript:

public void onUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Calendar cal = new GregorianCalendar();
        try {
            Date d = sdf.parse("21/12/2012");
            cal.setTime(d);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        policyBehaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE);
        nodeService.setProperty(nodeRef, ContentModel.PROP_CREATED, cal);
        nodeService.setProperty(nodeRef, ContentModel.PROP_MODIFIED, cal);
        nodeService.setProperty(nodeRef, ContentModel.PROP_MODIFIER, "test");
        nodeService.setProperty(nodeRef, ContentModel.PROP_CREATOR, "test");
        policyBehaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE);
    }

everything works fine but i need to set properties with the remote values sent by the client side not only the local ones:

public Document createDocument(Folder folder,String name,String actId) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date d = sdf.parse("21/12/2012");
        Map<String, Object> properties = new HashMap<String, Object>();
        Calendar cal = new GregorianCalendar();
        cal.setTime(d);
        //properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document,P:cm:titled,P:cm:author");
        properties.put(PropertyIds.NAME, name);
        properties.put(PropertyIds.CREATED_BY, "createdBy");
        properties.put(PropertyIds.LAST_MODIFIED_BY, "modifiedBy");
        properties.put(PropertyIds.CREATION_DATE, cal);
        properties.put(PropertyIds.LAST_MODIFICATION_DATE, cal);
        properties.put("cm:title", "Title");
        properties.put("cm:description", "Description");
        properties.put("cm:author", "author");
        byte[] content = "Hello World!".getBytes();
        InputStream stream = new ByteArrayInputStream(content);
        ContentStream contentStream = new ContentStreamImpl(name, BigInteger.valueOf(content.length), "text/plain", stream);
        Document newDoc = folder.createDocument(properties, contentStream, VersioningState.MAJOR);
        return newDoc;
    }

Is this possible? Thanks in advance.

Simulant
  • 19,190
  • 8
  • 63
  • 98
Sfayn
  • 190
  • 1
  • 2
  • 13

1 Answers1

3

You need to check out this tutorial from JPotts to get familiar with Webscript development.

In the mean time, as you can see in here you can fetch get parameters using this method : WebScriptRequest.getParameter(String) or even fetch an element from a json payload like this:

    String params = "{}";
    String myVar;
    try {
        params = IOUtils.toString(req.getContent().getInputStream(),
                "UTF-8");
    } catch (IOException e1) {
        // Handle exception properly
    }
    JSONObject postParams;
    try {
        postParams = new JSONObject(params);
        if (postParams.has("some-attribute")){
            myVar = postParams.getString("some-attribute");
        }
    } catch (JSONException e1) {
        // Handle exception properly
    }
Younes Regaieg
  • 4,156
  • 2
  • 21
  • 37