Doppeleintrags-ID

  • Suche Hilfe, vielleicht könnt Ihr mir weiterhelfen...
    habe eine Mail mit 5 Body Feldern mit Doppeleintrags-ID 1-5.
    In der Designer Hilfe steht:
    "Wenn das Gestaltungselement ein Feld besitzt, das zu groß für ein Dokument ist, wird es auf mehrere Dokumente verteilt. Diese ID wird dann an jedes einzelne dieser Dokumente vergeben. Die Dokumente haben jedoch immer noch denselben Namen."


    Ich denke ein NotesDocument = ein Dokument bzw. ein Objekt.
    Wie greife ich von dem einen Document auf das andere zu ?
    Ich möchte doch nur an die Inhalte der 5 Body Felder ran, die ich über die Dokumenteneigenschaften/Felder sehe, aber per Lotus Script sehe ich immer nur das eine Item...
    eine genauere Beschreibung meines Problems siehe Beitrag

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Mit diesem Code geht es, wenn...................Du das ganze aus einem gespeicherten Dokument ausliest und...............in ein existierendes Dok wieder eingibst. Bei dem Code ist doc das Dokument, in welchem sich die Felder bereits befinden und doc2 ist das Dokument, in das der Inhalt gepastet wird.

  • vielen dank, aber leider gleiches ergebnis, habe jedoch eben die vermeintliche lösung gefunden. in der designerhilfe unter NotesDocument.GetFirstItem:
    "If multiple items in a document have the same name, programmatic access is limited to the first item. The remaining items yield invalid data. A work-around is to get the first item, process it, remove it, again get the first item (which was the second item), and so on until you process all the items with the same name. If you do not save the document, the items are not actually removed. However, the recommendation is that you avoid creating multiple items with the same name."


    und jetzt kommt der hammer, item.remove oder auch notesdocument.removeitem entfernen alle items, nicht eben wie in dem workaround beschrieben nur das eine item, dazu auch aus der hilfe unter NotesDocument.RemoveItem:
    "String. The name of the item to delete from the document. If more than one item has the specified name, all items with this name are deleted. If there is no item with the specified name, the method does nothing."


    ganz ehrlich gesagt, ich verlier den glauben an lotus notes. es kann doch nicht sein, dass ein workaround in einer methode wieder durch die funktion der anderen methode ausschliesst. was ist das für eine entwicklungsumgebung. das der zugriff nicht direkt klappt ist auch schon etwas komisch, der workaround dann sehr versteckt, dass man ihn erst nach 2 tagen intensiven suchens findet, und dann klappt er noch nicht einmal, da eine beschrieben funktion wiederum anders funktioniert...
    ich beende meinen kommentar an dieser stelle lieber...

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Nein, da hast du was falsch verstanden:


    Die Aussage ist hol dir das erste Item, und Remove es dann.


    Und das machst du mit der Methode Remove der NotesItem Klasse, die nur genau dieses eine Item löscht, nicht aber andere gleichlautende

  • Bei mir funktionierte der Code wunderbar. Auch wenn mehrere Felder mit gleichem Namen in den Dok-eigenschaften angezeigt werden; im debugger wie auch beim Oeffnen des Dokumentes wird wieder alles in das eine Feld geschrieben. Darum bei mir auch nur alle(0)..steht alles im ersten Element. Und da es das Feld nur einmal gibt, wird mit item.remove auch das gesamte Item geloescht. Und..verliere nicht den Glauben an Notes. Gerade solche Dinge machen es interessant, finde ich. ;)

  • zum einen, in der hilfe steht bei NotesItem.Remove:
    "After calling the Remove method, you must call the Save method in NotesDocument in order to save the change that you have made.
    You can achieve the same result with the RemoveItem method in the NotesDocument class."
    was bedeutet, dass das Resultat das gleiche bei NotesItem.Remove wie bei NotesDocument.RemoveItem(Name) ist. und ich habe es auch getestet, nach dem ersten body item.remove sind alle 5 body items weg, genauso wie bei document.removeitem("Body"). alle weg, obwohl es doch in den dokumenteneigenschaften/felder 5 body felder sind, mit der Doppeleintrags-ID 1, 2, 3, 4, 5


    und ich komm verhext nochmal nicht ran...
    das codebeispiel klappt bei mir nicht, da


    Forall item In doc.Items
    If item.Name = "Mehrmalsfeld_name" Then
    alle(counter) = item.GetFormattedText( False, 0 )
    counter = counter +1
    Redim Preserve alle(counter)
    End If
    End Forall


    jedes item durchgegangen wird, aber wie bei meiner funktion in dem Beitrag beschrieben, das Item "Body" nur einmal drin steht...
    ich nutze lotusnotes 6.5.1. vielleicht liegt es auch daran !?!?

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Habe es gerade mit R7 Beta4 geteste...einwandfrei. Hast Du den Code auch an Deine Umgebung angepasst?? Und beide Dokumente existieren??

  • jupp, es wird nur der eine body, den ich auch über GetFirstItem bekomme, in das zieldokument übernommen.
    wie soll es auch anders sein, wenn ich in doc.items im debugger nur 24 items sehe und dabei nur einmal body, obwohl das dokument viel mehr felder hat (unter dokumenteneigenschaften/felder)...


    der trick bzw. workaround in GetFirstItem beschrieben klappt aus schon beschriebenem grund nicht...


    wir nutzen notes 6.5.2 June 01, 2004

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Manchmal ist die kürzeste Verbindung zwischen zwei Punkten bekanntlich der Umweg (nicht nur in der Bürokratie).


    Du kannst ja mit einem CopyAllItems zunächst aus dem Quelldokument alle Items (dabei werden Doppel auf jeden Fall mitkopiert) in das Zieldokument kopieren, dann im Zieldokument die Items durchlaufen und alle removen, deren Name nicht BODY ist.


    Nicht besonders elegant, aber funktionieren wird es.


    Die Methode von DNOTES hat einen kleinen, aber nicht unerheblichen Nachteil: die Maximalgröße des Arrays wird vermutlich schnell erreicht sein.

  • vielen Dank für die lösungsversuche, doch leider benötige ich den wert bzw. text aller body felder und auch nach dem kopieren komme ich weiterhin nur an das erste body feld, weil sich auch durch das kopieren die 5 body felder nicht in eins wandeln, sondern immer noch 5 body felder mit doppeleintrags-id 1,2,3,4,5
    sind. ich hab keine idee mehr wie ich dran kommen könnte. vielleicht liegt es auch an der notes version...

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Es kommt Licht ins Dunkel. Es kommt also nicht auf die gemeinsame Übertragung der gleichnamigen Items an, sondern du mußt die Inhalte mit deinem Programm extrahieren, und zwar aus allen gleichnamigen Items.


    Set notesItem = notesItem.CopyItemToDocument( notesDocument, newName$ )


    kann dir ja evtl weiterhelfen.


    icount=0
    Set items=doc.items
    ForAll it in doc.items
    if it.name="Body" Then
    icount=icount+1
    newitemname="Bodyneu" & CStr(icount)
    Set newItem = it.CopyItemToDocument( docnew, newitemname )
    End If
    End ForAll


    Damit solltest du im neuen Dokument 5 Felder mit den Namen Body1 bis Body5 erhalten.


    Aber was taurec schon schrieb: mit der REMOVE-Methode der NotesItemklasse sollte es genauso gehen. Also:
    Schleife (GetFirstItem, Auslesen, Removen, NICHT SICHERN) bis GETFIRSTITEM NOTHING liefert.


    Die Hilfe berücksichtigt den Fall der gleichnamigen Felder genau an der Stelle nämlich wohl nicht.

  • Zitat

    ForAll it in doc.items


    bei mir gibt es in der items auflistung ja leider nur einmal "Body", obwohl in den dokumenteneigenschafte/felder diese 5 Felder "Body" mit Doppeleintrags-ID 1,2,3,4,5 sind...


    Zitat

    Schleife (GetFirstItem, Auslesen, Removen, NICHT SICHERN) bis GETFIRSTITEM NOTHING liefert


    hab ich probiert, aber nach dem ersten Remove sind alle "Body" Felder weg


    es scheint fast so, als ob es wirklich nur ein Body Feld gibt, aber die Dokumenteneigenschaften/Felder zeigen 5 an und die haben auch die Inhalte die ich benötige aber an die ich nicht rankomme...


    kommt ihr denn mit den methoden an mehrere body felder ran ???
    wenn ja welche notes version ?

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • Nur zur Klärung: du arbeitest nicht als User in einem geöffneten Dokument, sondern ohne User-Interface "von außen" mit den Backend-Klassen auf einem bereits existierenden Dokument ?

  • ich greife per lokalem agent auf die ausgewählten dokumente aus dem aktionen menü zu...

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...

  • ich habe eine lösung gefunden :)


    ich greife nun per NotesMimeType auf den body text zu. wenn man vorher session.convertmimetype auf false setzt klappt es. eine genauere beschreibung mit beispiel folgt, wenn ich aus dem urlaub zurück bin.


    bis dahin
    gruß
    freedev

    _________________
    Dennis Beer :: Hardcore Coder
    *** leider immer zu wenig Zeit ***...