1
votes

I need to customise the Alfresco datalist actions by adding a move action. I focused in the following tutoriel to acheive this : https://github.com/share-extras/sdk-sample-datalist-action.
Steps :

1- I overided the datagrid.get.config.xml file by adding the following line to it (location : C:\Alfresco\tomcat\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\components\data-lists)

2-I added my OnActionMoveTo implementation to the files actions.js and actions-min.js located in C:\Alfresco\tomcat\webapps\share\components\data-lists Here is the implementation of the OnActionMoveTo :

      /**
   * Move single document or folder.
   *
   * @method onActionMoveTo
   * @param p_items {object} Object literal representing the file or folder to be actioned
   */
  onActionMoveTo: function DataListActions_onActionMoveTo(pp_items)
  {
      var p_items = YAHOO.lang.isArray(pp_items) ? pp_items : [pp_items];

      console.log(p_items);
     this._copyMoveTo("move", p_items);
  },
  /**
   * Copy/Move To implementation.
   *
   * @method _copyMoveTo
   * @param mode {String} Operation mode: copy|move
   * @param p_items {object} Object literal representing the file or folder to be actioned
   * @private
   */
  _copyMoveTo: function DataListActions__copyMoveTo(mode, p_items)
  {
     // Check mode is an allowed one
     if (!mode in
        {
           copy: true,
           move: true
        })
     {
        throw new Error("'" + mode + "' is not a valid Copy/Move to mode.");
     }

     if (!this.modules.copyMoveTo)
     {
        this.modules.copyMoveTo = new Alfresco.module.DoclibCopyMoveTo(this.id + "-copyMoveTo");
     }

     var DLGF = Alfresco.module.DoclibGlobalFolder;

     var allowedViewModes =
     [
        DLGF.VIEW_MODE_RECENT_SITES,
        DLGF.VIEW_MODE_FAVOURITE_SITES,
        DLGF.VIEW_MODE_SITE,
        DLGF.VIEW_MODE_SHARED
     ];

     if (this.options.repositoryBrowsing === true)
     {
        //this block is not executed (verified by a console.log)
        allowedViewModes.push(DLGF.VIEW_MODE_REPOSITORY);
     }
     allowedViewModes.push(DLGF.VIEW_MODE_USERHOME)
     var zIndex = 0;
     if (this.fullscreen !== undefined && ( this.fullscreen.isWindowOnly || Dom.hasClass(this.id, 'alf-fullscreen')))
     {
        zIndex = 1000;
     }
     this.modules.copyMoveTo.setOptions(
     {
        allowedViewModes: allowedViewModes,
        mode: mode,
        siteId: this.options.siteId,
        containerId: this.options.containerId,
        path: this.currentPath, // this is printed as undefined in the console.log
        files: p_items,
        rootNode: this.options.rootNode, // this is printed as undefined in the console.log
        parentId: this.getParentNodeRef(p_items), // this is printed as undefined in the console.log
        zIndex: zIndex
     }).showDialog();
  },

When I click on the move link in the datalist, the function(OnActionMoveTo) is executed, but it doesn't show me the folder picker to move the item. When I logged the function, I found the following :

path: this.currentPath, // this is printed as undefined in the console.log
files: p_items,
rootNode: this.options.rootNode, // this is printed as undefined in the console.log
parentId: this.getParentNodeRef(p_items), // this is printed as undefined in the console.log

Can anyone help me to fix this, please ?

1

1 Answers

0
votes

It seems like few components still missing.

If you look at the code from sample-action.js file you will notice there is a call to repository webscript which will contain actual logic to do changes in repo side which is missing in your case. Checkout this part:

 webscript:
        {
           method: Alfresco.util.Ajax.POST,
           name: "duplicate/node/" + destinationNodeRef.uri
        },

Logic for displaying popup while clicking move action should be part of client side javascript.