Описание проекта 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 не вызывается.