Auto-populating a child table in Frappe and/or ERPNext can make your application look good and give your users a better experience with the software. In this piece, I will demonstrate the following:
- Adding a Section to a DocType
- Adding a Child Table to a DocType
- Writing a Custom Script to Query the backend
- Executing a Frappe Call to grab the data
- Writing an API to provide the data needed
- Auto-populating the data to a child table
- Refreshing a Frappe field to automatically effect the changes
On this post I will provide the two pieces of code needed to finish the work:
Custom Script Code
We will to use a Custom Script to send the request to our custom endpoint and also to handle the response.
frappe.ui.form.on('Library Member', {
author: function(frm){
let author = frm.doc.author;
if(author){
frappe.call({
method: "library_management.api.get_author_articles",
args: {author: author}
}).done((r) => {
frm.doc.my_article = []
$.each(r.message, function(_i, e){
let entry = frm.add_child("my_article");
entry.article_name = e.name;
})
refresh_field("my_article")
})
}
}
})
API Code
We will write our Custom API endpoint which will be responsible for querying the data we need to return to the frontend.
@frappe.whitelist()
def get_author_articles(author):
articles = frappe.db.sql(f""" SELECT name FROM `tabArticle Library` WHERE article_author='{author}' """, as_dict=True)
return articles
Here is a YouTube video for the whole process.