Someone please help us. In DocumentListComponent, we want to run our customized code for download action. so that we can run our code before calling the default ‘download’ handler; or not calling the default handler at all.
According to documents
https://alfresco.github.io/adf-component-catalog/components/ContentActionComponent.html
https://alfresco.github.io/adf-component-catalog/injectables/DocumentActionsService.html
, it is possible to register a new customized action to replace default ‘download’ action handler. But it does not work for us. Following is excerpt of our code, that is very similar to samples provided. Neither myDocumentActionHandler() nor customDownloadBehavior() is called when the actions are selected from the three dot action menu.
============= html ===========
<adf-document-list
#documentList
[multiselect]=true
[allowDropFiles]="false"
[navigationMode]="'dblclick'"
[contextMenuActions]="true"
[contentActions]="true"
[selectionMode]="'multiple'"
currentFolderId={{parentFolder.folderId}}
(preview)="showPreview($event)"
[sorting]="['name', 'ASC']">
<content-actions>
<content-action
target="document"
title="APP.ACTIONS.DOWNLOAD"
handler="download" >
</content-action>
<content-action
target="document"
title="My Handler"
handler="my-handler" >
</content-action> <!- - other actions - - >
</content-actions> <!- - other column defs - -></adf-document-list>
============= controller ===========
// other imports …
import { DocumentListComponent, DocumentActionsService } from '@alfresco/adf-content-services';
@Component({
selector: 'app-doc-list',
templateUrl: './doc-list.component.html',
styleUrls: ['./doc-list.component.scss']
})
export class DocListComponent extends BrowseResult {
// other properteis …
originalDownloadHandler;
constructor(documentActions: DocumentActionsService,
// …
) {
super(peopleApi, rfsDocumentService);
documentActions.setHandler(
'my-handler',
this.myDocumentActionHandler.bind(this)
);
this.originalDownloadHandler = documentActions.getHandler('download');
documentActions.setHandler(
'download',
this.customDownloadBehavior.bind(this)
);
}
myDocumentActionHandler(obj: any) {
console.log('my custom action handler is never called');
}
customDownloadBehavior(obj: any) {
console.log('my custom download behavior is never called');
this.originalDownloadHandler(obj);
}
// other functions …
}
You can take full control over the action execution using "(execute)" event. In that case you won't need hacking services:
<content-action
target="all"
title="Custom actions"
(execute)="runCustomAction($event)">
</content-action>
And in the controller class:
runCustomAction(event) {
console.log(event);
}
Thank you for your answer. But why handler does not work though. Since it is documented, there must be a reason to use it. In our case, we want to reuse the default download code.
customDownloadBehavior(obj: any) {
if (do_something_in_our_biz_logic(obj)) {
this.originalDownloadHandler(obj);
}
}
Maybe related to "this" context and how you invoke the old one. Anyway, you can check the source code: alfresco-ng2-components/document-actions.service.ts at development · Alfresco/alfresco-ng2-component... The only thing the "download" handler does is calling this line of code:
this.nodeActionsService.downloadNode(obj);
You can make that call from your handlers as well, or step thought the code in the debugger to see what's going on.
Same issue here, I followed the documentation and my custom handler "delete" is not calling my custom behaviour.
I then used the "execute" event, but I needed to rewrite the DocumentActionsService#delete method myself.
Discussions, help and advice about the Alfresco Development Framework.
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.