Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: SD am 11.11.15 - 16:10:44

Titel: Art des Design-Elements herausfinden?
Beitrag von: SD am 11.11.15 - 16:10:44
Guten Tag!

Gibt es zufällig einen Trick oder so, wie man man herausfinden kann, was für ein Design-Element man in den Fingern hat als NotesDocument?

Konkret erzeuge ich mit einem LotusScript-Agenten eine NotesNoteCollection mit allen Design-Elementen einer Datenbank und hole mir dann jedes davon als NotesDocument. Der Hauptzweck davon war eigentlich die Design-Signierer herauszufinden und zu prüfen, wo noch alte oder falsche Signaturen herumlungern. Es ist ja durchaus faszinierend/erschreckend, was man da so alles findet. Vor allem, was so alles offenbar nicht von "Sign all design elements" über den Admin-Client signiert wird. Außerdem haben Repliken signierte Elemente, die andere Repliken mit dieser Signatur nicht haben, etc., etc.

Einen Teil davon habe ich schon als persönliche Ansichten und Profildokumente identifiziert. Einiges ist mir aber ein Rätsel, was das überhaupt ist?! Das Feld $TITLE hilft bedingt weiter. Viele Design-Elemente haben dieses Feld gar nicht oder ich finde den Namen nicht, wenn ich mich im Designer durch die Datenbank klicke. Also würde mich jetzt schon ein wenig interessieren, was genau ich da in dem Moment eigentlich in den Fingern habe. Mir ist jetzt kein offensichtlicher Weg aufgefallen, wie ich herausfinden kann, ob das jetzt eine Form ist, oder ein Frameset, oder ein Image, oder sonstwas. Manche Design-Elemente haben Felder, die es nur bei ihnen gibt, aber damit bekomme ich auch nur bei einem Bruchteil heraus, was das denn nun ist. Gibt es da irgendeine Möglichkeit, wie ich zuverlässig herausbekomme, womit ich es zu tun habe?

Gruß
SD
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: Tode am 11.11.15 - 16:17:53
Das ist leider nicht ganz so einfach, sondern im Gegenteil recht komplex.

Hier ist die Formel, die wir in einer Spalte einer Ansicht unserer Applikationen haben, die alle Design- Elemente anzeigt. (Wie man eine solche Ansicht erzeugt: "Fun with $FormulaClass" als Google Suche, Ergebnis z.B. hier (http://dominopower.com/article/fun-with-formulaclass/):

Code
_mainCat := @If( 	$Flags = "34yQC" ; "14-SHARED ACTIONS" ;
		$Flags = "t34Q" ; "16-DATABASE SCRIPT" ;
		$Flags = "#34CQ" ; "06-FRAMESETS" ;
		$Flags = "345CgQ" ; "18-FILES" ;
		@Contains( $Flags ; "34Q" ) ; "15-SCRIPT-LIBRARIES" ;
		@Contains( $Flags ; "34Ci" ) ; "17-IMAGES" ;
		@Contains( $Flags ; "f" ) & @Contains( $Flags ; "3" ) ; "13-AGENTS" ;
		@Contains( $Flags ; "CU" ) & @Contains( $Flags ; "3" ) & @Contains( $Flags ; "x" ) ; "08-SUBFORMS" ;
		@Contains( $Flags ; "W" ) ; "07-PAGES" ;
		@Contains( $Flags ; "=" ) ; "19-STYLESHEETS" ;
		@Contains( $Flags ; "m" ) ; "11-OUTLINES" ;
		( @Contains( $Flags ; "Y" ) | @IsAvailable( $Collation ) ) ; @If( @Contains( $Flags ; "^" ) ; "10-COLUMNS" ; @Contains( $Flags ; "F" ) ; "03-FOLDERS" ; "02-VIEWS" ) ;
		$Flags = "X" ; "UNKNOWN" ;
		!($Fields != $Title) | ( (@Elements( $Fields ) = 1 | ( @IsUnavailable( $Fields ) & $Flags = "") ) & (@IsUnavailable($Comment) ) ) ; "09-FIELDS" ;
		$Flags = "G3" ; "12-NAVIGATORS" ;
		$Flags = "gC~4K" ; "04-XPAGES" ;
		$Flags = "gC~4;" ; "05-CUSTOM CONTROLS" ;
		@Contains( $Title ; ".theme" ) ; "20-THEMES" ;
		@Contains( $Flags ; "~" ) ; "WEB-INF" ;
		@Contains( $Flags ; "D" ) | @Contains( $Flags ; "C" ) | @Contains( $Flags ; "H" ) | $Flags = ""; "01-FORMS" ;
"" );

@If( !(_mainCat *= "03-FOLDERS"  : "02-VIEWS") ; @Return( _mainCat ) ; "" );

_addCat := @If( @Contains( $Flags ; "V" ) ; "PRIVATE" ;
		@Contains( $Flags ; "p" ) & @Contains( $Flags ; "o" ) ; "SHARED, DESKTOP PRIVATE ON FIRST USE" ;
		@Contains( $Flags ; "p" ) ; "SHARED, PRIVATE ON FIRST USE" ;
		"SHARED" );

_mainCat + "\\" + _addCat

Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: jBubbleBoy am 11.11.15 - 18:33:12
Das kannst du mit dem DomNav machen, der liest die Gestaltung über Server ein und die Ansicht nach Signierer gibt dir eine Übersicht.
Für den eigenen Weg gibt es hier eine gute Beschreibung mit Beispiel-Code: http://www-10.lotus.com/ldd/ddwiki.nsf/dx/ls-design-programming.htm
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: SD am 11.11.15 - 19:06:33
Wow, das nenne ich mal ne Formel! Das hilft mir auf jeden Fall alles super weiter, vielen Dank!

Ich habe die Formel aus der Ansicht in LotusScript übersetzt und das funktioniert offenbar prima! Ein paar Design-Elemente haben wohl kein $Flags-Feld (ACL z.B., die hat dafür aber $ACLDigest), aber denen komme ich nach und nach auf die Spur. Auf dem Wege habe ich gerade einen privaten Agenten mit fremdem Certifier von 1996 gefunden. Da ist man fast schon versucht den einem Museum zu spenden.

Es gibt da Design-Dokumente, die bestehen nur aus einem $Flags-Feld mit dem Wert "X" (steht laut Formel oben für "UNKNOWN") und einem UpdatedBy-Feld, keine Signatur, isprofile ist False, sonst auch nichts da. Immerhin isvalid ist True. :D Size ist "32". Entgeht mir da die Pointe? Gibt es irgend ne theoretische Möglichkeit, dass das was ist, was noch irgend ne Funktion hat? Oder kann das ein Replikationsunfall sein, oder sowas? :-:
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: Tode am 11.11.15 - 20:06:01
Das UNKNOWN kommt von mir, weil ich auch nicht mehr über diese Dinger rausgefunden habe als Du...
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: koehlerbv am 11.11.15 - 20:21:56
32 Bytes? Deletion stubs?

Bernhard
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: SD am 12.11.15 - 17:31:31
IsValid=True besagt im NotesDocument eigentlich, dass es kein Deletion Stub sein sollte.

Ich habe mal ein Experiment gemacht. Wenn ich in einer DB ein neues Design-Element erstelle geht die Anzahl an Notes in NotesNoteCollection eins hoch, wie es sein sollte. Wenn ich das Design-Element lösche (was ja einen Deletion-Stub hinterlassen sollte), geht die Anzahl wieder eins runter. Wären Deletions-Stubs generell enthalten, müsste der ja dann immernoch in der Collection enthalten sein. Also wenn es ein Deletion-Stub ist, dann ist es ein kaputter.
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: Andrew Harder am 12.11.15 - 22:25:06
Das Flag "X" sind Agent data documents.

Kommt man im jeweiligen Agent dran mit:
Code
Set notesDocument = notesSession.SavedData
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: koehlerbv am 12.11.15 - 23:54:31
Daran dachte ich auch schon. Mit den "immer 32 Byte" muss man dann aber IIRC viel Glück gehabt haben (so diese denn überhaupt zurück bleiben). Dieser Hinweis ist aber auf jeden Fall besser als die Deletion Stubs, Andy. Mea culpa.

Bernhard
Titel: Re: Art des Design-Elements herausfinden?
Beitrag von: SD am 16.11.15 - 16:42:31
Das mit den 32 Byte nehme ich zurück. Ich habe eben eine Datenbank gefunden, die ~1500 Dokumente mit Flag "X" hat (bei 43 Agenten in der DB). Diese Dokumente sind alle 1371 , 1394 oder 1414 Byte groß.

Ich glaube ich werde da mal das Gespräch mit dem Entwickler suchen. >:D