Domino 9 und frühere Versionen > ND6: Entwicklung

Regel- Ordner: Object Variable not set

(1/2) > >>

Tode:
Ich habe hier in einem Regel- Ordner bei einem User folgendes Problem:

Client: 6.5.5, Mail- Schablone, Server 6.5.5

Erstellt er eine Regel, geht alles wunderbar.
Öffnet er sie ein zweites Mal, geht es auch noch, beim dritten Aufruf kommt dann "Object Variable not set".

Und zwar in diesem Code

--- Code: ---Sub Queryopendocument(Source As Notesuiview, Continue As Variant)

Dim oldrule As notesdocument
Dim uidoc As notesuidocument
Dim ruledocs As notesdocumentcollection

Set ruledocs = source.documents
Set oldrule = ruledocs.getfirstdocument

If oldrule.HasItem("RuleType")  And oldrule.GetItemValue("RuleType")(0) = "BU"  Then
If oldrule.GetItemValue("RuleType")(0) = "BU" Then
Dim JunkRule As New JunkRules
Call JunkRule.ManageList()
End If
Else
If (ws.dialogbox("Mailrule", True, True,True, False, False, False,"Regel bearbeiten",oldrule, True, True)) Then
'The user clicked on OK, process their information in the form of a new filter document
Call oldrule.save(True, False,True)
End If
End If
ws.viewrefresh
continue = False
End Sub

--- Ende Code ---

An der Stelle:
   If oldrule.HasItem("RuleType")  And oldrule.GetItemValue("RuleType")(0) = "BU"  Then

Problem ist:
- Source ist gefüllt
- ruledocs ist eine Collection mit Count = 1
- oldrule ist Nothing

Und das verstehe ich nicht.. wie kann ein getfirstdocument schief laufen, wenn ich eine Collection habe, die auf dem aufbaut, was ich SEHE, und nach dem Fehler sehe ich das Dokument immer noch, nur "getfirstdocument" kriegt das Dokument nicht...

Hat jemand ne mögliche Erklärung hierfür ?

Thanx
Tode

webchild:
Hallo Tode,

hast du zu diesem Problem irgendwelche Infos erhalten? Ich stehe nämlich vor einem ähnlichen Problem.

Danke, Krista

ata:
... so wie ich das sehe, geht es nicht um's doc, sondern um das Item:


--- Zitat ---If oldrule.HasItem("RuleType")  And oldrule.GetItemValue("RuleType")(0) = "BU"  Then
--- Ende Zitat ---

... du prüfst, ob es das Item gibt und ob der erste Wert darin "BU" ist - und hier scheint ein Hund begraben. Es werden beide Prüfungen gemacht, und nicht nach der ersten abgebrochen, weil es das Item nicht gibt. Gibt es dieses nicht, läufst du im zweiten Zweig in ein Object Variable not set , da es das Item nicht gibt...

Die zwei Prüfungen müssen hintereinander ablaufen - dann siehst du vermutlich weiter...

... oder du prüfst nur mit

If oldRule.RuleTYpe(0) = "BU" Then...


Toni ::)

koehlerbv:
Nö, Toni, das kann es nicht sein.

If oldrule.HasItem("RuleType")  And oldrule.GetItemValue("RuleType")(0) = "BU"  Then

Der erste Teil prüft ab, ob es das Item gibt. Wenn nicht, passiert auch nichts. Der zweite Teil
oldrule.GetItemValue("RuleType")(0)
gibt immer einen Wert zurück und ist aquivalent zu
oldrule.RuleType (0)

Ob es dabei das Item gibt, ist egal. Das Ergebnis der gesamten Terms wäre True oder False - abhängig von den Bedingungen und ihrer Erfüllung. Ein "object variable not set" kann es nicht werfen - es sei denn, oldrule ist kein gültiges Objekt.

Davon abgesehen: Diese Sache ist sehr dubios, wie 6.5.5 an anderen Stellen auch. Ich habe daher diese Version auf keiner meiner vier Boxen mehr installiert.

Fragen an Torsten bzw. Krista:
Wie verhält sich das, wenn das Mailfile gegen eine 6.5.6er Version ausgetauscht wird?
Wie verhält sich das gleiche Mailfile unter einer anderen Client-Version?
Was passiert, wenn man
ruledocs.getfirstdocument
gegen
rulecocs.GetNthDocument (1)
austauscht? Da da ja irgendwo der Wurm begraben liegt, sollte dies eigentlich nichts ändern, aber ... das Ergebnis würde mich interessieren.

Bernhard

ata:
@Bernhard,

... ich hatte den entsprechenden Fall genaus so in einer DB. In gestaffelten Verweigungen hatte ich das Problem dann nicht mehr - kann aber jetzt nicht mehr sagen, in welcher Version das war...

Toni

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln