Search code examples
alfrescoalfresco-share

Is there way to get attachments details before starting the workflow?


Before I start the business process, I select the attachments. I can do it many times, remove attachments and choose again.

I want to display dynamic table with information about attachments.

For example, to retrieve all the attachments details, I use such code:

...
var divWithAnchors = YAHOO.util.Selector.query("#page_x002e_data-form_x002e_task-details_x0023_default_assoc_packageItems-cntrl")[0];
var anchors = divWithAnchors.getElementsByTagName('a');

var attachments = new Array();
for(var i = 0; i < anchors.length; i++) {
    attachments[i] = anchors[i].href.split('=')[1];
}
...

It gives me references to nodes, for example:

...
workspace://SpacesStore/c5a27463-c2aa-4c70-aca7-1f999d3ac76a
workspace://SpacesStore/29e9f035-403c-47b6-8421-624d584ff7eb
workspace://SpacesStore/712aaca2-9c90-4733-a690-bbf9bacb26e6
workspace://SpacesStore/68893fde-ee7c-4ecb-a2df-d4953dc69439
...

Then I can do AJAX requests to the REST back-end (WebScripts) and get the responses:

...
for(var i = 0; i < attachments.length; i++) {
    Alfresco.util.Ajax.jsonGet(
    ...
    // parse JSON and fill the table

Is this the correct way? I'm not sure about the ID:

page_x002e_data-form_x002e_task-details_x0023_default_assoc_packageItems-cntrl

Is this a constant?.. Can this identifier be changed?


Solution

  • In fact, all these NodeRefs are available in the object selectedItems = {} and can be obtained in the method getAddedItems() (see object-finder.js):

    ...
    
    /**
    * Selected items. Keeps a list of selected items for correct Add button state.
    * 
    * @property selectedItems
    * @type object
    */
    selectedItems: null,
    
    ...
    
    /**
    * Returns items that have been added to the current value
    *
    * @method getAddedItems
    * @return {array}
    */
    getAddedItems: function ObjectFinder_getAddedItems() {
        var addedItems = [],
        currentItems = Alfresco.util.arrayToObject(this.options.currentValue.split(","));
    
        for (var item in this.selectedItems) {
            if (this.selectedItems.hasOwnProperty(item)) {
                if (!(item in currentItems)) {
                    addedItems.push(item);
                }
            }
        }
    
        return addedItems;
    },
    
    ...
    

    Next, is needed to send these NodeRefs to the WebScript and get all the necessary properties by using NodeService service.