Autor Thema: Dokumente ohne Masken-Namen  (Gelesen 2817 mal)

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Dokumente ohne Masken-Namen
« am: 11.09.06 - 08:05:28 »
Guten Morgen,

ich mal wieder ein Problem in Notes das ich mir nicht erklären kann.

In einer von mir erstellten Anwendung (ich weiß darin liegt schon der Fehler  ;D), werden Dokumente gespeichert ohne, dass das Feld 'Form' gefüllt wird. Dies geschieht aber nicht bei allen Dokumenten, sondern nur bei einem kleinen Teil der Doks. Im QuerySave-Ereigniss wird, das Feld weder ausgelesen noch beschrieben. Der Name und der Alias der genutzten Maske ist eindeutig.

Hat jemand von euch eine Idee, woran es liegen könnte? Ich bin ziemlich ratlos.

Rainer
Rainer Zaske

MCSD - C#

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Dokumente ohne Masken-Namen
« Antwort #1 am: 11.09.06 - 08:52:02 »
Das passiert z.B. wenn die Dokumente in einem Agenten oder sonstiges per Skript erstellt werden und vergessen wird das Form Feld zu setzen.
Oder über die Dokumente läuft (in Skript) eine RemoveItem("form") Operation (oder wie das heisst).

Die Verbindung zwischen "Form-Typ" des Dokuments und dem Dokument selbst ist in Lotus als Datenbank sehr lose.
Das hat Vorteile und Nachteile.
In der logischen Struktur der Daten wird dies nur über das Form-Feld geregelt. Und das kann (in der Praxis meist über) Skript leicht programmatisch geändert werden. 


Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Dokumente ohne Masken-Namen
« Antwort #2 am: 11.09.06 - 09:05:39 »
Die Dokumente werden über das UI erstellt. Also sollte das Feld beim Speichern gefüllt werden. Auch mache ich nichts mit dem Feld im QuerySave-Ereignis.

Ich hab mir fürs erste mal damit beholfen, dass ich im PostSave-Ereignis überprüfe ob das Dokument ein Feld 'Form' besitzt. Wenn nein, wird das Feld mit dem korrekten Alias besetzt.

Ich bin aber immer noch auf der Suche nach der Ursache, denn ich möchte nur ungern die Symptome kurieren.

Rainer
Rainer Zaske

MCSD - C#

klaussal

  • Gast
Re: Dokumente ohne Masken-Namen
« Antwort #3 am: 11.09.06 - 09:15:43 »
Zitat
Die Dokumente werden über das UI erstellt.

Das ist etwas ungenau. WIE werden die Docs erstellt ? Formel ? Script ?

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Dokumente ohne Masken-Namen
« Antwort #4 am: 11.09.06 - 09:22:55 »
Die Dokumente werden per Script erzeugt. Das klappt auch immer ohne Probleme. Anbei das Script, die weiteren Subroutinen und Klassen nab ich mir gespart.

Code
Public Function fktNeuesDokument(nwuGUI As notesuiworkspace, ndbApp As notesdatabase, ndoSonderakt As notesdocument, Byval strForm As String, Byval strKarte As String, Byval strTenant As String, Byval strFIID As String, Byval strSubTyp As String, Byval strPraegezeile As String, Byval strSession As String, Byval strServer As String, Byval strDb As String, Byval intLogLevel As Integer, Byval intAnzZeilen As Integer) As Integer
'Funktion: Die Prozedur erzeugt ein neues Prozeßdokument für die übergebene Karte
'
'Argumente: nwuGUI; Objekt-Variable vom Typ 'notesuiworkspace', welche den Bezug auf den Workspace übergibt
' ndbApp; Objekt-Variable vom Typ ' notesdatabase', welche den Bezug auf die Anwendungsdatenbank übergibt
' ndbSonderakt; Objekt-Variable vom Typ ' notesdocument', welche den Bezug auf das Dokument der Sonderaktion
' übergibt
' strForm; String-Variable, welche den Namen der Maske übergibt
' strKarte; String-Variable, welche die Nummer der Karte übergibt
' strTenant; String-Variable, welche den Tenant der Karte übergibt
' strFIID; String-Variable, welche die System-FIID übergibt
' strSubTyp; String-Variable, welche den SubTyp der System-Fiid übergibt
' strPraegezeile; String-Variable, welche die Prägezeile der Karte übergibt
' strSession; String-Variable, welche den Namen der Session übergibt
' strServer; String-Variable, welche den Server auf dem die Datenbank mit den Transaktionsbeschreibungen
' liegt übergibt
' strDb; String-Variable, welche den Namen der Datenbank mit den Transaktionsbeschreibungen übergibt
' intLogLevel; Integer-Variable, welche die Ebene der Fehlerprotokollierung übergibt
' intAnzZeilen; Integer-variablen, welche die Anzahl der anzuzeigenden Service-Kommentare übergibt
'
'Rückgabe: Integer-Variable, welche angibt ob die Prozedur ohne Fehler abgelaufen ist (Wert = true)
' oder ob während des Ablaufs ein Fehler auftrat (Wert = false)
'
'Calls: fktSucheMetadaten [libAppTools]
' subLadeMetadaten [libAppTools]
' fktAusfuehrenZusatzAgenten
' subUebertragenInfos
' subSonderaktionsdatenLaden
'
'Variablendeklaration
'numerische Variablen
Dim intReturn As Integer
'Objekt-Variablen
Dim ndoMeta As notesdocument
Dim ndoDoc As notesdocument
Dim nduNew As notesuidocument
Dim objStammdaten As clsSemprisStammdaten
Dim objLog As clsLogWriter
'String-Variablen
Dim strMsgText As String
'Variant-Variablen
Dim vntValue As Variant
'Prozedur
intReturn = True
Set ndoMeta = fktSucheMetadaten(ndbApp, strFiid, strSubtyp)
If ndoMeta Is Nothing Then
strMsgText = "Es sind keine Metadaten für die FIID '"+strFIID+"' und den Subtyp '" + strSubtyp + "' im System vorhanden."
Messagebox strMsgText, mb_ok+ mb_iconstop, appname
intReturn = False
Else
nwuGUI.settargetframe ""
Set nduNew = nwuGUI.composedocument(ndbApp.server, ndbApp.FilePath, strForm)
Set ndoDoc = nduNew.document
ndoDoc.ComputeWithForm True, False
If Not ndoSonderakt Is Nothing Then
subSonderaktionsdatenLaden ndoDoc, ndoSonderakt
End If
subLadeMetadaten ndoDoc, ndoMeta
Set objLog = New clsLogWriter("Anwendungsfehler", False, True, True)
vntValue = ndoDoc.getitemValue("t_InfoZuordn")
subUebertragenInfos ndoDoc, ndbApp, strFIID, strSubTyp, vntValue, objLog, intLogLevel
ndoDoc.ReplaceItemValue "t_KartenNr", strKarte
ndoDoc.ReplaceItemValue "t_Tenant", strTenant
ndoDoc.ReplaceItemValue "t_Praegezeile", strPraegezeile
Set objStammdaten = New clsSemprisStammdaten(objLog, intLogLevel, strKarte, strTenant, ndoDoc, "t_TransaktStammd", "t_FeldZuordnung", strSession, strServer, strDb)
intReturn = objStammdaten.ReadData()
Set objStammdaten = Nothing
If intReturn = True Then
intReturn = fktAusfuehrenZusatzAgenten(ndbApp, ndoDoc, objLog)
If intReturn = True Then
vntValue = ndoDoc.getitemValue("t_MitteilAnzeigen")
If vntValue(0) = "1" Then
vntValue = ndoDoc.getitemvalue("t_Account")
intReturn = fktAnzeigenServComments(ndbApp, nwuGUI, objLog, intLogLevel, strSession, strServer, strDb, vntValue(0), intAnzZeilen)
End If
If intReturn = True Then
ndoDoc.computewithform True, False
nduNew.refresh True
nduNew.refreshhideformulas
vntValue = ndoDoc.getitemvalue("t_StartFeld")
If vntValue(0) <> "" Then
nduNew.gotofield(vntValue(0))
End If
ndoDoc.computewithform True, False
nduNew.refresh True
nduNew.refreshhideformulas
End If
End If
End If
Set objStammdaten = Nothing
objLog.FlushBufferToDoc
objLog.close True, True
Set objLog = Nothing
If intReturn = False Then
ndoDoc.Replaceitemvalue "SaveOptions", "0"
nduNew.Close
End If
End If
fktNeuesDokument = intReturn
End Function
Rainer Zaske

MCSD - C#

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Dokumente ohne Masken-Namen
« Antwort #5 am: 11.09.06 - 09:29:34 »
Was mir persönlich hier fehlt ist eine Überprüfung, ob strForm auch wirklich nicht leer ist.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Dokumente ohne Masken-Namen
« Antwort #6 am: 11.09.06 - 09:34:33 »
Das Feld FORM entsteht als Dokumentfeld im neuen Dokument standardmäßig erst beim (ersten) Abspeichern des Dokuments und wird bei jedem Abspeichern mit dem Wert der gerade benutzten Maske überschrieben.

In deinem Code sehe ich starke Hinweise, daß du kein Frontend-Save durchführst (SaveOptions auf "0" setzen und dann nur ein CLOSE).

Dann entsteht auch kein Feld FORM.

Der einfachste Weg, dessen Existenz zu sichern, ist der Einbau dieses Feldes in die Maske selbst. Das hat noch einige weitere Vorteile, z.B. kannst du auch bereits bei neuen Dokumenten HW-Formeln mit Bedingungen des FORMS-Inhalts abprüfen - und es tut überhaupt nicht weh.
Situs vilate in isse tabernit.

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Dokumente ohne Masken-Namen
« Antwort #7 am: 11.09.06 - 10:20:48 »
@m3
Die Variable kann nicht leer sein, das wird vom Aufrufer der Prozedur bereits überprüft. 

@LN4ever
Du hast recht der bestand tatsächlich darin, dass das Dokument in einem Agenten der zusätzliche Daten eingelesen hat, ein Save im Backend machte.

Vielen dank für eure Hilfe.

Rainer
Rainer Zaske

MCSD - C#

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz