Показать сообщение отдельно
  #4 (permalink)  
Старый 09.11.2011, 09:51
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от Georgy
Есть какие-нибудь альтернативы?
Таки выкинуть ПХП и перейти уже на zen.

XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html>
	<h1>Список работ</h1>
</html>
<hgroup width="100%" cellVAlign="top">
	<vgroup id="gTbl" width="90%" cellVAlign="top">
		<tableNavigator id="tnJob" tablePaneId="tpJob" align="right"/>
		<tablePane 
			id="tpJob" 
			tableName="wrk.Job" 
			valueColumn="ID"
			pageSize="50" 
			useSnapshot="true" 
			caption="Работы" 
			onselectrow='zenPage.Select(zenThis.getValue("ID"))'
			ondblclick='zenPage.Edit(zenThis.getValue("ID"));' 
			showValueInTooltip='true'
			OnCreateResultSet="CrtSQL"
		>
			<column 
				header="Id" 
				colName="ID" 
				hidden="true"
			/>
			<column 
				header="Название" 
				colName="Name" 
				filterType="text"
			/>
			<column 
				header="Исполнители" 
				colName="Member" 
				width="180px"
				filterType="query"
				filterQuery="Select Name From wrk.Member Order by Name"
			/>
			<column 
				header="Завершение" 
				colName="Brk" 
				width="120px"
			/>
			<column 
				header="Квартал" 
				colName="Kvartal" 
				width="130px"
			/>
			<column 
				header="Ok" 
				colName="Ok" 
				width="40px"
				filterType="enum"
				filterEnum="Да,Нет"
			/>
		</tablePane>
	</vgroup>
	<dataController id="cnJob" modelClass="wrk.Job"/>
	<spacer width="10px" />
	<vgroup id="gBtn" cellVAlign="top">
		<button 
			id="bExit" 
			caption="Выход" 
			onclick="zenPage.Go('wrk.ZEN.Menu.cls');" 
			controlClass="btn"
		/>
		<button 
			id="bLoad" 
			caption="Обновить" 
			onclick="zenPage.Load();" 
			controlClass="btn"
		/>
		<fieldSet legend="Работу">
			<button 
				id="bAdd" 
				caption="Добавить" 
				onclick="zenPage.Add();" 
				controlClass="btn"
			/>
			<button 
				id="bDel" 
				caption="Удалить" 
				onclick="zenPage.Del();" 
				controlClass="btn"
			/>
		</fieldSet>
	</vgroup>
</hgroup>
</page>
}

/// Построение запроса для отображения таблицы
Method CrtSQL(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet
{
	Set tRS = ""
	
	Set tSC = $$$OK
	Set tSELECT = "ID,Name,"
	Set tSELECT = tSELECT_"wrk.Job_AllMember(ID) as Member,"
	Set tSELECT = tSELECT_"dEnd as Brk,"
	Set tSELECT = tSELECT_"wrk.Plan_KvrToStr(Plan->ID) as Kvartal,"
	Set tSELECT = tSELECT_"wrk.Job_Ok(ID) as Ok"
	Set tFROM = "wrk.Job as a"
	Set tWHERE = ""
	Set tORDER = "dCreate desc,Member"
	// строим критерии отбора по фильтрам
	If $g(pInfo.filters("Name"))'="" {
		Set tWHERE = tWHERE_"Upper(Name) [ Upper('"_pInfo.filters("Name")_"') "
	}
	If $g(pInfo.filters("Member"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		Set tWHERE=tWHERE_"wrk.Job_AllMember(ID)['"_ pInfo.filters("Member")_"'"
	}
	If $g(pInfo.filters("Ok"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		s ok="<>"
		s:pInfo.filters("Ok")="Да" ok="="
		Set tWHERE=tWHERE_"wrk.Job_Ok(ID)"_ok_"'Да'"
	}
	Set sql = "SELECT " _ tSELECT _ " FROM " _ tFROM
	Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE
	Set:tORDER'="" sql = sql _ " ORDER BY " _tORDER
	Set tRS = ##class(%ResultSet).%New()
	Set tSC = tRS.Prepare(sql)
	Set pInfo.queryText = sql
	Quit tRS
}

И ты уже имеешь вот такую страничку с табличкой



Там три фильтра. Помимо этого, если клацать на заголовки столбцов, будет выполняться сортировка таблицы по данным столбца, как по "возрастанию" так и по "убыванию".
Причём в сортировке будет учитываться типаж данных в колонке (строка, дата, время, число и п.р.)...
Ответить с цитированием