Add Workflow action buttons to Email Notification

Hi,

I made an Email Notification,
when a user create a PO, an email send to order approver user.

I want to add Work flow Action buttons to this notification email like the one in Email Template

I need to know the html code for that.

Thanks

1 Like

I asked this same question for several years and never got an answer. It will be interesting to see if you will get what I didn’t.

This isn’t a public-facing feature, but it can definitely be done. You’d could use the existing method defined here:

You’d need to generate a signature key, I believe. I’m not sure how to do that off-hand, but it should be possible to find examples in the source code.

Thanks for replying, but I am using notification email, So i think i need to add kind of code in to HTML section. can I do it ?

Yes, the email content is generated using jinja templating, which can include Python functions.

did you solve your point ?

Unfortunately no

@Ahmed_Moustafa2 these days I was looking for a similar solution and I succeeded.
In the same python file linked by @peterg, you can find ‘get_workflow_action_url’ method.

By creating a similar method in a custom Python file, in a custom app, prefixing the @frappe.whitelist() decorator, you can create a callable method that can return a URL to interact with the workflow of a document.

# Remeber to import required modules
from frappe.utils import get_url
from frappe.utils.verified_command import get_signed_params

@frappe.whitelist()
def get_workflow_action_url(action, user, pdanum, current_state):
	apply_action_method = (
		"/api/method/frappe.workflow.doctype.workflow_action.workflow_action.apply_action"
	)

	params = {

		"doctype": 'Purchase Order', # hard-coded in my case, you can pass it as an argument if you prefer
		"docname": pdanum, # an argument in my case, you can hard-code it if you prefer
		"action": action, # an argument in my case, you can hard-code it if you prefer
		"current_state": current_state, # an argument in my case, you can hard-code it if you prefer
		"user": user # an argument in my case, you can hard-code it if you prefer
	}
    # this will return you an URL to use in the href of the e-mail button
	return get_url(apply_action_method + "?" + get_signed_params(params))

The generated link will look like this:
https://yoursite.com/api/method/frappe.workflow.doctype.workflow_action.workflow_action.apply_action?doctype=Purchase+Order&docname=PUR-ORD-2022-00033&action=Approve&current_state=Pending&user=Administrator&_signature=[AUTO-GENERATED TOKEN]

By opening the link it will be possible to interact with the document workflow
image

5 Likes

@magno Your example is insightful thank you! However, you did not show how you called the function in your actual notification email. Can you assist with that?

hey, can you tell me where nd when call this method

did you get any solutiuon?