{"record":{"id":"ec394e7c3c4316a6","repo":"aspnetboilerplate/aspnetboilerplate","slug":"abp-message-info-is-not-implemented","errorCode":null,"errorMessage":"abp.message.info is not implemented!","messagePattern":"abp\\.message\\.info is not implemented!","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/Abp.Web.Resources/Abp/Framework/scripts/abp.js","lineNumber":443,"sourceCode":"      //Defines Message API, not implements it\n\n      abp.message = abp.message || {};\n\n    var showMessage = function (message, title, options) {\n        alert((title || '') + ' ' + message);\n\n        if (!$) {\n          abp.log.warn('abp.message can not return promise since jQuery is not defined!');\n          return null;\n        }\n\n        return $.Deferred(function ($dfd) {\n          $dfd.resolve();\n        });\n      };\n\n    abp.message.info = function (message, title, options) {\n        abp.log.warn('abp.message.info is not implemented!');\n        return showMessage(message, title, options);\n    };\n\n    abp.message.success = function (message, title, options) {\n        abp.log.warn('abp.message.success is not implemented!');\n        return showMessage(message, title, options);\n    };\n\n    abp.message.warn = function (message, title, options) {\n        abp.log.warn('abp.message.warn is not implemented!');\n        return showMessage(message, title, options);\n    };\n\n    abp.message.error = function (message, title, options) {\n        abp.log.warn('abp.message.error is not implemented!');\n        return showMessage(message, title, options);\n    };\n","sourceCodeStart":425,"sourceCodeEnd":461,"githubUrl":"https://github.com/aspnetboilerplate/aspnetboilerplate/blob/2323c13a152aa0ebfb37af3830f687d7f5b53795/src/Abp.Web.Resources/Abp/Framework/scripts/abp.js#L425-L461","documentation":"abp.message.info is a stub in base abp.js. The framework defines the message API but leaves the actual UI to an adapter (e.g. abp.sweet-alert.js). Calling it logs this warning, shows a native alert() via showMessage, and returns a resolved jQuery Deferred (or null without jQuery).","triggerScenarios":"Calling abp.message.info(message, title, options) without a message adapter overriding the stub.","commonSituations":"Missing abp.sweet-alert.min.js include; adapter loaded before abp.js so abp.js's stub overwrites it; AJAX-layer abp.message.info fallbacks firing in apps that never included the adapter.","solutions":["Include abp.sweet-alert.min.js (or abp.toastr variant) after abp.js.","Verify script order so the adapter overrides the stub.","Or override manually: abp.message.info = function (m, t, o) { return abp.libs.toastr.info(m, t, o); };"],"exampleFix":"// before\nabp.message.info('Saved!'); // alert + warning logged\n// after\n<script src=\"abp.js\"></script>\n<script src=\"abp.sweet-alert.min.js\"></script>\nabp.message.info('Saved!'); // sweet-alert dialog","handlingStrategy":"fallback","validationCode":"if (/not implemented/.test(String(abp.message.info))) { console.warn('abp.message adapter missing — falling back to alert'); }","typeGuard":"function hasMessageAdapter() { return typeof abp.message.info === 'function' && !/not implemented/.test(String(abp.message.info)); }","tryCatchPattern":"try { abp.message.info(msg).done(cb); } catch (e) { alert(msg); cb && cb(); }","preventionTips":["Include abp.sweet-alert.min.js after abp.js in the base layout.","Assert adapter installation in a smoke test.","Keep adapter scripts adjacent to abp.js in bundle definitions to preserve order."],"tags":["javascript","aspnetboilerplate","dialogs","stub-implementation"],"backgroundTag":"method-not-implemented","analyzedSha":"2323c13a152aa0ebfb37af3830f687d7f5b53795","analyzedAt":"2026-09-08T08:00:50.638Z","contentChangedAt":"2026-09-08T08:00:50.638Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}