webForumDet fria alternativet

Loggning

16 svar · 634 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

:e hej!

Lite bakgrundsimfo...

Jag har en sida som listar uppdrag. Dessa är klickbara. När något uppdrag klickas öppnas ett popupFrameset, där man kan lägga till och ändra informationen i uppdraget.

Kan man göra någon typ av loggning när något har ändrats eller lagts till i uppdraget? Har funderat på några lösningar men inte kommit fram till något bra...

Tex kan man lägga till material till uppdraget. Säg att man lagt till 10 artiklar vill jag inte ha tio loggningar utan bara en.

Något sådant här skulle jag vilja ha:

Flöde:
-klicka på uppdraget (dvs öppna popupFrameseten)
-görs någon ändring i uppdraget (dvs INSERT eller UPDATE)sätts en cookie
-när uppdraget stängs (dvs när popupen stängs skrivs datum och tid till loggen

Om inget ändras i uppdraget görs inget när popupen stängs...

Kan man göra något sådant eller har ni bättre förslag?

Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#2

Eftersom föregående inlägg tydligenenligt vissa källor, går att besvara med ja blir då följdfrågan:
Hur kan man lösa det?

hehe

//Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#3

Steg 1 och 2 i flödeslistan fixar du ju, och 3:an:

I din redan befintliga onunload i frameset-dokumentet, laddar du ju om huvudsidan. Låt huvudsidan kontrollera cookien du satt i steg 2 i flödet, och göra ev loggningar därifrån.

mvh

devotionMedlem sedan jan. 20013 582 inlägg
#4

ahhhh, kvällen räddad!

Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#5

Hej! :)

Det där får jag nog till. Men hur blir det med tillförlitligheten kan man lita på att <body onUnload alltid körs?

Nu är det iofs inget livsviktigt om det missas en logg, men ändå... ;)

Mvh
henrik

@ndersMedlem sedan juni 200032 969 inlägg
#6

Jag kan inte direkt svara på den frågan. Men annars:

Kan du inte bara göra loggningen sist på sidan som har kört alla inserts och updates? För där vet du ju om du gjort något som ska loggas? :)

Mvh

devotionMedlem sedan jan. 20013 582 inlägg
#7

Jo det skulle jag ju kunna, men då blir det ju en logg för varje artikel som läggs till tex.

Jag skulle vilja undvika det...

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#8

Ok, jag trodde du uppdaterade allt samtidigt, och inte en i taget.
Men, medans jag tänker lite till; varför vill du inte ha en loggpost för varje artikel?

devotionMedlem sedan jan. 20013 582 inlägg
#9

Jag utgår från Windowsapplikationen och där blir det en logg varje gång man öppnar ett uppdrag och gör en förändring i det. Tycker väl det är lite onödig info att få en logg för varje artikel eller varje tid man lägger till.... Det hade ju varit perfekt om det tipset du gav fungerade. Det är ju en lösning- Man kanske kan använda respons.redirect och trixa lite...??

Mvh
henrik

emissionMedlem sedan dec. 19996 721 inlägg
#10

Dra fram ett slump-id på sidan (ev. redan i framesetet). Sedan gör du loggningen när du sparar artiklar etc.

sub logga(slumpid,loggtyp)
   if conn.Execute("SELECT * FROM loggen WHERE loggerid='" & slump & "' AND loggtyp='" & loggtyp & "').EOF then
      conn.Execute "INSERT INTO loggen (loggerid,loggtyp) VALUES('" & slump & "','" & loggtyp & "'",,128
   end if
end sub

Logga slumpvärde,'Lagt till artikel'

Gärna med lite mer produktionsklar kod :) Det var mest principen jag var ute efter.

devotionMedlem sedan jan. 20013 582 inlägg
#11

hmm, du får gärna förklara lite mer emision, inte rikigt med i matchen.... sorry

Mvh
Henrik

emissionMedlem sedan dec. 19996 721 inlägg
#12

Jo, eftersom det verkar som om du lägger till en artikel åt gången, men endast vill logga ett tillfälle, så kan du använda en metod som...

-Kontrollerar om något redan loggats från det aktuella fönstret
-Om inte, logga

devotionMedlem sedan jan. 20013 582 inlägg
#13

hmmm...
Men, vad ska jag ha slumptalet till? är fullständigt förvirrad....

Mvh
Henrik

emissionMedlem sedan dec. 19996 721 inlägg
#14

För att identifiera fönstret, om det är intressant

devotionMedlem sedan jan. 20013 582 inlägg
#15

ahhh, en gammal finfin tråd...

Eftersom databasstrukturen är ganska dålig. Det finns ingen egen atbell för loggning, utan all loggning sker i fältet Log. Radbrytning --> ny logg

Jag har därför gjort så här:

	'Block för loggning av redigering av artiklar
	If request.cookies("Task")("articleLog") <> "" then
		sArticleLog = request.cookies("Task")("articleLog")
		iTaskId = cInt(request.cookies("Task")("taskId"))
		sInitials = Request.Cookies("sydostel")("userInitials")
		dLogDate = formatDateTime(Now(), 2) & " " & formatDateTime(Now(), 4)
		sLogMessage = dLogDate & "	Artiklar har redigerats i UppdragNu Intranät	/" & sInitials
		
		Set objRS = objConn.Execute("SELECT Log From tblTask Where Id = " & iTaskId & "")
		sLog = objRS("Log")
		
		objRS.Close
		Set objRS = Nothing
		
		sLog = sLog & vbcrlf & sLogMessage
		
		strSQL = "UPDATE tblTask Set Log = '" & sLog & "' Where Id = " & iTaskId & ""
		objConn.Execute strSQL,, 128
		
		response.cookies("Task")("articleLog") = ""
	End If

Denna kod ligger i listTask.asp.
Man öppnar ett uppdrag genom att klicka på uppdragsnumret. Uppdraget öppnas i en popup (frameSet) när det görs en skrivning till databasen sätts ett cookievärde:

response.Cookies("Task")("articleLog") = "True"

Det blir några sådana här block för olika händelser...

När sedan popupen stängs så laddas listTask.asp om och loggen skrivs till databasen samtidigt som cookien blir ""

Kanske inte en hundraprocentig lösning, men det funkar hyffsat... synpunkter mottages som vanligt tacksamt...

Ett problem jag råkat ut för ar ätt listTask.asp inte alltid laddas om när man stänger popupen... vet dock inte varför.

FRÅGA!

Hur gör amn för att ladda om listTask.asp typ varannan minut?

Mvh
henrik

emissionMedlem sedan dec. 19996 721 inlägg
#16

devotion skrev:

Det finns ingen egen atbell för loggning, utan all loggning sker i fältet Log. Radbrytning --> ny logg

Usch! Inget du kan ändra på?

Set objRS = objConn.Execute("SELECT Log From tblTask Where Id = " & iTaskId & "")
		sLog = objRS("Log")
		
		objRS.Close
		Set objRS = Nothing
		
		sLog = sLog & vbcrlf & sLogMessage
		
		strSQL = "UPDATE tblTask Set Log = '" & sLog & "' Where Id = " & iTaskId & ""
		objConn.Execute strSQL,, 128

...kan förkortas till

		
		strSQL = "UPDATE tblTask Set Log = Log + '" & vbCrLf + sLogMessage + ' Where Id = " & iTaskId

'Lägg inte på tomma strängar i onödan. I vissa kulturer är det förenat med spöstraff
		objConn.Execute strSQL,, 128

I övrigt är det nog en rätt OK lösning, med tanke på förutsättningarna (databasen).

devotion skrev:

Hur gör amn för att ladda om listTask.asp typ varannan minut?

i listTask.asp

Response.AddHeader "Refresh", "120"

'eller

<meta http-equiv="refresh" content="120">
devotionMedlem sedan jan. 20013 582 inlägg
#17

Tja! :)
Nä, det går tyvärr inte att ändra på...

Men din lösning för updaten fungerar fint och var ju betydligt snyggare... Har ändrat!

Refreshen fungerar också bra!

Så koden för loggning ser ut så här nu, och fungerar:

	'Block för loggning av redigering av artiklar
	If request.cookies("Task")("articleLog") <> "" then
		sArticleLog = request.cookies("Task")("articleLog")
		iTaskId = cInt(request.cookies("Task")("taskId"))
		sInitials = Request.Cookies("sydostel")("userInitials")
		dLogDate = formatDateTime(Now(), 2) & " " & formatDateTime(Now(), 4)
		sLogMessage = dLogDate & "	Artiklar har redigerats i UppdragNu Intranät	/" & sInitials
		
		strSQL = "UPDATE tblTask Set Log = Log + '" & vbCrLf + sLogMessage & "' Where Id = " & iTaskId
		objConn.Execute strSQL,, 128
		
		response.cookies("Task")("articleLog") = ""
	End If

Eftersom jag i nuläget har flera sådan "block" för olika logghändelser ska jag i enlighet med en annan tråd bygga om det hela till en funktion. Jag återkommer säkert om det!

Men den här delen anser jag vara utredd nu, och accepterar därmed detta svar som slutgiltigt...

MVH
Henrik

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)