Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 22.10.03 - 23:53:21

Titel: Backend Lesefeld setzen
Beitrag von: TMC am 22.10.03 - 23:53:21
Hi,

ich setze wie folgt in einem Script ein Backend-Feld:
doc.pReaders = "[Admin],[All]" 'Leserfeld

Das Feld ist ein Leserfeld.

Allerdings zeigt mir die View die Doks nicht mehr an, egal welche Rolle ich habe.
Wenn ich statt dem Komma ein Doppelpunkt mache geht es auch nicht.

Per Formelsprache würde ich es so machen:
@Trim(@Unique("[Admin]"  : "[All]")
(hab ich mir aus einem Beispiel von mir gezogen wo es klappt)

Wie kann ich per Script die beiden Rollen übergeben?

TMC
Titel: Re:Backend Lesefeld setzen
Beitrag von: Semeaphoros am 23.10.03 - 00:09:17
Jo, det geht so nicht, das setzt nur einen String, statt zwei Werte. Gibt mehrere Varianten, das zu tun, zum Beispiel:

Dim it as NotesItem

Set it=Doc.ReplaceItemValue("pReaders","[Admin])
it.isreaders=True
it.AppendToTextList("[All"])
Titel: Re:Backend Lesefeld setzen
Beitrag von: TMC am 23.10.03 - 18:27:08
danke, so gehts.

Gruß,
TMC
Titel: Re:Backend Lesefeld setzen
Beitrag von: Semeaphoros am 23.10.03 - 18:31:07
Schön, vielleicht bis später, mache zwischendurch was für die Kondition .....
Titel: Re:Backend Lesefeld setzen
Beitrag von: koehlerbv am 23.10.03 - 19:53:07
Während Semeaphoros beim Leute-verkloppen ist (naja, Judo ;-), hab' ich mal weiter gedacht ;-))

So geht es vielleicht eleganter:
doc.DEINMULTIVALUEFELD = Evaluate ({"[ReadersAll]" : "[Administrators]" : "[DBManagers]"})

Danach natürlich noch NotesItem.IsReaders = true, wie schon von Jens beschrieben.

So richtig bequem ist es, wenn man eine Function hat, die beliebig Arrays zusammenfügt - das ist auch eine richtig nette Programmierübung für einen Begabten wie Dich (deswegen sende ich Dir auch nicht mein AddArray - ätsch-bätsch).

MeinVariant = AddArray (MeinVariant, Neue(r) Wert(e))

Dabei sollte es dann egal sein, ob MeinVariant noch leer ist oder NeuerWert vielleicht nur ein String ...

Wie gesagt - 'ne coole Übung ;-)

Ciao - und sag' an, wenn ich / wir helfen kann / können,
Bernhard
Titel: Re:Backend Lesefeld setzen
Beitrag von: Semeaphoros am 23.10.03 - 22:52:11
Aha, wärend ich meine Muskeltn bewegt habe, hast Du Bernhard chemische Reaktionen durchgeführt irgendwo oberhalb Deines Halses :-)

Zur Sache: Wie schon eben beim Name-Thread erwähnt, auch wenns gut aussieht, würde ich hier in jedem Falle nicht über Evaluate die Sache laufen lassen, da Evaluate an und für sich ein relativ "teures" Statement ist. Dies verschärft sich, da man das Item ja trotzdem noch braucht, um es als Reader zu deklarieren.

Die Denkaufgabe, die Du da TMC gegeben hast, ist seit R5 schon so gut wie gelöst: Eine Handvoll langersehnter Funktionen, zum Beispiel:


Appends one array to the end of another array and returns the result as a third array.

Syntax
ArrayAppend( sourceArray1, sourceArray2 )

Dabei darf sourceArray2 auch ein Skalar sein. Du darfst also Deine Funktion ruhig behalten ....... :-))
Titel: Re:Backend Lesefeld setzen
Beitrag von: koehlerbv am 23.10.03 - 23:26:42
Hi, Semeaphoros,

also ArrayAppend ist echt nicht das Gelbe vom Ei. Probier' mal folgendes:
Code
Sub Click(Source As Button)
   Dim v1 As Variant
   Dim v2 As Variant
   Dim v3 As String
   
   v2 = "Huhu"
   v3 = "Hallo"
   
   v1 = Arrayappend (v2, v3)
   
End Sub

Da lob ich mir meine eigene Routine ;-)  Und wie gesagt: Es ist eine wirklich nette Übung ;-)

Bernhard

Titel: Re:Backend Lesefeld setzen
Beitrag von: Semeaphoros am 23.10.03 - 23:45:45
Wer lesen kann ....... :-)

Code
Sub Click(Source As Button)
   Dim v1 As Variant
   Dim v2 (0) As Variant
   Dim v3 As String
   
   v2(0) = "Huhu"
   v3 = "Hallo"
   
   v1 = Arrayappend (v2, v3)
   
End Sub

...... und schon gehts, steht aber auch in meinem Posting, such mal nach Skalar ......

Natürlich ist ArrayAppend nicht besonders flexibel uns sehr rudimentär, aber meistens reicht es. Und, eingebauter Code ist bedeuuuuuutend schneller (und häufig auch sicherer) als die eigenen Bib-Routinen.

Das ist aber ein Thema, das auf meiner Vortrags-Vorschlagsliste steht. Mal sehen, ob ich den irgendwo bei einer Veranstaltung platzieren kann.
Titel: Re:Backend Lesefeld setzen
Beitrag von: koehlerbv am 24.10.03 - 17:22:32
Ja, ja, das ist alles schon klar (gewesen), aber mir geht es darum, bei immer wieder vorkommenden Aufgaben (z.B. Autorenfelder setzen usw.) nicht jedes Mal das gleiche Zeugs abchecken zu müssen (ist Array noch leer, ist es skalar, was füge ich hinzu etc.).

Autorenfeld "erweitern" (ich weiß ja nicht, was da gerade drin steht ...):

doc.Autoren = ArrayAppend (doc.Autoren, vResponsibles)

soll einfach funktionieren - alle Checks werden in ArrayAppend gemacht. doc.Autoren ist leer und der zweite Parameter ist gar kein Variant, sondern session.UserName - na und ? Funktioniert, die Arbeit macht die Function.

So meinte ich das.
Wenn es natürlich Performance-kritisch wird (zehntausende Änderungen im selben Dokument), dann muß man sich natürlich was anderes überlegen. Bei jeweils wenigen Änderungen in zehntausenden Dokumenten ist es dann schon wieder wurscht, da das Laden der Backend-Docs der Flaschenhals sind.

Wie siehst Du das ?

Ciao,
Bernhard
Titel: Re:Backend Lesefeld setzen
Beitrag von: Semeaphoros am 24.10.03 - 18:41:00
Nein, das sehe ich grundsätzlich auch so, ich würde den Arrayappend und Consorte irgendwie in eine Function kapseln, die dann da rundherum noch die Tests baut, aber bestimmt nicht mehr wie in R4 den Array abklopfen und Redim und ähnlichen "Hilfsmitteln" arbeiten. Sicher, wenns dann echt um Performance geht, dann muss mans anders machen, aber da müsste man dan eh wohl eher zur API greifen, wenns dann sooo kritisch wird.