Autor Thema: Dokumente ohne Masken-Namen  (Gelesen 2626 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