Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: RvM am 05.12.06 - 11:13:57

Titel: Monat im Script errechnen
Beitrag von: RvM am 05.12.06 - 11:13:57
Ich habe hier eine ältere Web-Anwendung die in den Dokumenten  ein eigenes Zählerfeld beinhaltet. Hier wird bei jedem Webaufruf durch den WebQueryOpen-Event ein Agent angetriggert, der einfach den Zähler um eins erhöht.
Am jeden 1. eines Monats wird dann der Inhalt des Zählers in das entsprechende Monatsfeld übertragen und der Zähler wieder auf Null  gesetzt. Dies wurde mit folgendem Script erledigt:
   Dim Session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim loopdoc  As NotesDocument
   Dim item As NotesItem
   
   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set loopdoc = coll.GetFirstDocument
   While Not(loopdoc Is Nothing)
      loopdoc.dezember= loopdoc.counter
      loopdoc.counter = 0
      Call loopdoc.Save(True,True,True)               
      Set loopdoc = coll.GetNextDocument(loopdoc)
   Wend

Jetzt ist es natürlich absoluter Blödsinn, jeden Monat das Script zu ändern. Wie kann ich denn per Script den Namen des Vormonats automatisch errechnen lassen?
Sorry für diese Frage - aber scripten ist nicht so mein Ding  ???
Titel: Re: Monat im Script errechnen
Beitrag von: dirk_2909 am 05.12.06 - 11:23:37
Hallo

Den aktuellen Monat bekommt man mit

Month( Date )

Im Script kannst Du jetzt folgendes machen:

dim strprevMonthField as String
dim intPMonth as Integer

intPMonth = Month( Date ) - 1
if intPMonth < 1 Then intPMonth = 12

strPrevMonthField = "fldMonat" & intPMonth

call doc.ReplaceItemValue( strPrevMonthField , Wert )
....
Titel: Re: Monat im Script errechnen
Beitrag von: Glombi am 05.12.06 - 11:25:01
Hier mal skizziert:

 Dim Session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim loopdoc  As NotesDocument
   Dim item As NotesItem
dim monatsname as string
dim monatnr as integer
monatnr = Month(Today) - 1
if monatnr = 0 then
monatnr = 12
end if
   
select case monatnr
case 1: monatsname = "januar"
case 2: monatsname = "februar"


End Select


   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set loopdoc = coll.GetFirstDocument
   While Not(loopdoc Is Nothing)
call loopdoc.ReplaceItemValue( monatsname, loopdoc.counter )
      loopdoc.counter = 0
      Call loopdoc.Save(True,True,True)               
      Set loopdoc = coll.GetNextDocument(loopdoc)
   Wend



Andreas
Titel: Re: Monat im Script errechnen
Beitrag von: dirk_2909 am 05.12.06 - 11:26:55
Natürlich muss das noch angepasst werden.
zb. eine Umsetzung der Zahl für Monat  in einen Monatswert

beispiel

Select Case intPMonth

case 1 : strPrevMonthField = "Januar"
case 2 : strPrevMonthField = "Februar"
...

case 12 : strPrevMonthField = "Dezember"

End Select
Titel: Re: Monat im Script errechnen
Beitrag von: dirk_2909 am 05.12.06 - 11:27:50
da war ich wohl mit dem SelectCase zu langsam  :-[ :-[
Titel: Re: Monat im Script errechnen
Beitrag von: m3 am 05.12.06 - 11:39:35
Ich hätte das mit einer Function gelöst:

Code
...
   Dim Session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim loopdoc  As NotesDocument
   Dim item As NotesItem
	Dim iLetzterMonat As Integer
	Dim sMonatsName As String
		
   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set loopdoc = coll.GetFirstDocument

	iLetzterMonat = Month(Now()) -1
	If( iLetzterMonat <= 0) Then
		iLetzterMonat = iLetzterMonat +12
	End If
	
	sMonatsName = Monatsname(iLetzterMonat)
        If( sMonatsName <> "" ) Then
		Goto Errorhandling
	End If

   While Not(loopdoc Is Nothing)
      Call loopdoc.ReplaceItemValue( sMonatsName, loopdoc.counter )
      loopdoc.counter = 0
      Call loopdoc.Save(True,True,True)               
      Set loopdoc = coll.GetNextDocument(loopdoc)
   Wend
...

Function Monatsname (imonat As Integer) As String
	Dim SMonatsNamen(12) As String
	sMonatsNamen(0) = "Jänner"
	sMonatsNamen(1) = "Februar"
	sMonatsNamen(2) = "März"
	sMonatsNamen(3) = "April"
	sMonatsNamen(4) = "Mai"
	sMonatsNamen(5) = "Juni"
	sMonatsNamen(6) = "Juli"
	sMonatsNamen(7) = "August"
	sMonatsNamen(8) = "September"
	sMonatsNamen(9) = "Oktober"
	sMonatsNamen(10) = "November"
	sMonatsNamen(11) = "Dezember"
	
	If( imonat < 1 Or imonat > 12) Then
		Monatsname = ""
	Else
		Monatsname = sMonatsNamen(imonat-1)
	End If
	
End Function
Titel: Re: Monat im Script errechnen
Beitrag von: RvM am 05.12.06 - 11:43:19
Danke - ihr seit Spitze!! :knuddel:
Titel: Re: Monat im Script errechnen
Beitrag von: DerAndre am 05.12.06 - 11:45:53
Martins Code ist nicht ganz Richtig.
Der geht zwei Monate zurück...
Titel: Re: Monat im Script errechnen
Beitrag von: Glombi am 05.12.06 - 11:46:51
Da setze ich noch einen drauf  ;D
Wozu einee eigene Funktion für einen EINZEILER  ;)

sMonatsName = Format$( <Datum>, "mmmm" )


 Dim Session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim loopdoc  As NotesDocument
   Dim item As NotesItem
dim monatsname as string
dim monatnr as integer
dim ndt as NotesDateTime
set ndt = New NotesDateTime( Now )
call ndt.AdjustMonth(-1)
monatsname = Format$( ndt.LSLocalTime, "mmmm" )

   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set loopdoc = coll.GetFirstDocument
   While Not(loopdoc Is Nothing)
call loopdoc.ReplaceItemValue( monatsname, loopdoc.counter )
      loopdoc.counter = 0
      Call loopdoc.Save(True,True,True)               
      Set loopdoc = coll.GetNextDocument(loopdoc)
   Wend


Andreas
Titel: Re: Monat im Script errechnen
Beitrag von: m3 am 05.12.06 - 11:52:31
Martins Code ist nicht ganz Richtig.
Der geht zwei Monate zurück...
Nope. Ein Monat zurück. Das zweite "-1" ist für das Array (Base 0 !!!).

@glombi: Streber!  ;) ;D
Deine Lösung hat aber den Nachteil, dass immer englische Monatsnamen herauskommen.
Titel: Re: Monat im Script errechnen
Beitrag von: dirk_2909 am 05.12.06 - 11:54:14
Zitat
monatsname = Format$( ndt.LSLocalTime, "mmmm" )

Und wenn ich auf einem englischen Server den deutschen Monatsnamen haben will.... ??
Titel: Re: Monat im Script errechnen
Beitrag von: Glombi am 05.12.06 - 11:58:30
Ihr Korinthenkacker, Ihr Erbsenzähler  ;D

Aber zum Glück ist Notes ja intelligent und liefert den deutschen Monatsnamen (sofern das im BS eingestellt ist)

Auf einem englischen Server muss dann halt die m3 Function her.
Und auch wenn man auf einem deutschen Server/Client die englische Bezeichnung haben will  ;)

Andreas
Titel: Re: Monat im Script errechnen
Beitrag von: koehlerbv am 05.12.06 - 12:00:09
Nope. Ein Monat zurück. Das zweite "-1" ist für das Array (Base 0 !!!).

Wegen Ordnung und Sauberkeit im Schlachthof, Martin: Dann aber auch
Dim sMonatsnamen (11). Das Element 12 brauchst Du ja gar nicht, das langweilt sich doch nur  ;D

Bernhard
Titel: Re: Monat im Script errechnen
Beitrag von: Glombi am 05.12.06 - 12:02:29
sMonatsNamen(0) = "Jänner"

"Jänner" - was ist denn das?  ;D

Wir brauchen dann noch eine Unterscheidung

Function Monatsname (imonat As Integer) As String

Function Monatsname_Oesis (imonat As Integer) As String

Andreas
Titel: Re: Monat im Script errechnen
Beitrag von: DerAndre am 05.12.06 - 12:04:04
Stimmt  ::) Sorry, immer dieses Base 0 und 12 Monate...  ;D

Wie war das, die Diskette hat die Spuren von 0 - 39 und ist beidseitig Beschreibbar, wieviele Spuren hat die Diskette... ?

Und Juno und so...  ;)
Titel: Re: Monat im Script errechnen
Beitrag von: m3 am 05.12.06 - 12:15:28
sMonatsNamen(0) = "Jänner"

"Jänner" - was ist denn das?  ;D

Wir brauchen dann noch eine Unterscheidung

Function Monatsname (imonat As Integer) As String

Function Monatsname_Oesis (imonat As Integer) As String

Andreas
  :P

Also wenn wir so anfangen, brauchen wir Dokumente mit einem "lang" Feld wo z.B. "de-at" drinnen steht und einem Multivalue Textfield für die Monatsnamen. Dann könnte man über ein View .....

@Bernhard: Ich hau immer lieber eins mehr dazu, dann brauch ich nicht nachdenken. ;)