Word Document

VistAWeb Technical Guide

You must be logged in to download this document
Reviews
Shared by: techmaster
Stats
views:
1
downloads:
0
rating:
not rated
reviews:
0
posted:
10/29/2008
language:
English
pages:
0
VistAWeb ___________________________ Technical Guide February 2005 Department of Veterans Affairs Revision History Date 1/31/05 Patch Informational Patch Number OR*3*230 Minor textual changes Informational Patch Number OR*3*230 Page(s) All Change(s) Initial Technical Guide for use with beta test version Removed reference to Special User Script Removed URL references (VISN CIO will provide) Reviewed for release 2/10/05 2/18/05 Pages 14, 16, 21 & 26 Pages 2, 6, & 28 2/25/05 VistAWeb Technical Guide February 2005 2 Table of Contents REVISION HISTORY .......................................................................................................................................... 2 TABLE OF CONTENTS ...................................................................................................................................... 3 INTRODUCTION ................................................................................................................................................ 5 Figure 1: VistAWeb Application Tier Interaction ................................................................................... 6 ASSUMPTIONS ............................................................................................................................................. 6 SYSTEM REQUIREMENTS ................................................................................................................................. 8 HARDWARE ................................................................................................................................................. 8 Components that Apply to Both Web and Database Servers ............................................................... 8 Web Server Components ...................................................................................................................... 8 Database Server Components .............................................................................................................. 8 SOFTWARE.................................................................................................................................................. 8 Figure 2: Web Service Extension Settings ............................................................................................ 9 Figure 3: VistAWeb Website and Accompanying Web Applications .................................................. 10 VISTAWEB OVERVIEW .................................................................................................................................. 10 LANGUAGE SPECIFICATIONS ...................................................................................................................... 10 USING VISTAW EB ..................................................................................................................................... 11 Stand-Alone Application Process ........................................................................................................ 11 CPRS-Spawned VistAWeb Process ................................................................................................... 12 VISTAW EB UNDER THE HOOD.................................................................................................................... 12 ASP.NET / Code-Behind Example: Insurance.aspx .......................................................................... 13 Figure 4: VistAWeb Project References ............................................................................................. 15 RELEASING PROJECT UPDATES TO PRODUCTION ........................................................................................ 19 OTHER VISTAW EB MANNERISMS ............................................................................................................... 19 USING VISTAW EB DOCUMENTATION W EB APPLICATION .............................................................................. 19 USING VISTAW EB USER MANAGEMENT W EB APPLICATION ......................................................................... 20 Process ............................................................................................................................................... 20 SQL SERVER DATABASE OVERVIEW ............................................................................................................. 21 APPENDIX A: DATABASE SCHEMA ................................................................................................................. 22 LOG CREATION SCRIPT ............................................................................................................................... 22 CPRSUSERS CREATION SCRIPT .................................................................................................................. 23 LOGDESC VIEW CREATION SCRIPT .............................................................................................................. 23 APPENDIX B: VISTAWEB, VISTAWEBDOCS, VISTAWEBUSERMGT FILES ....................................................... 24 VISTAW EB ................................................................................................................................................ 24 VISTAW EBDOCS ....................................................................................................................................... 31 VISTAW EBUSERMGT ................................................................................................................................ 32 APPENDIX C: VISTAWEB CODE SAMPLES...................................................................................................... 34 HTM SAMPLE (W ISHLIST.HTM): ................................................................................................................. 34 ASPX SAMPLE (INSURANCE.ASPX): ........................................................................................................... 35 ASPX.CS SAMPLE (INSURANCE.ASPX.CS) (CODE-BEHIND): ......................................................................... 36 ASPX.RESX SAMPLE (INSURANCE.ASPX.RESX) (TEMPLATE): ..................................................................... 39 VistAWeb Technical Guide February 2005 3 VistAWeb Technical Guide February 2005 4 Introduction Veterans Health Information Systems and Technology Architecture (VistA) VistAWeb is an intranet web application used to review remote patient information found in VistA. There are two ways to use VistAWeb. VistAWeb may be made available from the Tools Menu within the Computerized Patient Record System (CPRS); or from a command line (URL) established by the VISN CIO as a secondary option. VistAWeb mirrors the behavior of CPRS and Remote Data View+ (RDV+). VistAWeb is an enhancement to CPRS/RDV+ by permitting a more robust and timely retrieval of remote site patient data. The design of VistAWeb utilizes n-tier architectural principles, where VistAWeb represents the presentation tier (ASP.Net Web Page). The business process tier is represented by multiple components that VistAWeb uses to access the data tier. Business process components include such elements as code-behind pages (a programming feature of Microsoft.NET programming), Medical Domain Objects (MDO), and a collection of other reusable components. The code-behind pages (.cs files), which are directly interwoven within the VistAWeb application, will be covered in this document, while other reusable components (.dll files) such as MDO will be discussed in other technical documents. The data tier is comprised of multiple data sources, such as VistA, XML, and numerous SQL-compliant relational databases (e.g., Oracle, Microsoft SQL Server, and Microsoft Access). Although some code-behind pages do interact with a SQL-compliant database and some XML, the rest of the data tier interactions take place in reusable components such as MDO. Figure 1 demonstrates how the different tiers interact. VistAWeb Technical Guide February 2005 5 Figure 1: VistAWeb Application Tier Interaction Presentation Tier ASP.NET Web Page C# CodeBehind Business Process Tier MDO & Other Reusable Components Data Tier VistA XML HL7 SQL DICOM Assumptions The intended audience of this Technical Guide is system administrator(s) (specifically, web administrator(s)) and assumes the reader(s) possess the technical knowledge of programming principles using languages such as Java, XML, C#, HTML and SQL. Additionally, the user of this manual should also possess the technical knowledge of how to configure and interact with application servers. This document also assumes the necessary security hardening guidelines have already been implemented (see the Office of Cyber and Information Security link below for information pertaining to security requirements: https://vaww.ocis.va.gov/portal/server.pt?in_hi_opt_comm_community=257&in_hi_space= SearchResult&in_hi_control=bannerstart&in_hi_userid=2&in_se_sel_1=everything&in_tx_ query=hardening+guidelines For additional knowledge and information of technologies and principles used in the development and implementation of VistAWeb, the following sources are recommended reading:      Java: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html Java Design Patterns: http://java.sun.com/developer/technicalArticles/J2EE/patterns/ ASP.NET: http://www.asp.net/Default.aspx?tabindex=0&tabid=1 C#: http://msdn.microsoft.com/vcsharp/ World Wide Web Consortium: http://www.w3.org/ 6 VistAWeb Technical Guide February 2005   .NET Application Development / n-tier: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/bdadotnetarch001.asp SQL: http://www.w3schools.com/sql/default.asp This document is divided into the following sections:  System Requirements—Settings that must be made on the server to operate VistAWeb (Hardware: Components that apply to both web and database servers, Web Server Components and Database Server Components. Software: Application configurations and settings) VistAWeb Overview-(Language Specifications, Using VistAWeb (via Stand-alone or from CPRS), VistAWeb Under the Hood (how it works); Sample ASP.NET Code-Behind and other coding examples; Releasing Project Update to Production; Other VistAWeb Mannerisms; Using VistAWeb Documentation Web Application; Using VistAWeb User Management Web Application (process). SQL Server Database Overview – Tables needed to run and interact with VistAWeb. Appendix A, B, C- Appendix A (Database Schema); Appendix B (VistAWeb, VistAWebDocs, VistAWebUserMgt Files); and Appendix C (VistAWeb Code Samples).    VistAWeb Technical Guide February 2005 7 System Requirements Hardware The servers that will run VistAWeb are already purchased and configured in Silver Spring, Maryland. The exact details of all components are unknown, but the basic components for the web servers and the database servers are listed below. Components that Apply to Both Web and Database Servers             Dell PowerEdge 4210 Rack with KVM (16-port switch) Two SAN adapter cards and Emulex FC HBA with Power Path licenses Web Server Components Two Dell PowerEdge 6650s Dual-CPU 2.2 GHz processor 8 GB RAM Five 36-GB SCSI hard drives Dual network interface cards Database Server Components Two Dell PowerEdge 6650s Quad-CPU 2.2 GHz processors 8 GB RAM Five 36-GB SCSI hard drives Dual network interface cards Software          Windows Server 2003 Enterprise configured with the role of Application Server Internet Information Services (IIS) 6.0 (installed by default as part of the Application Server role) Microsoft Visual J#.NET 2003 runtime component .NET Framework 1.1 (part of the Windows Server 2003 operating system default installation) FTP services and an FTP folder (to be used as a staging location for updates to VistAWeb) SMTP Virtual Server .NET Framework 1.1 is installed by default on Windows 2003 systems. Services packs and updates to all three components are available through Microsoft Windows update (http://windowsupdate.microsoft.com). Web Extension Services set to allow ASP.NET extensions (see Figure 2) SQL Server 2000 (The database does not need to run on the same server as the web application.) VistAWeb Technical Guide February 2005 8 Figure 2: Web Service Extension Settings Note that there are two other applications that will run alongside VistAWeb— VistAWebDocs and VistAWebUserMgt, depicted in Figure 3. VistAWebDocs is a web application that houses current and future documentation about the development of VistAWeb and related components. VistAWebUserMgt is a web application that allows select users to control VistAWeb users’ access to VA sites’ patients other than users’ local site. VistAWebDocs is linked to VistAWeb, while VistAWebUserMgt is not. Both VistAWebDocs and VistAWebUserMgt will be mentioned further in the VistAWeb Overview section. VistAWeb Technical Guide February 2005 9 Figure 3: VistAWeb Website and Accompanying Web Applications For instructions on installing and configuring VistAWeb and the related intranet applications, see the VistAWeb Installation Guide. VistAWeb Overview VistAWeb’s web pages are a mix of basic HTML pages and .NET Active Server Pages (ASP.NET), noted by the respective extensions of .htm (or .html) and .aspx. HTM and HTML pages are stand-alone pages. However, for the ASP.NET pages, there are actually three pages to be aware of: 1. aspx pages are written in HTML and ASP.NET tags; 2. aspx.cs pages represent the ―code-behind‖ pages that power the aspx pages; and 3. aspx.resx pages are template files automatically created for each aspx page. Note: The aspx.resx pages are presently not used beyond their default .NET internal settings, and, therefore, will not be documented at this time. A code sample is provided in Appendix B, which contains a sample code from each of the four—htm, aspx, aspx.cs, aspx.resx. Language Specifications The languages used in VistAWeb (and subsequently VistAWebDocs and VistAWebUserMgt) are:  ASP.NET VistAWeb Technical Guide February 2005 10     HTML, including Cascading Style Sheets (CSS) XML C# JavaScript Using VistAWeb VistAWeb is an intranet application that may be accessed as a stand-alone application, or spawned from the CPRS tools menu. VistAWeb’s patient data menu is very similar to the report menu found in the CPRS Reports tab. Users may wish to use either the stand-alone application or the CPRS-spawned version from the CPRS Tools menu. VistAWeb users must have an active existing CPRS account with the necessary CPRS contexts enabled. The two methods for using VistAWeb are documented below. For more comprehensive documentation on the use of VistAWeb, please read the VistAWeb User Manual. Stand-Alone Application Process   User launches their web browser application (e.g., Internet Explorer) User enters the URL of VistAWeb (VISN CIO will be providing the necessary VistAWeb URLs) in the address bar and presses the Enter key on their keyboard or clicks their mouse on the ―Go‖ button adjacent to the address bar. VistAWeb will load into the user’s web browser on their desktop. User must select a login site link on the left of the display screen by clicking their mouse on the desired site where they have access. User is provided with the VistA Login screen. User must enter their CPRS access/verify codes in the spaces provided and hit the Enter key on their keyboard or click their mouse on the Login button. Once the user’s account is authenticated against CPRS, the user’s remote site patient selection permissions are verified from a SQL Server database, which are then displayed for the user to choose from when selecting patients User must select a site from which to select a patient if selecting a site other than their default site. User will have a Patient Selection screen to enter the desired patient name and click their mouse on the ―Find‖ button. Users will be presented with Sites and Notices screen, which will identify the sites where the patient has been seen. User can look at different elements of the patient record by selecting a desired report from the list of available reports on the left side of the displayed screen.          By default, users of VistAWeb are permitted to select patients that are in the local VistA System where the user logs in. VistAWeb will retrieve data for these patients from all sites where the patients have visited. Some users (researchers or referral coordinators, for example) may need to select patients that are not in the local VistA. These users must be granted Special User access. Special User access can be granted for one site in addition to the login site, several sites, an entire VISN, or all sites nationally. The full process for requesting special user permission is fully documented in the VistAWeb User Manual. VistAWeb Technical Guide February 2005 11 Note that regardless of which site a patient is selected (local or remote), once a patient has been selected, VistAWeb uses the Master Patient Index (MPI) at the selected site to determine what other sites the patient has remote data and establishes the connections to each of those sites to retrieve data requested by the user. Also note that when the connections are established, if there are any remote sites that have data, the remote site is checked to see if the VistAWeb user has ever visited the site before. If the user has not, then a visitor account is created for the user at the remote site. The full details of how the visitor account creation occurs will be fully explained in the future documentation of MDO. What this means to VistAWeb users, however, is that initially VistAWeb may appear to run a little slow, but over time it will begin to increase in speed. This is because VistAWeb is creating visitor accounts for the user at the remote site; in future visits by the user to the remote site, such account creations are not necessary. CPRS-Spawned VistAWeb Process       User opens CPRS User enters their CPRS access/verify code User selects a patient User spawns VistAWeb from the Tools menu (if Vergence Locator is installed). VistAWeb opens in a web browser window (e.g., Internet Explorer), with the CPRS patient selected now displayed in VistAWeb User may now look at different elements of the patient record by selecting the desired report form the reports menu on the left side of the users display screen. Note: Unlike the stand-alone version of VistAWeb, the spawned version from the CPRS Tools menu does not permit the user to change patients from within VistAWeb. VistAWeb is Clinical Context Object Workgroup (CCOW) compliant and, therefore, maintains context with the patient who was selected in CPRS. Users must have the Sentillion Vergence Locator application loaded on the desktop to use the CPRSSpawned VistAWeb process. VistAWeb Under the Hood Like all applications developed using Active Server Pages (ASP), all data source communications and most complex tasks are performed on the server side rather than the client side. The client (i.e., the VistAWeb user) only sees the end result of what the server does. What the client sees is standard HTML and client-side scripting generated by the server. So even though a common ASP.NET tag of ―‖ might exist in an aspx page on the server, what is shown in the client’s browser is ―‖. More importantly, the client never sees or knows how the data is collected or from where it is collected. VistAWeb communicates with VistA and other data sources using a collection of methods. All data source communication methods are done through code-behind pages and through reusable components. Both the code-behind pages (.cs files) and the reusable components (.dll files) represent the business process tier. To provide better context and clarity, let’s examine in the following pages of this guide a web page and code-behind page in greater detail: VistAWeb Technical Guide February 2005 12 ASP.NET / Code-Behind Example: Insurance.aspx Insurance.aspx is a basic ASP.NET page, but the coding techniques are the same for the more complex ASP.NET pages in VistAWeb. Full copies of the Insurance code can be found in Appendix C. Note that only the unique elements of ASP.NET will be explained here. <%@ Page language="c#" Codebehind="Insurance.aspx.cs" AutoEventWireup="false" Inherits="EMR.Insurance" %> Every .aspx page must identify which code-behind page it must link to. In this case, it is Insurance.aspx.cs. It is possible to use C# programming in-line the same way that VBScript and JavaScript can be used in regular ASP (i.e., pre-.NET) pages, but VistAWeb only uses C# in code-behind pages. The ASP.NET web controls, when read by the server, are rendered as html tags when transmitted to the client. For example, the tag will be rendered as a
tag. The tag will be rendered as a table. Note that ASP.NET web controls can be read by the C# code-behind pages before the page is rendered, while VistAWeb Technical Guide February 2005 13 the regular HTML tags cannot. This is because all ASP.NET and C# code is interpreted first, and HTML controls are interpreted last. In fact, HTML controls cannot be read by the C# code, because the controls do not exist prior to the page being loaded. The codebehind is executed prior to the .aspx page. To explain more fully, let’s examine the code-behind for Insurance.aspx. using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using gov.va.med.vistaweb.util; At the beginning of every code-behind page there are usually several lines of code which identify what additional class libraries should be included and referenced. Including these libraries permits the programmer to interact with the routines within the libraries. For example, the System.Web.UI.WebControls Library allows the programmer to interact with the methods and properties of the ASP.NET controls. In order to interact with specific ASP.NET web controls, the controls must be identified as shown below: protected System.Web.UI.WebControls.DataGrid DataGrid1; protected System.Web.UI.WebControls.Literal TextArea; protected System.Web.UI.WebControls.Panel plPanel; Identifying the web controls allows the programmer to interact with the properties and methods of the controls and receive programming assistance from the IDE’s syntax checker. Note that MDO is not included in the ―using‖ list above. This is because it is referenced at the project level, as shown in Figure 4. VistAWeb Technical Guide February 2005 14 Figure 4: VistAWeb Project References A major difference between ASP and ASP.NET pages is that ASP.NET pages are selfsubmitting, meaning that they do not submit their data to other ASP.NET pages. In the pre-.NET days, ASP pages usually submitted their data to a different ASP page, with the different page being identified in the HTML tag . In ASP.NET, the onaction event of the form tag is ignored, and clicking a submit button will submit the form’s data to itself. With this paradigm shift, additional programming elements were needed for the code-behinds to prevent certain pitfalls. For example, say the Insurance.aspx page is being visited for the first time by the user. Certain values are queried and displayed on the page. Without a conditional element being included in the Page_Load event, any reload would continually reload the original values, thereby wiping out any alterations to the page made by the user (assuming any were allowed). This conditional element sample is identified below: private String sessionPageName = ""; private String sessionDataTableName = ""; private String sessionDataViewName = ""; private void Page_Load(object sender, System.EventArgs e) { Response.CacheControl = "no-cache"; Response.AddHeader("Pragma", "no-cache"); Response.Expires = -1; sessionPageName = sender.GetType().FullName; sessionDataTableName = sessionPageName + "DataTable"; sessionDataViewName = sessionPageName + "DataView"; if (!Page.IsPostBack) { DataTable dataTable = new DataTable(); Session[sessionDataTableName] = dataTable; defineGrid(); query(); } } VistAWeb Technical Guide February 2005 15 Having the !Page.IsPostBack condition ensures that the query is performed only once rather than each time the page is reposted to itself. Let’s continue examining this code. The first three ―Response‖ lines of the Page_Load event prevent the page from being cached in the client’s Temporary Internet Files folder. During the initial load of the Insurance page, a DataTable object is created. It is assigned to a Session object. Next, the defineGrid() event is executed: private void defineGrid() { DataTable dataTable = (DataTable)Session[sessionDataTableName]; dataTable.Columns.Add(new DataColumn("Company",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("Policy",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("GroupNum",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("Holder",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("EffectiveDate",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("ExpirationDate",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("Facility",Type.GetType("System.String"))); dataTable.Columns.Add(new DataColumn("VistaTS",Type.GetType("System.String"))); } This function builds the data table object’s columns. Note that the columns are identical to the columns documented earlier. Next, the query() event is executed: private void query() { try { MDO.InsuranceRpt[] rex = getRex(); populateGrid(rex); } catch (Exception ex) { Global.showOops((MDO.User)Session["User"],(MDO.Patient)Session["Patient"], this.Context.Request,ex,this.Context.Response); } Log.write(Request,Session,null,"From " + ((MDO.MultiSiteDAO)Session["MultiSiteDAO"]).getSiteList()); } Note here the insurance object being created. The retrieval of the patient’s insurance data is being handled by the one line: MDO.InsuranceRpt[] rex = getRex(); VistAWeb Technical Guide February 2005 16 The MDO object MDO.InsuranceRpt[] rex is populated by another C# function getRex(), shown below: private MDO.InsuranceRpt[] getRex() { MDO.Patient patient = (MDO.Patient)Session["Patient"]; try { MDO.InsuranceRpt[] rex = patient.getInsuranceRpts(); if (rex == null) { ((MDO.MultiSiteDAO)Session["MultiSiteDAO"]).setInsuranceRpts(patient); } } catch (Exception ex) { Global.showOops((MDO.User)Session["User"],(MDO.Patient)Session["Patient"], this.Context.Request,ex,this.Context.Response); } return patient.getInsuranceRpts(); } First, the function retrieves the patient object from the Session object Session[―Patient‖]. The syntax ―(MDO.Patient)‖ ensures that the Session[―Patient‖] object is cast properly. Next, the function checks to see if the insurance data has already been retrieved from the different data sources. If not, the line of syntax containing ―setInsuranceRpts(patient)‖ collects the insurance data from the different data sources. Any errors that occur during the data retrieval will send an error message to the VistAWeb Technical Support Group. Otherwise, the getRex() function returns the patient’s Insurance reports to the calling statement in the query() function. Upon returning to the query() function, populateGrid(rex); } catch (Exception ex) { Global.showOops((MDO.User)Session["User"],(MDO.Patient)Session["Patient"], this.Context.Request,ex,this.Context.Response); } Log.write(Request,Session,null,"From " + ((MDO.MultiSiteDAO)Session["MultiSiteDAO"]).getSiteList()); } The data table is filled and the data grid is populated using the function populateGrid(rex): private void populateGrid(MDO.InsuranceRpt[] rex) { if (rex.Length == 0) { DataGrid1.Visible = false; VistAWeb Technical Guide February 2005 17 plPanel.Visible = false; TextArea.Text = "No insurance reports were found"; return; } else { DataGrid1.Visible = true; plPanel.Visible = true; } MDO.SiteTable siteTable = (MDO.SiteTable)Session["VhaSiteTable"]; DataTable dataTable = (DataTable)Session[sessionDataTableName]; dataTable.Clear(); TextArea.Text = ""; for (int i=0; i objects are set to not be visible. Making this setting to the objects means that the objects will not be rendered as HTML and therefore never be known to exist by the client. It is important to understand the distinction between the visible attribute and the hidden attribute. The hidden attribute of HTML controls means that the control is rendered on the client side, while the visible = false attribute of asp.net controls means that no aspect of the control even shows up on the client side. Most of the VistAWeb data grids support a sorting feature, meaning the user can click on the header of a column and sort the data grid by the selected column. private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e) { TextArea.Text = ""; VistAWeb Technical Guide February 2005 18 DataView dataView = (DataView)Session[sessionDataViewName]; dataView.Sort = e.SortExpression; DataGrid1.DataSource = dataView; DataGrid1.DataBind(); } Releasing Project Updates to Production Whenever there is a change to the VistAWeb EMR project, the project must be recompiled. This project recompilation produces a .dll file. This .dll file, unlike the pre-.NET days of ASP and middle-tier development, does not require a component object model (COM) wrapper, but is instead COM-less. Bottom line— this means faster application development, faster deployment, and less application server downtime. Unlike the pre-.NET days when the IIS services would have to be stopped to release .dll updates, in .NET, the IIS services do not need to be stopped, because the COM-less .dll is not locked and can be easily overwritten. Other VistAWeb Mannerisms  CCOW— VistAWeb is Clinical Context Object Workgroup (CCOW) compliant and therefore maintains context with the patient who was selected in CPRS. VistAWeb retrieves data for that patient from all sites where the patient has visited. You will not be able to select a new patient from within VistAWeb, but you may return to CPRS to select a new patient. This new patient will then be viewable in VistAWeb automatically. Activity Logging—VistAWeb tracks the user’s movements through the application in a SQL Server database table. Error Logging / Email—Whenever an error occurs with the application, an email is automatically sent to the VistAWeb Technical Support Group. Multi-Threaded Site Connections—when a user identifies what patient data he/she wants to see, MDO creates a separate connection thread to each site where the patient has data and retrieves the data asynchronously rather than iteratively. No Caching—pages that present patient data are prevented from being cached in the client-side Temporary Internet Files folder, thereby preventing users from retrieving patient data after the VistAWeb session has terminated. Session Timeout—the VistAWeb browser session times out after 15 minutes of inactivity. A two-minute warning window will pop up, allowing the user the option to terminate the session early or continue working, the latter choice thereby resetting the timeout period.      Using VistAWeb Documentation Web Application VistAWebDocs is an intranet application that is a work-in-progress that documents the development of VistAWeb and VistAWeb-related components, such as MDO. This application does not require an access / verify code to view. This web application continually changes as there are changes made to the programming of VistAWeb and MDO. VistAWeb Technical Guide February 2005 19 Using VistAWeb User Management Web Application The VistAWebUserMgt application is an intranet application that is used by select individuals to grant VistAWeb users the ability to select patients from remote sites. Note that access to this application is restricted to only a handful of individuals who have been identified to have the proper credentials necessary to assign remote site permissions to VistAWeb users. Process  Once a VistAWeb user has submitted a request to be able to select patients from one or more remote sites, the associated authorizer will use the application to grant the approved site permissions. The authorizer must provide a reason for each entry; the reasons are typically provided by the VistAWeb user to the local ISO when he/she makes their initial request. The data is saved to a SQL Server database table. The associated authorizer notifies the user and the local Information Security Officer (ISO) of the authorized permissions.   Like the VistAWeb EMR project, the VistAWeb User Management project is governed by the same development methodology. This application will be fully documented once the process and subsequent project redesign requirements have been finalized. VistAWeb Technical Guide February 2005 20 SQL Server Database Overview VistAWeb needs the following tables in order to run and will interact with these tables constantly. Future tables will be added as the Special User Request process is refined. The EMR database contains the following tables:  CprsUsers—CPRS-spawned VistAWeb checks this table to see if the CPRS user has logged into the spawned version before. If not, then the user is asked to log into VistAWeb. Once this is done one time, the user’s information is added to the CPRSUsers table. Future CPRS-spawned VistAWeb browsers will not ask the user to log in if their information is found in this table. SpecialUsers—retains the remote site permissions assigned to users. Log—tracks the movements of users within the VistAWeb application. Request—a table not presently used, but in the future will be altered and implemented to initially track which remote sites users want special user access to.    VistAWeb Technical Guide February 2005 21 Appendix A: Database Schema Database Name: EMR Database Tables: SpecialUsers Requests Log CprsUsers Views: LogDesc Log creation script CREATE TABLE [Log] ( [id] [numeric](19, 0) IDENTITY (1, 1) NOT NULL , [requestDate] [datetime] NULL , [remoteAddr] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [userId] [numeric](19, 0) NULL , [userName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [userSitecode] [varchar] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [userSitename] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [requestPage] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [requestSitecode] [varchar] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [requestSitename] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [patientID] [numeric](19, 0) NULL , [patientName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [patientSensitivity] [tinyint] NULL , [message] [varchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] ) ON [PRIMARY] GO VistAWeb Technical Guide February 2005 22 CprsUsers creation script CREATE TABLE [CprsUsers] ( [UserID] [numeric](19, 0) NOT NULL , [Sitecode] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [DUZ] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [SSN] [varchar] (9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [Name] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY] GO LogDesc view creation script CREATE VIEW dbo.LogDesc AS SELECT * FROM dbo.Log ORDER BY id DESC VistAWeb Technical Guide February 2005 23 Appendix B: VistAWeb, VistAWebDocs, VistAWebUserMgt Files VistAWeb Path root Filename AllergyRpts.aspx AllergyRpts.aspx.cs AllergyRpts.aspx.resx AllIV.aspx AllIV.aspx.cs AllIV.aspx.resx AppBanner.aspx AppBanner.aspx.cs AppBanner.aspx.resx AppFrameset.htm AppNavigate.aspx AppNavigate.aspx.cs AppNavigate.aspx.resx Appointments.aspx Appointments.aspx.cs Appointments.aspx.resx AssemblyInfo.cs CCR.aspx CCR.aspx.cs CCR.aspx.resx ChangeFrameset.htm ChemHem.aspx ChemHem.aspx.cs ChemHem.aspx.resx CloseApp.htm CompPen.aspx CompPen.aspx.cs CompPen.aspx.resx Countdown.htm CurrentOrders.aspx CurrentOrders.aspx.cs CurrentOrders.aspx.resx Cytology.aspx Cytology.aspx.cs Cytology.aspx.resx DeceasedWarning.aspx Description Displays patient allergies Code-behind for AllergyRpts.aspx Template for AllergyRpts.aspx Displays patient med IVs Code-behind for AllIV.aspx Template for AllIV.aspx Application Banner Code-behind for AppBanner.aspx Template for AppBanner.aspx Application Frameset; defines frame layout Application Navigation Code-behind for AppNavigate.aspx Template for AppNavigate.aspx Displays patient appointments Code-behind for Appointments.aspx Template for Appointments.aspx .NET Assembly code page Continuity of Care record (under construction) Code-behind for CCR.aspx Template for CCR.aspx Determines appropriate user redirection Displays patient chem/hem data Code-behind for ChemHem.aspx Template for ChemHem.aspx Closes the browser window Displays patient comp/pen data Code-behind for CompPen.aspx Template for CompPen.aspx Displays two-minute warning to VistAWeb timeout Displays patient current orders Code-behind for CurrentOrders.aspx Template for CurrentOrders.aspx Displays patient cytology data Code-behind for Cytology.aspx Template for Cytology.aspx Displays only if patient is deceased, displaying warning that the patient is deceased Code-behind for DeceasedWarning.aspx Template for DeceasedWarning.aspx Displays patient demographics Code-behind for Demographics.aspx Template for Demographics.aspx DeceasedWarning.aspx.cs DeceasedWarning.aspx.resx Demographics.aspx Demographics.aspx.cs Demographics.aspx.resx VistAWeb Technical Guide February 2005 24 Path Filename DieteticReport.aspx DieteticReport.aspx.cs DieteticReport.aspx.resx DischSum.aspx DischSum.aspx.cs DischSum.aspx.resx EMR.csproj EMR.csproj.webinfo Global.asax Global.asax.cs Global.asax.resx IcdProx.aspx IcdProx.aspx.cs IcdProx.aspx.resx IcdSurgeries.aspx IcdSurgeries.aspx.cs IcdSurgeries.aspx.resx ImagingReports.aspx ImagingReports.aspx.cs ImagingReports.aspx.resx Insurance.aspx Insurance.aspx.cs Insurance.aspx.resx LabOrders.aspx LabOrders.aspx.cs LabOrders.aspx.resx LabReports.aspx LabReports.aspx.cs LabReports.aspx.resx LabSummaries.aspx LabSummaries.aspx.cs LabSummaries.aspx.resx Login.aspx Login.aspx.cs Login.aspx.resx LoginBanner.aspx LoginBanner.aspx.cs LoginBanner.aspx.resx LoginFrameset.htm LoginSiteSelection.aspx LoginSiteSelection.aspx.cs LoginSiteSelection.aspx.resx LookupFrameset.htm LookupSiteSelection.aspx LookupSiteSelection.aspx.cs LookupSiteSelection.aspx.resx MedProx.aspx MedProx.aspx.cs MedProx.aspx.resx Meds.aspx Meds.aspx.cs Description Displays patient dietetic data Code-behind for DieteticReport.aspx Template for DieteticReport.aspx Displays patient discharge summary Code-behind for DischSum.aspx Template for DischSum.aspx EMR project information file EMR project information file EMR project settings file Code-behind for Global.asax Template for Global.asax Displays patient ICD procedure reports Code-behind for IcdProx.aspx Template for IcdProx.aspx Displays patient ICD surgeries Code-behind for IcdSurgeries.aspx Template for IcdSurgeries.aspx Displays patient radiology image reports Code-behind for ImagingReports.aspx Template for ImagingReports.aspx Displays patient insurance data Code-behind for Insurance.aspx Template for Insurance.aspx Displays patient lab orders Code-behind for LabOrders.aspx Template for LabOrders.aspx Displays patient lab reports Code-behind for LabReports.aspx Template for LabReports.aspx Displays patient lab summaries Code-behind for LabSummaries.aspx Template for LabSummaries.aspx VistAWeb login page Code-behind for Login.aspx Template for Login.aspx Login page frame Code-behind for LoginBanner.aspx Template for LoginBanner.aspx Login frameset controller Login site menu Code-behind for LoginSiteSelection.aspx Template for LoginSiteSelection.aspx Patient Selection frameset controller Patient Selection site menu Code-behind for LookupSiteSelection.aspx Template for LookupSiteSelection.aspx Displays patient medicine procedures Code-behind for MedProx.aspx Template for MedProx.aspx Displays patient medications Code-behind for Meds.aspx VistAWeb Technical Guide February 2005 25 Path Filename Meds.aspx.resx Microbiology.aspx Microbiology.aspx.cs Microbiology.aspx.resx NutritionalAssessment.aspx NutritionalAssessment.aspx.cs NutritionalAssessment.aspx.resx NutritionalStatus.aspx NutritionalStatus.aspx.cs NutritionalStatus.aspx.resx OutpatientEncounter.aspx OutpatientEncounter.aspx.cs OutpatientEncounter.aspx.resx PatientPage.aspx PatientPage.aspx.cs PatientPage.aspx.resx PatientSelection.aspx PatientSelection.aspx.cs PatientSelection.aspx.resx PatientSensitivity.aspx PatientSensitivity.aspx.cs PatientSensitivity.aspx.resx ProblemList.aspx ProblemList.aspx.cs ProblemList.aspx.resx ProcedureReports.aspx ProcedureReports.aspx.cs ProcedureReports.aspx.resx ProgressNotes.aspx ProgressNotes.aspx.cs ProgressNotes.aspx.resx RadiologyReports.aspx RadiologyReports.aspx.cs RadiologyReports.aspx.resx ReflectionTest.aspx ReflectionTest.aspx.cs ReflectionTest.aspx.resx Rxop.aspx Rxop.aspx.cs Rxop.aspx.resx SilentPatientSelect.aspx SilentPatientSelect.aspx.cs Description Template for Meds.aspx Displays patient microbiology results Code-behind for Microbiology.aspx Template for Microbiology.aspx Displays patient nutritional assessment data Code-behind for NutritionalAssessment.aspx Template for NutritionalAssessment.aspx Displays patient nutritional status Code-behind for NutritionalStatus.aspx Template for NutritionalStatus.aspx Displays patient outpatient encounter data Code-behind for OutpatientEncounter.aspx Template for OutpatientEncounter.aspx Displays patient inquiry detailed data Code-behind for PatientPage.aspx Template for PatientPage.aspx Screen where users search for patients Code-behind for PatientSelection.aspx Template for PatientSelection.aspx Displays that the patient is a sensitive patient; only shows up if the patient is sensitive Code-behind for PatientSensitivity.aspx Template for PatientSensitivity.aspx Displays patient problems Code-behind for ProblemList.aspx Template for ProblemList.aspx Displays patient procedure reports Code-behind for ProcedureReports.aspx Template for ProcedureReports.aspx Displays progress notes Code-behind for ProgressNotes.aspx Template for ProgressNotes.aspx Displays radiology reports Code-behind for RadiologyReports.aspx Template for RadiologyReports.aspx Displays reflection tests Code-behind for ReflectionTest.aspx Template for ReflectionTest.aspx Displays patient outpatient medications Code-behind for Rxop.aspx Template for Rxop.aspx Displays CCOW-type splash screen (only shows when browser is CPRSspawned) Code-behind for SilentPatientSelect.aspx VistAWeb Technical Guide February 2005 26 Path Filename SilentPatientSelect.aspx.resx Sites.aspx Sites.aspx.cs Sites.aspx.resx SpecialUserRequest.aspx (code deactivated) SpecialUserRequest.aspx.cs (code deactivated) SpecialUserRequest.aspx.resx (code deactivated) Start.aspx Start.aspx.cs Start.aspx.resx Stentor.aspx Stentor.aspx.cs Stentor.aspx.resx Stentor506.htm Stentor583.htm Stentor646.htm Stentor662.htm SuppFeedings.aspx SuppFeedings.aspx.cs SuppFeedings.aspx.resx SurgeryReports.aspx SurgeryReports.aspx.cs SurgeryReports.aspx.resx SurgicalPathology.aspx SurgicalPathology.aspx.cs SurgicalPathology.aspx.resx TeamRpts.aspx TeamRpts.aspx.cs TeamRpts.aspx.resx TextRecordPage.aspx Description Template for SilentPatientSelect.aspx Displays which site(s) the selected patient has data at Code-behind for Sites.aspx Template for Sites.aspx Form users must fill out to identify which remote site(s) they want to be able to access patients from Code-behind for SpecialUserRequest.aspx Template for SpecialUserRequest.aspx Page that forces reload of the initial login frameset Code-behind for Start.aspx Template for Start.aspx Displays radiology data from Stentor Code-behind for Stentor.aspx Template for Stentor.aspx Stentor viewer page for site code 506 Stentor viewer page for site 583 Stentor viewer page for site 646 Stentor viewer page for site 662 Displays supplemental feedings Code-behind for SuppFeedings.aspx Template for SuppFeedings.aspx Displays surgery reports Code-behind for SurgeryReports.aspx Template for SurgeryReports.aspx Displays surgical pathology data Code-behind for SurgicalPathology.aspx Template for SurgicalPathology.aspx Displays patient team reports Code-behind for TeamRpts.aspx Template for TeamRpts.aspx Multi-purpose display page of patient text reports (e.g., Dietetics Profile, Comp & Pen, Outpatient Encounters, Skin Tests, etc.) Code-behind for TextRecordPage.aspx Template for TextRecordPage.aspx Informs the user that the session has timed out due to lack of activity Code-behind for Timedout.aspx Template for Timedout.aspx One of the table of contents for VistAWeb (left frame) Code-behind for TOC.aspx Template for TOC.aspx Hidden page that is first spawned by CPRS before automatically redirecting to the appropriate page—either to login TextRecordPage.aspx.cs TextRecordPage.aspx.resx Timedout.aspx Timedout.aspx.cs Timedout.aspx.resx TOC.aspx TOC.aspx.cs TOC.aspx.resx ToolsPage.aspx VistAWeb Technical Guide February 2005 27 Path Filename ToolsPage.aspx.cs ToolsPage.aspx.resx ToolsPageTester.aspx ToolsPageTester.aspx.cs TreeTOC.aspx TreeTOC.aspx.cs TreeTOC.aspx.resx TubeFeedings.aspx TubeFeedings.aspx.cs TubeFeedings.aspx.resx UnitDose.aspx UnitDose.aspx.cs UnitDose.aspx.resx ViewLog.aspx ViewLog.aspx.cs ViewLog.aspx.resx Vitals.aspx Vitals.aspx.cs Vitals.aspx.resx Web.config welcome.aspx welcome.aspx.cs welcome.aspx.resx WishList.htm \bin EMR.dll Hds.NET.dll Interop.ISITELib.dll MDO.NET.dll VistaUtils.dll XMLCustomTransform.dll \resources\activex \resources\classes iSite3_2.cab DateRangeState.cs Log.cs Mail.cs \resources\css ControlPanel.css main.css visitLog.txt Description or to SilentPatientSelect.aspx Code-behind for ToolsPage.aspx Template for ToolsPage.aspx Test page used to simulate CPRS spawn Code-behind for ToolsPageTester.aspx Template for ToolsPageTester.aspx Menu for different patient data Code-behind for TreeTOC.aspx Template for TreeTOC.aspx Displays tube feeding data Code-behind for TubeFeedings.aspx Displays unit dose data Code-behind for UnitDose.aspx Template for UnitDose.aspx Displays data captured in the SQL Server log table of user’s movements in VistAWeb Code-behind for ViewLog.aspx Template for ViewLog.aspx Displays vitals Code-behind for Vitals.aspx Template for Vitals.aspx .NET configuration file VistAWeb Welcome page Code-behind for Welcome.aspx Template for Welcome.aspx Displays the user wish list of recommended items to be added to VistAWeb Compiled dll of VistAWeb Reusable component used by VistAWeb Reusable component used by VistAWeb Reusable component used by VistAWeb Reusable component used by VistAWeb Reusable component used by VistAWeb Stentor plug-in viewer C# class file used for configuring date range selections C# class file that handles logging to SQL Server database C# class file that handles emailing of errors and requests to VistAWeb Technical Support Group Style sheet for the menus in the left frames Style sheet for the main frames \resources\debug VistAWeb Technical Guide February 2005 28 Path \resources\images Filename AbnormalMedicineRpts.gif AdmDischs.gif AdvanceDirectives.gif allergies.gif AllRxIVs.gif appointments.gif BloodAvailabilityRpts.gif BloodBankRpts.gif BloodTransfusionRpts.gif BriefMedicineRpts.gif ccr.gif ChartCopySummaries.gif chemhem.gif ClinicalWarnings.gif compPens.gif CrisisNotes.gif CurrentOrders.gif cytology.gif DailyOrderSummaries.gif dcsumm.gif demographics.gif DieteticProfiles.gif DietRpts.gif disabilityRpts.gif DischargeDxs.gif Discharges.gif dvaseal.jpg EducationRpts.gif ElectronMicroscopyRpts.gif ExpandedADTs.gif FullCaptionedMedicineRpts.gif FullMedicineRpts.gif FutureClinicVisits.gif GenericDieteticRpts.gif HealthFactorRpts.gif HomePage.gif IcdProx.gif IcdSurgeries.gif imaging.gif ImmunizationRpts.gif insurance.gif labOrders.gif labs.gif LatestEducationRpts.gif LatestExamRpts.gif MedAdminHxs.gif MedAdminLogs.gif meds.gif microbiology.gif moduleTitle.gif Description Image of text ―Abnormal Medicine Reports‖ Image of text ―Admissions/Discharges‖ Image of text ―Advance Directives‖ Image of text ―Allergies‖ Image of text ―All IV‖ Image of text ―Appointments‖ Image of text ―Blood Availability‖ Image of text ―Blood Bank‖ Image of text ―Blood Transfusion‖ Image of text ―Brief Medicine Reports‖ Image of text ―Continuity of Care Record‖ Image of text ―Chart Copy Summary‖ Image of text ―Chem & Hematology‖ Image of text ―Clinical Warnings‖ Image of text ―Comp & Pen‖ Image of text ―Crisis Notes‖ Image of text ―Current Orders‖ Image of text ―Cytology‖ Image of text ―Daily Order Summary‖ Image of text ―Discharge Summaries‖ Image of text ―Demographics‖ Image of text ―Dietetics Profile‖ Image of text ―Diet‖ Image of text ―Disabilities‖ Image of text ―Discharge Diagnosis‖ Image of text ―Discharges‖ VA Logo Image of text ―Education‖ Image of text ―Electron Microscopy‖ Image of text ―Expanded ADT‖ Image of text ―Full Captioned Medicine Reports‖ Image of text ―Full Medicine Reports‖ Image of text ―Future Clinic Visits‖ Image of text ―Generic Dietetics‖ Image of text ―Health Factors‖ Image of text ―Home Page‖ Image of text ―ICD Procedures‖ Image of text ―ICD Surgeries‖ Image of text ―Imaging Reports‖ Image of text ―Immunizations‖ Image of text ―Insurance‖ Image of text ―Lab Orders‖ Image of text ―Lab Reports‖ Image of text ―Latest Education‖ Image of text ―Latest Exam‖ Image of text ―Med Admin Hx (BCMA)‖ Image of text ―Med Admin Log (BCMA)‖ Image of text ―Medications‖ Image of text ―Microbiology‖ Image of text ―medical record‖ VistAWeb Technical Guide February 2005 29 Path \resources\images\icons \resources\scripts\js Filename notes.gif NutritionalAssessments.gif NutritionalStatuses.gif OpEncounters.gif OrderSummaries.gif OutpatientDxRpts.gif outpatientEncounter.gif PastClinicVisits.gif patientInquiry.gif patientLookup.gif patientLookup.png PatientSelection.gif poweredByMdo.gif problems.gif procedureReports.gif ProvidedTxRpts.gif radiologyReports.gif RxProfiles.gif sites.gif siteSelection.gif SkinTestRpts.gif SpecialUserRequest.gif SuppFeedings.gif surgeryReports.gif surgicalPathology.gif team.gif Timeout.gif Transfers.gif TreatingSpecialties.gif TubeFeedings.gif UnitDoses.gif userLookup.gif viewLog.gif VistaLogin.gif vistaWeb.gif vitals.gif WishList.gif bullet.gif minus-sign.gif plus-sign.gif functions_lib.js main.js \resources\xml nodes.xml template.xsl VhaSites.xml VhaSites.xsd VhaSites.xsl VhaSitesMenu.xsl VistAWeb Technical Guide February 2005 30 Description Image of text ―Progress Notes‖ Image of text ―Nutritional Assessment‖ Image of text ―Nutritional Status‖ Image of text ―Outpatient Encounters‖ Image of text ―Order Summary‖ Image of text ―Outpatient Diagnosis‖ Image of text ―Outpatient Encounters‖ Image of text ―Past Clinic Visits‖ Image of text ―Patient Inquiry‖ Image of text ―Patient Lookup‖ Image of text ―Patient Lookup‖ Image of text ―Patient Selection‖ MDO Logo Image of text ―Problems‖ Image of text ―Procedure Reports‖ Image of text ―Treatments Provided‖ Image of text ―Radiology Reports‖ Image of text ―Outpatient Rx Profiles‖ Image of text ―Sites & Notices‖ Image of text ―Site Selection‖ Image of text ―Skin Tests‖ Image of text ―user management‖ Image of text ―Supp. Feedings‖ Image of text ―Surgery Reports‖ Image of text ―Surgical Pathology‖ Image of text ―Care Team‖ Image of text ―Timeout‖ Image of text ―Transfers‖ Image of text ―Treating Specialty‖ Image of text ―Tube Feedings‖ Image of text ―Unit Dose‖ Image of text ―User Lookup‖ Image of text ―View Log‖ Image of text ―Vista Login‖ VistAWeb Logo Image of text ―Vitals‖ Image of text ―Wish List‖ Image of a bullet point Image of a minus sign Image of a plus sign JavaScript include file that helps format the multi-tab look of select text record pages JavaScript include file that helps format the menus XML file used to help structure menu XML stylesheet used to help structure menu XML file of all the VA sites XML schema for VHASites.xml file XML stylesheet used with the VHASites.xml file XML stylesheet used to help structure Path Filename VhaSitesMenu-lookup.xsl Description sites menu XML stylesheet used to help structure sites menu VistAWebDocs Path \VistaWebDocs\ Filename Glossary.htm main.css MdoOverview.htm Next.htm Overview.htm ScreenShots.htm Technologies.htm VhaSites.xml VistaDAOs.htm XmlFiles.htm \VistaWebDocs\files ISO_VW.doc ISOLogSession.doc MDO_Visitor.doc VistaWeb ISO Manual.doc Visitor Algorithm.doc VW_Security.doc VWshots.doc DaoFactory.gif homepage.PNG login.PNG mdo.gif MdoDiagram1.gif overview.gif patientSelection.PNG poweredByMdo.gif RDV.gif spacer.gif technologies.gif vistaDaos.gif vistaWeb.gif VistaWeb2.gif WebTop.gif wishlist.gif Description Glossary of terms Cascading style sheet Provides overview of MDO Lists what is in store for the future of VistAWeb Provides an overview of VistAWeb Displays some screenshots of VistAWeb Compares technologies used by VistAWeb Links to Sun’s Data Access Objects whitepaper Explains what XML files are used by VistAWeb Provides instructions to ISOs on how to use the view logs page; out of date Another out-of-date instruction manual for ISOs to view logs In-depth explanation of how MDO uses the visitor account and RPCs VistAWeb ISO Manual Explains the use of the visitor account Explains VistAWeb security VistAWeb snapshots \VistaWebDocs\images VistAWeb Technical Guide February 2005 31 VistAWebUserMgt Path \VistaWebUserMgt\ Filename AssemblyInfo.cs Global.asax Global.asax.cs Global.asax.resx UserSites.csproj UserSites.csproj.webinfo UserSites.sln UserSites.sln.old UserSites.vsdisco Web.config Hds.NET.dll Hds.NET.pdb MDO.NET.dll MDO.NET.pdb UserSites.dll VistaUtils.dll \VistaWebUserMgt\resources\css ControlPanel.css Main.css dvaseal.jpg HomePage.gif moduleTitle.gif poweredByMdo.gif siteSelection.gif SpecialUserRequest.gif (code inactivated) userLookup.gif VistaLogin.gif vistaWeb.gif nodes.xml template.xsl VhaSites.xml VhaSites.xsd VhaSites.xsl VhaSitesMenu.xsl VhaSitesMenu-lookup.xsl \VistaWebUserMgt\src AppBanner.aspx AppBanner.aspx.cs AppBanner.aspx.resx AppFrameset.htm AppNavigate.aspx Description Glossary of terms VistaWebUserMgt project settings file Code-behind for Global.asax Template for Global.asax VistaWebUserMgt project information file VistaWebUserMgt project information file VistaWebUserMgt project information file VistaWebUserMgt project information file VistaWebUserMgt project information file .NET configuration file Reusable component used by VistaWebUserMgt Reusable component used by VistaWebUserMgt Reusable component used by VistaWebUserMgt Reusable component used by VistaWebUserMgt Compiled dll of VistaWebUserMgt Reusable component used by VistaWebUserMgt Style sheet for the menus in the left frames Style sheet for the main frames VA Logo Image of text ―Home Page‖ Image of text ―user management‖ MDO Logo Image of text ―Site Selection‖ Image of text ―user management‖ Image of text ―User Lookup‖ Image of text ―Vista Login‖ VistAWeb Logo XML file used to help structure menu XML stylesheet used to help structure menu XML file of all the VA sites XML schema for VHASites.xml file XML stylesheet used with the VHASites.xml file XML stylesheet used to help structure sites menu XML stylesheet used to help structure sites menu Application banner Code-behind for AppBanner.aspx Template for AppBanner.aspx Application frameset controller Application Navigation \VistaWebUserMgt\bin \\resources\images \VistaWebUserMgt\ \resources\xml VistAWeb Technical Guide February 2005 32 Path Filename AppNavigate.aspx.cs AppNavigate.aspx.resx ChangeFrameset.htm Login.aspx Login.aspx.cs Login.aspx.resx LoginBanner.aspx LoginBanner.aspx.cs LoginBanner.aspx.resx LoginFrameset.htm LoginSiteSelection.aspx LoginSiteSelection.aspx.cs LoginSiteSelection.aspx.resx Manual.htm Sites.aspx Sites.aspx.cs Sites.aspx.resx SiteSelection.aspx SiteSelection.aspx.cs SiteSelection.aspx.resx UserSelectFrameset.htm UserSelection.aspx UserSelection.aspx.cs UserSelection.aspx.resx UserSiteSelection.aspx UserSiteSelection.aspx.cs UserSiteSelection.aspx.resx welcome.aspx welcome.aspx.cs welcome.aspx.resx Description Code-behind for AppNavigate.aspx Template for AppNavigate.aspx Determines appropriate user redirection Login page Code-behind for Login.aspx Template for Login.aspx Login banner Code-behind for LoginBanner.aspx Template for LoginBanner.aspx Login frameset controller Menu for selecting which site to log in to Code-behind for LoginSiteSelection.aspx Template for LoginSiteSelection.aspx Provides instructions on how to use the application Page where the authorizing user identifies which site(s) the requesting user should have remote access to Code-behind for Sites.aspx Template for Sites.aspx Displays the sites to choose from on Sites.aspx Code-behind for SiteSelection.aspx Template for SiteSelection.aspx User Selection frameset controller Form for selecting users from specified site Code-behind for UserSelection.aspx Template for UserSelection.aspx Form for selecting which site to search for users at Code-behind for UserSiteSelection.aspx Template for UserSiteSelection.aspx Welcome message page Code-behind for Welcome.aspx Template for Welcome.aspx VistAWeb Technical Guide February 2005 33 Appendix C: VistAWeb Code Samples HTM Sample (WishList.htm): Wish List
Wish List image Medical record image

This is the wish list for VistaWeb (in no particular order).

  • Health summaries
  • Images, images, images (Stentor, AGFA, whatever)
  • Graphs for vitals, labs, etc.
  • Searching document titles, authors, etc.
  • Continuity of Care Record (CCR)
  • ECG viewing
  • Multi-threading (to make it even faster)
  • Pain medication agreements
  • Nurse's report sheet
If you would like to make a request, email VistAWeb Tech Support. VistAWeb Technical Guide February 2005 34 ASPX Sample (Insurance.aspx): <%@ Page language="c#" Codebehind="Insurance.aspx.cs" AutoEventWireup="false" Inherits="EMR.Insurance" %> Insurance

ASPX.CS Sample (Insurance.aspx.cs) (code-behind): using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using gov.va.med.vistaweb.util; namespace EMR { /// /// Summary description for Insurance. /// public class Insurance : System.Web.UI.Page { private const int COMPANY_COL = 0; private const int POLICY_COL = 1; private const int GROUPNUM_COL = 2; private const int HOLDER_COL = 3; private const int EFFECTIVE_DATE_COL = 4; private const int EXPIRATION_DATE_COL = 5; private const int FACILITY_COL = 6; private const int VISTA_TS_COL = 7; protected System.Web.UI.WebControls.DataGrid DataGrid1; protected System.Web.UI.WebControls.Literal TextArea; protected System.Web.UI.WebControls.Panel plPanel; private String sessionPageName = ""; private String sessionDataTableName = ""; private String sessionDataViewName = ""; VistAWeb Technical Guide February 2005 36 private void Page_Load(object sender, System.EventArgs e) { Response.CacheControl = "no-cache"; Response.AddHeader("Pragma", "no-cache"); Response.Expires = -1; sessionPageName = sender.GetType().FullName; sessionDataTableName = sessionPageName + "DataTable"; sessionDataViewName = sessionPageName + "DataView"; if (!Page.IsPostBack) { DataTable dataTable = new DataTable(); Session[sessionDataTableName] = dataTable; defineGrid(); query(); } } private void query() { try { MDO.InsuranceRpt[] rex = getRex(); populateGrid(rex); } catch (Exception ex) { Global.showOops((MDO.User)Session["User"],(MDO.Patient)Session["Patient"], this.Context.Request,ex,this.Context.Response); } Log.write(Request,Session,null,"From " + ((MDO.MultiSiteDAO)Session["MultiSiteDAO"]).getSiteList()); } private MDO.InsuranceRpt[] getRex() { MDO.Patient patient = (MDO.Patient)Session["Patient"]; try { MDO.InsuranceRpt[] rex = patient.getInsuranceRpts(); if (rex == null) { ((MDO.MultiSiteDAO)Session["MultiSiteDAO"]).setInsuranceRpts(patient); } } catch (Exception ex) { Global.showOops((MDO.User)Session["User"],(MDO.Patient)Session["Patient"], this.Context.Request,ex,this.Context.Response); } return patient.getInsuranceRpts(); } VistAWeb Technical Guide February 2005 37 private void populateGrid(MDO.InsuranceRpt[] rex) { if (rex.Length == 0) { DataGrid1.Visible = false; plPanel.Visible = false; TextArea.Text = "No insurance reports were found"; return; } else { DataGrid1.Visible = true; plPanel.Visible = true; } MDO.SiteTable siteTable = (MDO.SiteTable)Session["VhaSiteTable"]; DataTable dataTable = (DataTable)Session[sessionDataTableName]; dataTable.Clear(); TextArea.Text = ""; for (int i=0; i /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand); this.Load += new System.EventHandler(this.Page_Load); } #endregion } } ASPX.RESX Sample (Insurance.aspx.resx) (template): text/microsoft-resx 1.3 System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long string Blue [base64 mime encoded serialized .NET Framework object] [base64 mime encoded string representing a byte array form of the .NET Framework object] There are any number of "resheader" rows that contain simple name/value pairs. Each data row contains a name, and value. The row also contains a type or mimetype. Type corresponds to a .NET class that support text/value conversion through the TypeConverter architecture. Classes that don't support this are serialized and stored with the mimetype set. The mimetype is used for serialized objects and tells the ResXResourceReader how to depersist the object. This is currently not extensible. For a given mimetype the value must be set accordingly: Note - application/x-microsoft.net.object.binary.base64 is the format that the ResXResourceWriter will generate, however the reader can read any of the formats listed below. mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with : System.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 value : The object must be serialized with : System.Runtime.Serialization.Formatters.Soap.SoapFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.bytearray.base64 value : The object must be serialized into a byte array VistAWeb Technical Guide February 2005 40 : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> text/microsoft-resx 1.3 System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True Private VistAWeb Technical Guide February 2005 41 False VistAWeb Technical Guide February 2005 42

0
Related docs
Technical Guide
Views: 9  |  Downloads: 2
Technical Guide
Views: 13  |  Downloads: 0
TECHNICAL GUIDE
Views: 5  |  Downloads: 0
Technical Guide
Views: 8  |  Downloads: 0
TECHNICAL GUIDE
Views: 15  |  Downloads: 0
Technical Guide
Views: 23  |  Downloads: 1
TECHNICAL GUIDE
Views: 15  |  Downloads: 1
Technical guide
Views: 15  |  Downloads: 1
Technical Guide Technical Guide
Views: 17  |  Downloads: 0
TECHNICAL GUIDE TECHNICAL GUIDE
Views: 8  |  Downloads: 0
TECHNICAL GUIDE
Views: 22  |  Downloads: 0
Technical Guide
Views: 140  |  Downloads: 0
Technical Guide
Views: 19  |  Downloads: 0
Technical Guide
Views: 31  |  Downloads: 0
TECHNICAL GUIDE
Views: 28  |  Downloads: 0
Other docs by techmaster
family user guide
Views: 355  |  Downloads: 16
OSU Windows User Guide for PGP Desktop
Views: 219  |  Downloads: 7
Citrix GoToMeeting User Guide
Views: 380  |  Downloads: 8
GeNUBox Technical Specifications
Views: 125  |  Downloads: 6
ATTENDEE QUICK REFERENCE GUIDE
Views: 105  |  Downloads: 0
SecurEntry� Tutorial
Views: 98  |  Downloads: 1