Autor Thema: OLE  (Gelesen 4225 mal)

Offline mgeidl

  • Aktives Mitglied
  • ***
  • Beiträge: 224
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
OLE
« am: 28.05.03 - 14:07:42 »
Hallo Notes-Gemeinde!

Wir haben in unserem Konzern eine Doku-DB, die auf 3 Servern repliziert wird.
In einigen Dokumenten müssen die SAP-Programmierer immer ihren Senf dazugeben, d.h., sie lösen den Anhang, ändern und hängen wieder neu an. Nun hab ich mir gedacht, wäre es besser, mit einem Objekt zu arbeiten.

Gibt es da eine Möglichkeit, daß Überprüft wird, ob dieses Objekt schon von einem anderen bearbeitet wird, bzw. ob das Notes-Dokument schon von irgendwem bearbeitet wird?

Daß es bei der Replizierung dann trotzdem zu Speicherkonflikten kommen kann, ist mir schon klar.

Danke schon mal für Eure Hilfe.

Marietta

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:OLE
« Antwort #1 am: 28.05.03 - 14:41:45 »
Hi,

für eine Überprüfung ob ein Objekt bearbeitet wird sehe ich wenig Chancen.

Das hier hab ich mal im Internet gefunden:

Zitat
Locking documents to prevent save conflicts

This piece of code assigns edit lock to the first user who opens the document. When other users try to open the same document, they get a message saying "Document is locked by X" and a read-only copy is opened for them. They will not be able to edit the document until the lock is released by the first user.

A manually run agent to unlock the document can be provided for Domino Admin in case of system crash.

Form should have a hidden field called "Lock" of type Text (Editable)
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
       If (Source.IsNewDoc) Then
              Exit Sub
       End If   'New Doc, Lock not reqd
       Dim varLock As Variant
       Dim session As New NotesSession
       Dim nnUserName As New NotesName(session.UserName)
       Set docBackend=Source.document
       varLock=docBackend.GetItemValue("Lock")
       If (varLock(0) <> "") Then
              Msgbox ("Document is currently locked by "+varLock(0)+". A read-only copy will be opened for your use.")
              Exit Sub
       End If
       docBackend.Lock=nnUserName.Common
       Call docBackend.Save(True,True)
End Sub

'When user trys to edit, check if he/she has the lock

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
       If Source.FieldGetText("Lock")<>"" Then
              Dim session As New NotesSession
              Dim nnUserName As New NotesName(session.UserName)
              If (Strcomp(nnUserName.Common,Source.FieldGetText("Lock"),5)=0) Then
                     continue=True
              Else
                     Msgbox("Sorry, you are in read-only mode ! This operation cannot be performed. This document is currently used by "+Source.FieldGetText("Lock"))
                     continue=False
              End If
       End If
End Sub

'Release the lock when the user with the lock closes the document

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
       If strNewDoc="New" Then  '(exit if it's a new doc.Set this variable to New in postopen if it's a new doc)
              Exit Sub
       End If
      
       Dim session As New NotesSession
       Dim nnUserName As New NotesName(session.UserName)
       If (Strcomp(nnUserName.Common,Source.FieldGetText("Lock"),5)=0) Then
              Set docBackend=Source.document
              docBackend.Lock=""
              Call docBackend.Save(True, True)
       End If
      
End Sub

Agent to Unlock selected documents -
Manually run agent - Simple Action
Modify field 'Lock': Set to ''

Damit verhindert man, dass ein zweiter User das Dokument bearbeiten kann. Vielleicht hift dir das weiter.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline mgeidl

  • Aktives Mitglied
  • ***
  • Beiträge: 224
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re:OLE
« Antwort #2 am: 28.05.03 - 14:55:17 »
Hoch soll er leben, hoch soll er leben, .......

Schönen Feiertag.

Marietta

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:OLE
« Antwort #3 am: 28.05.03 - 15:02:09 »
Hi,

danke für die Blumen.  ;D


Auch einen schönen Feiertag.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Woschi

  • Frischling
  • *
  • Beiträge: 4
  • ....
Re: OLE
« Antwort #4 am: 02.02.06 - 14:46:30 »
...funktioniert der QuellCode auch unter Domino 6.5?

Ich möchte ganz gerne ohne die standard Lock-Funktion arbeiten, aber bekomme beim öffnen des Dokuments folgende Fehlermeldung:

"Wrong number of arguments for methode"

Im debugger hängt er sich am Punkt

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If (Source.IsNewDoc) Then
Exit Sub
End If 'New Doc, Lock not reqd
Dim varLock As Variant
Dim session As New NotesSession
Dim nnUserName As New NotesName(session.UserName)
Set docBackend=Source.document
varLock=docBackend.GetItemValue("Lock")
If (varLock(0) <> "") Then
Msgbox ("Document is currently locked by "+varLock(0)+". A read-only copy will be opened for your use.")
Exit Sub
End If
docBackend.Lock=nnUserName.Common
Call docBackend.Save(True,True)
End Sub

auf.

Meine Scriptkenntnisse haben etwas gelitten die letzten Jahre, aber scheinbar hat sich hier im Laufe der Versionsupdates einiges verändert, oder irre ich mich?

Auch wenn der Eintrag hier schon recht alt ist, hoffe ich doch sehr, daß ihn jemand ließt und mir weiterhelfen kann  ???

Gruß
Woschi

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: OLE
« Antwort #5 am: 02.02.06 - 14:53:08 »
Es ist der Name des Item ("Lock"). In R5 hatte dieses Item noch keinerlei (System-)Bedeutung, jetzt ist es ein reservierter Name für das in R6 integrierte Document locking.

Bernhard

Offline Woschi

  • Frischling
  • *
  • Beiträge: 4
  • ....
Re: OLE
« Antwort #6 am: 02.02.06 - 16:12:30 »
...vielen Dank für die prompte Antwort!

Habs direkt ausprobiert und tatsächlich es FUNZT!  ;)

Offline schurke

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: OLE
« Antwort #7 am: 03.02.06 - 14:50:15 »
Es ist der Name des Item ("Lock"). In R5 hatte dieses Item noch keinerlei (System-)Bedeutung, jetzt ist es ein reservierter Name für das in R6 integrierte Document locking.

Bernhard

Ich habe das Ganze auch mal probiert. Leider funzt das bei mir nicht.
Zum allgemeinen Verständnis:
- ich lege ein Textfeld bearbeitbar nicht mit Namen "Lock" sondern "Gesperrt" an.
- ich ersetze im Script Lock durch Gesperrt
If (Source.IsNewDoc) Then
              Exit Sub
       End If   'New Doc, Gesperrt not reqd
       Dim varGesperrt As Variant
       Dim session As New NotesSession
       Dim nnUserName As New NotesName(session.UserName)
       Set docBackend=Source.document
       varLock=docBackend.GetItemValue("Gesperrt")
       If (varGesperrt(0) <> "") Then
              Msgbox ("Document is currently locked by "+varLock(0)+". A read-only copy will be opened for your use.")
              Exit Sub
       End If
       docBackend.Gesperrt=nnUserName.Common
       Call docBackend.Save(True,True)
End Sub

'When user trys to edit, check if he/she has the lock

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
       If Source.FieldGetText("Gesperrt")<>"" Then
              Dim session As New NotesSession
              Dim nnUserName As New NotesName(session.UserName)
              If (Strcomp(nnUserName.Common,Source.FieldGetText("Gesperrt"),5)=0) Then
                     continue=True
              Else
                     Msgbox("Sorry, you are in read-only mode ! This operation cannot be performed. This document is currently used by "+Source.FieldGetText("Gesperrt"))
                     continue=False
              End If
       End If
End Sub

'Release the lock when the user with the lock closes the document

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
       If strNewDoc="New" Then  '(exit if it's a new doc.Set this variable to New in postopen if it's a new doc)
              Exit Sub
       End If
     
       Dim session As New NotesSession
       Dim nnUserName As New NotesName(session.UserName)
       If (Strcomp(nnUserName.Common,Source.FieldGetText("Gesperrt"),5)=0) Then
              Set docBackend=Source.document
              docBackend.Gesperrt=""
              Call docBackend.Save(True, True)
       End If
     
End Sub
- kopiere das Script in die Script-Options von Feld Gesperrt
- die Sripte werden verteilt auf die einzelnen Punkte "Open", "Modechange" und "Close"
- Der debugger läuft ohne zu Murren durch aber trotzdem bekomme ich keine Meldung das ein Dokument schon bearbeitet wird usw.

Sorry für diese vielleicht dumme Frage. Bin eben noch Script-Anfänger ersten Grades.
Wo liegt mein Denkfehler?

Wilfried
notes 6.5.5

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: OLE
« Antwort #8 am: 03.02.06 - 15:37:46 »
- kopiere das Script in die Script-Options von Feld Gesperrt

Was meinst du damit? Was hast du wohin kopiert?

- Der debugger läuft ohne zu Murren durch aber trotzdem bekomme ich keine Meldung das ein Dokument schon bearbeitet wird usw.

Wie sieht der Feldinhalt von "Gesperrt" aus.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline schurke

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: OLE
« Antwort #9 am: 03.02.06 - 15:50:34 »

Was meinst du damit? Was hast du wohin kopiert?

Das ganze Script in den Speicher und dann in die Options vom Feld Gesperrt


Wie sieht der Feldinhalt von "Gesperrt" aus.

Kein Feldinhalt vorhanden.

wilfried
notes 6.5.5

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: OLE
« Antwort #10 am: 03.02.06 - 15:55:19 »
Du referenzierst auf varGesperrt, verwendest aber varLock
Code
varLock=docBackend.GetItemValue("Gesperrt") ' <-----
       If (varGesperrt(0) <> "") Then '<------
              Msgbox ("Document is currently locked by "+varLock(0)+". A read-only copy will be opened for your use.")
              Exit Sub
       End If
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: OLE
« Antwort #11 am: 03.02.06 - 15:57:53 »
Das ganze Script in den Speicher und dann in die Options vom Feld Gesperrt

Da gehört das Script überhaupt nicht hin.

Der Code gehört nur in die entsprechenden Maskenevents QueryOpen, Querymodechange und QueryClose.

Bereinige das mal und versuch's dann erneut.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline schurke

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: OLE
« Antwort #12 am: 06.02.06 - 07:54:47 »
Danke, habs hinbekommen. :-)

Wilfried
notes 6.5.5

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz