Link to home
Start Free TrialLog in
Avatar of Styria-it_hr
Styria-it_hr

asked on

connection document

I have create a button in Lotus script for automatic edit/creation of lotus notes connection document. Problem, when users press the button script regularly create/edit connection document but users don't have ability to connect to server until they go to connection, open edited/created connection document and answer yes for message they get (see pic in attachment).
Any ideas how to avoid this problem?
connection.jpg
Avatar of mbonaci
mbonaci
Flag of Croatia image

I think the fact that they cannot use the connection doc is not due to this message (unless tcp port is disabled (not checked) in connection documents your code creates/edits).
That message only changes port field and saves the document.

Try adding document.ComputeWithForm at the bottom of your code, just before saving the document.
ASKER CERTIFIED SOLUTION
Avatar of Bill-Hanson
Bill-Hanson
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Styria-it_hr
Styria-it_hr

ASKER

mbonaci;
I tried to put document.ComputeWithForm but I'm always getting variant does not contain an object error.
Styria-it_hr:  Please post your code.
"document" has to be actual NotesDocument (connection document), maybe you named the variable doc, or something similar.
Sub Click(Source As Button)
      
                     Dim session As New NotesSession
      Dim workspace As New NotesUIWorkspace
      Dim db As New NotesDatabase( "" , "Names.nsf" )
      Dim doc As NotesDocument
      Dim success As Variant
      Dim view As NotesView
      
      Set view = db.GetView( "Connections" )
      Set doc = view.GetDocumentByKey("serverXXXY")
      
      If doc Is Nothing Then
            Set doc = New notesdocument(db)
            doc.Form="Location"
      End If
      
      doc.Form = "local"
      doc.Destination = "ServerYYYY"
      doc.PortName = "TCPIP"
      doc.Type = "Connection"
      
      doc.ConnectionLocation="*"
      doc.ConnectionType="0"
      doc.DestinationDomain="*"
      doc.DocumentAccess="[NetModifier]"
      doc.Enabled="0"
      doc.LanPortName="TCPIP"
      doc.OptionalNetworkAddress="ServerXXYY"
      doc.Source="*"
      
      success = doc.ComputeWithForm( False, False )
      If success Then
            Call doc.Save( True, True )
            Call workspace.AddDatabase( "" , "Names.nsf" )
            Msgbox "message1", 64, "message2"
      End If
End Sub
What this line means:
    doc.Form = "local"

There's no such form in private address books, so ComputeWithForm is using default db form (Contact/Person) to evaluate the fields.

Should be:
    doc.Form="Location"

You can still save a document if the ComputeWithForm returns False or raises an error.
I mean, it's better for an user to open and save the doc, then not having the connection doc at all. So don't condition the save method with success.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Bill,
I'm not sure whether @GetPortsList returns list of enabled ports from Notes.ini or from current location doc, since Designer help says:
    "@GetPortsList is used by the Public and Personal Address books to determine the list of available ports for each Location record."

If it gets the info from location doc it wouldn't be of any use here, right?
Although it wouldn't be the first time the help is not correct.
Actually, it reads directly from notes.ini.

@GetPortsList( [ Enabled] ) reads the 'Ports' variable and...

@GetPortsList( [ Disabled] ) reads the 'DisabledPorts' variable.

The key phrase in the help document is 'used BY the Public and Personal Address books'.  The address books use this function in their design to know the picklist choices for the 'EnabledPorts' field.  Open the 'Location' form in the designer, and you'll see what I mean.
Well, if it were me, I'd write it like this.  My goal is to never write the same code twice, so whenever I do this much work on a function, I make sure and parameterize it so I can paste it into a library.  This function takes a server name and an address then returns true if the connection was created, or false if it already existed.

The big change here is where we read the enabled ports directly from notes.ini.  Try it out.  I can't guarantee that your users will connect right away without knowing your environment, but at least the Connection Doc will be correct, and they won't get that annoying message.
Public Function createConnection(server As String, address As String) As Boolean
	
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim db As New NotesDatabase( "" , "Names.nsf" ) 
	Dim doc As NotesDocument
	Dim success As Variant
	Dim view As NotesView
	
	' check for existing connection
	Set view = db.GetView( "Connections" )
	Set doc = view.GetDocumentByKey(server)
	If (Not doc Is Nothing) Then Exit Function
	
	' create connection
	Dim ports As Variant
	ports = Split(session.Getenvironmentstring("Ports", True), ",")
	Set doc = New NotesDocument(db)
	doc.Form = "local"
	doc.Destination = server
	doc.PortName = ports
	doc.Type = "Connection" 
	doc.ConnectionLocation="*"
	doc.ConnectionType="0"
	doc.DestinationDomain="*"
	doc.DocumentAccess="[NetModifier]"
	doc.Enabled="0"
	doc.LanPortName = ports
	doc.OptionalNetworkAddress = address
	doc.Source="*"
	
	' save new connection
	Call doc.ComputeWithForm( True, False )
	Call doc.Save( True, False )
	Call workspace.AddDatabase( "" , "Names.nsf" ) ' not sure why this line needs to be here
	createConnection = True
	
End Function

Open in new window