Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

2.3 KiB

You can override the standard link query by using set_query

1. Adding Fitlers

You can add filters to the query:

frappe.ui.form.on("Bank Reconciliation", "onload", function(frm) {
    cur_frm.set_query("bank_account", function() {
        return {
            "filters": {
                "account_type": "Bank",
                "group_or_ledger": "Ledger"
            }
        };
    });
});

A more complex query:

frappe.ui.form.on("Bank Reconciliation", "onload", function(frm){
    cur_frm.set_query("bank_account", function(){
        return {
            "filters": [
                ["Bank Account": "account_type", "=", "Bank"],
                            ["Bank Account": "group_or_ledger", "!=", "Group"]
            ]
        }
    });
});

2. Calling a Different Method to Generate Results

You can also set a server side method to be called on the query:

frm.set_query("item_code", "items", function() {
    return {
        query: "erpnext.controllers.queries.item_query",
        filters: frm.doc.enquiry_type === "Maintenance" ?
            {"is_service_item": "Yes"} : {"is_sales_item": "Yes"}
    };
});

Custom Method

The custom method should return a list of items for auto select. If you want to send additional data, you can send multiple columns in the list.

Parameters to the custom method are:

def custom_query(doctype, txt, searchfield, start, page_len, filters)

Example:

# searches for leads which are not converted
def lead_query(doctype, txt, searchfield, start, page_len, filters):
    return frappe.db.sql("""select name, lead_name, company_name from `tabLead`
        where docstatus < 2
            and ifnull(status, '') != 'Converted'
            and ({key} like %(txt)s
                or lead_name like %(txt)s
                or company_name like %(txt)s)
            {mcond}
        order by
            if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
            if(locate(%(_txt)s, lead_name), locate(%(_txt)s, lead_name), 99999),
            if(locate(%(_txt)s, company_name), locate(%(_txt)s, company_name), 99999),
            name, lead_name
        limit %(start)s, %(page_len)s""".format(**{
            'key': searchfield,
            'mcond':get_match_cond(doctype)
        }), {
            'txt': "%%%s%%" % txt,
            '_txt': txt.replace("%", ""),
            'start': start,
            'page_len': page_len
        })

For more examples see:

https://github.com/frappe/erpnext/blob/develop/erpnext/controllers/queries.py