Sei sulla pagina 1di 121

Technical Internship

Report
Account Relationship & Management
OCS Inventory Integration

3i Infotech Ltd., Mumbai


Abbas Dawood

Prof. Suryakant B Patil Mrs. Chitra Karnik


(Faculty Supervisor) (Industry Mentor)

MBA (Tech) Information Technology, Trimester IX

Mukesh Patel School Of Technology Management & Engineering

SVKM’s NMIMS (Shirpur Campus)


(2009-2010)
Internship @ 3i Infotech, Mumbai

Technical
Internship Report
Main Project: Account Relationship & Management (ARM)
Training Module: OCS Inventory Integration (OCSInt)

Abbas Dawood
February 8, 2010 – April 23, 2010

Supervised By: Prof. Suryakant B Patil, HOD, TMD


Mentored By: Mrs. Chitra Karnik, Project Manager
Acknowledgement

Any project is incomplete when it does not include references of those who helped you. In this
course of 11 weeks, I have learnt how different things are from the theory given in the books we
have so far adhered to. Knowing what to do is one thing, and implementation of the same is
something different. All such knowledge gathered during this period is attributed to the following
people:

1. Mr. L.N. Rajan, DGM, 3i Infotech Ltd. for considering me as an asset and accepting me as an
intern
2. Mr. Amit Deshpande, Senior Project Manager, 3i Infotech, for allocating me to the
appropriate working group
3. Mrs. Chitra Karnik, Project Manager, for allocating me as a resource to her project team
4. Mr. AnjaneyaMurthy G., Project Leader, ARM, for guiding me through the various processes,
scheduling and allocating tasks throughout the period
5. Mr. Prasanth Mathew & Mr. Rahul R. Kotru, Senior Programmers, ARM, for making me
understand the application in detail, in spite of the inherent complexity of the application
6. Mr. Bipinchandra Kadiri, Senior Programmer, for guiding me into development in Java and
providing for resources to learn from
7. Ms. Bhavna Agrawal, Senior Programmer, Internal Systems, for guiding in the development
of OCSInt Project
8. Mr. Arpit Grover, my batch mate, for helping me in the development of the miniature of the
ARM project
9. Mr. Sankalp Nambiar, my very good friend, for assisting me in the editing of this report

I would also like to extend my deepest gratitude to the entire team working under Mrs. Chitra Karnik
for their support during the internship period. And of course, I would like to thank Prof. Suryakant
Patil for guiding me through the entire period and helping in the smooth processing of the
documents. Without your help, this report could never have been made possible.

ii | P a g e
List of Illustrations
OCS FIGURE 1 OCS INVENTORY ADMIN MODULE ............................................................................................................. 7
OCS FIGURE 2 OCS INVENTORY CLIENT (START-UP) .......................................................................................................... 7
OCS FIGURE 3 OCSINT STRUCTURE .............................................................................................................................. 10
OCS FIGURE 4 SQL MANAGEMENT STUDIO EXPRESS ....................................................................................................... 11
OCS FIGURE 5 VISUAL STUDIO 2008 TEAM SYSTEM........................................................................................................ 11
OCS FIGURE 6 APPLICATION TIERS (L) & CODE REALIZATION (R) ....................................................................................... 12
OCS FIGURE 7 DATASET (L) & CODE REALIZATION (R) .................................................................................................... 13
OCS FIGURE 8 DATABASE EXPLORER ............................................................................................................................. 13
OCS FIGURE 9 TABLEADAPTER QUERY GUI ................................................................................................................... 13
OCS FIGURE 10 REMOVAL REQUEST BEFORE (L) AFTER (R) .............................................................................................. 15
OCS FIGURE 11 NETWORK FLOW WITH AJAX (L), WITHOUT AJAX (R) ............................................................................... 17
OCS FIGURE 12 OCS LOGIN PAGE ............................................................................................................................... 21
OCS FIGURE 13 ROLE BASED MENU GENERATION .......................................................................................................... 23
OCS FIGURE 14 OCS WEBSITE STRUCTURE ................................................................................................................... 24
OCS FIGURE 15 OCS LOGIN SCREEN ............................................................................................................................ 25
OCS FIGURE 16 INSTALLED SOFTWARE (BY PROFILE CODE) ............................................................................................... 25
OCS FIGURE 17 INSTALLED SOFTWARE (BY MANUFACTURER)............................................................................................ 25
OCS FIGURE 18 REQUEST REMOVAL............................................................................................................................. 25
OCS FIGURE 19 ADMINISTRATOR SCREEN...................................................................................................................... 25
OCS FIGURE 20 VIEW REQUEST (BY PROFILE CODE) ........................................................................................................ 25
OCS FIGURE 21 VIEW REQUEST (BY MANUFACTURER)..................................................................................................... 25
OCS FIGURE 22 SOFTWARE REPORT ............................................................................................................................. 25
OCS FIGURE 23 INSERT NEW SOFTWARE....................................................................................................................... 26
OCS FIGURE 24 UPDATE NEW SOFTWARE ..................................................................................................................... 26
ARM FIGURE 1 ARM CUSTOMER USE CASE .................................................................................................................. 29
ARM FIGURE 2 ARM BANK EMPLOYEE USE CASE........................................................................................................... 29
ARM FIGURE 3 MESSAGE HANDLER DATA FLOW ............................................................................................................ 34
ARM FIGURE 4 WORKING OF ARM ............................................................................................................................. 38
ARM FIGURE 5 ARM ON UNIX PROMPT ...................................................................................................................... 39
ARM FIGURE 6 ARM VALIDATION (MANUAL MODE)...................................................................................................... 39
ARM FIGURE 7 WATERFALL MODEL ............................................................................................................................. 46
ARM FIGURE 8 LOGIC USED BY JSP CONTAINER TO MANAGE JSP TRANSLATION .................................................................... 49
ARM FIGURE 9 DYNAMIC HTML GENERATION USING SERVLETS ........................................................................................ 53
ARM FIGURE 10 INTRANET APPLICATION PROJECT STRUCTURE ......................................................................................... 55
ARM FIGURE 11 DATABASE STRUCTURE ....................................................................................................................... 55
ARM FIGURE 12 MYSQL WORKBENCH 5.2 OSS ........................................................................................................... 56
ARM FIGURE 13 ECLIPSE JAVA EE IDE GALILEO ............................................................................................................. 56
ARM FIGURE 14 ARM INTRANET APPLICATION LOGIN .................................................................................................... 57
ARM FIGURE 15 ARM QUERY SCREEN ......................................................................................................................... 57
ARM FIGURE 16 QUERY SCREEN RESULT....................................................................................................................... 57
ARM FIGURE 17 INTERNAL QUERY SCREEN.................................................................................................................... 57
ARM FIGURE 18 INTERNAL QUERY RESULT .................................................................................................................... 57
ARM FIGURE 19 ADD SECONDARY HOLDER (BEFORE) ..................................................................................................... 57
ARM FIGURE 20 ADD SECONDARY HOLDER (AFTER) ....................................................................................................... 57
ARM FIGURE 21 ADD SECONDARY HOLDER (JAVASCRIPT WARNING) ................................................................................. 57
ARM FIGURE 22 SECONDARY USER MODIFICATION (BEFORE) ........................................................................................... 58
ARM FIGURE 23 SECONDARY USER MODIFICATION (AFTER) ............................................................................................. 58

iii | P a g e
ARM FIGURE 24 DELETE SECONDARY USER (BEFORE) ..................................................................................................... 58
ARM FIGURE 25 DELETE SECONDARY USER (AFTER) ....................................................................................................... 58
ARM FIGURE 26 LINKING APPROVALS (BEFORE) ............................................................................................................. 58
ARM FIGURE 27 LINKING APPROVALS (AFTER) ............................................................................................................... 58

iv | P a g e
Table of Contents
Acknowledgement ................................................................................................................................... i
List of Illustrations .................................................................................................................................. iii
Abstract ................................................................................................................................................... 1
1. Introduction ................................................................................................................................ 1
1.1. Purpose, Scope and Limitations .......................................................................................... 1
1.2. Sources and Methods ......................................................................................................... 1
1.3. Report Organization ............................................................................................................ 2
2. Industrial Analysis ....................................................................................................................... 3
2.1. The Information Technology Industry ................................................................................ 3
2.2. The Software Industry in India ............................................................................................ 3
3. Organizational Observations....................................................................................................... 4
3.1. Place & Role in the Sector ................................................................................................... 4
3.2. Organisational Setup ........................................................................................................... 4
3.3. Departments, Products and Processes ............................................................................... 4
3.4. Technologies used at 3i Infotech ........................................................................................ 4
3.5. Operations and finance performance of the Organisation................................................. 5
3.6. Learning from the company ................................................................................................ 5
Project Report ......................................................................................................................................... 6
OCS Inventory Integration (OCSInt) : Training Module....................................................................... 6
OCSInt : About The Project ............................................................................................................. 6
About OCS ....................................................................................................................................... 6
OCS Working ................................................................................................................................... 6
OCS Inventory Integration .............................................................................................................. 8
Development Tools & Technologies ............................................................................................... 9
Process Model: Prototype............................................................................................................... 9
Schedule ........................................................................................................................................ 10
Structure of OCSInt ....................................................................................................................... 10
Working of OCSInt......................................................................................................................... 11
Working Environment ................................................................................................................... 11
Concepts Implemented ................................................................................................................. 12
Output Screens ............................................................................................................................. 24
Account Relationship & Management (ARM): Main Project ............................................................ 27
About ARM .................................................................................................................................... 27

v|Page
Why ARM: The Problem Statement .............................................................................................. 27
ARM: In detail ............................................................................................................................... 28
Business Advantage of ARM ......................................................................................................... 30
General description of the application ......................................................................................... 30
ARM: How it works ....................................................................................................................... 31
Structure of ARM .......................................................................................................................... 32
System Structure ........................................................................................................................... 42
Code Realization Of ARM Intranet Application............................................................................. 45
Process Model: Waterfall.............................................................................................................. 46
Schedule ........................................................................................................................................ 47
Code Structuring ........................................................................................................................... 48
Concepts Implemented ................................................................................................................. 48
Code Structure of miniature intranet application ........................................................................ 55
Work Environment for miniature ................................................................................................. 56
Output Screens: Intranet Application Miniature .......................................................................... 57
Appendix ............................................................................................................................................... 59
Appendix A Abbreviations used in the document ........................................................................ 59
Appendix B Application Code ....................................................................................................... 60
OCSInt: Training Module ............................................................................................................... 60
ARM: Main Project ........................................................................................................................ 83
Glossary ............................................................................................................................................... 108
Bibliography ........................................................................................................................................ 113

vi | P a g e
Abstract

1. Introduction
1.1. Purpose, Scope and Limitations
This document contains the observations made by me as an intern working at 3i
Infotech. Ltd., Mumbai; as part of the Trimester 9 Technical Internship Program of
SVKM’s NMIMS Mukesh Patel School of Technology Management & Engineering. This
entire period of 11 weeks was divided into two parts:

a. The initial training provided by the organization at the registered office at Vashi,
Navi Mumbai (henceforth mentioned as the Training Module)
b. The main project currently under maintenance in the Bank Domain of the same
organization, situated at Andheri, Mumbai

The training module consisted of having to design a system for easy management of e-
Resources in the organizations network, mentioned as OCSInt in the report

The main project is named Account Relationship & Management (ARM) which is an
integrated view of accounts developed by 3i Infotech for a leading private sector bank
of India

The scope of this document is to review both said periods, highlighting my contributions
into both the projects / modules and citing what differences I have observed in what is
written in the book and what happens in a corporate environment

This book only contains the summary of the internship period, the summary of the
industry and the organization and my contributions to organization. The detailed report
on the day to day happenings and observation has been assembled as a separate
document called the Daily Log Book.

1.2. Sources and Methods


For the completion of this report, I have referred to a number of documents such as the
original documents from the document repository of the Project(s) I was working on and
the documents given as part of the development process. The aggregation of the
necessary portions, was however, done by consulting the Faculty Supervisor, the
Industry Mentors.
1.3. Report Organization
This report is divided into five parts. The content ranges from an abstract industry study
to a very detailed project / module report.

1. Abstract
a. Introduction
This portion consists of the problem statement, the scope of the document
and its limitations, the methods of data collection thereby producing a clear
picture of the work done
b. Industrial Analysis
This portion consists of the detailed information on the industry of which the
organization falls under. Information such as the prospects of the industry,
the latest happenings and events that may affect or aid its growth are
discussed
c. Organizational Observations
These observations are aggregated by the intern by interacting with the
employees of the organization and by getting acquainted with the
organization’s policies by reading relevant documents and studying the
knowledge management portals
2. Project Report
This section consists of the detailed analysis of the actual work done by the
intern during the period of internship. This includes the contributions of the
intern, new findings, and alternative ways to achieve a particular result, process
optimizations and business standards followed by the organization
3. List of Illustrations
The list of illustrations gives the information about the number, title and page
reference of each illustration
4. Appendixes
The appendix consists of the functions used in the computer programs listed in
the report and some terms that may the readers may not be familiar with
5. Bibliography
This includes the list of books and documents referred to, in the making of this
report

Icons used in this document


Icons are provided in this report to highlight the important areas in the book. The
following lists the types of icons and the information that they provide

This icon represents the parts acting as a prelude to the report


following it, and important information that is given in a short,
concise manner

This icon represents code samples or snippets supporting the text


and exhibiting the code realization of the concept implemented

2|Page
2. Industrial Analysis
2.1. The Information Technology Industry
Information technology, and the hardware and software associated with the IT industry,
are an integral part of nearly every major global industry. The information technology
(IT) industry has become of the most robust industries in the world. IT, more than any
other industry or economic facet, has an increased productivity, particularly in the
developed world, and therefore is a key driver of global economic growth. Economies of
scale and insatiable demand from both consumers and enterprises characterize this
rapidly growing sector.

The IT industry can serve as a medium of e-governance, as it assures easy accessibility to


information. The use of information technology in the service sector improves
operational efficiency and adds to transparency. It also serves as a medium of skill
formation.

2.2. The Software Industry in India


The India Software Industry has brought about a tremendous success for the emerging
economy. The software industry is the main component of the Information technology
in India. India's pool of young aged manpower is the key behind this success story.
Presently there are more than 500 software firms in the country which shows the
monumental advancement that the India Software Industry has experienced.

The Indian Software Industry has grown from a mere US $ 150 million in 1991-92 to a
staggering US $ 5.7 billion in 1999-2000. No other Indian industry has performed so well
against the global competition. According to statistics, India's software exports reached
total revenues of Rs. 46100 crores. The total share of India's exports in the global market
rose from 4.9 per cent in 1997 to 20.4 percent in 2002-03.

Today, the Software Industry in India exports software and services to nearly 95
countries around the world. The share of North America (U.S. & Canada) in India's
software exports is about 61 per cent. In 1999-2000, more than one third of Fortune 500
companies outsourced their software requirements to India.

The Government has also played a vital role in the development of the India Software
Industry. In 1986, the Indian government announced a new software policy which was
designed to serve as a catalyst for the software industry. This was followed in 1988 with
the World Market Policy and the establishment of the Software Technology Parks of
India (STP) scheme. In addition, to attract foreign direct investment, the Indian
Government permitted foreign equity of up to 100 percent and duty free import on all
inputs and products.

The software industry being the main component of the IT Industry in India has also
helped the IT sector in India to grow at a good pace. As per the proceedings taking place
in the software industry the future of the India Software Industry looks promising.

3|Page
3. Organizational Observations
3.1. Place & Role in the Sector
3i Infotech Ltd. is a leading provider of technology solutions to the Banking, Financial
Services, Insurance, Retail and Government sectors. The Company is uniquely positioned
as a strong player in the areas of IT Services, Software products and Transaction Services
/ Operations. 3i Infotech Ltd. is one of the top 3 Indian software product companies,
and has over 20 IPRs to its credit. The company serves more than 1500 customers in
over 50 countries; with over 15000 employees.
The Company's quality certifications include SEI CMMI Level 5 for Software business,
ISO 9001:2000 for BPO, ISO/IEC 27001:2005 for Data Centre Operations and ISO/IEC
20000-1:2005 for Data Centre Management Services

3.2. Organisational Setup


3i Infotech Ltd. has Offices in 14 countries: USA, UK, India, Bangladesh, Kenya, Saudi
Arabia, UAE, Bahrain, Kazakhstan, Singapore, Malaysia, Thailand, Australia and China.
The company has a robust infrastructure comprising over 1,200,000 square feet of
development and delivery centers.3i Infotech Ltd. has an annual revenue of US$
500mn.There are State-of-the-art development centres in Mumbai, Chennai, Bangalore,
Kochi, Kuala Lumpur, Dubai, New Jersey

3.3. Departments, Products and Processes


3i Infotech Ltd. is a provides end-to-end IT solutions & services in deploying Next Gen
technologies and diverse applications like middleware, WAP, Blue Tooth, Java, CORBA,
web & internet technologies, E-commerce, M-Commerce, Workflow and Imaging,
Embedded Systems, CRM, integrated business solutions, wired & wireless network and
data centre & disaster centre set up and management.
The company itself has various departments dedicated to Software Development,
Business Processing and Outsourcing (BPO) and data centre operations

3.4. Technologies used at 3i Infotech


3i Infotech combines products/technologies from global technology leaders and
combine them with their best-of-breed professional services to create and rapidly
deploy customized solutions for every client’s unique requirements. They have forged
strategic partnerships with global industry-leading organizations such as:
• Microsoft (Gold Certified Partner)
• Oracle (Certified Partner)
• IBM (Business Partner)
• Cisco
• Red hat
• Symantec

4|Page
3.5. Operations and finance performance of the Organisation

3.5.1. Consolidated results for the nine months ended December 31, 2009
• Revenue for the nine months ended December 31, 2009, is Rs.1, 836.15 crores
(USD 380.13 million), a growth of 8.4% over the corresponding period of the
previous year.
• Profit before depreciation, interest and tax for the nine months is Rs.374.94
crores (USD 77.62 million), a growth of 13.4% over the corresponding period of
the previous year.
• Net profit for the nine months ended December 31, 2009, is Rs.200.64 crores
(USD 41.54 million), an increase of 4.8% over the corresponding period of the
previous year.
• Earnings per share (EPS) decreased to Rs.12.35 from Rs.14.23 in the
corresponding period of the previous year due to the additional equity issuance
done by the Company in the form of a QIP in the last quarter.

3.5.2. Consolidated results for the quarter ended December 31, 2009
• Revenue for the quarter ended December 31, 2009 is Rs.601.86 crores (USD
128.39 million), a decline of 2.2% over the corresponding period of the previous
year. The major cause of this reduction is the impact of the forex fluctuation of
around Rs. 27 crores, which is approximately 4.5%.
• On a sequential basis, revenue declined by 4.8% as compared to Rs.632.15
crores (USD 129.65 million) recorded in the previous quarter, of which the
impact of forex fluctuation is around Rs. 17 crores, which is approximately 2.8%.
• Profit before depreciation, interest and tax for the current quarter is Rs.125.28
crores (USD 26.73 million), a growth of 7.3% over the corresponding period of
the previous year.
• Profit after tax for the current quarter is Rs.61.45 crores (USD 13.11 million), a
decline of 11.9% over the corresponding period of the previous year. This is due
to the increase in interest and depreciation cost by Rs.13.18 crores.
• Earnings per share (EPS) decreased to Rs.4.15 from Rs.4.79 in the same quarter
of the previous year due to increase in the number of equity shares issued by
the company in the previous quarter.

3.6. Learning from the company


Quality is not just an external process within 3i Infotech but is deeply embedded in the
day to day activities of the projects. Thus during the internship period, one can learn
how to embed quality in their work, and become much more productive

5|Page
Project Report
OCS Inventory Integration (OCSInt): Training Module

Place Of Internship 3i Infotech, Vashi, Navi Mumbai

Project Manager Mr. Madhuwant Bedekar


(Sr. Manager, Internal Systems)
Project Guide Ms. Bhavna Agrawal
(Sr. System Programmer, Internal Systems)
Role Of Intern Developer

Period February 8, 2010 – February 24, 2010

Phase Development

OCSInt: About the Project


OCS Inventory Integration (OCSInt) is a module, recognized by 3i Infotech as a business need, to add
to their domain; so that the users of the machines and the system administrators can view the
software installed, request for deletion / removal of unwanted software, and maintain proper details
about the software inventory of the work domain.

OCS (Open Computer & Software) Inventory Agent is Open Source software used by the said
organization to maintain details about the applications installed on different machines in the
domain. The module built by the intern will be integrated to work with the OCS Agent to enhance
and expand its usual capabilities.

About OCS
Open Computer and Software Inventory (OCS Inventory) is an application designed to help a
network or system administrator keep track of the computers configuration and software that are
installed on the network. Information about Hardware and Operating System are collected. OCS
Inventory is also able to detect all active devices on your network, such as switch, router, network
printer and unattended devices. For each one, it stores MAC and IP addresses and allows the user to
classify them.

OCS Working
The OCS Inventory application is built around a Client-Server framework, thus the executable comes
in a pair, consisting of the client program and the main parent program. This application achieves
inventory management of e-Resources. The OCS Server module is installed on the system / network
administrator's computer, with its client copy installed on every computer in the organization's
domain. Once the client module has been registered with the server module, on every system boot a
process runs at start-up, invoking the client module. This process is run as part of the start-up
programs

6|Page
OCS Figure 1 OCS Inventory Admin Module

OCS Figure 2 OCS Inventory Client (Start-up)

This information consists of the Software installed on the local machine (data read from
HKEY_LOCAL_MACHINE sub-directory of the Windows Registry), the currently logged on user (data
read form HKEY_CURRENT_USER) and the computer name. Thus, on every boot the server has the
complete information regarding the software installed on the client computer. All these features
being fine, OCS lacks some features which are mentioned below. These requirements comprise the
Business Requirements:

• No feature for removal of unwanted software


• No feature for recording number of free wares, No of total and currently active licenses for
proprietary software
• No feature for viewing the removed software

The above points were recognized as the business needs to add to the existing OCS system, another
module. This module was called the OCS Inventory Integration Module (OCSInt)

7|Page
OCS Inventory Integration
The main objective of this module is to provide interface to users and Admin for displaying Software
list and Reports taking OCS as base. This integration module will address the features lacking in the
OCS Inventory Agent and add a new dimension to maintaining e-Resources in the organization. The
business requirement is listed as follows:

• Integration module will be a website, accessible on the LAN of 3i Infotech & all the
computers on the Infotech Domain
• Integration Module will provide a login access with the NT User name and password
• Module will have a section viewable by the users & administrator on the domain, which will
contain the following information
° Asset Code
° Software Name
° User Id
° Machine Name
° Manufacturer
° Last Modified Date
° Installed Date
° Details of the administrator who installed the application
° Modifier Details
• Module will have a feature to release an application that is not required by the user
• Feature to inform the administrator about removal requests
• Information filtering based on multiple fields

8|Page
Development Tools & Technologies

Server Side Scripting ASP.Net 3.5 (with C# Code behind)

Client Side Validations JavaScript

Database Microsoft® SQL Server™ 2000


(at organization)
Microsoft® SQL Server™ 2005
(for implementation at home)

Additional Inputs By Microsoft AJAX used to avoid page refresh and thus
Intern reduction in network load

Development Tools Microsoft Visual Web Developer 2008 (Express)


Microsoft Visual Studio 2008 Team System (at home)
Microsoft SQL Server 2000 / 2005 (Express)
Microsoft SQL Server 2000 / 2005 Management Studio
(Express)

Development Microsoft Windows XP Service Pack 3 (at organization)


Environment Microsoft Windows 7 Ultimate (at home)

Process Model: Prototype


The process model used for the development of OCSInt is the Prototype Model. Since the system is
completely new, the requesting party as well as the developer might not be clear on what the scope
of the project is. A prototype is well suited in scenarios where the requirements gathering is not
quite clear. Thus, the development team builds on the available requirements, which have been
refined by undergoing the design phase. Based on their understanding, the development team
builds an application which is subsequently reviewed by the client. A refinement process is then
initiated. This might result in a working system, which if accepted by the user can become the
cornerstone of the entire project

9|Page
Schedule
The training period 1 at 3i Infotech, Vashi was divided into 3 parts:

Week 1: Learning and revision of concepts

The first week of training was dedicated to revising the concepts relating to data access in ASP.Net
using the different tools given for data management. Also concepts relating to validation of user
credentials and securing the pages from unauthorised access were revised.

Week 2: Preliminary Checks to Software Development

The module was allotted in the second week, upon which the project guide gave a briefing on the
existing version of the system; and what the modification aims to do. Standard design files and style
sheets were provided in order to maintain the feel of the application. Assets were installed for the
purpose of development; this included the requests for debugging privileges and deploying on the
local server

Week 3: Development of the Project

The development of the project began in the third week. Firstly, the database was modified to suit
the needs and subsequently the application was structured in directories, linked with IIS (Internet
Information Services), and the process of coding began

Structure of OCSInt
The OCSInt application has two primary roles of users, and
hence it is partitioned having a user part and an administrator
part

• In the User role, the user can view the applications


installed in the computer under his / her profile and
can choose to request the removal of applications that
are not useful

• In the Administrator role,


o The network administrator can view the
removal requests from various users
o The network administrator can generate
software reports for both proprietary software
as well as freeware

OCS Figure 3 OCSInt Structure

1
Detailed log of the training period can be found in the daily log accompanying this report as a separate
document

10 | P a g e
Working of OCSInt
The user wishing to login to the application will enter the URL of the deployed location of OCSInt. On
logging in the user has the ability to view the software installed in the computer and can request for
removal of software not needed. If the logged in user is in administrator role, the user can view
removal requests and generate software reports

Working Environment

OCS Figure 4 SQL Management Studio Express

OCS Figure 5 Visual Studio 2008 Team System

11 | P a g e
Concepts Implemented
Industry standards for coding are far different from the regular ones students use to create their
projects, or the ones used to get acquainted with the process of making a project. In the software
industry, it is particular that the developers stick to a certain paradigm of doing things. Even for the
simplest results to be produced, the method taken is a longer route toward the same. Employing this
longer route not only makes the application more structured, it also ensures that the application is
secure, open to changes and extendable. Many a times it is also noticed that the application is
optimized for network loads. Network loads are topics that a student would have taken for granted
while building a complex albeit smaller application for demonstration / learning purposes; but these
topics are really important when it comes to a very large amount of operations taking place on a
limited bandwidth network. There are various concepts in any given programming language that lets
the programmer make use of while building enterprise applications. The following is the list of such
concepts that the intern has included in the project, both that have been included as part of the
requirements stated by the organization, as well as self made changes for performance
improvement.

1. Tiered Application Architecture


Any data access based application uses two primary layers, one for the presentation of the
data and the other for the actual data handling. In ASP.Net or other scripting, they may also
be referred to as Presentation logic and Data Logic respectively. But such a distinction does
not enforce any business rules that may apply. Such business rules become too heavy a
concern for the presentation layer, or even at the back end. The Business Logic Layer (BLL)
serves as an intermediary for the data exchange between the presentation layer and the
Data Access Layer (DAL). The Business Logic Layer is implemented as Class Files set in the
App_Code folder of the ASP.Net Web Application.

OCS Figure 6 Application Tiers (L) & Code Realization (R)

The Data Access Layer is realized as a Dataset, which contains a copy of the database and
not the real-time mapping to the original database. Datasets are made of DataAdapters,
which are structured similar to the tables in the said database. Associated with each

12 | P a g e
DataAdapter is a TableAdapter which provides the aggregation of all the functions that the
table supports. It is here that the commands for Database actions are mentioned.

OCS Figure 7 Dataset (L) & Code Realization (R)

The Business Logic Layer needs to be declared as a Data Object so that the
ObjectDataSource control in the ASP.Net Page reads from the DataObject and not the
DataAdapter, to enforce the tiered structure.

According to the database schema of the OCSInt


Application, there are 4 independent tables; of which 3
tables are very important. It is, therefore, necessary
that we make 3 DataAdapters and their necessary BLLs.

The required BLLs are:


• DetailsBLL, for retrieving the data related to
each software, user and manufacturer
• ProductsBLL, comprising of software relevant
data
• ReleaseBLL, giving away the release information
of the software and per user request
OCS Figure 8 Database Explorer

The Dataset provides a GUI for the writing of necessary


queries, which can then be coupled to the functions
provided in the BLL. The statements are further
classified as SQL statements, stored procedures and
update statements

OCS Figure 9 TableAdapter Query GUI

13 | P a g e
Structure of The Business Logic Layer

/*Declaring the DataObject*/


[System.ComponentModel.DataObject]
public class DetailsBLL
{
/*Obtaining the object of the TableAdapter*/
trOCSDetailsTableAdapter Adapter = new
trOCSDetailsTableAdapter();

/*Coupling the method to the BLL*/


[System.ComponentModel.DataObjectMethod(System.Component
Model.DataObjectMethodType.Select, false)]
public OCSDataSet.trOCSDetailsDataTable
GetDataByProfileCode(string ProfileCode)
{
return
Adapter.GetDataByProfileCode(ProfileCode);
}
}

As observed from the code snippet above, the function GetDataByProfileCode(string


ProfileCode) is used to read the Software Data By passing the Profile Code as the
parameter. The methods that are coupled to a Select Statement return a DataTable,
whereas the update statements; such as Insert, Update and Delete, return the number of
rows affected by the query.

At the presentation layer, an ObjectDataSource with its Data Source set to the DataObject
defined in the BLL completes the structure. This works in accordance with the definition of
the ObjectDataSource as a business object that provides data to data-bound controls in
multitier Web application architectures

ObjectDataSource Control (ASP.Net 3.5)

<asp:ObjectDataSource ID="ObjectDatasource1"
runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByProfileCode"
TypeName="DetailsBLL">
<SelectParameters>
<asp:SessionParameter DefaultValue="Abs D"
Name="ProfileCode"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>

14 | P a g e
2. Bulk updates using XML files
In traditional data handling applications using ASP.Net, for each change made to the
database, the presentation layer is posted back to the server and the changes are
committed to the database. In case of a large amount of updates and modifications to the
database, this model is not preferred; mainly because of the wastage of bandwidth in a
single round trip and because the server has to oblige in allocating a thread every time the
operation is called. This process can be optimized using bulk updates. One of the most
important features of the OCSInt application is letting the users on the network request for
the removal of unnecessary software installed on their system. The interface involves the
software listing with a checkbox appended to the list. A separate table called ReleaseData
stores the release state of the software, i.e. it stores the software that has been sidelined for
removal / has already been removed.

In a normal scenario, the programmer would declare the checkbox with its Autopostback set
to true, which enables page post back on changing the state of the checkbox. This would
result in the usual per post back database commit, which reduces application performance
over the network.

Hence, we move towards a more reasonable usage of the available network bandwidth by
using Bulk Database operations. In such operations, on changing the state of the checkbox,
we record the fields available on the page in XML files. On finally submitting the page back
to the server to commit the changes, the XML file is pushed into the database using
appropriate back end handling of XML.

OCS Figure 10 Removal Request Before (L) After (R)

The screens above show the interface for software removal. On checking the checkboxes
and clicking the update button, the XML data is formed and bulk updates are initiated.

15 | P a g e
XML File Creation at Front End (C# Code behind)

/* -----------------------------------------------------
* Purpose: This function is fired to create XML data *with
values to be inserted in the ReleaseData table
*---------------------------------------------------- */
protected void UpdateButton_Click(object sender, EventArgs
e)
{
/* Create a DataTable to append to the DataSet */
DataTable dt = ds.Tables.Add("root");
/* Declare a new checkbox to assign the use as a reference
variable */
CheckBox c = new CheckBox();
/* Add the columns to the declared data table to reproduce
the database schema */
dt.Columns.Add("ProfileCode", typeof(string));
dt.Columns.Add("Release", typeof(bool));
/* Check if the checkbox is selected/checked */
for (int i = 0; i < GridView1.Rows.Count; i++)
{ /* Select the checkbox from each row */
c =
GridView1.Rows[i].Cells[7].FindControl("ReleaseCheckBox")
as CheckBox;
/* If the checkbox is ticked, store the values from the
grid in the DataTable */
if (c.Checked)
{ DataRow r;
r = dt.NewRow();
r["ProfileCode"] =
GridView1.Rows[i].Cells[0].Text;
r["Release"] = c.Checked ? true : false;
dt.Rows.Add(r);
}
} /* Store the data taken from the previous step as
XML Data in a string variable */
s = dt.DataSet.GetXml();
/* Invoke stored Procedure */
/* Set the connection string and configure the connection
*/
string connectionString =
ConfigurationManager.ConnectionStrings["OCSIntConnectionSt
ring"].ConnectionString;
SqlConnection connection = new
SqlConnection(connectionString);
/* Open the connection */
connection.Open();
/* Call the command */
SqlCommand command = new SqlCommand("InsertRelease",
connection);
/* Specify the command type */
command.CommandType = CommandType.StoredProcedure;
/* Pass the xml data as parameter */
command.Parameters.AddWithValue("@xmlData", s);
int k = command.ExecuteNonQuery();
/* Close the SQL Connection */
connection.Close();
}

16 | P a g e
3. AJAX extensions for performance improvement
AJAX is an acronym for Asynchronous JavaScript and XML, which is a new way to use the
existing standards to create a mechanism to exchange data with the server without
reloading the whole page.

In a regular dynamic web application, when a button inside the form associated with a
server side scripting, is clicked; it results in the entire page getting posted back to the server.
The page is then checked for changes and results are obtained in the response page that the
server sends back to the client browser. In cases where the same page is sent in the
response, but with minimal response, there is a huge wastage of network bandwidth to
refresh a minuscule part of the page.

AJAX is therefore employed to modify the flow of data in the network. Only the parts of the
page that need to be posted back are done so, thus the load on the network is reduced
significantly; in other words, there is a certain performance improvement.

OCS Figure 11 Network flow with AJAX (L), without AJAX (R)

In the OCSInt application, data can be categorised and retrieved based on the profile code
and the manufacturers. This selection can be done using radio buttons. On page postback,
however, the entire GridView has to be data bound to the new data table returned by the
BLL. This is a costly operation if the page is posted back as a whole to the server. Thus the
dynamic controls are placed in an ASP.Net AJAX Control called UpdatePanel. Any controls
outside the UpdatePanel will not be updated on postback. All controls within will, however,
are updated according to the code in the C# Code Behind.

It can be frustrating for the user to see that no operation is occurring on an AJAX Page post
back. To visually inform the user that the page is indeed undergoing operations, is therefore,
very important. It is for this purpose that the UpdateProgress control is used. The
UpdateProgress control contains an animated GIF image which notifies the user about the
UpdatePanel post back

17 | P a g e
AJAX Extensions to ASP.Net

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="request.aspx.cs" Inherits="request" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0


Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>kodestorm: Elicit</title>
</head>
<body>
<form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server">


</asp:ScriptManager>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">


<ContentTemplate>
<asp:Panel ID="Panel1" runat="server">
<!-- Page Controls here -->
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>

<asp:UpdateProgress ID="UpdateProgress1" runat="server"


onload="UpdateProgress1_Load">
<ProgressTemplate>
<img src="images/ajax-loader.gif" alt="Loading..."
width="140px" height="20px"/>
</ProgressTemplate>
</asp:UpdateProgress>

</form>
</body>
</html>

To enable the AJAX extensions on an ASP.Net Page, it is essential that the asp:ScriptManager
control is included in the ASP.Net page within the form tag on the page.

The ScriptManager control is central to Ajax functionality in ASP.NET. The control manages
all ASP.NET Ajax resources on a page. This includes downloading Microsoft Ajax
Library scripts to the browser and coordinating partial-page updates that are enabled by
using UpdatePanel controls.

18 | P a g e
4. Windows Authentication using forms
In any web application based on per user information, privacy is very important. To achieve
such a secure application it is essential that we use the concepts of authentication and
authorization.

In an enterprise application spanning the entire organization and one that already has its
computers linked through to the local network; the process of ID creation for the various
applications becomes a process that is highly redundant and inconsistent. Therefore, most
organizations employ windows based authentication for other applications available on the
local intranet. This involves signing into such applications using the same username and
password as the one used to log in to the system, thus completely alleviating the need for
users to remember different credentials for the services, and for system administrators to
create and maintain a separate credential list for every enterprise wide application.

In the OCSInt application, the ASP.Net concept of windows authentication is used; and is
implemented as forms based sign in. This involves signing in through a form, which is
coupled to the Windows Authentication Engine. In order to enforce security in the web
application

• Changes must be made in the configuration file of the website (web.config)


• Any anonymous user must be redirected to the Login Page of the application, with
the code behind to authenticate and authorize the users of the system

In the configuration XML, tags for authentication and authorization must be included. This is
shown in the code sample below:

Web Configuration File (web.config)

<?xml version="1.0"?>
<configuration>
<system.web>
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
In order to enforce rules of windows authentication, we can use various approaches. One of
them is the usage of the LogonUser() method of a Win32 API called Advapi32.dll. The
LogonUser method takes in the username, password and some additional data to
authenticate the user. To include the said Data Link Library (DLL), it is necessary to import
certain libraries from the .Net system

19 | P a g e
Code Behind for Login.aspx (Login.aspx.cs)

/* Other usings */
using System.Runtime.InteropServices;

public partial class Login : System.Web.UI.Page


{
[DllImport("ADVAPI32.dll", EntryPoint = "LogonUserW",
SetLastError = true, CharSet = CharSet.Auto)]

public static extern bool LogonUser(string lpszUsername,


string lpszdomain, string lpszPassword, int dwLogonType, int
dwLogonProvider, ref IntPtr phToken);

protected void SubmitButton_Click(object sender, EventArgs


e)
{
/* Obtain the name of the user */
string domainname = GetDomainName(usernameTextBox.Text);
/* Obtain the username of the user on the domain */
string username = GetUserName(usernameTextBox.Text);
/* Store the username in a session variable to initiate a
session with the logged on user */
Session["NTUser"] = username;
Session["Domain"] = domainname;
/* Create a token that associates a handle with the user
logging into the website */
IntPtr token = IntPtr.Zero;
bool result = LogonUser(username, domainname,
passwordTextBox.Text, 2, 0, ref token);
if (result)
{
if (String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
FormsAuthentication.RedirectFromLoginPage(usernameTextBox.Te
xt, false);
string url = "Restricted//User.aspx";
Response.Redirect(url);
}
else
{
FormsAuthentication.SetAuthCookie(usernameTextBox.Text,
false);
string url = "~/Restricted//User.aspx";
Response.Redirect(url);
}
}
else
{
Label1.Text = "Username / Password incorrect";
}
}
/* Other Functions */

20 | P a g e
OCS Figure 12 OCS Login Page

By using the XML modifications and redirects in the code behind, when the user logs into
application without authentication; the application redirects the user to the login page.
Once the user logs in with the windows credentials, an authentication cookie is set with the
login credentials and the user is redirected to the user page showing a list of installed
software.

The user is logged out of the application when the browser window is closed. On the
occurrence of the application being closed, the cookie is cleared and demands that the user
log in again, starting a new session.

21 | P a g e
5. Role Based Menu Generation
As an added security measure, the menu displayed on logging into the application is a role
based menu; meaning that the menu is generated dynamically based on the windows role of
the user currently logged into the system. In order to determine the role of the logged in
user, the code behind in every page must run a script on page load.

The necessary class and the associated functions are included in the
System.Security.Principal namespace. The enumeration called WindowsBuiltInRole returns
the role of the user. Based on this value, the menu can be dynamically generated

Role Based Menu Generation

/* -----------------------------------------------------
* Purpose: This function is executed on page load, used
*here to dynamically form menu for navigation
----------------------------------------------------- */
protected void Page_Load(object sender, EventArgs e)
{
/* Determine the role of the logged on user */
string accounttype =
WindowsBuiltInRole.Administrator.ToString();
/* Menu items for administrator portion */
MenuItem mi1 = new MenuItem("Administrator", "Admin",
"../images/menu.png");
MenuItem report = new MenuItem("Software Report", "SR",
"", "SoftwareReport.aspx");
MenuItem vrequest = new MenuItem("View Requests", "VR",
"", "ViewRequest.aspx");
/* Menu items for user portion */
MenuItem mi2 = new MenuItem("User", "User",
"../images/menu.png");
MenuItem request = new MenuItem("Request Removal", "RR",
"", "Request.aspx");
MenuItem installed = new MenuItem("View Installed", "VI",
"", "User.aspx");
/* Dynamically generate the menu */
if (accounttype == "Administrator")
{
Menu1.Items.Clear();
mi1.ChildItems.Add(report);
mi1.ChildItems.Add(vrequest);
Menu1.Items.Add(mi1);
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
else
{
Menu1.Items.Clear();
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
}

22 | P a g e
OCS Figure 13 Role Based Menu Generation

23 | P a g e
Output Screens

OCS Figure 14 OCS Website Structure

24 | P a g e
OCS Figure 15 OCS Login Screen OCS Figure 16 Installed Software (by Profile Code)

OCS Figure 17 Installed Software (by Manufacturer) OCS Figure 18 Request Removal

OCS Figure 19 Administrator Screen OCS Figure 20 View Request (by Profile Code)

OCS Figure 21 View Request (by Manufacturer) OCS Figure 22 Software Report

25 | P a g e
OCS Figure 23 Insert New Software OCS Figure 24 Update New Software

26 | P a g e
Account Relationship & Management (ARM): Main Project

Place Of Internship 3i Infotech, Andheri (E), Mumbai

Project Manager Mrs. Chitra Karnik


(Project Manager)
Project Leader Mr. AnjaneyaMurthy G.
(Project Leader, ARM)
Role Of Intern Participation in all possible phases of Software Development
Life Cycle & create a miniature of intranet application

Period February 26, 2010 – April 23, 2010

Phase Maintenance

About ARM
ARM is an application designed by 3i Infotech for a leading private sector bank of India. It is designed
with a goal to consolidate the core customer information that is currently spread across disparate
operational systems.

Why ARM: The Problem Statement


Any typical bank has many product lines as part of the services it provides. And central to its
functioning is the storage and maintenance of data, however assorted it may be. But having to store
and maintain all this data in different systems decentralizes the storage thereby resulting in a very
loosely designed and inefficient system for data warehousing.

ARM aims to address this problem by centralizing the data collected by all applications, or in other
words; it aims at the creation of a common data model and put it through to the Enterprise
Application Interface (EAI) which comprises of Internet Banking Site and the Interactive Voice
Response (IVR)

Prior to the creation of ARM, the said bank already had a system designed by Tata Consultancy
Services (TCS) called CIF. ARM was conceived as a scaled down version of CIF, as there were many
inadequacies in CIF.

27 | P a g e
ARM: In detail
ARM is an integrated view designed by 3i Infotech for a leading financial institution of India. Its
Primary aim is to achieve both authentication of the institution’s customers and the aggregation of
the several accounts that may otherwise have to be viewed separately. Also, ARM allows the files of
received via FTP through the various feed systems to be validated and consolidated, both manually
and automatically.

The ARM application is built around a common data model that provides its most important features
of Authentication and Aggregation. The primary input remains the basic credentials that the
financial institution provides to its customer: The Bank Account number and the User ID.

• Authentication
This step simply involves the logging into the system by providing the said credentials and
verified against a user database. Based on the result of this step the user can either be given
access to aggregation service provided by the application, or notified of an invalid attempt
for successful login
• Aggregation
Any Bank / financial institution has many customers, each of whom might have several user
accounts, that can be classified under Personal Bank account, Credit Card Account, Debit
Card Account, Demat Accounts etc. However, all the information pertaining to a particular
user is stored in its own database and thus the information has to be viewed separately. The
aggregation feature helps create one singular view that enables the user to view all his
accounts and services on logging into the Enterprise Application. This feature also supports
the linking of different accounts and provides the functionality of setting up secondary
account holders and finally outputting all the information through the Enterprise Application
Interface

The main objectives of the ARM System are listed below:

• To create a central customer information database that will consolidate customer


information from disparate operational systems. This database will store the basic customer
details such as Name, customer authentication information and account information
• It should provide an interface for other applications to authenticate a customer across
various channels
• It should provide an interface for an application to aggregate customer’s accounts

28 | P a g e
ARM Application

ARM Database

ARM Figure 1 ARM Customer Use Case

ARM Menu

ARM Database

ARM Figure 2 ARM Bank Employee Use Case

29 | P a g e
Business Advantage of ARM
The ARM solution to the mentioned bank brings about some business advantages, they are listed
below:

• Clear separation of personal details of the customer and the account related data, thereby
focusing mainly on the sector of retail banking
• Loading data into the common database from the various operational / feed systems, and
their predecessor processes of validations and consolidations are automated, thus reducing
the work load of the operations team; which otherwise has to do the said task manually
• The EAI is coupled with the client interfaces of Internet Banking and IVR through XML
messages. In CIF, the intra- application and inter-module messages are ISO based messages.
The migration to XML messages as a whole would result in more uniform and better system

General description of the application

Application sector / Business Retail Banking

Business Environment Customer Support


Inconveniences in existing • Holds information unrelated to its usage
solution • Huge dependency on manual operations
• Heavy duplication of data
• Multiple entries of a single customer

Business Functions • Slimmer Database containing business / sector


Addressed By ARM relevant information
• Non redundant data
• Automation of operations
• Automated processing of files received from
other operational systems
• Cost saving on space
• Cost saving on manual operations
• Improved Warehousing and mining

30 | P a g e
ARM: How it works
The ARM application cannot be explained as having a single mode of entry and exit. It can be
considered as a continuously working process to aggregate accounts of the same holder under
various services that the bank provides. The working of this application cannot be understood
without understanding the structure of the application. However, we can attempt to study the
general working; without having to probe in detail for a basic understanding of the application and
the modes that it operates in.

When a customer logs in to the Internet Banking portal (Infinity) or the IVR; or basically any form of
the EAI; the credentials are checked in the ARM Database. Once these credentials are authenticated
the details of the accounts held by the customer are the retrieved from the ARM database and
presented in the appropriate EAI

When a bank employee logs into the system for the purposes of customer support, or any work
relating to retail banking; the ARM application provides an interface for retrieval of data under
separate sections

The ARM application has to be one that runs continuously, so that it can aggregate all the
information pertaining to one customer at all times. For this the various operating systems upload
their data into the ARM Database continuously. To handle the incoming files and place them in
appropriate tables in the database, a process needs to be running all the time; which by default
becomes automatic with an option of manual mode available. This process will perform key
processes of validating and then consolidating the files received from the various systems.

Further later in the document as we understand the structure of the entire system, we can
understand the functioning in much detail. However, the knowledge of the intern is only limited to
the bank employee part of the ARM application and not the customer end. The contents presented
henceforth are also related to the employee level access to the system 2.

2
All information within the document as text or images are for test runs. They do not harm the privacy of the
concerned banks customers in any manner

31 | P a g e
Structure of ARM
The ARM application is made of 3 main functional modules. It is the working of these modules in a
chronological manner that ensures the proper working of the application and thereby achieves
aggregation of information.

The functional modules, which assist in the application operation, are named:

• Message Handler
• Daemon
• Intranet Application

1. Message Handler
The message handler serves as an intermediary between the EAI and the ARM Daemon
allowing the passage of messages between them. Whenever the EAI requests for some
information from the ARM database, it sends a mark-up language request to the ARM
application. The ARM application however has no means of extracting sense out of the
message. This is where the message handler module comes in. The message handler module
is built specially to decode the information that makes sense to the application from the
request packet. Having the request parameters from the message, the ARM application
forms a response in a form that is not understandable by the EAI. The message handler again
encodes this response in a manner readable by the EAI and duly returns it to the requesting
interface.

In the earlier CIF system, as mentioned earlier, intra- application messages are ISO based
messages. EAI of the said bank deals in XML messages. Therefore, the message handler is
built as an interpreter and parser dealing with XML based messages. The request it receives
and the response it generates back to the EAI are XML files. The message handler also has
the innate ability to understand the requesting module, and this is achieved by using what is
known as PROC codes. PROC codes represent standardized number coded messages sent or
received as part of any information transaction. The PROC codes featuring in the ARM
application are given in the following listing

Some PROC Codes in ARM Application

901500 Manual Authentication


911000 Authentication Details (Infinity XML request)
926100 Demat Information
931500 Authentication Details (IVR XML request)
950000 Bank@Home
927000 ARMTpinReset

32 | P a g e
At the base level the message handler module accepts requests in the form of XML Packets
from different applications. Based on the PROC code received, the message handler module
then extracts the relevant information from the ARM application. In the meanwhile, the
ARM application itself internally checks the validity of the request, connects to the database,
receives the data and returns the data back to the message handler.

The message handler then formulates the response XML packet

Example functioning of Message handler

• In the case of the Infinity XML request packet (911000) Infinity ID is received in
the input XML packet. The ID is authenticated and the response XML consists of
the authentication details for said credential
• In case of IVR XML request packet (931500) the account number is received in
the input XML file. ARM application validates the incoming packet and sends
the output to the message handler which parses the response as XML data

The message handler itself can be decomposed into:

• Socket Listener
• Message Identifier
• Message Object
• Message Response

Each of the sub modules are discussed below

1. Socket Listener
This sub module will continuously listen for requests from the EAI. Once the request
is accepted it will submit it to the message identifier sub module for further
processing. The socket listener keeps listening continuously for requests from
applications on a specific port (4001)

2. Message Identifier
It will check for request in its internal Queue. If request is available it will be
processed to check for:

• Time out: If time out occurs, a response message is sent instantly.


• Validity of XML message
• Message type would be decoded and the same would be forwarded to its
respective Message Object

E.g. an input XML message with PROC code 927000 will be forwarded to
ARMTpinReset object.

33 | P a g e
3. Message Object
It will concurrently check for request in its internal Queue. If request is available it
will be processed to check for:

• Time out, if time out occurs response message would be send instantly
Initialize all node values with respective variables
• Get active connection to database
• Call necessary Database Procedure for this bean
• Generate XML response
• Send it to Response

Every message created is responsible for executing only one particular bean. If an
object is created for TpinReset using PROC code 927000, this object will not be used
for any other purpose.

4. Message Response
This sub module sends the well formed XML data generated by the message object
back to the EAI that requested the information

ARM Figure 3 Message Handler Data Flow

34 | P a g e
2. Daemon Process
The purpose of the ARM application is to aggregate the data coming in from the different
feed systems that are dedicated to most of the services offered by the bank. The
aggregation operation would do no good if the incoming data is not in a state not fit to be
inserted into the ARM database. To see the incoming data fit into the ARM database, the
data must be fed from the various systems only in a specified format. Such formats are
mentioned in a properties file (FileFormat.properties). ARM works on the assumption that
the file format of the input files from the feed systems in indeed the one mentioned in the
properties file. Thus, the feed systems have to be made compatible with the ARM
application.

In case the feed systems send non readable data, the ARM application must notify the
system of the invalid data. Even if the file were valid, the ARM application might have to split
the contents of the files to insert in appropriate tables in the ARM database. And if all this
succeeds, there still remains the portion of aggregation.

Doing all this work manually will result in corruption of data and high redundancy, not to
mention to amount of time wasted over such trivial matters.

The ARM Daemon module aims at making the entire process automated, although it does
allow the user to override the automatic processing by also including in it a manual mode of
operation. The two modes are common for all processes:

• Auto Mode
The Appropriate process will be initiated by the ArmMainDaemon daemon. The
daemon will provide the input file name and the absolute path to the program
• Manual Mode
In this mode, the user can run the program from a UNIX command prompt and has
the provision to select the file from a list. The manual mode is activated from 16:00
Hrs. Thus after 16:00 Hrs, each day, all processes are carried out manually

In short, the Daemon Process is used for processing of files received from the different feed
systems and it also inserts the data read from the files into the ARM database

The Daemon Process can be divided further into 3 parts:

• Validation
• Assign Holding (File Splitting Process)
• Consolidation

35 | P a g e
1. Validation
The objective of this program is to validate a provided file as per the predefined file
format (specified in the properties file). All the valid records in the file will be copied
to VAL file and all error records will be copied to ERR file. If the file needs to be split
for business purposes, it will be moved to the val (refer path in appendix) directory
which consists of the files awaiting splitting process, otherwise the file is moved to
the conso directory (path) for consolidation. The error file, if generated, will be
moved to the Err directory. A mail is sent to the IT Coordinator of the respective
field if the file contains erroneous data. If the file is indeed validated, the status flag
for it is updated to “VALIDATED”.

Validation Process Logic

Header Validation Process Logging


File Header has the following • Insert record in
format: ARMTBL_PROCESS_LOG
Feed System : 2 Characters with time and process as
No. Of Records: 2 Characters VALIDATION
Checksum: 12 Characters • Insert record in
Date : 8 Characters (YYYYMMDD) ARMTBL_FILE_PRCS_CTR
L for the file with its
• Validate Feed System status as open and total
• Check No of Records in file and no of records
validate against header data • Create
• Calculate Checksum and check VAL<filename>.DAT and
against header data ERR<filename>.DAT in
• If not validated, send mail to current directory
respective persons specified in • Validate the records and
ARMTBL_ESC_MATRIX place them in
appropriate files
• If there is any record in
error file, notify the
respective IT
Coordinator
• Update the Status of the
File to “VALIDATED”
• Move the file to other
directories for further
processing

36 | P a g e
2. File Splitting
The objective of this program is to Split name of customer as first name, middle
name and last name. This process can only be applied to files that have been
validated. In case any file queued is not validated prior to being queued, an error
message is sent to the respective IT Coordinator

Splitting Process Logic

Process Logging
• Insert record in ARMTBL_PROCESS_LOG table with start time
and status as “SPLITTING”
• Create SPL file for storing the records after splitting
• Splitting commences and output is stored in created file
• Update status as “SPLITTED”

3. Consolidation
This program will be use for uploading data from feed system into ARM. Program
will first load data into the temporary tables using SqlLoader, then it will call specific
Pl-Sql procedure (depending on file type and feed system), which will load data,
based on different criteria. Prior to this step being performed, the program must
check whether the status of the input data is either “VALIDATED” or “SPLITTED”; a
status that has neither will result in the file being moved to the ERR directory and
generating an error mail to the concerned party.

The data is read from the val and splitted directory and processed accordingly.
(Method highly complicated, hence the process logging and logic is not included, out
of scope of report)The file read is then pushed into temporary tables, and then a
check is run to see if the files being processed are in sequence. If that is confirmed
then the file is processed and the data in it is inserted into the main tables. The
status of the file is changed to “CONSOLIDATED”. If however, the file is not
consolidated; and error report is generated to the concerned team.

Prior to the consolidation, two important checks are performed:

• Check on the sequencing of the files


• In case of processing of AC Files, check if the corresponding CU file is already
processed

37 | P a g e
ARM Figure 4 Working of ARM

38 | P a g e
ARM Figure 5 ARM on UNIX Prompt

ARM Figure 6 ARM Validation (Manual Mode)

39 | P a g e
FileFormat.properties

This file contains the length and the properties of all the fields appearing in a
data file. The properties and their significance are listed below:

Property Significance
1 Mandatory numeric field
2 Non mandatory numeric field
3 Mandatory character field
4 Non mandatory character field
5 Date
6 One of the field in the group must not be null
A Non mandatory field can have only one of the
following values:
C, c, O, o
B Field can only have one of the following values:
Y, y, N, n
C Non mandatory field can have only one of the
following values:
I, i, U, u, D, d
D Mandatory field can have only one of the following
values:
C, c, O, o, R, r
E Mandatory field can have only one of the following
values:
A, a, D, d
F Feed System
G Skip record if fields value is not in {R1, E1}
H First name, Middle name, Last name
(at least one should be present)

40 | P a g e
3. Intranet Application 3
The Intranet Module of the application shall serve the following activities for respective
stakeholders of the application:

• Retrieving the details of the Customer/Accounts/User Id


• Linking and De linking of Accounts from User Id as per the requests raised by the
Customer in the Call Centre.
• Creation and Modification of Corporate Contacts and DCMS (Debit Card
Management System) File Download.
• Creation and Manual mapping of UCC’s for the corporate accounts
• Different types of Report generation as per the input parameters provided.

The basic need for the intranet solution is because the main areas of focus of the ARM application is
Customer support. And customer support cannot be made as a shell script running on a terminal
window. It needs to be built with proper classification of fields and ability to enquire the database
from all parts.

The intranet application serving the ARM application can be is a huge system, whose purpose is to
generate the details of customers searched for by the bank employee for some purpose.

The layout of the intranet application that is part of the ARM application is given below

• Query Screen: Enables the user to retrieve relevant account linkages by using the account
number or Infinity User ID or Customer Relationship Number (CRN)
• Reports: Enables the user to generate various kinds of reports such as:
o Linking / Delinking report
o RTG Tracker report
o Audit Table Report
o Download Report
o Escalation Matrix Report
• Modifications: Enables the user to modify existing customer related information
o User Details Modification
o Account Activation
o Escalation Matrix
• Upload utility for bulk linking file upload and bulk user upload
• Provision for linking and delinking of accounts manually by using the infinity user ID

3
Screenshots of the ARM Intranet application are not permitted to be used for report creation. Instead a
miniature of the application has been created by the intern as part of the project done during the internship in
order to learn the technologies used at the organization

41 | P a g e
System Structure
The code files and the resultant files used by the application are arranged in a particular manner.
The following listing elaborates on the same

1. Message Handler Process


The execution of Message Handler Application starts with the java file called '
ARMMSMainThread.java '. The Package details for the class files are:
/ARMDB/users/armprod/armJava/classes/armms
/ARMDB/users/armprod/armJava/classes/armeaimsg

2. Daemon Process
There will be a single daemon process MainDaemon.java that triggers the data exchange
activities.The Package details for the class files are:
/ARMDB/users/armprod/armJava/classes/armdaemon

Following is the directory structure for respective file processing

• /arm/val: For all code and dependency files for the validation daemon
• /arm/split: for all code and dependency files for the split daemon
• /arm/con: for all code and dependency files for the consolidation daemon

3. Intranet Process
The Package details for the class files are:

/ARMDB/users/armprod/web-server/jakarta-tomcat-5.0.19/webapps/armiv/WEB-
INF/classes/

The related JSP’s are available at:

/ARMDB/users/armprod/web-server/jakarta-tomcat-5.0.19/webapps/armiv/users/

4. Control Files
The various feed systems send all the information as .dat files to the ARM application. To
store the data within these files into the database, they are loaded into corresponding
control files, which includes the procedure to load the incoming data into temporary tables.
The data from these tables are then saved in the master tables.

Some of the control files are listed. The first two characters are used to denote if the files are
for updating the ARMTBL_CUSTOMERS (CU) or ARMTBL_ACCOUNTS (AC)

42 | P a g e
Customer and Account Table Control Files

Customer Table Control File Account Table Control File


CU0200D6.ctl AC0200D6.ctl
CU0200M3.ctl AC0200M3.ctl
CU0200Q4.ctl AC0200Q4.ctl
CU070000.ctl AC070000.ctl
CU080000.ctl AC080000.ctl
CU090000.ctl AC090000.ctl
CU100000.ctl AC100000.ctl
CU110000.ctl AC110000.ctl
CU140000.ctl AC140000.ctl
CU210000.ctl AC210000.ctl
CU220000.ctl AC220000.ctl

5. Error Files and Log Files


Any application must be immunized against bad data inflow, so as to ensure the integrity of
the operations that it performs and so that wrong data is not consolidated into the
application’s database. The users of the application and the production support team should
also be notified in case of misinterpreted operations and unexpected circumstances.

It is therefore necessary that proper steps be introduced for troubleshooting the application,
in case of any mishap.

The error and log files in the ARM application are more than enough to keep track of the
application. Any problems in the normal functioning will be reflected in either of these files,
and will be reported at the very same instant to the IT Coordinators and the production
support team.

Since the application is made of three important modules, it is after all common sense that
there may be a fault in any of the three modules. To aid the troubleshooting process, every
module of the ARM application has its own log file or error log.

They are discussed in detail in the following section:

• Message Handler
o The err.log file (whose path is known to the system administrator) is
referred to when there are no messages (XML packets) flowing from the EAI
o Another sop.log file is also written to which is referred to in order to check
whether the XML response is formulated properly
o A file named as yyyymmdd.log is referred to check the load on the
application i.e. the number of messages flowing per second
• Daemon
o Errlog.txt file is used to check whether a file is being processed

43 | P a g e
o A table named ARMTBL_PROCESS_LOG keeps track of the current file being
processed and the process status
• Intranet
o BindingListener.log is maintained to check the session maintenance
o intranet.log file contains the data exchange done through XML

All the error files that are generated during the File Processing are available in the respective
error directories. The files in these directories will be purged every 6 months. (Give
directories reference)

44 | P a g e
Code Realization of ARM Intranet Application

ARM Development at organization

Server Side Scripting Java

Client Side Validations JavaScript

Database Oracle 10g

Development Tools Eclipse IDE


PL-SQL Developer
Notepad++

Development Microsoft Windows 2000 Server


Environment Jakarta Tomcat Server 5.x

Version Control Microsoft Visual Source Safe 6.0

Development Hardware Development Server:


40 GB HDD, 1 GB RAM, P 4 (2.6 GHz)

Desktops for development:


40 GB HDD, 1 GB RAM, P 4 (2.6 GHz)

ARM Intranet Application Miniature Development (for personal understanding)

Server Side Scripting JSP using Java Servlets

Client Side Validations JavaScript

JavaScript Libraries jQuery 1.4.2

Database MySQL Community Server 5.1

Development Tools Eclipse IDE


MySQL Workbench Editor
MySQL Essentials 5.1

Development Microsoft Windows 7 Home Premium


Environment Apache Tomcat Server 6.0

Development Period April 23, 2010 – May 2, 2010

45 | P a g e
Process Model: Waterfall
The waterfall model is a sequential software development process, in which progress is seen as
flowing steadily downwards (like a waterfall) through the phases of Software Development Life Cycle
(SDLC).
The waterfall development model has its origins in the manufacturing and construction industries; highly
structured physical environments in which after-the-fact changes are prohibitively costly, if not
impossible. Since no formal software development methodologies existed at the time, this hardware-
oriented model was simply adapted for software development.
In the ARM project, the phases of the development life cycle follow the exact order which is
observed in the waterfall model. The requirements of the application are documented by the client,
and further negotiations are done to zero upon the specific requirements. A design phase then
begins to build the design to be followed by the entire project. The development team makes
approach documents to convey to the client their approach towards building the application, thus
ensuring the functionalities that will be included in the application; and the technologies and
conventions used to realize the same

ARM Figure 7 Waterfall Model

46 | P a g e
Schedule
The internship period at Andheri (Bank Domain) was spread over a period of 8 weeks. Detailed
information is available in the log book. The period can be summarized as follows

Week 1: Understanding Project

Understood the role in the project, its current phase and architecture

Week 2: Used intranet application to understand system better

Operated the intranet application module and updated the system manual

Reviewed and understood the CMMI Level 5 Documentation process

Week 3: System manual updates

Continued Updating the system manual with guidance from other team members

Week 4: User Manual updates

Submitted the system manual for review to project team member for review and approval into
version control

User manual update begins

Week 5: Completed User Manual Updates

Reviewed the SRS and other support documents to complete the user manual of the application

User manual submitted to project team member for review and approval into version control

Week 6: HLD Documentation

Updated incomplete portions of the High Level Design (HLD) of the ARM application based on
current understanding of the system

Week 7: Code analysis with new trainee

Understood the coding standard and structuring of application in code from new project team
trainee. Analyzed the code and understood control flow. Based on seeing code and understanding
operation in much more detail, updated HLD

Week 8: Learning and revision of concepts

Reviewed the Change Request (CR) sheets CR 308 – 312. Understood the changes in each CR and
updated the HLD fields of control files and error handling information

47 | P a g e
Code Structuring

Concepts Implemented
In the making of the miniature of the ARM Intranet application, the intern has used the same
development tools for understanding of a language new to him. The web application uses basic
knowledge of Java Server Pages (JSP) implemented through servlets for its functioning. At the
backend, a MySQL database server provides the requisite tables for database activity. For the
creation of the front end, HTML is used. This application is supplementary work done by the intern
and in no manner has anything to do with the real application. It was solely created for learning a
new development language and the differences with other scripting languages. All the content
shown in the images of following section is imaginary, done only so that it can cover up for the non
availability of the original screens.

1. Java Server Page (JSP)


Java Server page (JSP) is a template for a Web page that uses Java code to generate an HTML
document dynamically. JSPs are run in a server-side component known as a JSP container,
which translates them into equivalent Java servlets.

A JSP page exists in three forms:

• JSP source code This is the form the developer actually writes. It exists in a text file
with an extension of .jsp, and consists of a mix of HTML template code, Java
language statements, and JSP directives and actions that describe how to generate a
Web page to service a particular request.
• Java source code The JSP container translates the JSP source code into the source
code for an equivalent Java servlet as needed. This source code is typically saved in a
work area and is often helpful for debugging.
• Compiled Java class Like any other Java class, the generated servlet code is compiled
into byte codes in a .class file, ready to be loaded and executed.

The JSP container manages each of these forms of the JSP page automatically, based on the
timestamps of each file. In response to an HTTP request, the container checks to see if the
.jsp source file has been modified since the .java source was last compiled. If so, the
container retranslates the JSP source into Java source and recompiles it. When a request for
a JSP page is made, the container first determines the name of the class corresponding to
the.jsp file. If the class doesn’t exist or if it’s older than the .jsp file (meaning the JSP
source has changed since it was last compiled), then the container creates Java source code
for an equivalent servlet and compiles it. If an instance of the servlet isn’t already running,
the container loads the servlet class and creates an instance. Finally, the container
dispatches a thread to handle the current HTTP request in the loaded instance.

48 | P a g e
ARM Figure 8 Logic used by JSP container to manage JSP translation

49 | P a g e
JSP Basic Structure

<%@ page language="java" contentType="text/html;


charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Sample JSP</title>
<style type="text/css">
@IMPORT url("css/main.css");
</style>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm) {
if (objForm.secondary.value == objForm.primary.value)
alert("Secondary must not be same as primary");
return false;
}
return true;
}
</script>
</head>
<body>
<!—- Servlet Redirect -->
<form action="LinkingApproval" method="post">
<!-- Scriptlet -->
<%
String appmessage = "";
Object message = request.getAttribute("message");
if (message != null && message != "")
appmessage = message.toString();

if (rst.next()) {
%>

<input type="hidden" name="action" />


<p><input type="submit" value="Approve" /></p>
<p style="color: green;"><%=appmessage%></p>
</form>
</center>
</div>
</div>
</body>
</html>

50 | P a g e
2. Java Servlets
To understand Java Server Pages, it’s necessary to understand their underlying technology—
Java servlets. Servlets are Java classes that extend the functionality of a Web server by
dynamically generating Web pages. A run-time environment known as a servlet engine
manages servlet loading and unloading, and works with the Web server to direct requests to
servlets and to send output back to Web clients.

Since their introduction in 1997, servlets have become the dominant environment for
server-side Java programming and a widely used portal into application servers. They offer
several key advantages:

• Performance: Older technologies such as the Common Gateway Interface (CGI)


typically start a new process to handle each incoming request. In the days when the
Web was primarily a repository for academic and scientific research, there wasn’t
very much traffic and this approach worked well. Servlets, by contrast, are loaded
when first requested, and stay in memory indefinitely. The servlets engine loads a
single instance of the servlet class and dispatches requests to it using a pool of
available threads. The resulting performance improvement is considerable.
• Simplicity: Client-side Java applets run in a virtual machine provided by the Web
browser. This introduces compatibility issues that increase complexity and limit the
functionality that applets can provide. Servlets simplify this situation considerably
because they run in a virtual machine in a controlled server environment and
require only basic HTTP to communicate with their clients. No special client software
is required, even with older browsers.
• HTTP Sessions: Although HTTP servers have no built-in capability to remember
details of a previous request from the same client, the Servlet API provides an
HttpSession class that overcomes this limitation.
• Access to Java Technology: Servlets, being Java applications, have direct access to
the full range of Java features, such as threading, network access, and database
connectivity.

JSP pages, which are automatically translated into servlets, inherit all these advantages.

Servlet Life Cycle


Servlets operate in the context of a request and response model managed by a servlet
engine. The engine does the following:

• Loads a servlet when it’s first requested


• Calls the servlet’s init() method
• Handles any number of requests by calling the servlet’s service() method
• When shutting down, calls each servlet’s destroy() method.

51 | P a g e
Java Servlet Basic Structure

package modifications;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class AddSecTemp
*/
public class AddSecTemp extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public AddSecTemp() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
}
}

52 | P a g e
In the miniature of the intranet application designed by the intern, the JSP pages work in
tandem with the servlets. On submitting the form, the action is routed to the appropriate
servlets; which processes the input data and generates a result. In most cases, the response
is generated dynamically as HTML data on the request page.

The dynamic generation of the HTML is done using a StringBuffer object, by appending
HTML tags to its data.

ARM Figure 9 Dynamic HTML Generation using Servlets

53 | P a g e
StringBuffer and dynamic HTML generation

StringBuffer sb = new StringBuffer();


sb.append("<p>");
String id = rs.getString("CustomerID");
// System.out.println(id);
String name = rs.getString("CustomerName");
// System.out.println(name);
String Infid = rs.getString("InfinityID");
// System.out.println(Infid);
sb.append("<table style=\"width:75%;\">");
sb.append("<tr>");
sb.append("<th>Customer ID</th>");
sb.append("<th>Customer Name</th>");
sb.append("<th>Infinity ID</th>");
sb.append("</tr>");
// while (rs.next()) {
sb.append("<tr>");
sb.append("<td>" + id);
sb.append("</td><td>" + name);
sb.append("</td><td>" + Infid);
sb.append("</td></tr>");
// }
sb.append("</table></p>");
//String diag = sb.toString();
//Setting page attribute for Front End processing
String htmlcode = sb.toString();
request.setAttribute("dynhtml", htmlcode);

Front end handling of Dynamic Code generation in servlets

<%
String htmlcode = "";
Object dynhtml = request.getAttribute("dynhtml");
if (dynhtml != null && dynhtml != "")
htmlcode = dynhtml.toString();
%>

<form action="Query" method="post" onsubmit="return


validate(this)">
<input type="hidden" name="action" />
<center>
<input type="text" name="customerid"
onblur="if(this.value == '') this.value='Customer ID';"
onfocus="if(this.value == 'Customer ID') this.value='';"
value="Customer ID" />
<input type="submit" value="Query" />
<%=htmlcode%>
</center>
</form>

54 | P a g e
Code Structure of miniature intranet application

The miniature intranet application has the


following layout:
• Query
o Query Screen
o Internal Query Screen
• Modifications
o Add Secondary Holder
o Modify Secondary Holder
o Delete Secondary Holder
• Approvals
o Linking Approvals

ARM Figure 10 Intranet Application Project Structure

The database designed for the sample


application is divided as four tables:
• Basicdetails
• Secondarycusttemp
• Secondaryholder
• User

ARM Figure 11 Database Structure

55 | P a g e
Work Environment for miniature

ARM Figure 12 MySQL Workbench 5.2 OSS

ARM Figure 13 Eclipse Java EE IDE Galileo

56 | P a g e
Output Screens: Intranet Application Miniature

ARM Figure 14 ARM Intranet Application Login ARM Figure 15 ARM Query Screen

ARM Figure 16 Query Screen Result ARM Figure 17 Internal Query Screen

ARM Figure 19 Add Secondary Holder (Before)


ARM Figure 18 Internal Query Result

ARM Figure 21 Add Secondary Holder (JavaScript


ARM Figure 20 Add Secondary Holder (After) Warning)

57 | P a g e
ARM Figure 22 Secondary User Modification (Before) ARM Figure 23 Secondary User Modification (After)

ARM Figure 24 Delete Secondary User (Before) ARM Figure 25 Delete Secondary User (After)

ARM Figure 26 Linking Approvals (Before) ARM Figure 27 Linking Approvals (After)

58 | P a g e
Appendix
Appendix A Abbreviations used in the document

Abbreviation Expanded Form


OCS Open Computer & Software
OCSInt OCS Inventory Integration Module
IIS Internet Information Services
BLL Business Logic Layer
DAL Data Access Layer
XML Extensible Markup Language
AJAX Asynchronous JavaScript And XML
HTTP Hyper Text Transfer Protocol
HTML Hyper Text Markup Language
GIF Graphics Interchange Format
API Application Programming Interface
ARM Account Relationship & Management
EAI Enterprise Application Interface
IVR Interactive Voice Response
TCS Tata Consultancy Services
ISO International Organization for Standardization
DCMS Debit Card Management System
CRN Customer Relationship Number
ARMDB ARM Database
GB Gigabytes
HDD Hard Disk Drive
GHz Giga Hertz
JSP Java Server Pages
SQL Structured Query Language
IDE Integrated Development Language
FTP File Transfer Protocol

59 | P a g e
Appendix B Application Code
OCSInt: Training Module

Login.aspx (Login Page)


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs"
Inherits="Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>OCSInt - Login</title>
<link href="css/custom.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body
{
background:white; font-family:Myriad Pro;
}
.style1
{
width: 147px;
}
</style>
</head>
<body>
<div id="loginpart">
<img src ="images/logo.png" alt="OCS Inventory Integration" />
<form id="form1" runat="server">
<table style="padding:0.6em; width:100%; text-shadow:0px 1px 0px
#e6e6e6">
<tr style="height:40px;">
<td class="style1">Domain\Username</td>
<td>
<asp:TextBox ID="usernameTextBox" runat="server"
width="100%"></asp:TextBox>
</td>
</tr>
<tr style="height:40px;">
<td class="style1">Password</td>
<td>
<asp:TextBox ID="passwordTextBox" runat="server"
TextMode="Password" width="100%"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" align="right"><br />
<asp:Button ID="SubmitButton" runat="server" Text="Login"
onclick="SubmitButton_Click" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="Label1" runat="server"
ForeColor="Red"></asp:Label>
</td>
</tr>
</table>

</form>
</div>
</body>
</html>

60 | P a g e
Login.aspx.cs (Login Page Code Behind)
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.InteropServices;
using System.Web.Security;
using System.Security.Principal;

public partial class Login : System.Web.UI.Page


{
[DllImport("ADVAPI32.dll", EntryPoint = "LogonUserW", SetLastError = true,
CharSet = CharSet.Auto)]
public static extern bool LogonUser(string lpszUsername, string lpszdomain,
string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
protected void Page_Load(object sender, EventArgs e)
{

}
protected void SubmitButton_Click(object sender, EventArgs e)
{
/* Obtain the name of the user */
string domainname = GetDomainName(usernameTextBox.Text);
/* Obtain the username of the user on the domain */
string username = GetUserName(usernameTextBox.Text);
/* Store the username in a session variable to initiate a session with
the logged on user */
Session["NTUser"] = username;
Session["Domain"] = domainname;
/* Create a token that associates a handle with the user logging into
the website */
IntPtr token = IntPtr.Zero;
bool result = LogonUser(username, domainname, passwordTextBox.Text, 2,
0, ref token);
if (result)
{
if (String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
{
FormsAuthentication.RedirectFromLoginPage(usernameTextBox.Text,
false);
string url = "Restricted//User.aspx";
Response.Redirect(url);
}
else
{
FormsAuthentication.SetAuthCookie(usernameTextBox.Text, false);
string url = "~/Restricted//User.aspx";
Response.Redirect(url);
}
}
else
{
Label1.Text = "Username / Password incorrect";
}
}

private string GetUserName(string p)


{
if (string.IsNullOrEmpty(p))
{

61 | P a g e
throw (new ArgumentException("Argument can't be null", "p"));
}
if (p.Contains("\\"))
{
int index = p.IndexOf("\\");
return p.Substring(index + 1);
}
else if (p.Contains("@"))
{
int index = p.IndexOf("@");
return p.Substring(0, index);
}
else
return p;

private string GetDomainName(string p)


{
if (string.IsNullOrEmpty(p))
{
throw (new ArgumentException("Argument can't be null", "p"));
}
if (p.Contains("\\"))
{
int index = p.IndexOf("\\");
return p.Substring(0, index);
}
else if (p.Contains("@"))
{
int index = p.IndexOf("@");
return p.Substring(index + 1);
}
else
return "";
}
}

62 | P a g e
Request.aspx (Removal Request Page)
<%@ Page Title="" Language="C#" MasterPageFile="~/Restricted/MasterPage.master"
AutoEventWireup="true" CodeFile="Request.aspx.cs" Inherits="Restricted_Request"
%>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">


<link href="../css/uncompressed/960.css" rel="stylesheet" type="text/css" />
<link href="../css/uncompressed/reset.css" rel="stylesheet" type="text/css"
/>
<link href="../css/uncompressed/text.css" rel="stylesheet" type="text/css"
/>
<link href="../css/custom.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<asp:Label ID="loggedLabel" runat="server"></asp:Label>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2"
Runat="Server">
<br /><br />
<div class="grid_3">
<asp:Menu ID="Menu1" runat="server" Font-Size="12px"
ForeColor="#0069FF" Width="60%"
BackColor="Transparent" DynamicHorizontalOffset="2"
StaticSubMenuIndent="10px">
<StaticSelectedStyle BackColor="#303030" />
<StaticMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" />
<DynamicHoverStyle ForeColor="#0069FF" />
<DynamicMenuStyle BackColor="#303030" HorizontalPadding="5px"
ForeColor="#008bff"
VerticalPadding="5px"/>
<DynamicSelectedStyle BackColor="#e6e6e6" ForeColor="Black"/>
<DynamicMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" ForeColor="#008bff"/>
<StaticHoverStyle ForeColor="White" />

<Items>
<asp:MenuItem ImageUrl="~/images/menu.png"
Text="Administrator"
Value="Administrator">
<asp:MenuItem
NavigateUrl="~/Restricted/ViewRequest.aspx" Text="View Requests"
Value="View Requests"></asp:MenuItem>
<asp:MenuItem
NavigateUrl="~/Restricted/SoftwareReport.aspx"
Text="Software Report" Value="Software
Report"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem ImageUrl="~/images/menu.png" Text="User"
Value="User">
<asp:MenuItem NavigateUrl="~/Restricted/User.aspx"
Text="Installed"
Value="Installed"></asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Restricted/Request.aspx"
Text="Request Removal"
Value="Request Removal"></asp:MenuItem>
</asp:MenuItem>
</Items>

</asp:Menu>
</div>
<div class="grid_8" style="color:White">
<br />

63 | P a g e
<p>
<asp:RadioButtonList ID="ChoiceList" runat="server"
RepeatDirection="Horizontal" Font-Size="11px" AutoPostBack="true">
<asp:ListItem Text="View All Softwares"
Value="1"></asp:ListItem>
<asp:ListItem Text="View By Manufacturer"
Value="2"></asp:ListItem>
</asp:RadioButtonList>
</p>
<p>
&nbsp;</p>
<p>
<asp:DropDownList ID="ManufacturerDropDown" runat="server"
AutoPostBack="True"
DataSourceID="ManufacturerSource"
DataTextField="tod_Manufacturer"
DataValueField="tod_Manufacturer"

onselectedindexchanged="ManufacturerDropDown_SelectedIndexChanged"
ondatabound="ManufacturerDropDown_DataBound">
</asp:DropDownList>
</p>
<br />
<p>
<center>
<asp:GridView ID="GridView1" runat="server" ForeColor="#008bff"
Font-Size="11px" AutoGenerateColumns="False"
DataSourceID="SoftwareSource"
Width="100%" BorderStyle="Solid" BorderColor="Black"
BorderWidth="1px">
<Columns>
<asp:BoundField DataField="tod_ProfileCd"
HeaderText="Profile Code"
SortExpression="tod_ProfileCd" />
<asp:BoundField DataField="tod_MachineName"
HeaderText="Machine Name"
SortExpression="tod_MachineName" />
<asp:BoundField DataField="tod_AssetCd" HeaderText="Asset
Code"
SortExpression="tod_AssetCd" />
<asp:BoundField DataField="tod_IPAddress" HeaderText="IP
Address"
SortExpression="tod_IPAddress" />
<asp:BoundField DataField="tod_Manufacturer"
HeaderText="Manufacturer"
SortExpression="tod_Manufacturer" />
<asp:BoundField DataField="tod_SoftwareName"
HeaderText="Software Name"
SortExpression="tod_SoftwareName" />
<asp:BoundField DataField="tod_Version" HeaderText="Version"
SortExpression="tod_Version" />
<asp:TemplateField HeaderText="Release">
<ItemTemplate>
<asp:CheckBox runat="server" ID="ReleaseCheckBox" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="Header" />
<RowStyle CssClass="Row" />
</asp:GridView>
</center>
<asp:ObjectDataSource ID="SoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByProfileCode"
TypeName="DetailsBLL">
<SelectParameters>
<asp:SessionParameter DefaultValue="Abs D"
Name="ProfileCode"

64 | P a g e
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="ManuSoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByManufacturer" TypeName="DetailsBLL">
<SelectParameters>
<asp:ControlParameter ControlID="ManufacturerDropDown"
Name="Manufacturer"
PropertyName="SelectedValue" Type="String" />
<asp:SessionParameter DefaultValue="Abs D"
Name="ProfileCode"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:SqlDataSource ID="ManufacturerSource" runat="server"
ConnectionString="<%$ ConnectionStrings:OCSIntConnectionString
%>"

SelectCommand="SELECT DISTINCT [tod_Manufacturer] FROM


[trOCSDetails] WHERE ([tod_ProfileCd] = @tod_ProfileCd)">
<SelectParameters>
<asp:SessionParameter DefaultValue="Abs D"
Name="tod_ProfileCd"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</p>
<br />
<p>
<asp:Button ID="UpdateButton" runat="server" Text="Update"
onclick="UpdateButton_Click" />
</p>
</div>
</asp:Content>

Request.aspx.cs (Request Page Code Behind)


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Security.Principal;

public partial class Restricted_Request : System.Web.UI.Page


{
/* Create a DataSet to store the values to be inserted in bulk */
DataSet ds = new DataSet();
/* String to store the XML data */
string s = null;

/* ----------------------------------------------------------------
* Purpose: This function is executed on page load, used here to
dynamically form menu for navigation
* ------------------------------------------------------------- */
protected void Page_Load(object sender, EventArgs e)
{
/* Determine the role of the logged on user */
string accounttype = WindowsBuiltInRole.Administrator.ToString();

65 | P a g e
/* Menu items for administrator portion */
MenuItem mi1 = new MenuItem("Administrator", "Admin",
"../images/menu.png");
MenuItem report = new MenuItem("Software Report", "SR", "",
"SoftwareReport.aspx");
MenuItem vrequest = new MenuItem("View Requests", "VR", "",
"ViewRequest.aspx");
/* Menu items for user portion */
MenuItem mi2 = new MenuItem("User", "User", "../images/menu.png");
MenuItem request = new MenuItem("Request Removal", "RR", "",
"Request.aspx");
MenuItem installed = new MenuItem("View Installed", "VI", "",
"User.aspx");
/* Dynamically generate the menu */
if (accounttype == "Administrator")
{
Menu1.Items.Clear();
mi1.ChildItems.Add(report);
mi1.ChildItems.Add(vrequest);
Menu1.Items.Add(mi1);
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
else
{
Menu1.Items.Clear();
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
ManufacturerDropDown.Visible = ((ChoiceList.SelectedIndex > 0) ? true :
false);

/* Set the logged on user */


loggedLabel.Text = "Logged on user: " + Session["NTUser"].ToString() +
"/" + accounttype;
}

/* ----------------------------------------------------------------
* Purpose: This function is fired to create XML data with values to be
inserted in the ReleaseData table
* ------------------------------------------------------------- */

protected void UpdateButton_Click(object sender, EventArgs e)


{
/* Create a DataTable to append to the DataSet */
DataTable dt = ds.Tables.Add("root");
/* Declare a new checkbox to assign the use as a reference variable */
CheckBox c = new CheckBox();
/* Add the columns to the declared data table to reproduce the database
schema */
dt.Columns.Add("ProfileCode", typeof(string));
dt.Columns.Add("SoftwareName", typeof(string));
dt.Columns.Add("Manufacturer", typeof(string));
dt.Columns.Add("Version", typeof(string));
dt.Columns.Add("Release", typeof(bool));
/* Check if the checkbox is selected/checked */
for (int i = 0; i < GridView1.Rows.Count; i++)
{
/* Select the checkbox from each row */
c = GridView1.Rows[i].Cells[7].FindControl("ReleaseCheckBox") as
CheckBox;
/* If the checkbox is ticked, store the values from the grid in the
DataTable */
if (c.Checked)
{
DataRow r;

66 | P a g e
r = dt.NewRow();
r["ProfileCode"] = GridView1.Rows[i].Cells[0].Text;
r["SoftwareName"] = GridView1.Rows[i].Cells[5].Text;
r["Manufacturer"] = GridView1.Rows[i].Cells[4].Text;
r["Version"] = GridView1.Rows[i].Cells[6].Text;
r["Release"] = c.Checked ? true : false;
dt.Rows.Add(r);
}
}
/* Store the data taken from the previous step as XML Data in a string
variable */
s = dt.DataSet.GetXml();
/* Invoke stored Procedure */
/* Set the connection string and configure the connection */
string connectionString =
ConfigurationManager.ConnectionStrings["OCSIntConnectionString"].ConnectionStri
ng;
SqlConnection connection = new SqlConnection(connectionString);
/* Open the connection */
connection.Open();
/* Call the command */
SqlCommand command = new SqlCommand("InsertRelease", connection);
/* Specify the command type */
command.CommandType = CommandType.StoredProcedure;
/* Pass the xml data as parameter */
command.Parameters.AddWithValue("@xmlData", s);
int k = command.ExecuteNonQuery();
/* Close the SQL Connection */
connection.Close();
}

/* ----------------------------------------------------------------
* Purpose: Function for binding other ObjectDataSource to the GridView
sorted by manufacturer, on selection change
* ------------------------------------------------------------- */

protected void ManufacturerDropDown_SelectedIndexChanged(object sender,


EventArgs e)
{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();
}

/* ----------------------------------------------------------------
* Purpose: Function for binding other ObjectDataSource to the GridView
sorted by manufacturer, on data binding
* ------------------------------------------------------------- */

protected void ManufacturerDropDown_DataBound(object sender, EventArgs e)


{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();
}

/* ---------------------------------------------------------------
* Purpose: Function for binding other ObjectDataSource to the GridView
sorted by manufacturer or generic, via selection
* ------------------------------------------------------------- */

protected void ChoiceList_SelectedIndexChanged(object sender, EventArgs e)


{
GridView1.DataSourceID = ((ChoiceList.SelectedIndex > 0) ?
"SoftwareSource" : "ManuSoftwareSource");
}
}

67 | P a g e
SoftwareReport.aspx (Software Report Page)
<%@ Page Title="" Language="C#" MasterPageFile="~/Restricted/MasterPage.master"
AutoEventWireup="true" CodeFile="SoftwareReport.aspx.cs"
Inherits="Restricted_SoftwareReport" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">


<style type="text/css">
.style1
{
width: 109px;
font-weight: bold;
}
.style2
{
width: 197px;
}
.style3
{
width: 100px;
font-weight: bold;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<asp:Label runat="server" ID="loggedLabel"></asp:Label>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2"
Runat="Server">
<br /><br />
<div class="grid_3">
<asp:Menu ID="Menu1" runat="server" Font-Size="12px"
ForeColor="#0069FF" Width="60%"
BackColor="Transparent" DynamicHorizontalOffset="2"
StaticSubMenuIndent="10px">
<StaticSelectedStyle BackColor="#303030" />
<StaticMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" />
<DynamicHoverStyle ForeColor="#0069FF" />
<DynamicMenuStyle BackColor="#303030" HorizontalPadding="5px"
ForeColor="#008bff"
VerticalPadding="5px"/>
<DynamicSelectedStyle BackColor="#e6e6e6" ForeColor="Black"/>
<DynamicMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" ForeColor="#008bff"/>
<StaticHoverStyle ForeColor="White" />
</asp:Menu>
</div>
<div class="grid_8">
<br /><br />
<asp:FormView ID="FormView1" runat="server"
DataSourceID="SoftwareSource"
Width="100%" onprerender="FormView1_PreRender">
<EditItemTemplate>
<table style="width:100%; font-size:12px; color:white">
<tr>
<td class="style1">
Product Code</td>
<td class="style2">
<asp:Label ID="Label1" runat="server" Text='<%#
Eval("mp_ProductCd") %>'></asp:Label>
<br />
<br />
</td>

68 | P a g e
<td class="style3">
Created Date</td>
<td>
<asp:Label ID="CreatedDateLabel" runat="server"
Text='<%# Eval("mp_CreatedDt", "{0:d}")
%>'></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
Product Name</td>
<td class="style2">
<asp:Label ID="Label2" runat="server" Text='<%#
Eval("mp_ProductName") %>'></asp:Label>
<br />
<br />
</td>
<td class="style3">
Updated Date</td>
<td>
<asp:TextBox ID="mp_UpdatedDtTextBox"
runat="server"
Text='<%# Bind("mp_UpdatedDt") %>' />
<br />
</td>
</tr>
<tr>
<td class="style1">
Active</td>
<td class="style2">
<asp:CheckBox ID="mp_ActiveCheckBox" runat="server"
Checked='<%# Bind("mp_Active") %>' />
<br />
<br />
</td>
<td class="style3">
Created By</td>
<td>
<asp:Label ID="CreatedByLabel" runat="server"
Text='<%# Eval("mp_CreatedBy") %>'></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
Cost</td>
<td class="style2">
<asp:Label ID="Label3" runat="server" Text='<%#
Eval("mp_Cost", "{0:C}") %>'></asp:Label>
<br />
<br />
</td>
<td class="style3">
Updated By</td>
<td>
<asp:TextBox ID="mp_UpdatedByTextBox"
runat="server"
Text='<%# Bind("mp_UpdatedBy") %>' />
<br />
</td>
</tr>
<tr>
<td class="style1">
Licenses</td>
<td class="style2">
<asp:TextBox ID="mp_NoofLicenseTextBox"
runat="server"
Text='<%# Bind("mp_NoofLicense") %>' />
<br />

69 | P a g e
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td class="style1">
Recovery Period</td>
<td class="style2">
<asp:TextBox ID="mp_RecoveryPeriodTextBox"
runat="server"
Text='<%# Bind("mp_RecoveryPeriod") %>' />
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
</table>
<br />
<asp:LinkButton ID="UpdateButton" runat="server"
CausesValidation="True"
CommandName="Update" Text="Update" />
&nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel"
/>
</EditItemTemplate>
<InsertItemTemplate>
<table style="width:100%; font-size:12px; color:white">
<tr>
<td class="style1">
Product Code</td>
<td class="style2">
<asp:TextBox ID="mp_ProductCdTextBox"
runat="server"
Text='<%# Bind("mp_ProductCd") %>'
ReadOnly="True" />
<br />
</td>
<td class="style3">
Created Date</td>
<td>
<asp:Label ID="CreatedDateLabel" runat="server"
Text='<%# Eval("mp_CreatedDt", "{0:d}")
%>'></asp:Label>
</td>
</tr>
<tr>
<td class="style1">
Product Name</td>
<td class="style2">
<asp:TextBox ID="mp_ProductNameTextBox"
runat="server"
Text='<%# Bind("mp_ProductName") %>' />
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td class="style1">
Active</td>
<td class="style2">

70 | P a g e
<asp:CheckBox ID="mp_ActiveCheckBox" runat="server"
Checked='<%# Bind("mp_Active") %>' />
<br />
</td>
<td class="style3">
Created By</td>
<td>
<asp:TextBox ID="mp_CreatedByTextBox"
runat="server"
Text='<%# Bind("mp_CreatedBy") %>' />
</td>
</tr>
<tr>
<td class="style1">
Cost</td>
<td class="style2">
<asp:TextBox ID="mp_CostTextBox" runat="server"
Text='<%# Bind("mp_Cost") %>' />
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td class="style1">
Licenses</td>
<td class="style2">
<asp:TextBox ID="mp_NoofLicenseTextBox"
runat="server"
Text='<%# Bind("mp_NoofLicense") %>' />
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td class="style1">
Recovery Period</td>
<td class="style2">
<asp:TextBox ID="mp_RecoveryPeriodTextBox"
runat="server"
Text='<%# Bind("mp_RecoveryPeriod") %>' />
<br />
</td>
<td class="style3">
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
</table>
&nbsp;<br />
<asp:LinkButton ID="InsertButton" runat="server"
CausesValidation="True"
CommandName="Insert" Text="Insert" />
&nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel" Text="Cancel"
/>
</InsertItemTemplate>
</asp:FormView>
<br />
<asp:Button ID="InsertButton" runat="server" Text="Insert"
/>
<br />
<br />

71 | P a g e
<br />
<asp:GridView ID="GridView1" runat="server" Font-Size="11px"
Width="100%"
AutoGenerateColumns="False" DataSourceID="SoftwareSource"
ForeColor="#008BFF" GridLines="Vertical" BorderColor="Black"
BorderStyle="Solid" BorderWidth="1px"
onselectedindexchanged="GridView1_SelectedIndexChanged"
ondatabound="GridView1_DataBound" DataKeyNames="mp_ProductCd"
AllowPaging="True">
<Columns>

<asp:CommandField ShowSelectButton="True"
ButtonType="Button"
SelectText="Edit" />

<asp:BoundField DataField="mp_ProductCd" HeaderText="Code"


SortExpression="mp_ProductCd" />
<asp:BoundField DataField="mp_ProductName"
HeaderText="Name"
SortExpression="mp_ProductName" />
<asp:CheckBoxField DataField="mp_Active"
HeaderText="Active" ReadOnly="true"
SortExpression="mp_Active" />
<asp:BoundField DataField="mp_Cost" HeaderText="Cost"
SortExpression="mp_Cost" NullDisplayText="NULL" />
<asp:BoundField DataField="mp_NoofLicense"
HeaderText="Licenses"
SortExpression="mp_NoofLicense" />
<asp:BoundField DataField="mp_RecoveryPeriod"
HeaderText="Recovery Period"
SortExpression="mp_RecoveryPeriod" />
</Columns>
<HeaderStyle CssClass="Header" />
<RowStyle CssClass="Row" />
<FooterStyle CssClass="Footer" />
</asp:GridView>
<asp:ObjectDataSource ID="SoftwareSource" runat="server"
InsertMethod="InsertProduct"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetShort" TypeName="ProductsBLL">
<InsertParameters>
<asp:Parameter Name="ProductCode" Type="String" />
<asp:Parameter Name="ProductName" Type="String" />
<asp:Parameter Name="active" Type="Boolean" />
<asp:Parameter Name="cost" Type="Int32" />
<asp:Parameter Name="licenses" Type="Int32" />
<asp:Parameter Name="recoveryperiod" Type="Int32" />
<asp:Parameter Name="created" Type="DateTime" />
<asp:Parameter Name="updated" Type="DateTime" />
<asp:Parameter Name="cby" Type="String" />
<asp:Parameter Name="uby" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
InsertMethod="InsertProduct"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByProductCode" TypeName="ProductsBLL"
UpdateMethod="UpdateProducts">
<UpdateParameters>
<asp:Parameter Name="license" Type="Int32" />
<asp:Parameter Name="Udt" Type="DateTime" />
<asp:Parameter Name="Uby" Type="String" />
<asp:Parameter Name="productCode" Type="String" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="ProductCode"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>

72 | P a g e
<InsertParameters>
<asp:Parameter Name="ProductCode" Type="String" />
<asp:Parameter Name="ProductName" Type="String" />
<asp:Parameter Name="active" Type="Boolean" />
<asp:Parameter Name="cost" Type="Int32" />
<asp:Parameter Name="licenses" Type="Int32" />
<asp:Parameter Name="recoveryperiod" Type="Int32" />
<asp:Parameter Name="created" Type="DateTime" />
<asp:Parameter Name="updated" Type="DateTime" />
<asp:Parameter Name="cby" Type="String" />
<asp:Parameter Name="uby" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
</div>
</asp:Content>

SoftwareReport.aspx.cs (Software Report Page Code Behind)


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Principal;

public partial class Restricted_SoftwareReport : System.Web.UI.Page


{
public static string lastcode = null;

protected void Page_Load(object sender, EventArgs e)


{
/* Determine the role of the logged on user */
string accounttype = WindowsBuiltInRole.Administrator.ToString();
/* Menu items for administrator portion */
MenuItem mi1 = new MenuItem("Administrator", "Admin",
"../images/menu.png");
MenuItem report = new MenuItem("Software Report", "SR", "",
"SoftwareReport.aspx");
MenuItem vrequest = new MenuItem("View Requests", "VR", "",
"ViewRequest.aspx");
/* Menu items for user portion */
MenuItem mi2 = new MenuItem("User", "User", "../images/menu.png");
MenuItem request = new MenuItem("Request Removal", "RR", "",
"Request.aspx");
MenuItem installed = new MenuItem("View Installed", "VI", "",
"User.aspx");
/* Dynamically generate the menu */
if (accounttype == "Administrator")
{
Menu1.Items.Clear();
mi1.ChildItems.Add(report);
mi1.ChildItems.Add(vrequest);
Menu1.Items.Add(mi1);
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
else
{
Menu1.Items.Clear();
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);

73 | P a g e
}
/* Set the logged on user */
loggedLabel.Text = "Logged on user: " + Session["NTUser"].ToString() +
"/" + accounttype;
/* Event Handlers */
GridView1.Load += new EventHandler(GridView1_Load);
InsertButton.Click += new EventHandler(InsertButton_Click);
InsertButton.Visible = true;
}

void InsertButton_Click(object sender, EventArgs e)


{
FormView1.ChangeMode(FormViewMode.Insert);
InsertButton.Visible = false;
}

void GridView1_Load(object sender, EventArgs e)


{
int i = GridView1.Rows.Count;
lastcode = GridView1.Rows[i - 1].Cells[0].Text;
}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)


{
FormView1.ChangeMode(FormViewMode.Edit);
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
int i = GridView1.Rows.Count;
lastcode = GridView1.Rows[i - 1].Cells[0].Text;
}
protected void FormView1_PreRender(object sender, EventArgs e)
{
if (FormView1.CurrentMode == FormViewMode.Insert)
{
int i = GridView1.Rows.Count;
lastcode = "A" + Convert.ToString(i + 1).PadLeft(4, '0');
TextBox ProfileCodeBox = new TextBox();
ProfileCodeBox = FormView1.FindControl("mp_ProductCdTextBox") as
TextBox;
ProfileCodeBox.Text = lastcode;
Label CreatedDate = new Label();
CreatedDate = FormView1.FindControl("CreatedDateLabel") as Label;
CreatedDate.Text = DateTime.Now.ToString();
}
else if(FormView1.CurrentMode == FormViewMode.Edit)
{
TextBox UpdatedDate = new TextBox();
UpdatedDate = FormView1.FindControl("mp_UpdatedDtTextBox") as
TextBox;
UpdatedDate.Text = DateTime.Now.ToString();
InsertButton.Visible = false;
}
}
}

74 | P a g e
User.aspx ( Software Listing for Users)
<%@ Page Title="" Language="C#" MasterPageFile="~/Restricted/MasterPage.master"
AutoEventWireup="true" CodeFile="User.aspx.cs" Inherits="Restricted_User" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">


<link href="../css/uncompressed/960.css" rel="stylesheet" type="text/css"
/>
<link href="../css/uncompressed/reset.css" rel="stylesheet" type="text/css"
/>
<link href="../css/uncompressed/text.css" rel="stylesheet" type="text/css"
/>
<link href="../css/custom.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<asp:Label runat="server" ID="loggedLabel"></asp:Label>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2"
Runat="Server">
<br /><br />
<div class="grid_3">
<asp:Menu ID="Menu1" runat="server" BackColor="Transparent"
DynamicHorizontalOffset="2" Font-Size="12px" ForeColor="#0069FF"
StaticSubMenuIndent="10px" Width="60%">
<StaticSelectedStyle BackColor="#303030" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px"
/>
<DynamicHoverStyle ForeColor="#0069FF" />
<DynamicMenuStyle BackColor="#303030" ForeColor="#008bff"
HorizontalPadding="5px" VerticalPadding="5px" />
<DynamicSelectedStyle BackColor="#e6e6e6" ForeColor="Black" />
<DynamicMenuItemStyle ForeColor="#008bff" HorizontalPadding="5px"
VerticalPadding="2px" />
<StaticHoverStyle ForeColor="White" />
</asp:Menu>
</div>

<div class="grid_8" style="color:White">


<asp:ObjectDataSource ID="SoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByProfileCode" TypeName="DetailsBLL">
<SelectParameters>
<asp:SessionParameter DefaultValue="Abs D" Name="ProfileCode"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<br />
<p>
<asp:RadioButtonList ID="ChoiceList" runat="server"
RepeatDirection="Horizontal" Font-Size="11px"
AutoPostBack="true"
onselectedindexchanged="ChoiceList_SelectedIndexChanged">
<asp:ListItem Text="View All Softwares"
Value="1"></asp:ListItem>
<asp:ListItem Text="View By Manufacturer"
Value="2"></asp:ListItem>
</asp:RadioButtonList>
</p>
<p>
&nbsp;</p>
<p>
<asp:DropDownList ID="ManufacturerDropDown" runat="server"
AutoPostBack="True"
DataSourceID="ManufacturerSource"

75 | P a g e
DataTextField="tod_Manufacturer"
DataValueField="tod_Manufacturer"

onselectedindexchanged="ManufacturerDropDown_SelectedIndexChanged"
ondatabound="ManufacturerDropDown_DataBound">
</asp:DropDownList>
</p>
<br /><br />
<p>
<center>
<asp:GridView runat="server" Font-Size="11px" ID="GridView1"
Width="100%" HorizontalAlign="Center"
AllowPaging="True" AutoGenerateColumns="False" ForeColor="#008bff"
BorderStyle="Solid" BorderColor="Black" BorderWidth="1px"
DataSourceID="SoftwareSource" PageSize="15" CaptionAlign="Left"
HeaderStyle-BackColor="#303030"
CellPadding="10" GridLines="Vertical" CellSpacing="5">
<Columns>
<asp:BoundField DataField="tod_ProfileCd" HeaderText="Profile
Code"
SortExpression="tod_ProfileCd" />
<asp:BoundField DataField="tod_MachineName" HeaderText="Machine
Name"
SortExpression="tod_MachineName" />
<asp:BoundField DataField="tod_AssetCd" HeaderText="Asset Code"
SortExpression="tod_AssetCd" />
<asp:BoundField DataField="tod_IPAddress" HeaderText="IP
Address"
SortExpression="tod_IPAddress" />
<asp:BoundField DataField="tod_Manufacturer"
HeaderText="Manufacturer"
SortExpression="tod_Manufacturer" />
<asp:BoundField DataField="tod_SoftwareName"
HeaderText="Software Name"
SortExpression="tod_SoftwareName" />
<asp:BoundField DataField="tod_Version" HeaderText="Version"
SortExpression="tod_Version" />
</Columns>
<HeaderStyle CssClass="Header" />
<RowStyle CssClass="Row" />
</asp:GridView>
</center>
<asp:SqlDataSource ID="ManufacturerSource" runat="server"
ConnectionString="<%$ ConnectionStrings:OCSIntConnectionString %>"
SelectCommand="SELECT DISTINCT [tod_Manufacturer] FROM
[trOCSDetails] WHERE ([tod_ProfileCd] = @tod_ProfileCd)">
<SelectParameters>
<asp:SessionParameter DefaultValue="Abs D" Name="tod_ProfileCd"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:ObjectDataSource ID="ManuSoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByManufacturer" TypeName="DetailsBLL">
<SelectParameters>
<asp:ControlParameter ControlID="ManufacturerDropDown"
Name="Manufacturer"
PropertyName="SelectedValue" Type="String" />
<asp:SessionParameter DefaultValue="Abs D" Name="ProfileCode"
SessionField="NTUser" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
&nbsp;</p>
</div>
</asp:Content>

76 | P a g e
User.aspx.cs (Software Listing for Users – Code Behind)
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Security.Principal;

public partial class Restricted_User : System.Web.UI.Page


{
/* ----------------------------------------------------------------
* Purpose: This function is executed on page load, used here to
dynamically form menu for navigation
* ------------------------------------------------------------- */
protected void Page_Load(object sender, EventArgs e)
{
/* Determine the role of the logged on user */
string accounttype = WindowsBuiltInRole.Administrator.ToString();
/* Menu items for administrator portion */
MenuItem mi1 = new MenuItem("Administrator", "Admin",
"../images/menu.png");
MenuItem report = new MenuItem("Software Report", "SR", "",
"SoftwareReport.aspx");
MenuItem vrequest = new MenuItem("View Requests", "VR", "",
"ViewRequest.aspx");
/* Menu items for user portion */
MenuItem mi2 = new MenuItem("User", "User", "../images/menu.png");
MenuItem request = new MenuItem("Request Removal", "RR", "",
"Request.aspx");
MenuItem installed = new MenuItem("View Installed", "VI", "",
"User.aspx");
/* Dynamically generate the menu */
if (accounttype == "Administrator")
{
Menu1.Items.Clear();
mi1.ChildItems.Add(report);
mi1.ChildItems.Add(vrequest);
Menu1.Items.Add(mi1);
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
else
{
Menu1.Items.Clear();
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
ManufacturerDropDown.Visible = ((ChoiceList.SelectedIndex > 0) ? true :
false);
/* Set the logged on user */
loggedLabel.Text = "Logged on user: "+Session["NTUser"].ToString() +
"/" + accounttype;
}

/* ----------------------------------------------------------------
* Purpose: Function for binding other ObjectDataSource to the GridView
sorted by manufacturer, on selection change
* ------------------------------------------------------------- */

protected void ManufacturerDropDown_SelectedIndexChanged(object sender,


EventArgs e)

77 | P a g e
{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();
}

/* ----------------------------------------------------------------
* Purpose: Function for binding other ObjectDataSource to the GridView
sorted by manufacturer, on data binding
* ------------------------------------------------------------- */

protected void ManufacturerDropDown_DataBound(object sender, EventArgs e)


{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();
}

/* ---------------------------------------------------------------- *
Purpose: Function for binding other ObjectDataSource to the GridView sorted by
manufacturer or generic, via selection
* --------------------------------------------------------------*/

protected void ChoiceList_SelectedIndexChanged(object sender, EventArgs e)


{
GridView1.DataSourceID = ((ChoiceList.SelectedIndex == 0)?
"SoftwareSource" : "ManuSoftwareSource");
}
}

78 | P a g e
ViewRequest.aspx (Request Listing for)
<%@ Page Title="" Language="C#" MasterPageFile="~/Restricted/MasterPage.master"
AutoEventWireup="true" CodeFile="ViewRequest.aspx.cs"
Inherits="Restricted_ViewRequest" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">


</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<asp:Label runat="server" ID="loggedLabel"></asp:Label>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2"
Runat="Server">
<br /><br />
<div class="grid_3">
<asp:Menu ID="Menu1" runat="server" Font-Size="12px"
ForeColor="#0069FF" Width="60%"
BackColor="Transparent" DynamicHorizontalOffset="2"
StaticSubMenuIndent="10px">
<StaticSelectedStyle BackColor="#303030" />
<StaticMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" />
<DynamicHoverStyle ForeColor="#0069FF" />
<DynamicMenuStyle BackColor="#303030" HorizontalPadding="5px"
ForeColor="#008bff"
VerticalPadding="5px"/>
<DynamicSelectedStyle BackColor="#e6e6e6" ForeColor="Black"/>
<DynamicMenuItemStyle HorizontalPadding="5px"
VerticalPadding="2px" ForeColor="#008bff"/>
<StaticHoverStyle ForeColor="White" />
</asp:Menu>
</div>
<div class="grid_8" style="color:White;">
<br /><br />
<p>
<asp:RadioButtonList ID="ChoiceList" runat="server" Font-
Size="11px"
RepeatDirection="Horizontal" AutoPostBack="True"
onselectedindexchanged="ChoiceList_SelectedIndexChanged">
<asp:ListItem Text="View By Profile Code"></asp:ListItem>
<asp:ListItem Text="View By Manufacturer"></asp:ListItem>
</asp:RadioButtonList>
</p>
<br />
<p>
<asp:DropDownList ID="ManufacturerDropDown" runat="server"
AutoPostBack="True"
DataSourceID="ManufacturerSource" DataTextField="Manufacturer"
DataValueField="Manufacturer"
ondatabound="ManufacturerDropDown_DataBound"

onselectedindexchanged="ManufacturerDropDown_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ProfileCodeDropDown" runat="server"
AutoPostBack="True"
DataSourceID="ProfileCodeSource" DataTextField="ProfileCode"
DataValueField="ProfileCode"
ondatabound="ProfileCodeDropDown_DataBound"

onselectedindexchanged="ProfileCodeDropDown_SelectedIndexChanged">
</asp:DropDownList>
</p>
<br />
<p>

79 | P a g e
<center>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
Font-Size="11px" Width="100%"
AutoGenerateColumns="False" DataSourceID="LoadSource"
ForeColor="#008bff" GridLines="Vertical" BorderColor="Black"
BorderStyle="Solid" BorderWidth="1px">
<Columns>
<asp:BoundField DataField="ProfileCode"
HeaderText="ProfileCode"
SortExpression="ProfileCode" />
<asp:BoundField DataField="SoftwareName"
HeaderText="SoftwareName"
SortExpression="SoftwareName" />
<asp:BoundField DataField="Manufacturer"
HeaderText="Manufacturer"
SortExpression="Manufacturer" />
<asp:BoundField DataField="Version" HeaderText="Version"
SortExpression="Version" />
<asp:CheckBoxField DataField="Release" HeaderText="Release"
SortExpression="Release" />
</Columns>
<HeaderStyle CssClass="Header" />
<RowStyle CssClass="Row" />
</asp:GridView>

</center>
<asp:SqlDataSource ID="ManufacturerSource" runat="server"
ConnectionString="<%$ ConnectionStrings:OCSIntConnectionString
%>"
SelectCommand="SELECT DISTINCT [Manufacturer] FROM
[ReleaseData]"></asp:SqlDataSource>
<asp:SqlDataSource ID="ProfileCodeSource" runat="server"
ConnectionString="<%$ ConnectionStrings:OCSIntConnectionString
%>"
SelectCommand="SELECT DISTINCT [ProfileCode] FROM
[ReleaseData]"></asp:SqlDataSource>
<asp:ObjectDataSource ID="SoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByProfileCode" TypeName="ReleaseBLL">
<SelectParameters>
<asp:ControlParameter ControlID="ProfileCodeDropDown"
DefaultValue="Abs D"
Name="ProfileCode" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="ManuSoftwareSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByManufacturer" TypeName="ReleaseBLL">
<SelectParameters>
<asp:ControlParameter ControlID="ManufacturerDropDown"
Name="Manu"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="LoadSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetAll"
TypeName="ReleaseBLL"></asp:ObjectDataSource>
</p>
</div>
</asp:Content>

80 | P a g e
ViewRequest.aspx.cs( Software Listing for Users – Code Behind)
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Principal;

public partial class Restricted_ViewRequest : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)
{
/* Determine the role of the logged on user */
string accounttype = WindowsBuiltInRole.Administrator.ToString();
/* Menu items for administrator portion */
MenuItem mi1 = new MenuItem("Administrator", "Admin",
"../images/menu.png");
MenuItem report = new MenuItem("Software Report", "SR", "",
"SoftwareReport.aspx");
MenuItem vrequest = new MenuItem("View Requests", "VR", "",
"ViewRequest.aspx");
/* Menu items for user portion */
MenuItem mi2 = new MenuItem("User", "User", "../images/menu.png");
MenuItem request = new MenuItem("Request Removal", "RR", "",
"Request.aspx");
MenuItem installed = new MenuItem("View Installed", "VI", "",
"User.aspx");
/* Dynamically generate the menu */
if (accounttype == "Administrator")
{
Menu1.Items.Clear();
mi1.ChildItems.Add(report);
mi1.ChildItems.Add(vrequest);
Menu1.Items.Add(mi1);
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
else
{
Menu1.Items.Clear();
mi2.ChildItems.Add(installed);
mi2.ChildItems.Add(request);
Menu1.Items.Add(mi2);
}
ManufacturerDropDown.Visible = ((ChoiceList.SelectedIndex > 0) ? true :
false);
ProfileCodeDropDown.Visible = ((ChoiceList.SelectedIndex == 0) ? true :
false);
/* Set the logged on user */
loggedLabel.Text = "Logged on user: " +Session["NTUser"].ToString() +
"/" + accounttype;
}
protected void ProfileCodeDropDown_SelectedIndexChanged(object sender,
EventArgs e)
{
GridView1.DataSourceID = "SoftwareSource";
GridView1.DataBind();
}
protected void ManufacturerDropDown_SelectedIndexChanged(object sender,
EventArgs e)
{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();

81 | P a g e
}
protected void ChoiceList_SelectedIndexChanged(object sender, EventArgs e)
{
ManufacturerDropDown.Visible = ((ChoiceList.SelectedIndex > 0)? true :
false);
ProfileCodeDropDown.Visible = ((ChoiceList.SelectedIndex == 0) ? true :
false);
}
protected void ProfileCodeDropDown_DataBound(object sender, EventArgs e)
{
GridView1.DataSourceID = "SoftwareSource";
GridView1.DataBind();
}
protected void ManufacturerDropDown_DataBound(object sender, EventArgs e)
{
GridView1.DataSourceID = "ManuSoftwareSource";
GridView1.DataBind();
}
}

82 | P a g e
ARM: Main Project

SignIn.jsp (ARM Login)


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Login</title>
<style type="text/css">
@IMPORT url("css/custom.css");
</style>
</head>
<body>
<%
String error_message = "";
%>
<form id="loginform" action="login-bean.jsp" method="post"><img
src="images/bannerlogin.jpg" alt="" />
<p><input type="text" name="username"
onfocus="if(this.value=='Username') this.value = '';"
onblur="if(this.value=='') this.value='Username';" value="Username"
/></p>
<p><input type="password" name="password" value="pass"
onfocus="if(this.value=='pass') this.value = '';"
onblur="if(this.value=='') this.value='pass';" /></p>
<p><%=error_message%></p>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>

login-bean.jsp (Login bean to forward request to java file)


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Authenticating</title>
</head>
<body>
<jsp:useBean id="db" scope="request" class="login.LoginBean">
<jsp:setProperty name="db" property="username"
value='<%=request.getParameter("username") %>' />
<jsp:setProperty name="db" property="password"
value='<%=request.getParameter("password") %>' />
</jsp:useBean>
<jsp:forward page="Welcome.jsp">
<jsp:param name="username" value="<%=db.getUsername()%>" />
<jsp:param name="password" value="<%=db.getPassword()%>" />
</jsp:forward>
</body>
</html>

83 | P a g e
Login.java (Servlet to perform database check for login)
package login;

import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
* Servlet implementation class Login
*/
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public Login() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String driver = "com.mysql.jdbc.Driver";
Connection conn = null;
ResultSet rst = null;
Statement statement = null;
String user = "";
String pass = "";
String query = "";
HttpSession session = request.getSession(true);
try {
Class.forName(driver).newInstance();
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
user = request.getParameter("username");
pass = request.getParameter("password");
if(user != null && user.length() > 0 && pass != null &&
pass.length()!=0){
query = "Select * From CustomerDetails.user where
User='"+user+"' and Password='"+pass+"'";
rst = statement.executeQuery(query);

84 | P a g e
int count =0;
while(rst.next()){
session.setAttribute("username",
rst.getString("User"));
System.out.println(rst.getString("User"));
count++;
}
if(count>0){
response.sendRedirect("Welcome.jsp");
}
else{
response.sendRedirect("login.jsp");
}
rst.close();
statement.close();
conn.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

LoginBean.java (Getter and setter for the username & password)


package login;

public class LoginBean {


String username = "";
String password = "";

public String getUsername(){


return username;
}

public void setUsername(String username){


this.username = username;
}

public String getPassword(){


return password;
}

public void setPassword(String password){


this.password = password;
}
}

85 | P a g e
QueryScreen.java (Query Screen of ARM)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Query Screen</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm) {
if (objForm.customerid.value.length == 0
|| objForm.customerid.value == 'Customer ID') {
objForm.customerid.value = 'Customer ID';
return false;
}
return true;
}
</script>
</head>
<body>
<div class="container_12" id="container">
<div class="grid_12"><img src="images/banner.jpg" alt="" /></div>
<div class="grid_3" style="margin-top: 10px;">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>

86 | P a g e
<li><span>Approvals</span>
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px">
<%
String htmlcode = "";
Object dynhtml = request.getAttribute("dynhtml");
if (dynhtml != null && dynhtml != "")
htmlcode = dynhtml.toString();
%>
<form action="Query" method="post" onsubmit="return validate(this)"><input
type="hidden" name="action" />
<center><input type="text" name="customerid"
onblur="if(this.value == '') this.value='Customer ID';"
onfocus="if(this.value == 'Customer ID') this.value='';"
value="Customer ID" /> <input type="submit" value="Query" />
<%=htmlcode%></center>
</form>
</div>
</div>
</body>
</html>

Query.java (Servlet for QueryScreen)


package query;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class Query
*/
public class Query extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public Query() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)

87 | P a g e
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
String custid = request.getParameter("customerid");
String forwardUrl = "/QueryScreen.jsp";
StringBuffer sb = new StringBuffer();
Statement statement = null;
Connection conn = null;
ResultSet rs = null;
String driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver).newInstance();
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (request.getParameter("action") != null) {
String query = "Select CustomerID, CustomerName, InfinityID
From CustomerDetails.BasicDetails Where CustomerID = '"
+ custid + "'";
try {
rs = statement.executeQuery(query);
if(rs.next()){
sb.append("<p>");
String id = rs.getString("CustomerID");
// System.out.println(id);
String name = rs.getString("CustomerName");
// System.out.println(name);
String Infid = rs.getString("InfinityID");
// System.out.println(Infid);
sb.append("<table style=\"width:75%;\">");
sb.append("<tr>");
sb.append("<th>Customer ID</th>");
sb.append("<th>Customer Name</th>");
sb.append("<th>Infinity ID</th>");
sb.append("</tr>");
// while (rs.next()) {
sb.append("<tr>");
sb.append("<td>" + id);
sb.append("</td><td>" + name);
sb.append("</td><td>" + Infid);
sb.append("</td></tr>");
// }
sb.append("</table></p>");
//String diag = sb.toString();
//System.out.println(diag);
}else{
sb.append("<p>No records found</p>");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();

88 | P a g e
}
String htmlcode = sb.toString();
request.setAttribute("dynhtml", htmlcode);
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context
.getRequestDispatcher(forwardUrl);
dispatcher.forward(request, response);
}
}

89 | P a g e
InternalQueryScreen.jsp (Internal Query Screen)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Internal Query Screen</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm) {
if (objForm.customerid.value.length == 0
|| objForm.customerid.value == 'Customer ID') {
objForm.customerid.value = 'Customer ID';
return false;
}
return true;
}
</script>
</head>
<body>
<div class="container_12" id="container">
<div class="grid_12"><img src="images/banner.jpg" alt="" /></div>
<div class="grid_3" style="margin-top: 10px;">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>

90 | P a g e
<li><span>Approvals</span>
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px">
<%
String htmlcode = "";
Object dynhtml = request.getAttribute("dynhtml");
if (dynhtml != null && dynhtml != "")
htmlcode = dynhtml.toString();
%>
<form action="InternalQuery" method="post"
onsubmit="return validate(this)"><input type="hidden"
name="action" />
<center><input type="text" name="customerid"
onblur="if(this.value == '') this.value='Customer ID';"
onfocus="if(this.value == 'Customer ID') this.value='';"
value="Customer ID" /> <input type="submit" value="Query" />
<%=htmlcode%></center>
</form>
</div>
</div>
</body>
</html>

InternalQuery.java (Internal Query Servlet)


package query;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class InternalQuery
*/
public class InternalQuery extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public InternalQuery() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse

91 | P a g e
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
String custid = request.getParameter("customerid");
String forwardUrl = "/QueryScreen.jsp";
StringBuffer sb = new StringBuffer();
Statement statement = null;
Connection conn = null;
ResultSet rs = null;
String driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver).newInstance();
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (request.getParameter("action") != null) {
String query = "Select * From CustomerDetails.BasicDetails
Where CustomerID = '"
+ custid + "'";
try {
rs = statement.executeQuery(query);
if (rs.next()) {
sb.append("<p>");
String id = rs.getString("CustomerID");
// System.out.println(id);
String name = rs.getString("CustomerName");
// System.out.println(name);
String Infid = rs.getString("InfinityID");
// System.out.println(Infid);
String AcFile = rs.getString("AccountFile");
String CusFile = rs.getString("CustomerFile");
String Accno = rs.getString("AccountNumber");
sb.append("<table style=\"width:75%;\">");
sb.append("<tr>");
sb.append("<th>Customer ID</th>");
sb.append("<th>Customer Name</th>");
sb.append("<th>Infinity ID</th>");
sb.append("<th>Account File</th>");
sb.append("<th>Customer File</th>");
sb.append("<th>Account Number</th>");
sb.append("</tr>");
// while (rs.next()) {
sb.append("<tr>");
sb.append("<td>" + id);
sb.append("</td><td>" + name);
sb.append("</td><td>" + Infid);
sb.append("</td><td>" + AcFile);
sb.append("</td><td>" + CusFile);
sb.append("</td><td>" + Accno);
sb.append("</td></tr>");
// }
sb.append("</table></p>");
// String diag = sb.toString();
// System.out.println(diag);
} else {
sb.append("<p>No records found</p>");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

92 | P a g e
String htmlcode = sb.toString();
request.setAttribute("dynhtml", htmlcode);
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context
.getRequestDispatcher(forwardUrl);
dispatcher.forward(request, response);
}
}

93 | P a g e
AddSecondaryHolder.jsp (Screen to add secondary holder to account)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Add Secondary Holder</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm){
if(objForm.secondary.value == objForm.primary.value)
{
alert("Secondary must not be same as primary");
return false;
}
return true;
}
</script>
</head>
<body>
<div class="container_12">
<div class="grid_12"><img alt="" src="images/banner.jpg"></div>
<div class="grid_3" style="margin-top: 10px">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>

94 | P a g e
<li><span>Approvals</span>
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px">
<center>
<%
String insertmessage = "";
Object message = request.getAttribute("message");
if (message != null)
insertmessage = message.toString();
%>
<form onsubmit="return validate(this);" method="post"
action="AddSecTemp">
<table>
<tr>
<td>Select Primary Holder</td>
<td><select name="primary">
<option>Select One</option>
<%
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();

Connection conn = null;


ResultSet rst = null, rst1 = null;
Statement statement = null;

try {
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}

String query = "Select CustomerID From


CustomerDetails.BasicDetails";
rst = statement.executeQuery(query);
while (rst.next()) {
%>
<option><%=rst.getString("CustomerID")%></option>
<%
}
%>
</select></td>
</tr>
<tr>
<td>Select Secondary Holder</td>
<td><select name="secondary">
<option>Select One</option>
<%
String query1 = "Select CustomerID From
CustomerDetails.BasicDetails";
rst1 = statement.executeQuery(query1);
while (rst1.next()) {
%>
<option><%=rst1.getString("CustomerID")%></option>
<%
}
%>
</select></td>
</tr>
</table>
<p><input type="submit" value="Add" /></p>

95 | P a g e
<p style="color: green;"><%=insertmessage%></p>
</form>
</center>
</div>
</div>
</body>
</html>

AddSecTemp.java (Servlet to add secondary holder to TEMP table)


package modifications;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class AddSecTemp
*/
public class AddSecTemp extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public AddSecTemp() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String primarycustomer = request.getParameter("primary");
String secondarycustomer = request.getParameter("secondary");
String driver = "com.mysql.jdbc.Driver";

Connection conn = null;


//ResultSet rst = null;
Statement statement = null;

96 | P a g e
try {
Class.forName(driver).newInstance();
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}

if(primarycustomer!=null && primarycustomer!="" &&


secondarycustomer!=null && secondarycustomer != ""){
String query = "Insert into secondarycusttemp
(PrimaryCustomer, SecondaryCustomer) values
('"+primarycustomer+"','"+secondarycustomer+"')";
String forwardurl = "";
try {
int s = statement.executeUpdate(query);
if(s>0){
forwardurl = "/AddSecondaryHolder.jsp";
request.setAttribute("message", "Request
Sent");
}
else{
request.setAttribute("message", "Try Again
Later");
}
ServletContext context = getServletContext();
RequestDispatcher dispatcher =
context.getRequestDispatcher(forwardurl);
dispatcher.forward(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

97 | P a g e
ModifySecondaryUser.jsp (Screen to modify secondary user)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Modify / Delete</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm) {
if (objForm.customerid.value.length == 0
|| objForm.customerid.value == 'Customer ID') {
objForm.customerid.value = 'Customer ID';
return false;
}
return true;
}
</script>
</head>
<body>
<div class="container_12">
<div class="grid_12"><img alt="" src="images/banner.jpg"></div>
<div class="grid_3" style="margin-top: 10px">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>

98 | P a g e
<li><span>Approvals</span>
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px">
<center>
<%
String insertmessage = "";
Object message = request.getAttribute("message");
if (message != null && message != "")
insertmessage = message.toString();
%>
<form method="post" action="ModifyDelete">
<table>
<tr>
<td colspan="2"><input type="radio" name="r1" value="mod" />Modify
<input type="radio" name="r1" value="del" />Delete</td>
</tr>
<tr>
<%
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();

Connection conn = null;


ResultSet rst = null, rst1 = null;
Statement statement = null;

try {
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}

String query = "SELECT `secondaryholder`.`PrimayCustomer`


FROM `customerdetails`.`secondaryholder` WHERE
`secondaryholder`.`SecondaryCustomer` IS NOT NULL";
rst = statement.executeQuery(query);
if (rst.next()) {
%>
<td>Select Primary Customer</td>
<td><select name="primary">
<option>Select One</option>
<option><%=rst.getString("PrimayCustomer")%></option>
</select></td>
<%
} else {
%>
<td colspan="2" style="color: red;">No Records With Secondary
User exist</td>
<%
}
%>
</tr>
<tr>
<td>Select Secondary Customer</td>
<td><select name="secondary">
<option>Select One</option>
<%
String query1 = "Select CustomerID From
CustomerDetails.BasicDetails";
rst1 = statement.executeQuery(query1);
while (rst1.next()) {

99 | P a g e
%>
<option><%=rst1.getString("CustomerID")%></option>
<%
}
%>
</select></td>
</tr>
</table>
<p><input type="submit" value="Submit" /></p>
</form>
<p style="color: green;"><%=insertmessage%></p>
</center>
</div>
</div>
</body>
</html>

ModifyDelete.java (Servlet to modify secondary holder)


package modifications;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mysql.jdbc.PreparedStatement;

/**
* Servlet implementation class ModifyDelete
*/
public class ModifyDelete extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public ModifyDelete() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
String choice = request.getParameter("r1");
String primarycustomer = request.getParameter("primary");
String secondarycustomer = request.getParameter("secondary");
int prim = Integer.parseInt(primarycustomer);
int sec = Integer.parseInt(secondarycustomer);
String driver = "com.mysql.jdbc.Driver";

100 | P a g e
int rows = 0;
Connection conn = null;
PreparedStatement preparedStatement = null;
String forwardurl = "/ModifySecondaryUser.jsp";
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}

if (choice.equals("del")) {
try {
String query = "Delete From secondaryholder Where
PrimayCustomer = ?";
preparedStatement = (PreparedStatement)
conn.prepareStatement(query);
preparedStatement.setInt(1, prim);
rows = preparedStatement.executeUpdate();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} else if (choice.equals("mod")) {
try {
String query = "UPDATE secondarycusttemp SET
SecondaryCustomer = ? WHERE PrimaryCustomer = ?";
preparedStatement = (PreparedStatement)
conn.prepareStatement(query);
preparedStatement.setInt(1, prim);
preparedStatement.setInt(2, sec);
rows = preparedStatement.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
request.setAttribute("message", rows > 0? "Modification
Successful" : "Modification Unsuccessful");
ServletContext context = getServletContext();
RequestDispatcher dispatcher =
context.getRequestDispatcher(forwardurl);
dispatcher.forward(request, response);
}

101 | P a g e
LinkingApproval.jsp (Screen to approve linking of secondary user)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Linking Approval</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
<script type="text/javascript">
function validate(objForm) {
if (objForm.secondary.value == objForm.primary.value) {
alert("Secondary must not be same as primary");
return false;
}
return true;
}
</script>
</head>
<body>
<div class="container_12">
<div class="grid_12"><img alt="" src="images/banner.jpg"></div>
<div class="grid_3" style="margin-top: 10px">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>
<li><span>Approvals</span>

102 | P a g e
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px;">

<center>
<form action="LinkingApproval" method="post">
<%
String appmessage = "";
Object message = request.getAttribute("message");
if (message != null && message != "")
appmessage = message.toString();
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();

Connection conn = null;


ResultSet rst = null;
Statement statement = null;

try {
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}

String query = "SELECT * FROM secondarycusttemp";


rst = statement.executeQuery(query);

if (rst.next()) {
%>
<table>
<tr>
<th>Primary Customer ID</th>
<th>Secondary Customer ID</th>
</tr>
<%
while (rst.next()) {
String prim = rst.getString("PrimaryCustomer");
String sec = rst.getString("SecondaryCustomer");
System.out.println(prim + "h" + sec);
%>
<tr>
<td><%=prim%></td>
<td><%=sec%></td>
</tr>
<%
}
%>
</table>

<%
} else {
%>
<p style="color: red;">No records found</p>
<%
}
%> <input type="hidden" name="action" />
<p><input type="submit" value="Approve" /></p>
<p style="color: green;"><%=appmessage%></p>
</form>
</center>
</div>

103 | P a g e
</div>
</body>
</html>

LinkingApproval.java (Servlet to approve secondary holder linking)


package approvals;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class LinkingApproval
*/
public class LinkingApproval extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public LinkingApproval() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
String driver = "com.mysql.jdbc.Driver";
int ins = 0, del = 0;
Connection conn = null;
Statement statement = null;

try {
Class.forName(driver).newInstance();
String url =
"jdbc:mysql://localhost:3306/CustomerDetails?user=root&password=1";
conn = DriverManager.getConnection(url);
statement = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (request.getParameter("action") != null) {
String query = "Insert into secondaryholder Select * from
secondarycusttemp";
String query1 = "Delete From secondarycusttemp";
try {
statement = conn.createStatement();

104 | P a g e
ins = statement.executeUpdate(query);
del = statement.executeUpdate(query1);
System.out.println(ins);
System.out.println(del);
} catch (Exception e) {
System.out.println(e.getMessage());
}
String forwardurl = "/LinkingApproval.jsp";
request.setAttribute("message", ((ins > 0) &&
(del>0))?"Approval Success":"Approval Failure");
ServletContext context = getServletContext();
RequestDispatcher dispatcher =
context.getRequestDispatcher(forwardurl);
dispatcher.forward(request, response);
}
}

105 | P a g e
Welcome.jsp (Main menu, welcome page)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ARM : Menu</title>
<style type="text/css">
@IMPORT url("css/uncompressed/960.css");

@IMPORT url("css/uncompressed/text.css");

@IMPORT url("css/jquery.treeview.css");

@IMPORT url("css/main.css");
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></s
cript>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-
ui.min.js"></script>
<script type="text/javascript" src="scripts/jquery.treeview.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#red").treeview( {
animated : "fast",
collapsed : true,
unique : true
});
});
</script>
</head>
<body>
<%
String username = "";
if(session.getAttribute("username")!=null &&
session.getAttribute("username")!="")
username = session.getAttribute("username").toString();
%>
<div class="container_12">
<div class="grid_12"><img alt="" src="images/banner.jpg"></div>
<div class="grid_3" style="margin-top: 10px;">
<ul class="treeview treeview-black" id="red">
<li><span>Query</span>
<ul>
<li><a href="QueryScreen.jsp">Query Screen</a></li>
<li><a href="InternalQueryScreen.jsp">Internal Query
Screen</a></li>
</ul>
</li>
<li><span>Modifications</span>
<ul>
<li><a href="AddSecondaryHolder.jsp">Add Secondary Holder</a></li>
<li><a href="ModifySecondaryUser.jsp">Modify / Delete
Secondary Holder</a></li>
</ul>
</li>
<li><span>Approvals</span>
<ul>
<li><a href="LinkingApproval.jsp">Linking Approvals</a></li>
</ul>

106 | P a g e
</li>
</ul>
</div>
<div class="grid_8" style="margin-top: 10px;">
<center>
<form action="Welcome.jsp">
<p>Welcome, <%=username%> to ARM</p>
</form>
</center>
</div>
</div>
</body>
</html>

107 | P a g e
Glossary
• Windows Registry
A central hierarchical database used in Microsoft Windows 98, Windows CE, Windows NT, and
Windows 2000 used to store information that is necessary to configure the system for one or
more users, applications and hardware devices.

The Registry contains information that Windows continually references during operation, such
as profiles for each user, the applications installed on the computer and the types of documents
that each can create, property sheet settings for folders and application icons, what hardware
exists on the system, and the ports that are being used.

• ASP.Net
ASP.NET is a technology to deliver interactive, data-driven Web applications over the Internet
and intranets. ASP.NET includes a large number of prebuilt controls, such as text boxes, buttons,
images, and data grids that you can assemble, configure, and manipulate with code to create
HTML pages that correctly appear in all popular browsers. When combined with programming
logic, ASP.NET lets you send HTML code that’s specific to each user’s circumstances or requests.

• JavaScript
JavaScript is used to create interactive web applications supported by the Netscape browser.
JavaScript offers many of the same advantages as VBScript. JavaScript is simple to use,
lightweight, and dynamic. Developers can easily embed code functionality for interactive
applications inside a web page.

• Microsoft® SQL Server™


Microsoft® SQL Server™ is a database management and analysis system for e-commerce, line-of-
business, and data warehousing solutions. In this section you will find information for several
versions of SQL Server. You will find articles on database and database application design, as
well as examples of the uses that SQL Server can be put to.

• Microsoft Visual Studio Team System 2008 & Visual Web Developer 2008
Microsoft Visual Studio Team System 2008 (& Visual Web Developer) is a platform for
productive, integrated, and extensible software development life-cycle tools that helps software
teams by improving communication and collaboration throughout the software development
process.

• Microsoft AJAX
Microsoft Ajax features enable you to quickly create Web pages that provide a rich user
experience and that include responsive and familiar user interface (UI) elements. Microsoft Ajax
includes client-script libraries that incorporate cross-browser ECMAScript (JavaScript) and
dynamic HTML (DHTML) technologies. By using Microsoft Ajax, you can improve the user
experience and the efficiency of your Web applications.
Microsoft Ajax applications are compatible with all popular modern Web browsers, including
Microsoft Internet Explorer, Mozilla Firefox, and Google Chrome.

108 | P a g e
• Process Models
When you build a product or system, it’s important to go through a series of predictable steps—
a road map that helps you creates a timely, high-quality result. The road map that you follow is
called a ‘software process.’ There are several models through which a software process is
achieved. These models are called process models

• Classes
In object-oriented programming, a class is a construct that is used as a blueprint (or template) to
create objects of that class. This blueprint describes the state and behaviour that the objects of
the class all share. An object of a given class is called an instance of the class. The class that
contains (and was used to create) that instance can be considered as the type of that object, e.g.
an object instance of the "Fruit" class would be of the type "Fruit".

• Datasets
Datasets are objects that contain data tables where you can temporarily store the data for use in
your application. If your application requires working with data, you can load the data into a
dataset, which provides your application with a local in-memory cache of the data to work with.
You can work with the data in a dataset even if your application becomes disconnected from the
database. The dataset maintains information about changes to its data so updates can be
tracked and sent back to the database when your application becomes reconnected.
The structure of a Dataset is similar to that of a relational database; it exposes a hierarchical
object model of tables, rows, columns, constraints, and relationships.

• ObjectDataSource
The ASP.NET ObjectDataSource control represents a middle-tier object with data retrieval and
update capabilities. The ObjectDataSource control acts as a data interface for data-bound
controls such as the GridView, FormView, or DetailsView controls. You can use these controls to
display and edit data from a middle-tier business object on an ASP.NET Web page.

• XML (Extensible Markup Language)


The Extensible Markup Language (XML) is a subset of SGML that is completely described in this
document. Its goal is to enable generic SGML to be served, received, and processed on the Web
in the way that is now possible with HTML. XML has been designed for ease of implementation
and for interoperability with both SGML and HTML.

• Advapi32.dll
Access Control List Conversion utility that converts OS/2® LAN Manager Server ACLs

• System.Security.Principal namespace
The System.Security.Principal namespace defines a principal object that represents the security
context under which code is running.

109 | P a g e
• ASP.Net Menu Control
Displays a menu in an ASP.NET Web page.
Namespace: System.Web.UI.WebControls
Assembly: System.Web (in System.Web.dll)

• Menu Items
A Menu control is made up of a tree of menu items represented by MenuItem objects. Menu
items at the top level (level 0) are called root menu items. A menu item that has a parent menu
item is called a child menu item. All root menu items are stored in the Items collection. Child
menu items are stored in a parent menu item's ChildItems collection.
Each menu item has a Text and a Value property. The value of the Text property is displayed in
the Menu control, while the Value property is used to store any additional data about the menu
item, such as data passed to the postback event associated with the menu item. When clicked, a
menu item can navigate to another Web page indicated by the NavigateUrl property.

• File Transfer Protocol (FTP)


File Transfer Protocol (FTP) is a standard network protocol used to copy a file from one host to
another over a TCP/IP-based network, such as the Internet. FTP is built on client-server
architecture and utilizes separate control and data connections between the client and server
applications, which solve the problem of different end host configurations (i.e., Operating
System, file names). FTP is used with user-based password authentication or with anonymous
user access.

• Use Cases
A use-case is a scenario that describes how software is to be used in a given situation. Use-cases
are defined from an actor’s point of view. An actor is a role that people (users) or devices play as
they interact with the software.

• Interactive Voice Response (IVR)


Interactive Voice Response (IVR) is a technology that allows a computer to detect voice and
dual-tone multi-frequency signalling (DTMF) keypad inputs. IVR technology is used extensively in
telecommunication, but is also being introduced into automobile systems for hands-free
operation. Current deployment in automobiles revolves around satellite navigation, audio and
mobile phone systems. In telecommunications, IVR allows customers to access a company’s
database via a telephone keypad or by speech recognition, after which they can service their
own inquiries by following the instructions. IVR systems can respond with pre-recorded or
dynamically generated audio to further direct users on how to proceed. IVR systems can be used
to control almost any function where the interface can be broken down into a series of simple
menu choices. In telecommunications applications, such as customer support lines, IVR systems
generally scale well to handle large call volumes.

110 | P a g e
• Internet Banking
Online banking (or Internet banking) allows customers to conduct financial transactions on a
secure website operated by their retail or virtual bank, credit union or building society.

• Daemon
In Unix and other computer multitasking operating systems, a daemon (pronounced /ˈdeɪmən/
or /ˈdiːmən/) is a computer program that runs in the background, rather than under the direct
control of a user; they are usually initiated as background processes. Typically daemons have
names that end with the letter "d": for example, syslogd, and the daemon that handles the
system log, or sshd, which handles incoming SSH connections.

• Intranet
An intranet is a private computer network that uses Internet Protocol technologies to securely
share any part of an organization's information or operational systems within that organization.
The term is used in contrast to internet, a network between organizations, and instead refers to
a network within an organization. Sometimes the term refers only to the organization's internal
website, but may be a more extensive part of the organization's information technology
infrastructure. It may host multiple private websites and constitute an important component
and focal point of internal communication and collaboration.

• PROC Codes
Procedure codes are numbers or alphanumeric codes used to identify specific situations

• Socket
In computer networking, an Internet socket or network socket is an endpoint of a bidirectional
inter-process communication flow across an Internet Protocol-based computer network, such as
the Internet.

• PuTTY
PuTTY is a free implementation of Telnet and SSH for Windows and Unix platforms, along with
an xterm terminal emulator. It is written and maintained primarily by Simon Tatham.

• Java
Java is a programming language originally developed by James Gosling at Sun Microsystems
(which is now a subsidiary of Oracle Corporation) and released in 1995 as a core component of
Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but
has a simpler object model and fewer low-level facilities. Java applications are typically compiled
to byte code (class file) that can run on any Java Virtual Machine (JVM) regardless of computer
architecture. Java is general-purpose, concurrent, class-based, and object-oriented, and is
specifically designed to have as few implementation dependencies as possible. It is intended to
let application developers "write once, run anywhere". Java is considered by many as one of the
most influential programming languages of the 20th century, and is widely used from application
software to web applications.

111 | P a g e
• Eclipse
Eclipse is a multi-language software development environment comprising an integrated
development environment (IDE) and an extensible plug-in system. It is written primarily in Java
and can be used to develop applications in Java and, by means of various plug-ins, other
languages including C, C++, COBOL, Python, Perl and PHP. The IDE is often called Eclipse ADT for
Ada, Eclipse CDT for C/C++, Eclipse JDT for Java and Eclipse PDT for PHP.

• jQuery
jQuery is a lightweight cross-browser JavaScript library designed to simplify the client-side
scripting of HTML. It was released in January 2006 at BarCamp NYC by John Resig. Used by over
27% of the 10,000 most visited websites, jQuery is the most popular JavaScript library in use
today.

• Apache Tomcat
Apache Tomcat (or Jakarta Tomcat or simply Tomcat) is an open source servlet container
developed by the Apache Software Foundation (ASF). Tomcat implements the Java Servlet and
the Java Server Pages (JSP) specifications from Sun Microsystems, and provides a "pure Java"
HTTP web server environment for Java code to run.

• MySQL

MySQL is a relational database management system (RDBMS) that runs as a server providing
multi-user access to a number of databases. MySQL is officially pronounced /maɪˌɛskjuːˈɛl/ ("My
S-Q-L"), but is often pronounced /maɪˈsiːkwəl/ ("My Sequel"). It is named for original developer
Michael Widenius's daughter My.

112 | P a g e
Bibliography
3i Infotech. ARM System Manual.

Apache Server Foundation. (n.d.). Apache Tomcat. Retrieved from Apache Tomcat:
http://tomcat.apache.org/

B.A.Forouzan. (2000). TCP/IP Protocol Suite, First Edition. New Delhi: Tata McGraw Hill.

Callaghan, J. (2002). Inside Intranets & Extranets: Knowledge Management and the Struggle for
Power. Palgrave Macmillan.

Cisco Systems. Cisco Networking Academy Program, CCNA 1 and 2 Companion Guide Revised Third
Edition. Cisco Systems.

Cox, K. (2008). ASP.Net 3.5 For Dummies. Indiana: Wiley Publishing Inc.

Eclipse Wiki. (n.d.). Retrieved from Wikipedia.

Hillier, S. (1996). JavaScript. Retrieved from MSDN Website: http://msdn.microsoft.com/en-


us/library/ms970435.aspx

jQuery Team. (n.d.). jQuery. Retrieved from jQuery: The do more write less javascript library.

Meyer, B. (1997). Object Oriented Software Construction, 2nd Edition. Prentice Hall.

Microsoft Corporation. (n.d.). Appendix B: Standard .EXE Files and Associated DLLs. Retrieved from
Microsoft TechNet: http://technet.microsoft.com/en-us/library/cc768380.aspx

Microsoft Corporation. (2005). Datasets in Visual Studio Overview. Retrieved from MSDN Website:
http://msdn.microsoft.com/en-us/library/8bw9ksd6%28VS.80%29.aspx

Microsoft Corporation. (2010). Microsoft SQL Server Library. Retrieved from MSDN Website:
http://msdn.microsoft.com/en-us/library/bb545450%28v=SQL.10%29.aspx

Microsoft Corporation. (2008). ObjectServerControl Web Server Control Overview. Retrieved from
MSDN Website: http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx

Microsoft Corporation. (n.d.). System.Security.Principal Namespace. Retrieved from MSDN Website:


http://msdn.microsoft.com/en-us/library/system.security.principal.aspx

Microsoft Corporation. (2008). Visual Studio Team System. Retrieved from MSDN Website:
http://msdn.microsoft.com/en-us/library/fda2bad5%28v=VS.90%29.aspx

Microsoft Press. (2002). Microsoft Computer Dictionary, Fifth Edition. Redmond, CA: Microsoft.

Mitchell, S. (n.d.). Retrieved from 4 Guys From Rolla.

Oracle Corporation. (2010). MySQL Enterprise Server. Retrieved from MySQL:


http://www.mysql.com/products/enterprise/server.html

Pressman, R. S. (2001). Software Engineering: A Practitioners Approach. New York: McGraw Hill.

113 | P a g e
Raymond, E. S. (2008). The Jargon File.

RoseIndia. (n.d.). JSP And Servlets. Retrieved from RoseIndia: www.roseindia.net/jsp

Sun Microsystems. (n.d.). Java. Retrieved from Sun Microsystems: Java.

Tatham, S. (n.d.). PuTTy. Retrieved from PuTTY: http://putty.very.rulez.org/

W3C. (2008, November 26). Extensible Markup Language (XML) 1.0 (Fifth Edition). Retrieved from
W3C: http://www.w3.org/TR/REC-xml/

Wikipedia. (2010, April 25). IVR - Wikipedia. Retrieved from Wikipedia:


http://en.wikipedia.org/wiki/Interactive_voice_response

114 | P a g e

Potrebbero piacerti anche