Описание проекта UniSite

Содержание

Описание проекта UniSite 1

1.Цель. 6

2.Реализация. 6

3.Page.cs 8

3.1. Описание 8

3.2 Конструкторы 9

page() 9

page(unisite.user user) 9

page(System.Web.UI.Page pg) 9

3.3 Свойства 9

unisite.user User 9

System.Web.UI.Page Page 9

unisite.util.useragent UserAgent 9

XmlDocument docXml 10

XmlDocument docXsl 10

SqlConnection Connection 10

3.4 Методы 10

SqlConnection NewConnection 10

XmlDocument bildXml( String sXml ) 10

XmlDocument load( String sName ) 10

XmlDocument loadXml( String sName ) 10

void loadXsl( String sName ) 10

XmlNodeList getNodes( String url ) 10

XmlNode getNode( String url ) 11

bool IsNode( String url ) 11

String getText( String url ) 11

String Text( String url ) 11

XmlElement bildElement( String sName, String sText ) 11

XmlNode bildNode( String sName, String sText ) 11

void print(System.Web.HttpResponse rsp) 11

void write(String sFileName) 11

4.Form.cs 12

4.1 Описание 12

4.2 Пример использования на базе контролов 22

Form.aspx 22

Form.aspx.cs 23

4.3 Пример использования на базе XSL 26

Form.xsl 26

Form.aspx.cs 29

4.4 Конструкторы 31

form( unisite.page p ) 31

form( unisite.page p, int ind, String sPrefix ) 31

4.5 Свойства 31

unisite.user User 31

unisite.page Page 31

XmlNode Node 31

int Count 31

String ID 31

String Pk 31

String TableName 32

int Right 32

String EncodeType 32

ArrayList Fields 32

String Query 32

4.6 Методы 32

unisite.db.field Field(String index) 32

unisite.db.field Field(int index) 32

void ReadFromCookies(HttpRequest req, String sPrefix ) 32

void ReadFromCookies(HttpRequest req ) 32

void WriteToCookies(HttpResponse res, object duration, String sPrefix ) 32

void WriteToCookies(Web.HttpResponse res, object duration ) 32

void WriteToHashtable( Hashtable h, String sPrefix ) 32

void ReadFromHashtable( Hashtable h, String sPrefix ) 32

void Read( SqlDataReader rs ) 33

SqlDataReader Execute( String sQuery ) 33

void Append() 33

void Update() 33

void Delete() 33

void ReadForm(Control frm) 33

void ReadForm(HttpRequest req ) 33

ArrayList CheckData() 33

void DefaultData() 33

String BildForm(Control frm) 33

void Draw() 33

void Debug(HttpResponse rsp) 33

5 Cell.cs 34

5.1 Конструктор 34

cell(unisite.db.iparent parent) 34

5.2 Поля 34

String Name 34

String Alias 34

String Type 34

String Title 34

String TitleText 34

String Method 34

XmlNode CellNode 34

iparent Parent 34

5.3 Методы 34

void Load( XmlNode col ) 34

string getItem(string sName) 34

string Param( String sFieldName, HttpRequest req ) 34

object Form( String sPrefix, HttpRequest req ) 35

DataTable CreateTable() 35

DataTable BildTable(DataTable dt) 35

void Label( Control cl ) 35

String Format(object oValue, bool isDefault) 35

object Parse(String sValue, bool isDefault) 35

6. Field.cs 35

6.1 Конструктор 35

field(unisite.db.iparent parent) 35

6.2 Свойства 35

Boolean IsQuery 35

Boolean IsUpdate 35

Boolean IsFile 35

object Value 35

bool ReadOnly 36

unisite.util.fieldprop Prop 36

bool IsAppend 36

6.3 Методы 36

void Draw( XmlDocument doc ) 36

void ReadFromCookies( HttpRequest req, String sPrefix ) 36

void WriteToCookies( HttpResponse res, object duration, String sPrefix ) 36

void WriteToHashtable( Hashtable h, String sPrefix ) 36

void ReadFromHashtable( Hashtable h, String sPrefix ) 36

void Read( SqlDataReader frs ) 36

void setProp( DataRow cd ) 36

Update( SqlCommand cmd ) 36

int SaveBefore( SqlTransaction tr, object id ) 37

int Save( SqlTransaction tr, object id ) 37

void CoreStyle(CssStyleCollection st) 37

Control CreateControl(UI.Control frm) 37

void BildSubControl (TableCell cell, Table tbl) 37

void BildControl(Table tbl) 37

void ReadForm( String sPrefix, HttpRequest req ) 37

void ReadForm( Control cl ) 37

String CoreQuery( String sQuery ) 37

String CoreUrl(String sUrl) 37

String BildForm( Control cl ) 37

String toString() 38

void Parse(String sValue) 38

void Debug(HttpResponse rsp) 38

7 Filter.cs 38

7.1 Описание 38

7.2 XML фильтра 41

7.3 Секция condition 43

7.4 Конструкторы 44

filter( unisite.page p ) 44

filter( unisite.page p, int ind ) 44

7.5 Свойства 45

unisite.user User 45

unisite.page Page 45

XmlNode Node 45

int Count 45

DictionaryEntry[] Attributes 45

String Query 45

7.6 Методы 45

unisite.util.condition Condition(int index) 45

unisite.db.condition Field(String index) 45

unisite.db.condition Field(int index) 45

object Limit(string key) 45

Limit(string key, object val) 45

Layout(int y, int x) 46

WriteToHashtable( Hashtable h ) 46

ReadFromHashtable( Hashtable h ) 46

BildQuery_Where(String sQuery) 46

Parameters( SqlCommand cmd ) 46

BildControls(Table tbl) 46

int CellsCount(unisite.db.condition fld) 46

DataTable BildCondition(unisite.db.condition fld) 46

String BildForm(Control frm) 46

ReadForm(Control frm) 46

ReadForm(HttpRequest req ) 46

CoreData() 46

CoreCondition() 46

Clear() 46

Draw() 46

Debug(HttpResponse rsp) 47

8 Condition.cs 47

8.1 Свойства 47

Object Value 47

bool IsQuote 47

String Where 47

String Query 47

8.2 Методы 47

int Colspan(int y, int x) 47

WriteToHashtable( Hashtable h ) 47

ReadFromHashtable( Hashtable h ) 47

Parameters(SqlCommand cmd ) 47

Draw( XmlDocument doc ) 47

Control CreateControl() 47

BildControl(Table tbl) 48

String BildForm( Control cl ) 48

ReadForm( HttpRequest req ) 48

ReadForm( Control cl ) 48

CoreCondition() 48

Clear() 48

String toString() 48

Debug(HttpResponse rsp) 48

9 Table.cs 48

9.1 Описание 48

9.2 Пример использования на базе DataGrid 51

Table.aspx 51

Table.aspx.cs 53

9.3. Пример использования на базе XSL 56

Table.xsl 56

Table.aspx.cs 58

9.4 Конструкторы 59

table ( unisite.page p) 59

9.5. Поля 59

unisite.db.filter[] Filter 59

9.6 Свойства 59

int Right 59

String TableName 59

unisite.db.column ColumnByAlias(string sAlias) 59

XmlNode Node 59

int Count 59

String Pk 59

String Order 60

XmlNode NavigatorNode 60

Int PageNumber 60

9.7 Методы 60

void Load() 60

void Load(int ind) 60

void BildColoumns(DataGrid dg) 60

DataTable CreateDataTable() 60

DataTable BildDataTable() 60

DataTable BildDataTable(SqlCommand cmd) 60

void SetHeaderText( DataGrid dg ) 60

void Draw() 60

void WriteToHashtable( Hashtable h ) 60

void ReadFromHashtable( Hashtable h ) 60

ChangeOrder(String sFieldName) 60

unisite.db.column Columns(String sName) 61

setWhere(String sField, String sValue) 61

removeWhere(String sField) 61

String BildQuery_Select() 61

String BildQuery_Where(String sQuery) 61

String BildQuery_Order(String sQuery) 61

String BildQuery() 61

10 Column.cs 61

10.1 Конструктор 61

column(unisite.db.iparent parent) 61

10.2 Свойства 61

unisite.db.iparent Parent 61

String Title 61

XmlNode Node 61

String Name 61

String Alias 62

String Type 62

Bool IsWrap 62

String FieldName 62

String Order 62

10.3 Методы 62

void Load( XmlNode col ) 62

BoundColumn BildColumn() 62

String Value( object rs ) 62

String Format(object rs, int right) 62

XmlNode Draw( XmlDocument doc, object rs, int rt ) 62

11 Tree.cs 62

11.1 Описание 62

11.2 Пример использования на базе DHTML 63

Tree.aspx 63

Tree.aspx.cs 67

Treenode.aspx.cs 68

11.3 Пример использования на базе XSL 69

Tree.xsl 69

Tree.aspx.cs 72

11.3 Конструкторы 73

tree(unisite.page p) 73

11.4 Методы 73

void Draw(String id) 73

XmlDocument DrawNode(object oParentId, bool isRoot) 73

XmlDocument DrawNode(SqlCommand cmd, bool isRoot) 73

1.Цель.

Проект UniSite предназначен для быстрой реализации форм, таблиц, фильтров, деревьев на HTML-страницах с использованием мультиязыкового интерфейса. Он позволяет максимально автоматизировать это процесс, сведя кодирование к минимум. Использовать стандартный набор программных решений при реализации конкретных задач.

2.Реализация.

Проект реализован на языках asp, C#, java и позволяет взаимодействовать с базами MS SQL 7.0 и выше, Oracle 8.0 и выше, My SQL. Он включает в себя следующие классы:

Page.cs – класс позволяет:

·  формировать html страницу на базе программно сформированного, другими классами xml;

·  инициализировать connect с базой данных.

Table.cs – класс позволяет:

·  заполнять xml описатель таблицы набором данных;

·  создавать набор колонок для контрола DataGrid;

·  формировать источник данных для DataGrid;

·  использовать результат работы класса Filter для формирования секции where запроса;

·  устанавливать сортировку по любому из полей отображаемой таблицы базы.

Tree.cs – класс позволяет:

·  заполнять xml описатель дерева набором данных, которые могут быть отображены с использованием стандартного xsl-шаблона;

·  формировать источник данных для DHTML-дерева с динамической подгрузкой узлов;

·  использовать результат работы класса Filter для формирования секции where запроса;

Filter.cs – класс позволяет:

·  заполнять xml описатель фильтра набором текущих значений:

·  генерировать форму фильтра на базе стандартных контролов;

·  генерировать форму фильтра на базе UserControl;

·  считывать данные фильтра, посланные методами GET или POST с использованием как контролов так и непосредственно;

·  инициализировать контролы фильтра данными;

·  формировать секцию where запроса к базе;

·  сохранять данные в куки и хэш-таблицу;

·  считывать ранее сохраненные данные из кук и хэш-таблицы.

Form.cs – класс позволяет:

·  заполнять xml описатель фильтра набором текущих значений:

·  генерировать форму на базе стандартных контролов;

·  генерировать форму на базе UserControl;

·  считывать данные посланные методами GET или POST с использованием как контролов так и непосредственно;

·  инициализировать контролы формы данными;

·  добавлять, удалять или изменять запись таблицы базы;

·  сохранять данные в куки и хэш-таблицу;

·  считывать ранее сохраненные данные из кук и хэш-таблицы.

Пример отображения таблицы на странице с использованием xsl – шаблона.

// Создание пользователя

unisite.user user = new unisite.user();

// Создание страницы

unisite.page p = new unisite.page(user);

// Загрузка описания страницы

p.load(Server.MapPath("/admin/news/table"));

// Создание таблицы

unisite.db.table tbl= new unisite.db.table(p);

// Чтение описателя таблицы из ранее загруженного описания страницы

tbl.Load();

// Заполнение xml данными из базы

tbl.Draw();

// Отображение html

p.print(Response);

Пример отображения таблицы на странице с использованием DataGrid.

protected System.Web.UI.WebControls.DataGrid dg;

// Создание пользователя

unisite.user user = new unisite.user();

// Создание страницы

unisite.page p = new unisite.page(user);

// Загрузка описания страницы

p.loadXml(Server.MapPath("/admin/news/table.xml"));

// Создание таблицы

unisite.db.table tbl= new unisite.db.table(p);

// Чтение описателя таблицы из ранее загруженного описания страницы

tbl.Load();

// Генерация колонок

tbl.BildColoumns(dg);

// Подготовка данных

System.Data.DataTable dt = tb.BildDataTable();

// Инициализация DataGrid

dg.DataSource = dt;

dg.DataBind();

3.Page.cs

3.1. Описание

Класс имеет несколько конструкторов. В наиболее полном виде конструктор иммет вид page( unisite.user user). Он принимает на входе объект unisite.user, который содержит параметры конкретного пользователя как-то язык интерфейса, кодировку страниц, форматы представления дат, денег и пр. Он, обычно, инициализируется в рамках сессии.

Для отображения страницы могут быть использованы два подхода. Первый на базе набора контролов и второй на базе xsl шаблона.

В первом случае после инициализации класса вызывается метод loadXml( String sName ), который принимает на входе полное имя файла xml. Он содержит описание объектов отображаемых на странице. Далее происходит их модификация и инициализация данными, для чего могут использоваться как классы Form, Table, так и непосредственное обращение к свойствам контролов, с их последующим отображением.

Во втором случае после инициализации класса следует вызов метода load( String sName ), который принимает на входе полное имя (без расширения) файлов xml и xsl. Первый из которых содержит описание объектов отображаемых на странице, а второй способ их отображения. При необходимости это файлы могут быть загружены независимо вызовом методов loadXml( String sName ), loadXsl( String sName ) соответственно. Далее происходит модификация входного xml файла для чего могут использоваться как классы Form, Table, так и непосредственное добавление новых и модификация существующих тегов. В заключение вызывается метод print(HttpResponse rsp), который записывает результирующий HTML в выходной поток.

3.2 Конструкторы

page()

После вызова поле User инициализируется unisite.user. Поле Page не инициализируется.

page(unisite.user user)

После вызова поле Page не инициализируется.

page(System.Web.UI.Page pg)

После вызова происходит инициализация поля UserAgent. Поле User не инициализируется. Наиболее часто используется именно этот конструктор. Например:

public class page : unisite.page

{

public page(System.Web.UI.Page pg) : base(pg)

{

this.mUser = (unisite.user)pg.Session["UNISITE_USER"];

if( this.mUser == null )

{

this.mUser = new fiac.classes.user();

pg.Session["UNISITE_USER"] = this.mUser;

this.mUser.Lang = "eng";

}

}

}

3.3 Свойства

unisite.user User

– текущий пользователь страницы. Если поле не инициализировано, то обращение приводит к выбрасыванию System.Exception.

System.Web.UI.Page Page

- текущая Web страница. Если поле не инициализировано, то обращение приводит к выбрасыванию System.Exception.

unisite.util.useragent UserAgent

– описатель браузера клиента.

XmlDocument docXml

- XML документ.

XmlDocument docXsl

- XSL документ.

SqlConnection Connection

- открытый коннект к базе.

3.4 Методы

SqlConnection NewConnection

Метод создает новый коннект к базе. Может быть использован для получения альтернативного коннекта, во всех других случаях следует использовать поле Connection. При необходимости метод может быть перегружен.

XmlDocument bildXml( String sXml )

Метод создает XML-документ из строки. Например:

pg = new fiac.admin.classes.page(Page);

pg.bildXml("<root/>");

XmlDocument load( String sName )

Загружает одновременно одноименные XML и XSL. Например:

up = new nestle.classes.page(this);

up.load(Server.MapPath("/kitchen/form"));

XmlDocument loadXml( String sName )

Загружает XML. Например:

pg = new cmdb.classes.page(Page);

pg.loadXml(Server.MapPath("/cmdb/xml/"+sDataSource+".xml"));

void loadXsl( String sName )

Загружает XSL.

XmlNodeList getNodes( String url )

Возвращает коллекцию узлов по заданному url. Например:

System.Xml.XmlNodeList nl= pg.getNodes("menu/top");

XmlNode getNode( String url )

Возвращает узел по заданному url. Например:

System.Xml.XmlNode nd= pg.getNode("button/delete");

bool IsNode( String url )

Проверяет наличие узла с заданным url. Например:

Bool ok = pg.IsNode(“filter”);

String getText( String url )

Возвращает текст заданного узла. Например:

String s = pg.getText(“text/delete_rus”);

String Text( String url )

Возвращает текст заданного узла. Узел ищется с учетом текущих языковых установок пользователя. Например:

String s = pg.Text(“text/delete”);

XmlElement bildElement( String sName, String sText )

Создает элемент. Например, для создания тега <TagText</Tag> следует

System.Xml.XmlElement el = bildElement(“Tag”,”Text”);

XmlNode bildNode( String sName, String sText )

Создает узел.

void print(System.Web.HttpResponse rsp)

Пишет результирующий HTML в выходной поток. Например:

pg.print(Response);

void write(String sFileName)

Пишет результирующий XML в файл. Например:

Pg.write(@”d:\work\tt.xml”);

4.Form.cs

4.1 Описание

Конструктор класса принимает на входе объект типа page. При этом происходит чтение секции form ранее загруженного xml файла и построение в памяти динамической модели формы. Секция form должна содержать набор тегов th и иметь вид:

<form name="ut_user" pk="id">

<th field="id" type="hidden">

<title_eng>id</title_eng>

<title_rus>id</title_rus>

</th>

<th field="login" type="string">

<title_eng>Nick name</title_eng>

<title_rus>Псевдоним</title_rus>

<checkform>::any::req</checkform>

</th>

<th field="or_work" type="external">

<title_rus>Работы по ремонту:</title_rus>

<src>work_table.aspx?order_id={@id}</src>

</th>

</form>

Тег from должен иметь два атрибута

name – имя главной таблицы или представления из которой берутся данные,

pk – имя поля primary key, указанной таблицы,

Тег form может иметь атрибуты

src – альтернативный вариант задания name если атрибут name используется для других целей,

control - полное имя UserControl формы,

class – полный квалификатор класса. В классе могут быть определены следующие методы:

void Append(unisite.db.form frm, SqlTransaction tr)

добавление записи.

void Update(unisite.db.form frm, SqlTransaction tr)

изменение записи.

void Delete(unisite.db.form frm, SqlTransaction tr)

удаление записи.

ArrayList CheckData(unisite.db.form frm)

проверка прочитанных с формы данных. Классом form не вызывается.

void DefaultData(unisite.db.form frm)

установка начальных значений формы при добавлении. Классом form не вызывается.