Autor Thema: Es ist bereits ein uidokument geöffnet  (Gelesen 2646 mal)

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Es ist bereits ein uidokument geöffnet
« am: 13.12.07 - 17:05:39 »


Halllo liebe Notes Gemeinde ich habe bei dem Aufruf des folgenden Code ein Problem:
Wenn ich ich das zweite Dokument in der collection speichern möchte bekomme ich die Fehlermeldung:
"Eine weitere Kopie dieses Dokumentes wurde gespeichert. Wollen Sie ein Konfliktdokument erzeugen?"
Ich arbeite alleine auf dem Testserver und es passiert bei unterschiedlichen Datensätzen - Hat jemand von euch eine Idee?
lg claudia


      VarSearch0 = "@Contains(MonPrdDocIDAnlage;{" & x & "})"
      VarSearch1 = "@Contains(@text(MonPrdMonat);{" & VarMY & "})"
      VarSearch2 = "@Contains(@text(MonPrdMonat);{" & VarMY2 & "})"
      VarSearch3 = "@Contains(Form ; ""frmMonatsblattWasserverteilungsanlage"")"
      VarSearch4 = "@Contains(Form ; ""frmMonatsblattWasserproduktionsanlage"")"
      
      Set dc = db.Search(VarSearch0 & " & (" & VarSearch1 & " | " & VarSearch2 &") & (" & VarSearch3 & " | " & VarSearch4 & ")", Nothing, 0)      
      
      Set doc = dc.GetFirstDocument()
      If dc.Count >2 Then
         VarReplizierkonflikt = VarReplizierkonflikt & "-" & doc.UniversalID
      Else
         While Not(doc Is Nothing)
            Set doc2 = db.GetDocumentByUNID(doc.UniversalID)
            Set uidoc = ws.EditDocument(True, doc2)
            Set doc2 = Nothing
            Call uidoc.Save
            Call uidoc.Close(True)
         Wend
      End If
   End Forall

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Es ist bereits ein uidokument geöffnet
« Antwort #1 am: 13.12.07 - 17:13:10 »
Ich bin zwar nicht mehr ganz denkgeeignet. A-Bär

>2 bedeutet ja mindestens drei, oder?

Die whileschleife kannst Du dir ja sparen wenn es nur ein Doc geben sollte. Dann machst Du ein if not doc is nothing dahin.

So, mache jetzt Feierabend...
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Es ist bereits ein uidokument geöffnet
« Antwort #2 am: 13.12.07 - 17:24:45 »
Was willst du damit eigentlich damit erreichen?

Code
set uidoc = ws.EditDocument(True, doc2)
Set doc2 = Nothing
Call uidoc.Save
Call uidoc.Close(True)

Mit solchen gesprungenen Ridberger zwischen Backend-Objekten und Frontend/UI-Objekten sollte man vorsichtig umgehen. Vielleicht macht doc.computeWithForm genau was du willst und du benötigst gar keine Frontend Operationen?
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Es ist bereits ein uidokument geöffnet
« Antwort #3 am: 13.12.07 - 17:31:18 »
Ich sehe das genauso wie Axel. Das kann nicht gut gehen.

Wozu soll dieser Stunt überhaupt gut sein? Das lässt sich bestimmt anders lösen.

Und das
Code
         While Not(doc Is Nothing)
            Set doc2 = db.GetDocumentByUNID(doc.UniversalID)
            Set uidoc = ws.EditDocument(True, doc2)
            Set doc2 = Nothing
            Call uidoc.Save
            Call uidoc.Close(True)
         Wend
ist "'In Ewigkeit, Amen', sprach die Endlosschleife"!

Oder fehlt da Code?

Bernhard

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: Es ist bereits ein uidokument geöffnet
« Antwort #4 am: 13.12.07 - 17:31:45 »
ich habe dokumente in einer exceltabelle und die sollen in ein DB eingetragen werden die eine fremdfirma erstellt hat. um zu vermeiden dass berechnungen die im hintergrund nicht durchgeführt werden habe ich den import ins Frontend gelegt.
lg claudia

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: Es ist bereits ein uidokument geöffnet
« Antwort #5 am: 13.12.07 - 17:47:42 »
ich bin so doof...
habe vergessen das nächste Dokument in der Schleife aufzurufen und damit hat er das selbe dokument zwei mal hintereinander geöfnet.
jetzt stellt sich mir nur die frage wenn ich das dokument speichere und schließe und dann das selbe dokument nocheinmal aufrufe wieso kommt es dann zu einem replizierkonflikt?
lg claudia

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Es ist bereits ein uidokument geöffnet
« Antwort #6 am: 13.12.07 - 18:02:16 »
Du bekommst auf jeden Fall ein Timingproblem.

Warum machst Du die Sache nicht sauber und machst die erforderlichen Berechnungen auch im Backend? Das ist der übliche Weg.

Bernhard

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: Es ist bereits ein uidokument geöffnet
« Antwort #7 am: 13.12.07 - 18:14:45 »
würde ich gern - aber das programmierproject der DB von der fremdfirma weist fehler und performanceprobleme auf und wenn ich per backend daten importier  entfällt der support und damit ich firmenanweisung frontend

lg claudia

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Es ist bereits ein uidokument geöffnet
« Antwort #8 am: 13.12.07 - 18:22:51 »
... und wenn ich per backend daten importier  entfällt der support und damit ich firmenanweisung frontend ...

Muss ich jetzt verstehen, was Du damit sagen willst? Nö.

Bernhard

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: Es ist bereits ein uidokument geöffnet
« Antwort #9 am: 13.12.07 - 18:50:04 »
da habe ich mich vielleicht ein bisschen kompliziert ausgedrückt
wir verlieren die garantie und supportanspruch wenn wir backend daten einbringen

lg claudia

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Es ist bereits ein uidokument geöffnet
« Antwort #10 am: 13.12.07 - 19:14:12 »
Claudia, bitte besorge Dir eine Tastatur, an der die Grossbuchstaben noch funktionieren. Dieser SMS style-Text liest sich zu schwer und das haben wir nicht verdient.

Ich verstehe aber Euer Grundproblem nicht: Du hantierst doch schon im Backend herum, und der Import muss ja auch im Backend passieren. Wenn ich der Hersteller wäre und ich würde sowas entdecken, würde ich auch auf meinen Garantieanschluss pochen. Ihr habt also sowieso schon verloren.

Wenn Ihr mit der DB sowieso Schwierigkeiten habt: Warum löst Ihr das Problem denn nicht prinzipiell (und schmeisst den Hersteller 'raus)?

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Es ist bereits ein uidokument geöffnet
« Antwort #11 am: 13.12.07 - 20:31:48 »
Zitat
Leute, die sich auf so etwas einlassen, halte ich für unprofessionell. Die Risiken von Arbeiten für die Tonne sind einfach zu hoch.
Ich meine damit das Management, nicht Claudia.
« Letzte Änderung: 14.12.07 - 09:27:19 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: Es ist bereits ein uidokument geöffnet
« Antwort #12 am: 13.12.07 - 20:51:22 »
Hi,

scheinbar ist das Problem ja gelöst, mit dem set doc = dc.GetNextDocument(doc).

Ich verstehe aber noch immer nicht was deine Funktion nun mit "nicht backend" zu tun hat.
Nur weil Du dein erstelltes Dokument einmal UI aufmachst, UI.Save() und zu machst ist das noch lange nicht "Frontend" -
Normalerweise kann man ja davon ausgehen, dass dies genügt,
aber Du hast die DB ja so beschrieben:
würde ich gern - aber das programmierproject der DB von der fremdfirma weist fehler und performanceprobleme auf und wenn ich per backend daten importier  entfällt der support und damit ich firmenanweisung frontend

lg claudia
Und wenn sie so toll ist, kannst du sicher davon ausgehen, dass es hier irgendwelche Aktionen wie
- Daten eintragen, wenn das Dokument über eine Schaltfläche erzeugt wird,
- Daten verarbeiten, wenn das Dokument über eine Schaltfläche geschlossen wird,
- Feldvalidierungen und umsetzungen in z.B. Exiting()
...
und für sowas reicht ein UIDoc = WS.Edit + UIDoc.Save noch lange nicht aus.

Den Knaller hierzu habe ich neulich in einer DB gesehen:
im Exiting() von mehreren Feldern: ein db.search(), ob der eingegebene Wert eindeutig in der db ist....
(Ich dachte zuerst mir schläft das Gesicht ein  ^-^ , als ich ausversehen in das Feld geklickt habe und dann zum nächsten wollte!)

jetzt bin ich auch abgeschweift.... sorry

Also zum Thema:
Damit bekommst Du GARANTIERT ein Laufzeitproblem
Code
   While Not(doc Is Nothing)
            Set doc2 = db.GetDocumentByUNID(doc.UniversalID)
            Set uidoc = ws.EditDocument(True, doc2)
            Set doc2 = Nothing
            Call uidoc.Save
            Call uidoc.Close(True)
            set doc = dc.GetNextDocument(doc)
   Wend
uidoc.Close(imidiate) ist auch nicht wirklich sofort
und Du stolperst über es selbst selbst backend und frontend, da Dir anfänglich ja noch das
            set doc = dc.GetNextDocument(doc)
fehlte!
Das UIDoc war trotzt  Call uidoc.Close(True) zum zeitpunkt des nächsten
Set uidoc = ws.EditDocument(True, doc2) noch nicht zu!

Und wo / wie schreibst Du denn die Daten rein ? (Ist ja wohl backend!)
Ein doc.ComputeWithForm() ergibt eingentlich (fast) das selbe her,
ansonsten gäbe es noch
@Command( [ToolsRefreshSelectedDocs] )
bzw.
@Command( [ToolsRefreshAllDocs] )
die an deine Vorgehensweise auch herankommen!

Und wenn Du solche oder ähnliche Aktionen wie ich oben beschrieben habe in der DB hast,
Dann hast Du auch mit Deiner Aktion keine Chance!

-> am besten nachsehen, welche Aktionen da in der DB vorgehen.

Oft reicht aber der Import mit "sauberem" Datenbefüllen
und dann ein doc.computewithForm aus.
oder noch "simpler" eine saubere "Excelvorlage" als ".wk3/.wk4"
und ein Import mit "Lotus 123" sowie einem "Felder von Maske berechnen" beim importieren. (Ganz ohne Programmierung!)  ;)

Gruss, Pete(r)

PS: 23764273027282480476772824782236106480890947906260282406424809582554281
48 65 78 61 64 65 7A 69 6D 61 6C 20 67 65 68 74 73 20 61 62 65 72 20 64 61 6E 6E 20 6C 65 69 63 86 74 65 72 20 2D 20 64 61 6E 6B 20 54 6F 6F 6C 73 21
pete(r)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz