- •Введение
- •1 Анализ технического задания
- •1.1 Анализ существующих систем аналогов
- •1.2 Выбор средств реализации
- •2 Проектирование системы учета выдачи нарядов-допусков
- •2.1 Диаграмма классов
- •2.2 Диаграмма вариантов использования
- •2.3 Диаграмма последовательности
- •2.5 Кооперативная диаграмма
- •2.6 Диаграмма компонентов
- •2.7 Диаграмма развертывания
- •2.4 Диаграмма состояний
- •3 Разработка системы
- •3.1 Программная реализация
- •3.2 Реализация хранимых процедур
- •4 Тестирование
- •5 Руководства по программному продукту
- •5.1 Руководство программиста
- •5.2 Руководство пользователя
- •Просмотр наряда-допуска
- •В разделах, «Ответственный за подготовку» и «Допускающий к работе», экранной формы ввода «Наряд-допуск» заполнить нижеперечисленные поля:
- •Добавление мероприятий для обеспечения безопасности работ.
- •Работа со справочниками свнд.
- •Заключение
- •Список использованных источников
- •Приложение а
3 Разработка системы
3.1 Программная реализация
Приложение реализовано в виде Web-проекта с использованием компонентов EXT.NET. При обращении к узлу приложения, открывается страница Default.aspx, в которую загружаются данные по нарядам-допускам.
Также выводится меню для дальнейшей работы с приложением. Для каждого веб проекта автоматически создается конфигурационный файл под названием web.config. В данном файле описываются основные настройки системы, такие как: подключенные библиотеки, строка подключения к базе данных, настройки режимов взаимодействия с веб сервером.
Строка подключения к базе данных выглядит следующим образом:
<ConnectionStrings>
<add name="OraConnStrISM" connectionString="Data Source=ORCL;Persist Security Info=True;Unicode=True;User ID=scott;Password = tiger" providerName="System.Data.OracleClient"/>
<add name="Entities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=Devart.Data.Oracle;provider connection string="User Id=scott;Password=tiger;Server=ORCL;Unicode=True;Persist Security Info=True"" providerName="System.Data.EntityClient"/>
</connectionStrings>
Пример регистрации компонентов EXT.NET:
<pages>
<controls>
<add assembly="Ext.Net" namespace="Ext.Net" tagPrefix="ext"/>
</controls>
</pages>
На страницах приложения для корректного отображения информации используются стили, описанные в таблице стилей GlobalCss.css, ссылка на которую в файле *.aspx реализована строкой
<link href="../Javascript/GlobalCss.css" rel="stylesheet"
type="text/css" />
Стили, используемые только для конкретной страницы, описаны в разделе <style type="text/css"></style>. Код JavaScript-функций описан в разделе <script type="text/javascript"></script>.
Верстка страниц производится в файлах с расширением *.aspx, в данных страницах реализуется клиентская часть приложения, описываются компоненты страницы и выполняются JavaScript функции.
Пример реализации кнопки:
<ext:Button ID="BtnSaveAdmission" runat="server" Text="Сохранить наряд" Flat="false" TextAlign="Left" IconUrl="../Images/icons/save_black.png">
<DirectEvents>
<Click OnEvent="BtnSaveAdmission_Click"
Before="return isFormIsValid(#{FormStepCard})">
<ExtraParams>
<ext:Parameter Name="values" Value="getFormValues(#{FormStepCard})"
Mode="Raw" Encode="true" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
В данном примере при щелчке на кнопку происходит вызов серверного события " BtnSaveAdmission_Click ". Пример данного события приведен ниже.
var values = _getFormAdmissionFromJson(e.ExtraParams["values"]);
if (values == null)
{
X.Msg.Alert("Ошибка!", "Ошибка во время сохранения наряда. Проверьте правильность заполнения всех полей.").Show();
return;
}
var command = DbHelper.GetOracleCommand();
command.Parameters.AddWithValue("n_work_typeid", values.WORK_TYPEID);
command.Parameters.AddWithValue("n_departmentid", values.DEPARTMENTID);
command.Parameters.AddWithValue("n_manufactureid", values.ManufactureID);
command.Parameters.AddWithValue("n_MANUFACTURERINF", values.ManufactureInf);
command.Parameters.AddWithValue("n_work_place", values.WORK_PLACE);
command.Parameters.AddWithValue("n_equipmentname", values.EQUIPMENTNAME);
command.Parameters.AddWithValue("n_workdiscription", values.WORKDISCRIPTION);
command.Parameters.AddWithValue("n_end_work_dt", values.END_WORK_Date.HasValue ? values.END_WORK_Date : Convert.DBNull);
command.Parameters.AddWithValue("n_begin_work_dt", values.BEGIN_WORK_Date.HasValue ? values.BEGIN_WORK_Date : Convert.DBNull);
command.Parameters.AddWithValue("n_mod_user", Request.ServerVariables["SERVER_NAME"].ToString());
command.Parameters.AddWithValue("work_id_str", values.WORK_ADMISSION_String);
if (values.ID > 0)
{
command.Parameters.AddWithValue("n_id", values.ID);
command.CommandText = "ADMISSION_UPDATE";
command.ExecuteNonQuery();
_updateMembers(values);
X.Reload();
}
else
{
var outIdParam = new OracleParameter("n_id", OracleType.Number) { Direction = ParameterDirection.Output };
command.Parameters.Add(outIdParam);
command.CommandText = "ADMISSION_INSERT";
command.ExecuteNonQuery();
values.ID = int.Parse(outIdParam.Value.ToString());
_updateMembers(values);
// add new tab
X.Js.Call("addTabFromFrame",
"idAdm" + outIdParam.Value,
String.Format("Cards/CardAdmission.aspx?AdmissionID={0}", outIdParam.Value)
, "Наряд №" + outIdParam.Value);
// close self tab
X.Js.Call("window.parent.App.TabPanelMain.getComponent(\"idNewAdmission\").close()");
}
Данная функция выполняет сохранение выбранного наряда-допуска или добавление нового наряда. Для добавления нового наряда используется хранимая процедура «ADMISSION_INSERT»:
create or replace PROCEDURE "ADMISSION_INSERT" (n_id OUT NUMBER,
n_work_typeid IN NUMBER,
n_departmentid IN NUMBER,
n_manufactureid IN VARCHAR2,
n_MANUFACTURERINF IN VARCHAR2,
n_work_place IN VARCHAR2,
n_equipmentname IN VARCHAR2,
n_workdiscription IN VARCHAR2,
n_end_work_dt IN DATE,
N_BEGIN_WORK_DT IN DATE,
N_MOD_USER IN VARCHAR2,
work_id_str VARCHAR2
) AS
n_company_name VARCHAR2(1024):=NULL;
n_company_id NUMBER :=NULL;
n_departmentname VARCHAR2(1024);
n_manufacturename VARCHAR2(1024);
nm number;
work_id_list string_fnc.t_array;
BEGIN
IF (n_departmentid IS NOT NULL) THEN
SELECT departmentname INTO n_departmentname FROM VIEW_DEPARTMENT_ALL WHERE DEPARTMENTID = n_departmentid;
with T as (SELECT departmentid, departmentname, level as dlevel
FROM VIEW_DEPARTMENT_ALL
START WITH departmentid = n_departmentid
CONNECT BY PRIOR parent_id = departmentid)
select departmentid, departmentname INTO n_company_id, n_company_name
FROM T where dlevel = (select max(dlevel) from T) - 1;
--else str:='Не указано предприятие,цех проведения работ!' ;
end if;
IF (n_manufactureid IS NOT NULL) THEN
SELECT NAME INTO n_manufacturename FROM DEPARTMENT WHERE to_char(ID) = n_manufactureid;
-- else str:=str+' '+'Не указана организация - производитель работ!' ;
end if;
insert into admission (WORK_TYPEID,COMPANYID,COMPANYNAME,DEPARTMENTNAME,DEPARTMENTID,MANUFACTURERID,MANUFACTURERNAME,WORK_PLACE,EQUIPMENTNAME,
WORKDISCRIPTION,CREATE_USER,MOD_USER,BEGIN_WORK_DT,END_WORK_DT,MANUFACTURERINF,STATUSID)
values (n_work_typeid,n_company_id,n_company_name,n_departmentname,n_departmentid,n_manufactureid,n_manufacturename,replace(trim(n_work_place), ' ', ' '),
replace(trim(n_equipmentname), ' ', ' '),replace(trim(n_workdiscription), ' ', ' '),n_mod_user,n_mod_user,n_begin_work_dt,
n_end_work_dt,replace(trim(n_MANUFACTURERINF), ' ', ' '),1) RETURNING ID INTO n_id;
-- вставляем работы
work_id_list := STRING_FNC.SPLIT(work_id_str, ';');
FOR i IN 1..work_id_list.count
LOOP
INSERT INTO WORK_ADMISSION (WORKID,ADMISSIONID,MOD_USER) VALUES (to_number(work_id_list(i)),n_id,n_mod_user);
DBMS_OUTPUT.PUT_LINE (work_id_list(i)||work_id_list.count);
END LOOP;
END;
