Avatar billede medusa Nybegynder
18. juli 2003 - 10:58 Der er 7 kommentarer og
2 løsninger

Embeddedobjects på notesdocument

Hej Eksperter. Jeg har et meget generende problem med embeddedobjects på notesdocument. Senariet er som følger:
Brugeren opretter et dokument. Indtaster et udvalg og trykker på en knap. Knappen åbner Excel og overføre data fra notes. Brugeren lukker excel (ja til at gemme.). Lukker notesdokumentet (ja til at gemme). Excel dokumentet er nu gemt som vedhæftning på notesdokumenten. Når brugeren åbner dokumentet igen skal vedhæftningen vises i dok (som embeddedobject). Den del går fint. Jeg gør det ved at gemme vedhæftningen på disk, embedde det i et rt-felt, og slette på disk. Problemet opstår hvis brugeren siger gem+luk til dokumenten. Så bliver det embeddede object gemt på notesdocument, og hvis dokumentet åbenes igen, dannes en ny object men det gamle er der stadig. Hvordan fjerner man embeddedobjects fra doc?
Jeg har prøvet følgende i postsave:
    Forall items In doc.Items
        If items.type = 1090 Then
            Call items.remove
            Call doc.save(True,True)
        End If
    End Forall

jeg har også prøvet:
Forall o In doc.EmbeddedObjects
  o.remove
End Forall

men den går i fejl.

Jeg er ved at løbe tør for ideer. Hjælp!!
Avatar billede pr0gm4n Nybegynder
18. juli 2003 - 12:08 #1
Man kan jo kaste sig over dette fra to sider. Brugeren har gjort noget "forkert", ergo rettes der op på dette med noget kode - Det er det du er i gang med. Alternativt kunne du forhindrer at brugeren gør noget "forkert".

Du skriver "Problemet opstår hvis brugeren siger gem+luk til dokumenten." - såvidt jeg husker er dette et menupunkt i Excell, fjern dette menupunkt fra den skabelon du anvender, så kan brugeren ikke lave fejlen.
Avatar billede medusa Nybegynder
18. juli 2003 - 12:14 #2
Det brugerne gør skal sådan set være lovlig. Hvis man ikke kan gemme og lukke notesdokumentet er det da et sølle dokument. Hvis de beslutter at oprette et nyt excel dokument, skal de jo bare kunne gøre det, og når den bliver gemt overskriver excelfilen den gamle excelfil. Men det vil bare give samme problem som nu hvor man så åbner dokumentet og nu ser 2 embeddede objects istedet for kun det nye exceldok.
Avatar billede pr0gm4n Nybegynder
18. juli 2003 - 13:53 #3
Hmmm, må nok indrømme, at jeg ikke helt forstår hvad det er du vil.

Jeg har derfor taget udgangspunkt i dit oprindelige indlæg, hvori du spørger "Hvordan fjerner man embeddedobjects fra doc?... Jeg har prøvet følgende i postsave:..."

Jeg har lavet en formular med ét felt "body" og i dette felt har jeg indsat et embedded Excell object baseret på en fil. Nedenstående LS fjerner dette object når jeg gemmer dokumentet på ny.

Sub Postsave(Source As Notesuidocument)
Dim doc As NotesDocument
Dim rtitem As Variant
Set doc = source.document
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
  If ( o.Type = EMBED_OBJECT ) Then
    Call o.Remove
    Call doc.Save( False, True )
  End If
  End Forall
End If
End Sub

Jeg håber du kan bruge dette - ellers må du evt. lægge din database et sted så den er tilgængelig, så kan jeg kigge på den.

Btw mit setup er Windows XP home edition, Excell 2000 og Notes R5.0.11
Avatar billede jogii Nybegynder
18. juli 2003 - 13:56 #4
Hvorfor vil du vise bilaget som et embedded-doc efter den oprindelige åbning? Det gældende Excel-ark er vel stadig det der er gemt som attachment.

Forstår jeg dig rigtig på følgende måde: Hver gang brugeren åbner dokumentet til læsning/skrivning skal attachmentet detaches og embeddes som OLE-objekt i RT-feltet  (til visning?). Bliver der foretaget ændringer i regnearket? Hvis ja, i hvilken udgave?
Avatar billede medusa Nybegynder
18. juli 2003 - 14:16 #5
jogii:
Hvad skal jeg sige... vi har nogle meget vanskelige brugere og en ledelse som ikke kan sige nej.... Men bortset fra det har du fat i det rigtige. Idet dokumentet er oprettet ligger excel-filen som attachment. (btw så benyttes Swing -www.swingsoftware.com - til håndteringe af dette). Brugerne vil så kunne se vedhæftningen i dokumentet, så de ikke skal ulejlige sig med at trykke på 'åben vedhæftning'knappen. Det går jo fint første gang, men hvis der trykkes gem (+luk), vil der ved næste åbning ligge 2 embeddedeobjects. Hvis jeg debugger og stopper i postopen og tjekker doc egenskaber, er der intet som indikere at der skulle ligge embeddedeobjects, hvilket jo gør det ret svært for mig at slette dem!. Når dokumentet så åbnes vises de 2 emb.obj.  Mega irriterende.
Avatar billede roenving Novice
18. juli 2003 - 14:55 #6
Hvad så med at tage fat i postopen ?-)
Avatar billede medusa Nybegynder
18. juli 2003 - 15:04 #7
Forstår ikke helt hvad du mener med det. Jeg kigger undersøger jo dokumentet for emb.obj. i postopen og der vises ingen ??

Problemet må desværre ligge i 14 dage - jeg har ferie hurraaa - men derfor må i godt tænke over problemet indtil jeg er tilbage. Håbede på et quick-fix, men det er vist ikke så let endda.
God sommer.
:) M
Avatar billede jogii Nybegynder
18. juli 2003 - 15:39 #8
Brugerne trykker altså [Gem + luk] og så opstår problemet. Har brugerne en mulighed for ikke at generere problemet (udover evt. at åbne i Read-mode) ?

Har du prøvet at anvende pr0gm4n's kode i PostSave eller QueryClose?
Avatar billede medusa Nybegynder
14. august 2003 - 12:09 #9
Jeg afprøvede koden fra pr0gm4n, men det virker ikke da rtitem.EmbeddedObjects
ikke indeholder noget (hvilket er løgn).
Istedet laver jeg en removeitem i postsave og en new richtextitem i postopen. Det ser faktisk ud til at virke (til min store overraskelse).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester