/
ivan
/
ModMas
Обзор
Документация
Войти
/
ivan
/
ModMas
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ModuleMaster/handlers/edgridevhandler.ashx
244 строки
11 KB
i.krivokon
Initial commit
13 мар 2026, 13:49
13 мар 2026, 13:49
00d9fb6
Код
Авторство
О чём код?
<%@ WebHandler Language="VB" Class="edGridEvHandler" %> Imports System.Net Imports System.IO Imports sharedClasses.dbFunctions Public Class edGridEvHandler : Implements IHttpHandler, System.Web.SessionState.IRequiresSessionState Private _db As New SqlFunctions Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest With context Dim a As sharedClasses.Auth.auth = New sharedClasses.Auth.auth("SSO", IIf(context.Request.UserHostAddress = "::1", "106.109.72.69", context.Request.UserHostAddress)) Dim qString As System.Collections.Specialized.NameValueCollection = .Request.QueryString Select Case qString("method") Case "getControl" .Response.Clear() .Response.Write(GetControl(qString("tid"), qString("field"), qString("type"), qString("value"))) .Response.End() Case "saveData" .Response.Clear() .Response.Write(SaveData(qString("tid"), qString("rowid"), qString("field"), qString("type"), qString("value"), context.Request.UserHostAddress.ToString, a.userId)) .Response.End() Case "getAddForm" '.Response.Clear() '.Response.Write(PrepareAddForm(_tId)) '.Response.End() Case "deleteRow" If DeleteRow(qString("tid"), qString("rowid")) Then .Response.Write(qString("rowid")) Else .Response.Write(-1) End If End Select 'context.Response.ContentType = "text/plain" 'context.Response.Write("<input type='text' id='foo' value='" & context.Request.QueryString("data") & "'></input>") 'context.Response.Write("<input type='text' id='edit' value='0'></input>") End With End Sub Private Function getSchema(tablename As String) As String Dim sql As New StringBuilder sql.AppendLine("use UserModules ") sql.AppendLine("select s.name ") sql.AppendLine("from sys.tables t ") sql.AppendLine("left join sys.schemas s ") sql.AppendLine("ON t.schema_id = s.schema_id ") sql.AppendLine("where t.name = '" & tablename & "' ") Return _db.GetScalar(sql.ToString) End Function Private Function DeleteRow(tid As String, rownum As String) As Boolean Dim config As edGridNamespace.tableConfig = HttpContext.Current.Session("config_" & tid) If _db.NonQuery("DELETE FROM UserModules.[" & getSchema(config.dbTableName) & "]." & config.dbTableName & " WHERE id=" & rownum) > 0 Then Return True Else Return False End If End Function Public Function SaveData(tid As String, rowId As String, field As String, type As String, data As String, ip As String, userid As String) As String Dim config As edGridNamespace.tableConfig = HttpContext.Current.Session("config_" & tid) If Not IsNothing(config) Then Dim com As New Data.SqlClient.SqlCommand field = field.Replace("-", "").Replace("'", "") If type = "ENCODED TEXT" Then com.CommandText = "UPDATE UserModules.[" & getSchema(config.dbTableName) & "]." & config.dbTableName & " SET [" & field & "]=hr.dbo.fn_encodeString(@" & field & ", 'name') WHERE id=@id" Else com.CommandText = "UPDATE UserModules.[" & getSchema(config.dbTableName) & "]." & config.dbTableName & " SET [" & field & "]=@" & field & " WHERE id=@id" End If With com.Parameters Select Case type Case "CHECKBOX" .AddWithValue(field, IIf(data = "true", "Y", "N")) Case "ENCODED TEXT" .AddWithValue(field, data.Replace(Chr(10), " ").Replace(Chr(13), "").Replace(Chr(9), " ")) Case "NUMBER" If data = "" Then .AddWithValue(field, DBNull.Value) Else .AddWithValue(field, data) End If Case Else .AddWithValue(field, data) End Select .AddWithValue("id", rowId) End With If _db.NonQuery(com) > 0 Then ' Если для таблицы заполнено поле on_data_save, то это обрабатывается здесь If config.TableConfig.Rows(0)("on_data_changed") <> "" Then Dim wb As WebRequest Try Dim url As String = HttpContext.Current.Request.Url.AbsoluteUri.Replace("edGridEvHandler", config.TableConfig.Rows(0)("on_data_changed")) wb = WebRequest.Create(url) Dim res As WebResponse = wb.GetResponse Catch e As Exception End Try End If config.SaveHistory(com.Parameters, rowId, userid, ip) Select Case type Case "TEXTBOX" Dim literalText As String = "" For Each stringChar As Char In data If stringChar = Chr(10) Then literalText &= "<br>" Else literalText &= stringChar End If Next Return literalText Case "CHECKBOX" If data = "true" Then Return "<input id=""srv"" type=""checkbox"" checked=""true"" onclick=""return false"">" Else Return "<input id=""srv"" type=""checkbox"" onclick=""return false"">" End If Case "MARK" 'If data <> "" Then Return "<span val=""" & data & """><input id=""srv"" type=""checkbox"" checked=""true"" onclick=""return false""></span>" 'Else ' Return "<input id=""srv"" type=""checkbox"" onclick=""return false"">" 'End If Case "URL" Return "<a target='blank' href='" & data & "'>" & data & "</a>" End Select Return data Else Return "Error" End If Else Return "Error" End If 'Return tableName & "|" & rowId & "|" & fieldName & "|" & data End Function Public Function GetControl(tid As Integer, field As String, type As String, data As String, Optional fooId As Boolean = True) As String Dim config As edGridNamespace.tableConfig = HttpContext.Current.Session("config_" & tid) Dim cntrl As System.Web.UI.WebControls.WebControl = Nothing Dim paramRow As Data.DataRow = config.GetParamRow(field) 'Dim fieldId As String = config.GetParam() Select Case type Case "DROPDOWNLIST" If Not IsNothing(paramRow) Then Dim params() = paramRow("FORMULA").ToString.Split("|") Dim sql As String If params.Count < 3 Then sql = "select FieldText, FieldValue FROM [UserModules].[dbo].[FieldsValues] where enabled='Y' and TableId = " & tid & _ " AND FieldId = " & paramRow("id") & " ORDER BY FieldText " Else sql = "select " & params(0) & " as FieldText, " & params(1) & " as FieldValue FROM " If params(2).Contains(".") Then sql &= params(2) Else sql &= "UserModules.[user]." & params(2) End If If params.Count > 3 Then Dim whereParams() As String = params(3).Split("@") sql &= " WHERE " & whereParams(0).Trim("=") If whereParams.Count > 1 Then 'sql &= Filters("[" & whereParams(1) & "]") End If End If If params.Count > 4 Then sql &= " " & params(4) End If End If cntrl = New DropDownList With _ {.DataSource = _db.GetData(sql), _ .DataValueField = "fieldValue", .DataTextField = "fieldText"} cntrl.DataBind() Try If Not IsNothing(CType(cntrl, DropDownList).Items.FindByText(data)) Then CType(cntrl, DropDownList).Items.FindByText(data).Selected = True End If Catch ex As Exception End Try End If Case "TEXTBOX", "ENCODED TEXT" cntrl = New TextBox With {.TextMode = TextBoxMode.MultiLine} Case "DATE" cntrl = New TextBox With {.TextMode = TextBoxMode.Date} Case "NUMBER" cntrl = New TextBox With {.TextMode = TextBoxMode.Number} Case "CHECKBOX" Dim chk As New CheckBox With {.Checked = (data = "Y") Or (data.ToUpper = "TRUE")} chk.InputAttributes.Add("class", "formElement") cntrl = chk Case Else cntrl = New TextBox End Select If fooId Then cntrl.ID = "foo" Else cntrl.ID = field If type <> "CHECKBOX" Then cntrl.CssClass = "formElement" End If End If Dim myCItrad As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("EN-US", True) Dim sw As IO.StringWriter = New IO.StringWriter(myCItrad) Dim hw As HtmlTextWriter = New HtmlTextWriter(sw) cntrl.RenderControl(hw) 'Return "<input type='text' id='foo' value='" & config.dbTableName & "'></input>" Return sw.ToString End Function Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property End Class