Autor Thema: Datumfeld in mehreren ändern mit Agent aus View / internationale Settings  (Gelesen 2090 mal)

Offline lnfan

  • Frischling
  • *
  • Beiträge: 39
  • Ich liebe dieses Forum!
Hallo liebe Notes-Freunde,
nach langer Zeit bin ich mal wieder da. Hatte letztes Jahr ein Posting im Forum
http://atnotes.de/index.php?topic=33490.0
wo ich das Problem mit Eurer Hilfe erfolgreich lösen konnte.

Meine Datenbank wird nun weltweit genutzt und nun läuft mein Agent der Datumsänderung auf einen Fehler, weil zum Beispiel Anwender in den USA ein anderes Datumsformat nutzen und auch andere Trennzeichen zwischen den Datumsteilen haben (mm/dd/yyyy gegenüber dd.mm.yyyy).

Elegant wäre wenn ich eine Variante meines Agenten hätte, der vorher die Systemumgebung abfragt und das neue Datum entsprechend zusammensetzt.

Aber hier stosse ich an meine Wissensgrenzen, denn mit LotusScript kenne ich mich ja nun fast gar nicht aus.

Hinweise sind willkommen. Danke sehr.

Gruss, Manfred

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Tja, jetzt müssten wir Deinen Code kennen, Manfred. ... Keine Ahnung, was da nun schief läuft.

Was ich als Ansatz aus dem verlinkten Code entnehmen kann: Wenn Du String-Werte zu Datums-/Zeit-Werten verarbeitest, hast Du immer ein Problem in internationalen Umgebungen. Damals hattest Du eine Lösung über das Frontend, wo sowas durchaus denkbar war, aber was jetzt Sache ist: Wie gesagt, wir können es nicht wissen ohne nähere Informationen von Dir.

Bernhard

Offline lnfan

  • Frischling
  • *
  • Beiträge: 39
  • Ich liebe dieses Forum!
Hallo Bernhard,
Danke für den ersten Kommentar. Anbei das volle Listing des Agenten (sicherlich erkennst du es wieder)

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   
   Dim ws As New NotesUIWorkspace
   Dim nam As NotesName
   Dim msg As String
   Dim response As Variant
   Dim strTempDate As String
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set nam = session.CreateName(session.UserName)
   
   'if no documents have been selected then exit routine
   If collection.Count = 0 Then Exit Sub
   
   msg = collection.Count & " documents have been selected for mass update. Please enter a new date."
   response = ws.Prompt (PROMPT_OKCANCELEDIT, _
   "Change Date...", msg, "06.2006")
   If response = "" Then Exit Sub
   strTempDate = "01." & response
   
   Set doc = collection.GetFirstDocument
   While Not (doc Is Nothing)
          'Here the field will be changed per doc with the value selected in the prompt
      doc.ASD_Depl_Date = Cdat(strTempDate)
      doc.Header_UpdName = nam.Abbreviated
      doc.Header_UpdCreated = Now()
          'Save the current document
      Call doc.Save(True, False)
      
      Set doc = collection.GetNextDocument(doc)
   Wend
End Sub

Vom Datum brauche ich nur den Monat sowie das Jahr, der Tag muss wegfallen. Wie gesagt haben unterschiedliche Länder eine andere Datumsdarstellung inkl. des Trennzeichen - da sind viele Varianten möglich. Für uns geht das prima... denn es ist "hart-codiert".

Gruss, Manfred

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Hallo Manfred,

Du meinst sicherlich diese Codezeile:
response = ws.Prompt (PROMPT_OKCANCELEDIT, "Change Date...", msg, "06.2006")

Du stösst jetzt - wie immer, wenn man Datentypen verwendet (hier: String), die mit dem Ziel-Datentyp nichts weiter zu tun haben als den Fakt, "dass man es eben auch so darstellen (!) kann" - auf das Problem, dass man jetzt Äpfel mit Birnen vergleichen muss bzw. aus Äpfeln Birnen machen muss.

Wenn ich Dein Problem richtig deute, müsstest Du folgendes machen:
- Du bildest das gewünschte Datum (was ja offensichtlich der erste Tag eines bestimmten Monats ist) selbst:
  Dim vDefault As Variant
  vDefault = DateNumber (DeinJahr, DeinMonat, 1)
- Du wandelst diesen Date-/Time-Wert in einen String - automatisch mit den Vorgaben des Betriebssystems:
  Dim szDefaultDate As String
  szDefaultDate = Cstr (vDefault)
- Dort steht jetzt wahlweise (bezogen auf vDefault = Today):
  "01.04.2007" für ein deutsches OS
  "04/01/2007" für ein US-amerikanisches OS
  ... usw.

szDefaultDate übergibst Du nun an Dein NotesUIWorkspace.Prompt statt "06.2006".

Vielleicht hilft das ja schon. Aber so ohne LS-Kenntnisse wird das sicherlich schwer. Lasst Euch den Teil sonst sicherheitshalber von einem vertrauenswürdigen Dienstleister programmieren - das dürfte dann viel günstiger kommen als ein Gefrickel.

Bernhard

Offline lnfan

  • Frischling
  • *
  • Beiträge: 39
  • Ich liebe dieses Forum!
Hallo Bernhard,
danke noch einmal für die Hinweise. Werde dann mal in Kürze drüber grübeln...

Gruss, Manfred

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz