How to Embed XForm into a separate OpenMRS module UI
Make these changes for the JSP
<%@ include file="/WEB-INF/template/include.jsp"%> <%@ include file="/WEB-INF/template/header.jsp"%> <%@ include file="template/localHeader.jsp"%> <openmrs:htmlInclude file="/moduleResources/xforms/formrunner/FormRunner.nocache.js"/> <div id="main-wrap"> <div id="sidebar"> <div> <div id="purcformrunner"></div> <div id="formId" style="visibility:hidden;">${formId}</div> <div id="patientId" style="visibility:hidden;">${patientId}</div> <div id="dateTimeSubmitFormat" style="visibility:hidden;">${dateTimeSubmitFormat}</div> <div id="dateTimeDisplayFormat" style="visibility:hidden;">${dateTimeDisplayFormat}</div> <div id="dateSubmitFormat" style="visibility:hidden;">${dateSubmitFormat}</div> <div id="dateDisplayFormat" style="visibility:hidden;">${dateDisplayFormat}</div> <div id="entityIdName" style="visibility:hidden;">patientId</div> <div id="formIdName" style="visibility:hidden;">formId</div> <div id="entityFormDefDownloadUrlSuffix" style="visibility:hidden;">${entityFormDefDownloadUrlSuffix}</div> <div id="formDataUploadUrlSuffix" style="visibility:hidden;">${formDataUploadUrlSuffix}</div> <div id="afterSubmitUrlSuffix" style="visibility:hidden;">${afterSubmitUrlSuffix}</div> <div id="afterCancelUrlSuffix" style="visibility:hidden;">${afterCancelUrlSuffix}</div> <div id="externalSourceUrlSuffix" style="visibility:hidden;">moduleServlet/xforms/widgetValueDownload?</div> <div id="multimediaUrlSuffix" style="visibility:hidden;">moduleServlet/xforms/multimediaDownload</div> <div id="defaultFontFamily" style="visibility:hidden;">${defaultFontFamily}</div> <div id="defaultFontSize" style="visibility:hidden;">${defaultFontSize}</div> <div id="defaultGroupBoxHeaderBgColor" style="visibility:hidden;">${defaultGroupBoxHeaderBgColor}</div> <div id="appendEntityIdAfterSubmit" style="visibility:hidden;">1</div> <div id="appendEntityIdAfterCancel" style="visibility:hidden;">1</div> <div id="timeSubmitFormat" style="visibility:hidden;">${timeSubmitFormat}</div> <div id="timeDisplayFormat" style="visibility:hidden;">${timeDisplayFormat}</div> <div id="showSubmitSuccessMsg" style="visibility:hidden;">${showSubmitSuccessMsg}</div> <div id="localeKey" style="visibility:hidden;">${localeKey}</div> <div id="decimalSeparators" style="visibility:hidden;">${decimalSeparators}</div> <div id="formatXml" style="visibility:hidden;">${formatXml}</div> </div> </div> </div> <script language="javascript"> var searchElement; var conceptSearchElement; var providerSearchElement; var locationSearchElement; var personSearchElement; var options; var PurcformsText = { file: "<spring:message code="xforms.file" />", view: "<spring:message code="xforms.view" />", item: "<spring:message code="xforms.item" />", tools: "<spring:message code="xforms.tools" />", help: "<spring:message code="xforms.help" />", newItem: "<spring:message code="xforms.newItem" />", open: "<spring:message code="xforms.open" />", save: "<spring:message code="xforms.save" />", saveAs: "<spring:message code="xforms.saveAs" />", openLayout: "<spring:message code="xforms.foropenLayoutms" />", saveLayout: "<spring:message code="xforms.saveLayout" />", openLanguageText: "<spring:message code="xforms.openLanguageText" />", saveLanguageText: "<spring:message code="xforms.saveLanguageText" />", close: "<spring:message code="xforms.close" />", refresh: "<spring:message code="xforms.refresh" />", addNew: "<spring:message code="xforms.addNew" />", addNewChild: "<spring:message code="xforms.addNewChild" />", deleteSelected: "<spring:message code="xforms.deleteSelected" />", moveUp: "<spring:message code="xforms.moveUp" />", moveDown: "<spring:message code="xforms.moveDown" />", cut: "<spring:message code="xforms.cut" />", copy: "<spring:message code="xforms.copy" />", paste: "<spring:message code="xforms.paste" />", format: "<spring:message code="xforms.format" />", languages: "<spring:message code="xforms.languages" />", options: "<spring:message code="xforms.options" />", helpContents: "<spring:message code="xforms.helpContents" />", about: "<spring:message code="xforms.about" />", forms: "<spring:message code="xforms.forms" />", widgetProperties: "<spring:message code="xforms.widgetProperties" />", properties: "<spring:message code="xforms.properties" />", xformsSource: "<spring:message code="xforms.xformsSource" />", designSurface: "<spring:message code="xforms.designSurface" />", layoutXml: "<spring:message code="xforms.layoutXml" />", languageXml: "<spring:message code="xforms.languageXml" />", preview: "<spring:message code="xforms.preview" />", modelXml: "<spring:message code="xforms.modelXml" />", text: "<spring:message code="xforms.text" />", helpText: "<spring:message code="xforms.helpText" />", type: "<spring:message code="xforms.type" />", binding: "<spring:message code="xforms.binding" />", visible: "<spring:message code="xforms.visible" />", enabled: "<spring:message code="xforms.enabled" />", locked: "<spring:message code="xforms.locked" />", required: "<spring:message code="xforms.required" />", defaultValue: "<spring:message code="xforms.defaultValue" />", descriptionTemplate: "<spring:message code="xforms.descriptionTemplate" />", language: "<spring:message code="xforms.language" />", skipLogic: "<spring:message code="xforms.skipLogic" />", validationLogic: "<spring:message code="xforms.validationLogic" />", dynamicLists: "<spring:message code="xforms.dynamicLists" />", valuesFor: "<spring:message code="xforms.valuesFor" />", whenAnswerFor: "<spring:message code="xforms.whenAnswerFor" />", isEqualTo: "<spring:message code="xforms.isEqualTo" />", forQuestion: "<spring:message code="xforms.forQuestion" />", enable: "<spring:message code="xforms.enable" />", disable: "<spring:message code="xforms.disable" />", show: "<spring:message code="xforms.show" />", hide: "<spring:message code="xforms.hide" />", makeRequired: "<spring:message code="xforms.makeRequired" />", when: "<spring:message code="xforms.when" />", ofTheFollowingApply: "<spring:message code="xforms.ofTheFollowingApply" />", all: "<spring:message code="xforms.all" />", any: "<spring:message code="xforms.any" />", none: "<spring:message code="xforms.none" />", notAll: "<spring:message code="xforms.notAll" />", addNewCondition: "<spring:message code="xforms.addNewCondition" />", isEqualTo: "<spring:message code="xforms.isEqualTo" />", isNotEqual: "<spring:message code="xforms.isNotEqual" />", isLessThan: "<spring:message code="xforms.isLessThan" />", isLessThanOrEqual: "<spring:message code="xforms.isLessThanOrEqual" />", isGreaterThan: "<spring:message code="xforms.isGreaterThan" />", isGreaterThanOrEqual: "<spring:message code="xforms.isGreaterThanOrEqual" />", isNull: "<spring:message code="xforms.isNull" />", isNotNull: "<spring:message code="xforms.isNotNull" />", isInList: "<spring:message code="xforms.isInList" />", isNotInList: "<spring:message code="xforms.isNotInList" />", startsWith: "<spring:message code="xforms.startsWith" />", doesNotStartWith: "<spring:message code="xforms.doesNotStartWith" />", endsWith: "<spring:message code="xforms.endsWith" />", doesNotEndWith: "<spring:message code="xforms.doesNotEndWith" />", contains: "<spring:message code="xforms.contains" />", doesNotContain: "<spring:message code="xforms.doesNotContain" />", isBetween: "<spring:message code="xforms.isBetween" />", isNotBetween: "<spring:message code="xforms.isNotBetween" />", isValidWhen: "<spring:message code="xforms.isValidWhen" />", errorMessage: "<spring:message code="xforms.errorMessage" />", question: "<spring:message code="xforms.question" />", addField: "<spring:message code="xforms.addField" />", submit: "<spring:message code="xforms.submit" />", addWidget: "<spring:message code="xforms.addWidget" />", newTab: "<spring:message code="xforms.newTab" />", deleteTab: "<spring:message code="xforms.deleteTab" />", selectAll: "<spring:message code="xforms.selectAll" />", load: "<spring:message code="xforms.load" />", label: "<spring:message code="xforms.label" />", textBox: "<spring:message code="xforms.textBox" />", checkBox: "<spring:message code="xforms.checkBox" />", radioButton: "<spring:message code="xforms.radioButton" />", dropdownList: "<spring:message code="xforms.dropdownList" />", textArea: "<spring:message code="xforms.textArea" />", button: "<spring:message code="xforms.button" />", datePicker: "<spring:message code="xforms.datePicker" />", groupBox: "<spring:message code="xforms.groupBox" />", repeatSection: "<spring:message code="xforms.repeatSection" />", picture: "<spring:message code="xforms.picture" />", videoAudio: "<spring:message code="xforms.videoAudio" />", listBox: "<spring:message code="xforms.listBox" />", deleteWidgetPrompt: "<spring:message code="xforms.deleteWidgetPrompt" />", deleteTreeItemPrompt: "<spring:message code="xforms.deleteTreeItemPrompt" />", selectDeleteItem: "<spring:message code="xforms.selectDeleteItem" />", selectedPage: "<spring:message code="xforms.selectedPage" />", shouldNotSharePageBinding: "<spring:message code="xforms.shouldNotSharePageBinding" />", selectedQuestion: "<spring:message code="xforms.selectedQuestion" />", shouldNotShareQuestionBinding: "<spring:message code="xforms.shouldNotShareQuestionBinding" />", selectedOption: "<spring:message code="xforms.selectedOption" />", shouldNotShareOptionBinding: "<spring:message code="xforms.shouldNotShareOptionBinding" />", newForm: "<spring:message code="xforms.newForm" />", page: "<spring:message code="xforms.page" />", option: "<spring:message code="xforms.option" />", noDataFound: "<spring:message code="xforms.noDataFound" />", formSaveSuccess: "<spring:message code="xforms.formSaveSuccess" />", selectSaveItem: "<spring:message code="xforms.selectSaveItem" />", deleteAllWidgetsFirst: "<spring:message code="xforms.deleteAllWidgetsFirst" />", deleteAllTabWidgetsFirst: "<spring:message code="xforms.deleteAllTabWidgetsFirst" />", cantDeleteAllTabs: "<spring:message code="xforms.cantDeleteAllTabs" />", noFormId: "<spring:message code="xforms.noFormId" />", divFound: "<spring:message code="xforms.noFormId" />", noFormLayout: "<spring:message code="xforms.noFormLayout" />", formSubmitSuccess: "<spring:message code="xforms.formSubmitSuccess" />", missingDataNode: "<spring:message code="xforms.missingDataNode" />", openingForm: "<spring:message code="xforms.openingForm" />", openingFormLayout: "<spring:message code="xforms.openingFormLayout" />", savingForm: "<spring:message code="xforms.savingForm" />", savingFormLayout: "<spring:message code="xforms.savingFormLayout" />", refreshingForm: "<spring:message code="xforms.refreshingForm" />", translatingFormLanguage: "<spring:message code="xforms.translatingFormLanguage" />", savingLanguageText: "<spring:message code="xforms.savingLanguageText" />", refreshingDesignSurface: "<spring:message code="xforms.refreshingDesignSurface" />", loadingDesignSurface: "<spring:message code="xforms.loadingDesignSurface" />", refreshingPreview: "<spring:message code="xforms.refreshingPreview" />", count: "<spring:message code="xforms.count" />", clickToPlay: "<spring:message code="xforms.clickToPlay" />", loadingPreview: "<spring:message code="xforms.loadingPreview" />", unexpectedFailure: "<spring:message code="xforms.unexpectedFailure" />", uncaughtException: "<spring:message code="xforms.uncaughtException" />", causedBy: "<spring:message code="xforms.causedBy" />", openFile: "<spring:message code="xforms.openFile" />", saveFileAs: "<spring:message code="xforms.saveFileAs" />", alignLeft: "<spring:message code="xforms.alignLeft" />", alignRight: "<spring:message code="xforms.alignRight" />", alignTop: "<spring:message code="xforms.alignTop" />", alignBottom: "<spring:message code="xforms.alignBottom" />", makeSameWidth: "<spring:message code="xforms.makeSameWidth" />", makeSameHeight: "<spring:message code="xforms.makeSameHeight" />", makeSameSize: "<spring:message code="xforms.makeSameSize" />", layout: "<spring:message code="xforms.layout" />", deleteTabPrompt: "<spring:message code="xforms.deleteTabPrompt" />", text: "<spring:message code="xforms.text" />", toolTip: "<spring:message code="xforms.toolTip" />", childBinding: "<spring:message code="xforms.childBinding" />", width: "<spring:message code="xforms.width" />", height: "<spring:message code="xforms.height" />", left: "<spring:message code="xforms.left" />", top: "<spring:message code="xforms.top" />", tabIndex: "<spring:message code="xforms.tabIndex" />", repeat: "<spring:message code="xforms.repeat" />", externalSource: "<spring:message code="xforms.externalSource" />", displayField: "<spring:message code="xforms.displayField" />", valueField: "<spring:message code="xforms.valueField" />", fontFamily: "<spring:message code="xforms.fontFamily" />", foreColor: "<spring:message code="xforms.foreColor" />", fontWeight: "<spring:message code="xforms.fontWeight" />", fontStyle: "<spring:message code="xforms.fontStyle" />", fontSize: "<spring:message code="xforms.fontSize" />", textDecoration: "<spring:message code="xforms.textDecoration" />", textAlign: "<spring:message code="xforms.textAlign" />", backgroundColor: "<spring:message code="xforms.backgroundColor" />", borderStyle: "<spring:message code="xforms.borderStyle" />", borderWidth: "<spring:message code="xforms.borderWidth" />", borderColor: "<spring:message code="xforms.borderColor" />", aboutMessage: "<spring:message code="xforms.aboutMessage" />", more: "<spring:message code="xforms.more" />", requiredErrorMsg: "<spring:message code="xforms.requiredErrorMsg" />", questionTextDesc: "<spring:message code="xforms.questionTextDesc" />", questionDescDesc: "<spring:message code="xforms.questionDescDesc" />", questionIdDesc: "<spring:message code="xforms.questionIdDesc" />", defaultValDesc: "<spring:message code="xforms.defaultValDesc" />", questionTypeDesc: "<spring:message code="xforms.questionTypeDesc" />", qtnTypeText: "<spring:message code="xforms.qtnTypeText" />", qtnTypeNumber: "<spring:message code="xforms.qtnTypeNumber" />", qtnTypeDecimal: "<spring:message code="xforms.qtnTypeDecimal" />", qtnTypeDate: "<spring:message code="xforms.qtnTypeDate" />", qtnTypeTime: "<spring:message code="xforms.qtnTypeTime" />", qtnTypeDateTime: "<spring:message code="xforms.qtnTypeDateTime" />", qtnTypeBoolean: "<spring:message code="xforms.qtnTypeBoolean" />", qtnTypeSingleSelect: "<spring:message code="xforms.qtnTypeSingleSelect" />", qtnTypeMultSelect: "<spring:message code="xforms.qtnTypeMultSelect" />", qtnTypeRepeat: "<spring:message code="xforms.qtnTypeRepeat" />", qtnTypePicture: "<spring:message code="xforms.qtnTypePicture" />", qtnTypeVideo: "<spring:message code="xforms.qtnTypeVideo" />", qtnTypeAudio: "<spring:message code="xforms.qtnTypeAudio" />", qtnTypeSingleSelectDynamic: "<spring:message code="xforms.qtnTypeSingleSelectDynamic" />", deleteCondition: "<spring:message code="xforms.deleteCondition" />", addCondition: "<spring:message code="xforms.addCondition" />", value: "<spring:message code="xforms.value" />", questionValue: "<spring:message code="xforms.questionValue" />", and: "<spring:message code="xforms.and" />", deleteItemPrompt: "<spring:message code="xforms.deleteItemPrompt" />", changeWidgetTypePrompt: "<spring:message code="xforms.changeWidgetTypePrompt" />", removeRowPrompt: "<spring:message code="xforms.removeRowPrompt" />", remove: "<spring:message code="xforms.remove" />", browse: "<spring:message code="xforms.browse" />", clear: "<spring:message code="xforms.clear" />", deleteItem: "<spring:message code="xforms.deleteItem" />", cancel: "<spring:message code="xforms.cancel" />", clickToAddNewCondition: "<spring:message code="xforms.clickToAddNewCondition" />", qtnTypeGPS: "<spring:message code="xforms.qtnTypeGPS" />", qtnTypeBarcode: "<spring:message code="xforms.qtnTypeBarcode" />", qtnTypeGroup: "<spring:message code="xforms.qtnTypeGroup" />", palette: "<spring:message code="xforms.palette" />", saveAsXhtml: "<spring:message code="xforms.saveAsXhtml" />", groupWidgets: "<spring:message code="xforms.groupWidgets" />", action: "<spring:message code="xforms.action" />", submitting: "<spring:message code="xforms.submitting" />", authenticationPrompt: "<spring:message code="xforms.authenticationPrompt" />", invalidUser: "<spring:message code="xforms.invalidUser" />", login: "<spring:message code="xforms.login" />", userName: "<spring:message code="xforms.userName" />", password: "<spring:message code="xforms.password" />", noSelection: "<spring:message code="xforms.noSelection" />", cancelFormPrompt: "<spring:message code="xforms.cancelFormPrompt" />", print: "<spring:message code="xforms.print" />", yes: "<spring:message code="xforms.yes" />", no: "<spring:message code="xforms.no" />", searchServer: "<spring:message code="xforms.searchServer" />", recording: "<spring:message code="xforms.recording" />", search: "<spring:message code="xforms.search" />", processingMsg: "<spring:message code="xforms.processingMsg" />", length: "<spring:message code="xforms.length" />", clickForOtherQuestions: "<spring:message code="xforms.clickForOtherQuestions" />", ok: "<spring:message code="xforms.ok" />", undo: "<spring:message code="xforms.undo" />", redo: "<spring:message code="xforms.redo" />", loading: "<spring:message code="xforms.loading" />", allQuestions: "<spring:message code="xforms.allQuestions" />", selectedQuestions: "<spring:message code="xforms.selectedQuestions" />", otherQuestions: "<spring:message code="xforms.otherQuestions" />", wrongFormat: "<spring:message code="xforms.wrongFormat" />", timeWidget: "<spring:message code="xforms.timeWidget" />", dateTimeWidget: "<spring:message code="xforms.dateTimeWidget" />", lockWidgets: "<spring:message code="xforms.lockWidgets" />", unLockWidgets: "<spring:message code="xforms.unLockWidgets" />", changeWidgetH: "<spring:message code="xforms.changeWidgetH" />", changeWidgetV: "<spring:message code="xforms.changeWidgetV" />", changeToTextBoxWidget: "<spring:message code="xforms.changeToTextBoxWidget" />", saveAsPurcForm: "<spring:message code="xforms.saveAsPurcForm" />", localeChangePrompt: "<spring:message code="xforms.localeChangePrompt" />", javaScriptSource: "<spring:message code="xforms.javaScriptSource" />", calculation: "<spring:message code="xforms.calculation" />", id: "<spring:message code="xforms.id" />", formKey: "<spring:message code="xforms.formKey" />", logo: "<spring:message code="xforms.logo" />", filterField: "<spring:message code="xforms.filterField" />", table: "<spring:message code="xforms.table" />", horizontalLine: "<spring:message code="xforms.horizontalLine" />", verticalLine: "<spring:message code="xforms.verticalLine" />", addRowsBelow: "<spring:message code="xforms.addRowsBelow" />", addRowsAbove: "<spring:message code="xforms.addRowsAbove" />", addColumnsRight: "<spring:message code="xforms.addColumnsRight" />", addColumnsLeft: "<spring:message code="xforms.addColumnsLeft" />", numberOfRowsPrompt: "<spring:message code="xforms.numberOfRowsPrompt" />", numberOfColumnsPrompt: "<spring:message code="xforms.numberOfColumnsPrompt" />", deleteColumn: "<spring:message code="xforms.deleteColumn" />", deleteRow: "<spring:message code="xforms.deleteRow" />", repeatChildDataNodeNotFound: "<spring:message code="xforms.repeatChildDataNodeNotFound" />", selectedFormField: "<spring:message code="xforms.selectedFormField" />", edit: "<spring:message code="xforms.edit" />", find: "<spring:message code="xforms.find" />", css: "<spring:message code="xforms.css" />", bold: "<spring:message code="xforms.bold" />", italic: "<spring:message code="xforms.italic" />", underline: "<spring:message code="xforms.underline" />", mergeCells: "<spring:message code="xforms.mergeCells" />" }; function initialize(){ } function isUserAuthenticated(){ DWRXformsService.isAuthenticated(checkIfLoggedInCallback); } function authenticateUser(username, password){ DWRXformsService.authenticate(username,password,checkIfLoggedInCallback); } function checkIfLoggedInCallback(isLoggedIn) { authenticationCallback(isLoggedIn); } </script> <%@ include file="/WEB-INF/template/footer.jsp"%>
Make these changes for the Controller class of that respective JSP
/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.patientnarratives.web.controller; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Encounter; import org.openmrs.Form; import org.openmrs.api.FormService; import org.openmrs.api.context.Context; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; import org.springframework.web.servlet.view.RedirectView; /** * Provides browser based XForm data entry services. * * @author Daniel * */ public class PatientNarrativesSubmitController extends SimpleFormController{ /** Logger for this class and subclasses */ protected final Log log = LogFactory.getLog(getClass()); @Override protected Map referenceData(HttpServletRequest request, Object obj, Errors err) throws Exception { HashMap<String,Object> map = new HashMap<String,Object>(); Integer formId = 1; //Integer.parseInt(request.getParameter("formId")); map.put("formId", formId); map.put("patientId", 2); // Integer.parseInt(request.getParameter("patientId"))); map.put("formName", ((FormService)Context.getService(FormService.class)).getForm(formId).getName()); map.put("entityFormDefDownloadUrlSuffix", "moduleServlet/xforms/xformDownload?target=xformentry&contentType=xml&"); map.put("formDataUploadUrlSuffix", "module/xforms/xformDataUpload.form"); map.put("afterSubmitUrlSuffix", "patientDashboard.form?"); return map; } @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { return "Not Yet"; } }