Uncaught TypeError: frappe.ui.form.make_control is not a function

Trying to use dialog example here in my script, I got the following error:

Uncaught TypeError: frappe.ui.form.make_control is not a function

However if pass the fields as empty list it is working,
What is going wrong here?
Thanks in advance

Frappe Chat: v0.0.1 (main)

ERPNext: v13.26.0 (HEAD)

Frappe Framework: v13.26.0 (HEAD)

Solved by including js

	<!-- js should be loaded in body! -->
	<script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script>
	<script type="text/javascript" src="/assets/js/frappe-web.min.js"></script>
	<script type="text/javascript" src="/assets/js/control.min.js"></script>
	<script type="text/javascript" src="/assets/js/dialog.min.js"></script>
	<script type="text/javascript" src="/assets/js/bootstrap-4-web.min.js"></script>
1 Like

Hi,
i just started development in Frappe.
I’m facing same error.
when i include those scrips in header only jquery is available but for rest of the things i’m getting 404.
How to download those scrips.

You help would be appreciated.
Thank you.

Hello! I am not sure if you are still have this problem, but… I’ve found another solution :slight_smile:

This is my solution for v15.

So, I use Portal Pages (see Portal Pages ) for my app and I have custom base Jinja2 template and have got the same issue.

My solution: add this in your Jinja2 template into the bottom of body container.

<!-- somewhere at the bottom of <body> container... -->
            <!-- js should be loaded in body! -->
            <script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script>
            {{ include_script('frappe-web.bundle.js') }}
            {{ include_script('dialog.bundle.js') }}
            {{ include_script('controls.bundle.js') }}
            {{ include_script('bootstrap-4-web.bundle.js') }}

Notice that I use *.bundle.js instead of *.min.js!

You will still have a problem with CSS styles (if you use custom base template as me), but I think you know how to deal with it :slight_smile:

So, this is a code sample from my template.

<!-- somewhere at the bottom of <body> container... -->

        {% block base_scripts %}
            <!-- js should be loaded in body! -->
            <script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script>
            
            <script>
                frappe.boot = {{ boot | json }}
                // for backward compatibility of some libs
                frappe.sys_defaults = frappe.boot.sysdefaults;
            </script>
            {{ include_script('frappe-web.bundle.js') }}
            {{ include_script('dialog.bundle.js') }}
            {{ include_script('controls.bundle.js') }}
            {{ include_script('bootstrap-4-web.bundle.js') }}
        {% endblock %}

And in my case it transforms in

<!-- somewhere at the bottom of <body> container... -->

<!-- DO NOT COPYPASTE! IT WON'T HELP YOU! LOOK EXAMPLE ABOVE. -->
<!-- DO NOT COPYPASTE! IT WON'T HELP YOU! LOOK EXAMPLE ABOVE. -->
<!-- DO NOT COPYPASTE! IT WON'T HELP YOU! LOOK EXAMPLE ABOVE. -->

            <!-- js should be loaded in body! -->
            <script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script>
            
            <script>
                frappe.boot = {
 "apps_data": {
  "apps": [
   {
    "logo": "shhhh.... it's my secret",
    "name": "shhhh.... it's my secret",
    "route": "shhhh.... it's my secret",
    "title": "shhhh.... it's my secret"
   }
  ],
  "default_path": "shhhh.... it's my secret",
  "is_desk_apps": 1
 },
 "assets_json": {
  "bank-reconciliation-tool.bundle.js": "/assets/erpnext/dist/js/bank-reconciliation-tool.bundle.PQSY2TRN.js",
  "billing.bundle.js": "/assets/frappe/dist/js/billing.bundle.CPRCUCBA.js",
  "bom_configurator.bundle.js": "/assets/erpnext/dist/js/bom_configurator.bundle.VB3HBFNX.js",
  "bootstrap-4-web.bundle.js": "/assets/frappe/dist/js/bootstrap-4-web.bundle.AZ67VXZX.js",
  "build_events.bundle.js": "/assets/frappe/dist/js/build_events.bundle.HJHYQDCL.js",
  "controls.bundle.js": "/assets/frappe/dist/js/controls.bundle.2XKRTN7I.js",
  "data_import_tools.bundle.js": "/assets/frappe/dist/js/data_import_tools.bundle.FXJ6JQBT.js",
  "desk.bundle.css": "/assets/frappe/dist/css/desk.bundle.SQWHLJTZ.css",
  "desk.bundle.js": "/assets/frappe/dist/js/desk.bundle.OT3DGGLF.js",
  "dialog.bundle.js": "/assets/frappe/dist/js/dialog.bundle.IGI4JRN4.js",
  "email.bundle.css": "/assets/frappe/dist/css/email.bundle.V4P6ZDB4.css",
  "erpnext-web.bundle.css": "/assets/erpnext/dist/css/erpnext-web.bundle.YGMY5XAQ.css",
  "erpnext-web.bundle.js": "/assets/erpnext/dist/js/erpnext-web.bundle.J4A2DQB4.js",
  "erpnext.bundle.css": "/assets/erpnext/dist/css/erpnext.bundle.DIRY76RF.css",
  "erpnext.bundle.js": "/assets/erpnext/dist/js/erpnext.bundle.FBKLI3BW.js",
  "erpnext_email.bundle.css": "/assets/erpnext/dist/css/erpnext_email.bundle.NV7QPSMU.css",
  "file_uploader.bundle.js": "/assets/frappe/dist/js/file_uploader.bundle.IZ3HCER6.js",
  "form.bundle.js": "/assets/frappe/dist/js/form.bundle.RZ7JD6ST.js",
  "form_builder.bundle.js": "/assets/frappe/dist/js/form_builder.bundle.GXZ2NPDV.js",
  "frappe-web.bundle.js": "/assets/frappe/dist/js/frappe-web.bundle.X77XLJGO.js",
  "hierarchy-chart.bundle.js": "/assets/hrms/dist/js/hierarchy-chart.bundle.23WPLVL4.js",
  "hrms.bundle.css": "/assets/hrms/dist/css/hrms.bundle.C2E2YTVH.css",
  "hrms.bundle.js": "/assets/hrms/dist/js/hrms.bundle.UFYK6FJM.js",
  "interview.bundle.js": "/assets/hrms/dist/js/interview.bundle.N5G7FWNY.js",
  "item-dashboard.bundle.js": "/assets/erpnext/dist/js/item-dashboard.bundle.VE5OVFWT.js",
  "kanban_board.bundle.js": "/assets/frappe/dist/js/kanban_board.bundle.OUFA2R27.js",
  "libs.bundle.js": "/assets/frappe/dist/js/libs.bundle.LLRFRX7M.js",
  "list.bundle.js": "/assets/frappe/dist/js/list.bundle.CMWN66J7.js",
  "login.bundle.css": "/assets/frappe/dist/css/login.bundle.UT4OGTGZ.css",
  "logtypes.bundle.js": "/assets/frappe/dist/js/logtypes.bundle.MJKW7EK3.js",
  "onboarding_tours.bundle.js": "/assets/frappe/dist/js/onboarding_tours.bundle.P7QYMXLW.js",
  "pdfjs.bundle.css": "/assets/print_designer/dist/css/pdfjs.bundle.NMMNFR4I.css",
  "performance.bundle.js": "/assets/hrms/dist/js/performance.bundle.SCUNUCJR.js",
  "point-of-sale.bundle.js": "/assets/erpnext/dist/js/point-of-sale.bundle.JTJY4AB2.js",
  "print.bundle.css": "/assets/frappe/dist/css/print.bundle.OTHU7GDU.css",
  "print_designer.bundle.css": "/assets/print_designer/dist/css/print_designer.bundle.RFHKTDEN.css",
  "print_designer.bundle.js": "/assets/print_designer/dist/js/print_designer.bundle.V2LLU4WK.js",
  "print_format.bundle.css": "/assets/frappe/dist/css/print_format.bundle.ORPUVUUZ.css",
  "print_format_builder.bundle.js": "/assets/frappe/dist/js/print_format_builder.bundle.4FCO26LT.js",
  "report.bundle.css": "/assets/frappe/dist/css/report.bundle.EFJTV7KG.css",
  "report.bundle.js": "/assets/frappe/dist/js/report.bundle.7DC7UBSV.js",
  "rtl_desk.bundle.css": "/assets/frappe/dist/css-rtl/desk.bundle.VOVAOSUK.css",
  "rtl_email.bundle.css": "/assets/frappe/dist/css-rtl/email.bundle.X23KCJZV.css",
  "rtl_erpnext-web.bundle.css": "/assets/erpnext/dist/css-rtl/erpnext-web.bundle.NQ3SD4FZ.css",
  "rtl_erpnext.bundle.css": "/assets/erpnext/dist/css-rtl/erpnext.bundle.AEIHBNLC.css",
  "rtl_erpnext_email.bundle.css": "/assets/erpnext/dist/css-rtl/erpnext_email.bundle.3BXZTKFI.css",
  "rtl_hrms.bundle.css": "/assets/hrms/dist/css-rtl/hrms.bundle.BTV7FLUW.css",
  "rtl_login.bundle.css": "/assets/frappe/dist/css-rtl/login.bundle.YJEVXPVK.css",
  "rtl_pdfjs.bundle.css": "/assets/print_designer/dist/css-rtl/pdfjs.bundle.YIFM5XM5.css",
  "rtl_print.bundle.css": "/assets/frappe/dist/css-rtl/print.bundle.ILE3B7QU.css",
  "rtl_print_designer.bundle.css": "/assets/print_designer/dist/css-rtl/print_designer.bundle.HYD5KP4J.css",
  "rtl_print_format.bundle.css": "/assets/frappe/dist/css-rtl/print_format.bundle.IYN5VNXE.css",
  "rtl_report.bundle.css": "/assets/frappe/dist/css-rtl/report.bundle.GTETNPK7.css",
  "rtl_web_form.bundle.css": "/assets/frappe/dist/css-rtl/web_form.bundle.MRVGC3BZ.css",
  "rtl_website.bundle.css": "/assets/frappe/dist/css-rtl/website.bundle.IV3DTM2T.css",
  "sentry.bundle.js": "/assets/frappe/dist/js/sentry.bundle.SI3DB3BY.js",
  "telemetry.bundle.js": "/assets/frappe/dist/js/telemetry.bundle.ZJBT5ETW.js",
  "user_profile_controller.bundle.js": "/assets/frappe/dist/js/user_profile_controller.bundle.TAMQL3L3.js",
  "video_player.bundle.js": "/assets/frappe/dist/js/video_player.bundle.IOEIXC2G.js",
  "web_form.bundle.css": "/assets/frappe/dist/css/web_form.bundle.G247U4LD.css",
  "web_form.bundle.js": "/assets/frappe/dist/js/web_form.bundle.LUJVTFJD.js",
  "website.bundle.css": "/assets/frappe/dist/css/website.bundle.MKXVRUAB.css",
  "workflow_builder.bundle.js": "/assets/frappe/dist/js/workflow_builder.bundle.PUPGOUPE.js"
 },
 "is_fc_site": 0,
 "lang": "shhhh.... it's my secret",
 "sitename": "shhhh.... it's my secret",
 "sysdefaults": {
  "currency": "shhhh.... it's my secret",
  "date_format": "shhhh.... it's my secret",
  "first_day_of_the_week": "shhhh.... it's my secret",
  "float_precision": shhhh.... it's my secret,
  "number_format": "shhhh.... it's my secret",
  "time_format": "shhhh.... it's my secret"
 },
 "time_zone": {
  "system": "shhhh.... it's my secret",
  "user": "shhhh.... it's my secret"
 }
}
                // for backward compatibility of some libs
                frappe.sys_defaults = frappe.boot.sysdefaults;
            </script>
            <script type="text/javascript" src="/assets/frappe/dist/js/frappe-web.bundle.X77XLJGO.js"></script>
            <script type="text/javascript" src="/assets/frappe/dist/js/dialog.bundle.IGI4JRN4.js"></script>
            <script type="text/javascript" src="/assets/frappe/dist/js/controls.bundle.2XKRTN7I.js"></script>
            <script type="text/javascript" src="/assets/frappe/dist/js/bootstrap-4-web.bundle.AZ67VXZX.js"></script>
        
            <script type="text/javascript" src="/website_script.js"></script>
          

It you are not using Jinja2, you can check your /assets/frappe/dist/js/* sources at the DevTools → Sources, but I am not sure if their files’ names persists over multiple sites.