Autor Thema: Währungsfeld aus dem Frontend im Backend speichern  (Gelesen 2503 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Guuude,

also manchmal ist echt der Wurm drin  :-:

Ich möchte bei Änderung eines Währungsfeldes im Frontend, im Backend alle Dokumente mitändern, die von diesem Währungsfeld abhängig sind (verschiedene Masken - keine Antwortmasken).

Also speicher ich im Postopen die aktuellen Werte zum Beispiel mit source.FieldGetText("Feld"). Das gibt mir problematischerweise das durch das Währungsfeld erzeugte Währungszeichen mit aus. Umwandlungen alla ccur gehen dann halt nicht.

Gibt es dafür Workarounds, oder muss man jetzt echt über left(Text,Länge - 2) gehen, bzw. am besten vorher noch die Clienteinstellungen auslesen? Dann geh ich lieber hin und mach ein normales Dezimalfeld draus, und lass die Währung nur in der Ansicht anzeigen.

Gruß
Demian
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Währungsfeld aus dem Frontend im Backend speichern
« Antwort #1 am: 24.06.09 - 16:50:14 »
Und warum machst Du das über das Frontend?
Source.Document.Feld (0) tut doch auch - und in diesem Fall sogar richtig (nämlich nicht als Text)  ;)

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Währungsfeld aus dem Frontend im Backend speichern
« Antwort #2 am: 24.06.09 - 17:15:31 »
Moin Bernhard,

im Postopen les ich die Werte zum Beispiel folgendermaßen ein:


Function Zone_Postopen(source As NotesUIDocument) As Boolean
   '*********************************************************************************************************************************
   'save the current values of the form Zone to verify in the function Zone_ValuesChanged of this library if
   'they were changed. Returns true in any case excluding errors. Invoked from the event Postopen of the form Zone
   '*********************************************************************************************************************************
   'used libraries:      logging   
   'used functions:      CreateLogEntry(DBName As String, User As String, DesignElement As String, InvokingEvent As String, _
   '                     Text As String)
   '   
   'Parameters:         source      = current zone
   '
   '*********************************************************************************************************************************
   On Error Goto ErrHandle   
   '*********************************************************************************************************************************   
   If Not source.IsNewDoc Then
      'save old field values for comparing in the function Zone_ValuesChanged in this lib
      Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Postopen",_
      "globale Variablen setzen um für Zone: " & source.FieldGetText("ID") & " einen Vergleich auf Änderung durchführen zu können")
      
      strZO_IDOLD = source.FieldGetText("ID")
      strZO_EffectiveFromOLD = source.FieldGetText("EffectiveFrom")
      strZO_AverageDistanceOLD = source.FieldGetText("AverageLinearDistance")
      strZO_ProvisionOLD = source.FieldGetText("Provision")
      
      Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Postopen",_
      "globale Variablen ausgelesen")
   Else
      Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Postopen",_
      "Zone: " & source.FieldGetText("ID") & " wird bearbeitet")      
   End If
   
   'RETURN
   Zone_Postopen = True
Leave:
   Exit Function
   
ErrHandle:
   Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Postopen",_
   "Error" & Str(Err) & ": " & Error$ & " in Zeile " & Erl)
   'RETURN
   Zone_Postopen = False
   Resume Leave
End Function


Im Querysave hol ich mir dann die eventuell geänderten Werte ähnlich:

Function Zone_Querysave(source As NotesUIDocument) As Boolean
   '*********************************************************************************************************************************
   'saves the current field values of the form Zone to compare them with the values which were saved in the
   'function Zone_Postopen of this library. Invoked from the event Querysave of the form Zone.
   '*********************************************************************************************************************************
   'used libraries:      logging, this lib
   'used functions:      Zone_VerifyInput(source As NotesUIDocument) As Boolean
   '                     Zone_NotExist(source As NotesUIDocument) As Boolean
   '                     CreateLogEntry(DBName As String, User As String, DesignElement As String, InvokingEvent As String, _
   '                     Text As String)
   '   
   'Parameters:         source      = current zone
   '*********************************************************************************************************************************
   On Error Goto ErrHandle   
   '*********************************************************************************************************************************   
   'verify user input
   If Zone_VerifyInput(source) = False Then
      Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Querysave",_
      "Felder nicht korrekt ausgefüllt")
      'RETURN
      Zone_QuerySave = False               
      Exit Function
   End If
   
   Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Querysave",_
   "Felder korrekt ausgefüllt")
   
   'Verify if the ID allready exists. Else exit function with false
   If Source.IsNewDoc Then
      If Zone_NotExist(source) = False Then
         Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Querysave",_
         "Zone_QuerySave = False - speichern verhindert")
         'RETURN
         Zone_QuerySave = False
         Exit Function
      End If
   Else
      'read new field values for compare with old field values
      strZO_IDNEW = source.FieldGetText("ID")
      strZO_EffectiveFromNEW = source.FieldGetText("EffectiveFrom")
      strZO_AverageDistanceNEW = source.FieldGetText("AverageLinearDistance")
      strZO_ProvisionNEW =source.FieldGetText("Provision")
      
      If Zone_ValuesChanged = False Then
         Msgbox "Es wurden keine gültigen Änderungen festgestellt. Speichern wird abgebrochen.",,"DORNHÖFER GmbH"
         'RETURN
         Zone_QuerySave = False
         Exit Function
      End If
   End If
   
   'RETURN
   Zone_Querysave = True
   
Leave:
   Exit Function
   
ErrHandle:
   Call CreateLogEntry(libZO_DB.title,libZO_Session.CommonUserName,"Scriptbibliothek: lib_Zone","Zone_Querysave",_
   "Error" & Str(Err) & ": " & Error$ & " in Zeile " & Erl)
   'RETURN
   Zone_Querysave = False
   Resume Leave
End Function



Zu diesem Zeitpunkt würde mir source.document.Provision(0) für strZO_ProvisionNEW ja noch den zuletzt gespeicherten Wert zurückgeben und nicht den neu eingegebenen, oder nicht?

Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Währungsfeld aus dem Frontend im Backend speichern
« Antwort #3 am: 24.06.09 - 17:33:05 »
Nein, das gibt Dir den Wert aus dem In-Memory-Dokument zurück.

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Währungsfeld aus dem Frontend im Backend speichern
« Antwort #4 am: 24.06.09 - 17:49:40 »
Nein, das gibt Dir den Wert aus dem In-Memory-Dokument zurück.

Den Begriff les ich das erste Mal. Hatte offen gestanden im Debugger gar nicht geguckt, was mir source.document.feld(0) zurück gibt. Ich bin einfach davon ausgegangen, das das im NotesUIdocument gelagerte Notesdocument nur die letzten echt gespeicherten Werte enthält. Ist aber ein interessante Sache, das vereinfacht das ein oder andere.

Habe es jetzt geändert:

Postopen:
...
      strZO_IDOLD = Cstr(source.Document.ID(0))
      strZO_EffectiveFromOLD = Cstr(source.Document.EffectiveFrom(0))
      strZO_AverageDistanceOLD = Cstr(source.Document.AverageLinearDistance(0))
      strZO_ProvisionOLD = Cstr(source.Document.Provision(0))
...


Querysave:
...
      strZO_IDNEW = Cstr(source.Document.ID(0))
      strZO_EffectiveFromNEW = Cstr(source.Document.EffectiveFrom(0))
      strZO_AverageDistanceNEW = Cstr(source.Document.AverageLinearDistance(0))
      strZO_ProvisionNEW =Cstr(source.Document.Provision(0))
...


und im Postsave dann schließlich:
...
      'create the tmp doc      
      Set docTemp = libZO_DB.Createdocument
      docTemp.form = "tmpZone"      
      
      'set old data
      docTemp.IDOLD = strZO_IDOLD
      docTemp.EffectiveFromOLD = Cdat(strZO_EffectiveFromOLD)
      docTemp.AverageDistanceOLD = Clng(strZO_AverageDistanceOLD)
      docTemp.ProvisionOLD = Ccur(strZO_ProvisionOLD)
      
      'set new data
      docTemp.IDNEW = strZO_IDNEW
      docTemp.EffectiveFromNEW = Cdat(strZO_EffectiveFromNEW)
      docTemp.AverageDistanceNEW = Clng(strZO_AverageDistanceNEW)
      docTemp.ProvisionNEW = Ccur(strZO_ProvisionNEW)
      docTemp.EditingUser = libZO_Session.CommonUserName
      
      Call docTemp.Save(True,False)
...



Danke für den Tip, Bernhard.  ;)

Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Währungsfeld aus dem Frontend im Backend speichern
« Antwort #5 am: 24.06.09 - 20:25:14 »
Wie immer: Gerne, Demian  :)

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz