How to add Button to rows in Script Report?

I am trying to build a script report in which I want to a button in the last column of each row and when a user clicks on the button want to show a modal dialog with data from another DocType.

I tried adding a button field to DocType but that field does not show up in report.

How to create a Script Report and add button in the last column of each row?


Sorry to bump it.

Is this feature possible in Script Report?

I have the same problem as you, did you have a solution for this?

Sorry I have not been able to find any solution for this yet.

Here is the code I use for a report on Purchase Order:

In your report’s python file:

def execute(filters=None):
	columns = get_columns()
	data = get_data(filters)
	for row in data:
		row["button"] = '<button class="btn btn-sm" onclick="frappe.open_dialog({})">Open</button>'.format("'" + + "'")

	return columns, data

def get_data(filters=None):
	#TODO: consider filters
	return frappe.db.get_list("Purchase Order", fields=["*"])

def get_columns():
	return [
			"label": "ID",
			"fieldname": "name",
			"fieldtype": "Link",
			"options": "Purchase Order",
			"width": 180,
			"label": "Action",
			"fieldname": "button",
			"fieldtype": "Data",
			"width": 180,

and in your report’s javascript file:

frappe.query_reports["<Report Name>"] = {
	"filters": [


	onload: async function (report) {
			frappe.open_dialog = function (po_name) {
			let d = new frappe.ui.Dialog({
				title: 'Enter details',
				fields: [
						label: 'Field name',
						fieldname: 'fieldname',
						fieldtype: 'Data'
				primary_action_label: 'Submit',
				primary_action(values) {

Hope this help.