Friday, February 21, 2014

How to get Domino database from on disk project to server in a batch file

Originally posted in Sutol Connections

Martin Jinoch wrote an article about parameters required for headless designer
I did some experiments how to get the db to a server. Here are first thoughts. I'Il probably write more later.
 
I had to create 2 components:

1. Batch file to run it
2. NSF db that does notes operations


1. In batch file biggest issue was to find when the job is done, since it creates separate processes. Google offered some advices, so I ended up using pslist from pstools and sleep command found somewhere else.

Here is the file
designer.exe -RPARAMS -console -vmargs -Dcom.ibm.designer.cmd="true,true,trtest.nsf,importandbuild,C:\Git\Teamroom\TR\.project,trtest.nsf"

@echo off
:LOOP
C:\pstools\PSLIST notes2 >nul 2>&1
IF ERRORLEVEL 1 (
  GOTO CONTINUE
) ELSE (
  ECHO designer is still running
  C:\sleep\SLEEP 5 /quiet
  GOTO LOOP
)

:CONTINUE

echo "launch client to copy"

nlnotes.exe notes:///cideploy.nsf/84AD4CF25D638F66C1257C77006547DA/53D2901644D70EDFC1257C77006588AA?OpenDocument

echo "open"

explorer http://mytestserver/servertr.nsf

2. Local db that has configuration profile for the app. it is called using notes:// link (and calling it with nlnotes has nice sideeffect that it waits to complete). Biggest issue was to automatically closed notes when done.

Link actually opens document using form that has queryopen event to do the job and postopen with @Command([ExitNotes]) . It has to be called using viewunid and unid of the document, since I use form formula of the view to redirect it to form that does the job, instead of standard form that I use for configuration.

Code can be than pretty much anything I have for now just:
    Dim doc As NotesDocument
    Set doc=source.document
  
  
    Dim sourcedb As New NotesDatabase("",doc.profilekey(0))
    If sourcedb.IsOpen Then
      
        Dim targetdb As New NotesDatabase(doc.targetserver(0),doc.targetnsf(0))
      
        If targetdb.IsOpen Then
            Call targetdb.Remove
        End If
      
        Call sourcedb.CreateCopy(doc.targetserver(0),doc.targetnsf(0))
      
    End If
  
And that's all. I tested it with teamroom db and it worked fine.

No comments:

Post a Comment