Ändern von docReader und docAuthor

  • Hallo


    Gibt es im Notes eine sogenanten Cross Ref, welche mir anzeigt, in welchem Dokument ich welche Felder finden kann?


    Muss wissen in welchem Dokument docReader und docAuthor vorhanden sind, damit ich diese ändern kann (ändern von Server-Domäne). Oder gibt es in Notes (Script) eine Möglichkeit, dass ich diese Felder generell anpassen kann!?


    Wie muss ich vorgehen, damit ich CN=xyz/O=firma01 in CN=xyz/O=firma99 ändern kann!?


    Merci

  • Um die Dokumente zu erhalten in denen die Felder vorhanden sind kannst du einfach eine entsprechende Ansicht verwenden.
    Verwende dazu in der Select Formel die Formel @IsAvailable.
    Das ändern kannst du entweder über Script oder Formelsprache durch einen Agenten machen, indem der alte Wert durch den neuen ersetzt wird.

  • hm ... ev. hab ich mich falsch ausgedrückt. Habe Formular Kunde, Kontaktperson und nun möchte ich wissen in welchem dieser Formulare (ob Kunde oder Kontaktperson oder beide und nicht in welchen Dokumenten dieser Formulare) die Felder docReader und docAuthor vorhanden sind.


    Mein Problem ist, dass ich mehrere Formulare habe und nicht in jedem schauen will ob die Felder vorhanden sind :)


    Betr. dem umsetzen der Werten in den Feldern, ist mir klar dass ich das mit einem Agenten, Script machen muss.


    Aber wie kann ich einen Wert mit einem anderen ersetzen?


    Alt: CN=xyz/O=firma01 Neu: CN=xyz/O=firma99


    Merci

  • Ohen eine Ansicht zu basteln saehe das so aus:


    *so aehnlich koennte man vorgehen

  • Ok das hilft mir schon weiter. Aber im Script wird jetzt ja nur das Feld docReader geändert!? Jetzt möchte ich aber über alle Felder de Formulare (Formular A hat Feld, A1, A2, Formular B hat Feld, B1,B2, B3, B4) gehen und jene Felder ändern, welche Reader oder Author sind. Kann ich das irgendwie machen, ohen dass ich jdese Feld einzeln abfragen muss!?

  • entweder kannste dir in einer schleife die felder zusammenbasteln oder ueber doc.Items ueber jedes feld gehen und den typ abfragen

  • Warum so kompliziert ?


    Erstelle einen Agent mit dadrin einen Selections formel die alle dokumente mit diesen felder abgreift
    z.B. Select @IsAvaileble ( "DocReader") | @IsAvaileble ( "DocAutor")
    Dann erstellst du dadrin eine formel
    Altname := "CN=Serveralt/OU=Abteilung/O=Orga";
    NeuName := "CN=Serverneu/OU=Abteilung/O=Orga";
    Altnamen := Altname : @Name([Abbreviate]; Altname);
    REM "Kontrollier ob der gesuchtename enthalten ist, wenn ja, dann weiter wenn nein, dann ende der agent mittels @return ";
    @if( DocReader *= Altnamen; "" ; @if( DocAutor *= Altnamen; "" ; @return));
    Field DocReader := @Replace ( DocReader ; Altnamen ; Neuname );
    Field DocAutor := @Replace ( DocAutor ; Altnamen ; Neuname );
    Fertig


    Als letztes (und den Leser und Autoren felder wieder zurück zu setzen) ein @Command([Viewrefreshfields]) in einem Agenten machen die alle bearbeitete dokumente einmal neu berechnet.

  • OK geht so. Wie bringe ich nun aber den Wert item.Values in ein Feld rein?


    Dim value As String
    value = item.Values


    Dies funktioniert nicht, weil "Typ missmatch". Was für ein Typ muss ich nehmen damit ich in value den Wert von item.Values habe?

  • Mh, muss ich nicht auch den Typ des Feldes wahren?
    Wenn ich nur den einen Wert mit dem anderen ersetze, geht da nicht das read- bzw. read-write-flag verloren?


    Da müsste ich doch mit ReplaceItemValue den SpecialType noch mal zuweisen, oder?


    VG,
    TinaS

  • Hier hab ich euch noch den Agenten welche die Felder richtigsetzt. Merci für eure Hilfe!


    Sub Initialize

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db= session.CurrentDatabase
    Dim coll As notesdocumentcollection
    Set coll = db.AllDocuments
    Dim doc As notesdocument
    Set doc = coll.getfirstdocument
    Dim array2(0) As String
    Dim array3(0) As String
    Dim ret As Variant

    array2(0) = "CN=xyz/O=firma01"
    array3(0) = "CN=xyz/O=firma02"

    While Not (doc Is Nothing)

    'Alle Felder von Dokument überprüfen
    Forall item In doc.Items
    'nur Author
    If ( item.IsAuthors ) Then
    ret = Replace( item.Values, array2, array3)
    item.Values = ret
    Else
    'nur Reader
    If ( item.IsReaders ) Then
    ret = Replace( item.Values, array2, array3)
    item.Values = ret
    End If
    End If
    End Forall
    Call doc.Save(True, False)
    Set doc = coll.getnextdocument(doc)
    Wend


    End Sub