📄 aspmkrfn.asp
字号:
ErrDesc = Err.Description
On Error GoTo 0
Err.Raise ErrNo, ErrSrc, ErrDesc
End If
End If
End If
Set objMail = Nothing
Set objConfig = Nothing
End If
<!--## End If ##-->
End Sub
%>
<%
' Function to generate Value Separator based on current row count
' rowcnt - zero based row count
'
Function ValueSeparator(rowcnt)
ValueSeparator = ", "
End Function
' Function to generate View Option Separator based on current row count (Multi-Select / CheckBox)
' rowcnt - zero based row count
'
Function ViewOptionSeparator(rowcnt)
ViewOptionSeparator = ", "
' Sample code to adjust 2 options per row
'If ((rowcnt + 1) Mod 2 = 0) Then ' 2 options per row
'ViewOptionSeparator = ViewOptionSeparator & "<br>"
'End If
End Function
' Function to render repeat column table
' rowcnt - zero based row count
'
Function RenderControl(totcnt, rowcnt, repeatcnt, rendertype)
Dim sWrk
sWrk = ""
' Render control start
If rendertype = 1 Then
If rowcnt = 0 Then sWrk = sWrk & "<table class=""aspmakerlist"">"
If (rowcnt mod repeatcnt = 0) Then sWrk = sWrk & "<tr>"
sWrk = sWrk & "<td>"
' Render control end
ElseIf rendertype = 2 Then
sWrk = sWrk & "</td>"
If (rowcnt mod repeatcnt = repeatcnt -1) Then
sWrk = sWrk & "</tr>"
ElseIf rowcnt = totcnt Then
For i = ((rowcnt mod repeatcnt) + 1) to repeatcnt - 1
sWrk = sWrk & "<td> </td>"
Next
sWrk = sWrk & "</tr>"
End If
If rowcnt = totcnt Then sWrk = sWrk & "</table>"
End If
RenderControl = sWrk
End Function
' Function to truncate Memo Field based on specified length, string truncated to nearest space or CrLf
'
Function TruncateMemo(str, ln)
Dim i, j, k
If Len(str) > 0 And Len(str) > ln Then
k = 1
Do While k > 0 And k < Len(str)
i = InStr(k, str, " ", 1)
j = InStr(k, str, vbCrLf, 1)
If i < 0 And j < 0 Then ' Not able to truncate
TruncateMemo = str
Exit Function
Else
' Get nearest space or CrLf
If i > 0 And j > 0 Then
If i < j Then
k = i
Else
k = j
End If
ElseIf i > 0 Then
k = i
ElseIf j > 0 Then
k = j
End If
' Get truncated text
If k >= ln Then
TruncateMemo = Mid(str, 1, k-1) & "..."
Exit Function
Else
k = k + 1
End If
End If
Loop
Else
TruncateMemo = str
End If
End Function
%>
<%
Function CloneRs(Rs)
Dim oStream
Dim oRsClone
' Save the recordset to the stream object
Set oStream = Server.CreateObject("ADODB.Stream")
Rs.Save oStream
' Open the stream object into a new recordset
Set oRsClone = Server.CreateObject("ADODB.Recordset")
oRsClone.Open oStream, , , 2
' Return the cloned recordset
Set CloneRs = oRsClone
' Release the reference
Set oRsClone = Nothing
End Function
'-------------------------------------------------------------------------------
' Function for Writing audit trail
'
Sub ewWriteAuditTrail(pfx, curDate, curTime, id, user, action, table, field, keyvalue, oldvalue, newvalue)
On Error Resume Next
Dim fso, ts, sMsg, sFn, sFolder
Dim bWriteHeader, sHeader
Dim userwrk
userwrk = user
If userwrk = "" Then userwrk = "-1" ' assume Administrator if no user
sHeader = "date" & vbTab & _
"time" & vbTab & _
"id" & vbTab & _
"user" & vbTab & _
"action" & vbTab & _
"table" & vbTab & _
"field" & vbTab & _
"key value" & vbTab & _
"old value" & vbTab & _
"new value"
sMsg = curDate & vbTab & _
curTime & vbTab & _
id & vbTab & _
userwrk & vbTab & _
action & vbTab & _
table & vbTab & _
field & vbTab & _
keyvalue & vbTab & _
oldvalue & vbTab & _
newvalue
sFolder = "<!--##=PROJ.AuditTrailPath##-->"
sFn = pfx & "_" & ewZeroPad(Year(Date), 4) & ewZeroPad(Month(Date), 2) & ewZeroPad(Day(Date), 2) & ".txt"
Set fso = Server.Createobject("Scripting.FileSystemObject")
bWriteHeader = Not fso.FileExists(Server.MapPath(sFolder & sFn))
Set ts = fso.OpenTextFile(Server.MapPath(sFolder & sFn), 8, True)
If bWriteHeader Then
ts.writeline(sHeader)
End If
ts.writeline(sMsg)
ts.Close
Set ts = Nothing
Set fso = Nothing
End Sub
' Pad zeros before number
Function ewZeroPad(m, t)
ewZeroPad = String(t - Len(m), "0") & m
End Function
' IIf function
Function ewIIf(cond, v1, v2)
On Error Resume Next
If CBool(cond) Then
ewIIf = v1
Else
ewIIf = v2
End If
End Function
' Convert different data type value
Function ewConv(v, t)
Select Case t
' adBigInt/adUnsignedBigInt
Case 20, 21
If IsNull(v) Then
ewConv = Null
Else
ewConv = CLng(v)
End If
' adSmallInt/adInteger/adTinyInt/adUnsignedTinyInt/adUnsignedSmallInt/adUnsignedInt/adBinary
Case 2, 3, 16, 17, 18, 19, 128
If IsNull(v) Then
ewConv = Null
Else
ewConv = CLng(v)
End If
' adSingle
Case 4
If IsNull(v) Then
ewConv = Null
Else
ewConv = CSng(v)
End If
' adDouble/adCurrency/adNumeric
Case 5, 6, 131
If IsNull(v) Then
ewConv = Null
Else
ewConv = CDbl(v)
End If
Case Else
ewConv = v
End Select
End Function
%>
<script language="JScript" runat="server">
// Server-side JScript functions for ASPMaker 5+ (Requires script engine 5.5.+)
function EW_Encode(str) {
return encodeURIComponent(str);
}
function EW_Decode(str) {
return decodeURIComponent(str);
}
// encrytion key
EW_RANDOM_KEY = '<!--##=ewRandomKey##-->';
// JavaScript implementation of Block TEA by Chris Veness
// http://www.movable-type.co.uk/scripts/TEAblock.html
//
// TEAencrypt: Use Corrected Block TEA to encrypt plaintext using password
// (note plaintext & password must be strings not string objects)
//
// Return encrypted text as string
//
function TEAencrypt(plaintext, password)
{
if (plaintext.length == 0) return(''); // nothing to encrypt
// 'escape' plaintext so chars outside ISO-8859-1 work in single-byte packing, but
// keep spaces as spaces (not '%20') so encrypted text doesn't grow too long, and
// convert result to longs
var v = strToLongs(escape(plaintext).replace(/%20/g,' '));
if (v.length == 1) v[1] = 0; // algorithm doesn't work for n<2 so fudge by adding nulls
var k = strToLongs(password.slice(0,16)); // simply convert first 16 chars of password as key
var n = v.length;
var z = v[n-1], y = v[0], delta = 0x9E3779B9;
var mx, e, q = Math.floor(6 + 52/n), sum = 0;
while (q-- > 0) { // 6 + 52/n operations gives between 6 & 32 mixes on each word
sum += delta;
e = sum>>>2 & 3;
for (var p = 0; p < n-1; p++) {
y = v[p+1];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
z = v[p] += mx;
}
y = v[0];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
z = v[n-1] += mx;
}
// note use of >>> in place of >> due to lack of 'unsigned' type in JavaScript
return escCtrlCh(longsToStr(v));
}
//
// TEAdecrypt: Use Corrected Block TEA to decrypt ciphertext using password
//
function TEAdecrypt(ciphertext, password)
{
if (ciphertext.length == 0) return('');
var v = strToLongs(unescCtrlCh(ciphertext));
var k = strToLongs(password.slice(0,16));
var n = v.length;
var z = v[n-1], y = v[0], delta = 0x9E3779B9;
var mx, e, q = Math.floor(6 + 52/n), sum = q*delta;
while (sum != 0) {
e = sum>>>2 & 3;
for (var p = n-1; p > 0; p--) {
z = v[p-1];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
y = v[p] -= mx;
}
z = v[n-1];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z)
y = v[0] -= mx;
sum -= delta;
}
var plaintext = longsToStr(v);
// strip trailing null chars resulting from filling 4-char blocks:
if (plaintext.search(/\0/) != -1) plaintext = plaintext.slice(0, plaintext.search(/\0/));
return unescape(plaintext);
}
// supporting functions
function strToLongs(s) { // convert string to array of longs, each containing 4 chars
// note chars must be within ISO-8859-1 (with Unicode code-point < 256) to fit 4/long
var l = new Array(Math.ceil(s.length/4))
for (var i=0; i<l.length; i++) {
// note little-endian encoding - endianness is irrelevant as long as
// it is the same in longsToStr()
l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) +
(s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
}
return l; // note running off the end of the string generates nulls since
} // bitwise operators treat NaN as 0
function longsToStr(l) { // convert array of longs back to string
var a = new Array(l.length);
for (var i=0; i<l.length; i++) {
a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF,
l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
}
return a.join(''); // use Array.join() rather than repeated string appends for efficiency
}
function escCtrlCh(str) { // escape control chars which might cause problems with encrypted texts
return str.replace(/[\0\n\v\f\r!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
}
function unescCtrlCh(str) { // unescape potentially problematic nulls and control characters
return str.replace(/!\d\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
}
</script>
<!--##/session##-->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -