Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ_1.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]