12. juni 2008 - 00:14Der er
36 kommentarer og 1 løsning
DBLookUp i View
Hej,
Jeg bruger følgende kode på et felt i en Form til at trække nogen oplysninger fra en anden form: _key := @Text(msgid); _list := @DbLookup( "" : "NoCache" ;"":""; "(notifikation)" ; _key ; 2); @If(_list = ""; "Der er noget galt"; _list)
Nu ville jeg gerne have samme information ud i et View, men når jeg gør det er _list lige pludselig tom, men _key indeholder det den skal (Ser det i hvert til ud som om hvis jeg udskriver den i stedet for min fejl tekst.
Nej, desværre ikke. Det er et af de måske mest skuffende ting ved Notes. Hvis man vil sådan noget, så skal man over at bruge DB2 som database backend, så kan man den slags i oversigter (på en DB2 måde). Det er en af de største fordele ved i fremtiden at gå over til DB2 istedet for NSF storage.
Nej, det kan man ikke. Der er dog forskellige måder at opnå lidt af det samme på, f.eks. kan man lave en page med en tabel, hvor hver celle er Computed Text. Så kan du godt bruge DbLookup. Her er problemet, at du skal definere en tabel med et bestemt antal rækker. Eller du kan have en form med flere computed multivalue-felter med new line separator ved siden af hinanden, der hver er defineret med en DbLookup. Her skal man passe på, at antallet af elementer er det samme for hvert felt, og at værdierne ikke bliver for lange, så de ryger ned på næste linie.
Både pages og forms kan du jo sætte ind i navigationen med en outline, så det kan godt komme til at ligne views.
Det er lidt noget skidt, da jeg skal trække oplysninger 2 steder fra ellers bliver det rigtigt besværligt.
"Problemet" er at jeg modtager 2 http kald fra en anden side som skal kombineres således at jeg kan se den fulde status når jeg logger ind og kigger. (Det er ved afsendelse af SMSer, der får jeg først et kald med at de har modtaget SMSen og bagefter modtager jeg et kald når den er leveret til Mobiltelefonen)
Kan du forklare lidt mere om opbygningen af view'et og hvad problemet er. Er hvert dokument i view'et en registrering af en afsendt SMS? Er der så et andet dokument med leveringskvittering, når den er leveret til mobiltelefonen?
Dokument 1 med Registrering af afsendt SMS Dokument 2 med Registrering af Leveringsstatus
Og i Viewet vil jeg meget gerne have kombineret de 2 dokumenter således at jeg får 1 linie med hele SMSen
Idag har jeg det som 2 linier til hver SMS og det ødelægger lidt overblikket over hvilke som er fejlet og hvilke som er leveret.
Jeg har da også overvejet om man kunne lave en Agent som læser Dokument 1, søger efter Dokument 2 (baseret på et msgid jeg får fra Gatewayen) og gemmer oplysningen om Leveringsstatus på Dokument 1 således at jeg kun skal læse fra Dokument 1 når jeg åbner viewet
Dokument 2, kommer det ind som email? Hvis ja, kan du lave en Pre-delivery agent, som sætter status på dokument 1, når dokument 2 er på vej ind i basen. Se, det er smart.
Vedr. HTTP:, så kan du til SMS-formularen tilknytte en WebQuerySave agent, som gør det du ønsker. Den finder ud af, om det er en leverings-post, hvis ja, så finder den den oprindelige afsendelses-post og stempler den.
Hmm, lige nu blev det en Agent som opdaterer mit Dokument 1 med oplysninger fra Dokument 2, det sker så dog kun hver 5. min, men det må vi leve med lig nu.
Det kommer lidt an på din agent, men ja. Hvis agenten er skrevet i LotusScript, så giver propertien DocumentContext dig adgang til det dokument der er ved at blive gemt. Ud fra nogle data på dette dokument skaffer du dig adgang til det oprindelige dokument1 og opdaterer det.
@If( !@IsError( _list ) ; _list ; @Text( _list) = "Entry not found in index or view's index not built" : "Entry not found in index"; FIELD leveringsstatus := "Fejl ved opslag til Status" ; FIELD leveringsstatus := _list )
Det virker fint hvis jeg har en Schedulet eller kører det fra Actions
løsningen vil være at lave en oversigt, som sorterer Dokument1-dokumenterne efter msgid. Altså en oversigt "modsat" din eksisterende "(notification)" oversigt. Ideen er at den indkommende "notification/Dokument2" skal kunne finde sit moderdokument/Dokument1 ud fra MSGID. Når det er gjort, skal moderdokumentet opdateres.
Det bedste vil være hvis agenten først henter moderdokumentets UNID , som kan være angivet i kolonne 2 som @Text(@DocumentUniqueID). Derefter anvendes @SetDocField( _unid; "leveringsstatus"; _status) for at sætte værdien på moderdokumentet.
'
smider lige lidt fra hjælpen ind : @SetDocField
Example Given the unique ID of a document, sets the value of a specific field on that document. The document must reside in the current database. Syntax @SetDocField( documentUNID ; fieldName ; newValue ) Parameters documentUNID Text. The unique ID of a document. @DocumentUniqueID specifies the unique ID of the current document. To specify the unique ID of the parent document, use $Ref as the first parameter. $Ref is a special field on a response document that contains the unique ID of the parent document. fieldName Text. The name of a field on the document, enclosed in quotation marks. If you store the field name in a variable, omit the quotation marks here. newValue Text or text list; number or number list; time-date or time-date range. The value you want to give to the field. Usage This function does not work in column or selection formulas. @SetDocField is particularly useful in field, button, and agent formulas. Note Starting with Release 6, you can use @SetDocField to set the value of a field in the current document, not just in other documents in the same database.
Men tilsyneladende fordi at både status og notifiktation har et felt som hedder Statuscode så for den taget statuskoden fra status i stedet for fra Notifikation da den i hvert til får "Leveret" selvom at notifikation kommer med statuscode 2
Umiddelbart nej. Agenten kender kun til det dokument som du er igang med. Men hvorfor ikke starte med blot at overføre statuskoden råt? Evt. over i et andet felt.
Vi er enige om at det skal være en Agent som kører ik ?
Hvis jeg sender: msgid: 1, requesttype: mtstatus og statuscode: 0 msgid: 1, requesttype: notifikationstatus og statuscode 2
Så bliver msgid 1 / requesttype mtstatus ikke opdateret, først når msgid 2 kommer så bliver msgid 1 opdateret både med leveringsstatus og leveringsstatus2
Det blev LotusScript alligevel Grunden til at din agent "virkede" forsinket var at den var sat til at køre på alle nye/redigerede dokumenter, men den kørte altså ikke på det her helt nye dokument, da det faktisk ikke er gemt endnu. Den rigtige indstilling for WQS-agenter er scope=none. Men tilsyneladende virker @SetField(UNID...) ikke her.
Så løsningen bliver som jeg antydede fra starten , en LS-agent:
Sub Initialize Dim session As New NotesSession Dim thisdoc As NotesDocument Dim db As NotesDatabase Dim view As NotesView Dim coll As NotesDocumentCollection Dim doc As NotesDocument
Set thisdoc = session.DocumentContext
Set db=session.CurrentDatabase Set view = db.GetView( "(afsendelser)")
Set coll = view.GetAllDocumentsByKey( thisdoc.MsgID(0), True)
If coll.Count > 0 Then Set doc = coll.GetFirstDocument Call doc.ReplaceItemValue( "Leveringsstatus", thisdoc.statuscode(0) ) Call doc.Save( True, False) End If End Sub
Kanon, det virker perfekt, med lidt extra udbygning, så som at sætte lidt flere felter samt oversætte den statuscode der er kommer til noget tekst. Jeg siger det mange gange, du styrer
Synes godt om
Ny brugerNybegynder
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.