Featured Frappe/ERPNext

ERPNext / Frappe Filter and Auto-populate Child Table

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.

Leave a Reply

Open Chat