Andrew Pollack's Blog

Technology, Family, Entertainment, Politics, and Random Noise

A favorite (sneaky) Domino technique I've never come across before

By Andrew Pollack on 11/19/2004 at 11:42 PM EST

I've been using "notesAgent.runOnServer()" for a long time -- and It ALMOST does what I want. I have always wanted it to detach from the current process so the client doesn't have to sit and wait for it. I wanted to do it without any API calls too. Well, I've done it as of tonight.

You can get much fancier, do error trapping, add prompts and things -- this is the stripped down example.

What happens in the code has two critical parts. First, in the "calling" code, before you actually call the agent you want to run in the background you need to use the "on error resume next" command. When the calling agent drops from connection from the agent it calls, it throws an error state. That command tells the calling agent to ignore that error and not bug the user with it.

Next is the cool part -- as soon as the background agent starts, it issues a Domino server console command to drop the user who started the agent. That will cause the calling agent to drop off the server long enough to terminate its weak link to the agent it called but will not terminate the background agent. Since we've told that calling agent to ignore the error, the user is none the wiser.

There are two big issues to watch out for. First, to issue that command, the user would have to have administrator access. One way around that would be to use yet another agent. A simple agent that ONLY does the lines below that drop a user. Pass that agent a document containing only one field -- the user name to drop. Mark the agent's execution privileges so that it runs on behalf of a user with administration rights. Instead of having your background agent issue the drop command, have the background agent call the drop agent which runs with enough access to do the job. Cool? The other tough thing to do is find a way to stop an agent running on its own out there. The one I'm kicking off could take hours to run and have a real impact on the server in some cases (its multi-threaded). What I did was make a "message queue" view in the database. The background agent marks the document that called it with a uniquely generated "runid", then in the background checks for a message tagged with its current runid in that view from time to time. If it finds one, it checks to see if the waiting message is a request to terminate. I also included a "universal" terminate code in case for some reason the runid becomes unavailable. An action button is used to place a stop message in that queue if need be.

-- Code that starts the background agent --

Dim session as new NotesSession
Dim thisDb as NotesDatabase
Dim agent as NotesAgent
Dim doc as NotesDocument
set thisDb = session.currentDatabase
set doc = session.documentContext
set agent = thisDb.getAgent("Agent I want to run and not wait for")
on error resume next
agent.runOnServer(doc.noteId)

-- And now here's the beginning of the background agent --

Dim s As New notessession
Dim db As notesdatabase
Set db = s.currentdatabase
Call s.SendConsoleCommand(db.Server, |Drop "| & s.UserName & |"|)


There are  - loading -  comments....

My own thoughts on this are...By Colin Pretorius on 11/20/2004 at 05:19 AM EST
Thanks Andrew, that's a neat tip. You probably also know that another real
kludge to get back your client is simply to hit Ctrl-Break once you're sure the
agent has started running on the server. The client stops waiting but it
doesn't stop the on-server agent. You obviously can't kill the process, though,
but in absence of a neat system like yours, it's a real boon for power-user
types :)
yes, for developer types that's a standardBy Andrew Pollack on 11/20/2004 at 11:24 AM EST
...and almost an automatic thing. I was looking for something I could do that
would be end user workable.

Its definately a "blunt force" hack -- if the user is doing other things at the
same time it could annoy them for sure. I'll be looking more closely at ways
to specific the individual session rather than all the sessions owned by that
user. It does work, though.
Another way to do this...By Adam Foster on 11/25/2004 at 11:41 AM EST
Hi Andrew I have wandered on to your site again and spotted this runonserver
technique. I am intrigued by SendConsoleCommand and will investigate further.
This use sounds even dodgier than letting users know about using CTRL+Break.
Aarrggh don't tell them that! ;)

My method of using RunOnServer is to use an intermediate agent to do the
runonserver rather than put it in a foreground button.

Hope you find it useful:
http://www.NotesNinjas.com/#RunOnServer

PS: Regarding my last message: I am not trying to sell you anything on
http://www.NotesNinjas.com , it is just my collection of tips and code that I
use again and again that I give out to try and promote Lotus Notes usage.


Other Recent Stories...

  1. 01/26/2023Better Running VirtualBox or VMWARE Virtual Machines on Windows 10+ Forgive me, Reader, for I have sinned. I has been nearly 3 years since my last blog entry. The truth is, I haven't had much to say that was worthy of more than a basic social media post -- until today. For my current work, I was assigned a new laptop. It's a real powerhouse machine with 14 processor cores and 64 gigs of ram. It should be perfect for running my development environment in a virtual machine, but it wasn't. VirtualBox was barely starting, and no matter how many features I turned off, it could ...... 
  2. 04/04/2020How many Ventilators for the price of those tanks the Pentagon didn't even want?This goes WAY beyond Trump or Obama. This is decades of poor planning and poor use of funds. Certainly it should have been addressed in the Trump, Obama, Bush, Clinton, Bush, and Reagan administrations -- all of which were well aware of the implications of a pandemic. I want a military prepared to help us, not just hurt other people. As an American I expect that with the ridiculous funding of our military might, we are prepared for damn near everything. Not just killing people and breaking things, but ...... 
  3. 01/28/2020Copyright Troll WarningThere's a copyright troll firm that has automated reverse-image searches and goes around looking for any posted images that they can make a quick copyright claim on. This is not quite a scam because it's technically legal, but it's run very much like a scam. This company works with a few "clients" that have vast repositories of copyrighted images. The trolls do a reverse web search on those images looking for hits. When they find one on a site that looks like someone they can scare, they work it like ...... 
  4. 03/26/2019Undestanding how OAUTH scopes will bring the concept of APPS to your Domino server 
  5. 02/05/2019Toro Yard Equipment - Not really a premium brand as far as I am concerned 
  6. 10/08/2018Will you be at the NYC Launch Event for HCL Domino v10 -- Find me! 
  7. 09/04/2018With two big projects on hold, I suddenly find myself very available for new short and long term projects.  
  8. 07/13/2018Who is HCL and why is it a good thing that they are now the ones behind Notes and Domino? 
  9. 03/21/2018Domino Apps on IOS is a Game Changer. Quit holding back. 
  10. 02/15/2018Andrew’s Proposed Gun Laws 
Click here for more articles.....


pen icon Comment Entry
Subject
Your Name
Homepage
*Your Email
* Your email address is required, but not displayed.
 
Your thoughts....
 
Remember Me  

Please wait while your document is saved.