Recently, one of our internal clients asked if we could change who could see a button on one view that is in many of our databases. That sounds pretty easy, right? All you have to do is change the template and those changes will be pushed by the Designer task into every database.
Well, unfortunately, while almost all of the 65 databases in question contain the same view, some of those views don’t link back to any template.
I’d learned a while ago that the old Notes.Net forum was no longer particularly active and that the community had decided to move questions to Stack Overflow.
To digress for a moment, Stack Overflow is part of the Stack Exchange “network of communities” and it’s a great place to both seek and provide answers with experts and budding experts. It was founded in 2010 by one of my favorites in the industry, Joel Spolsky, and Jeff Atwood. Joel’s blog, Joel on Software, provided me with a lot of insights into programming, running a business, dealing with people and, oddly enough, with the first news I had of trouble on the morning of 9/11.
So, if you have a Notes, XPages or other problem, go there and ask. I asked around on Stack Overflow (link) and got a recommendation on how to deal with it. Actually, I got a couple of ideas to choose from and Panu Haaramo’s idea was the best. Basically, get a handle to the view by it’s UNID and copy it to the destination database using XPages.
I put a combobox (fileChoices) on the page to allow the user to select which database to push to, hardcoding in the view name, but it could easily be generalized and looped.
// get a handle to this database var thisdb:NotesDatabase = session.getCurrentDatabase(); // get server var server = "MyServer/MyCompany"; // get filepath var filepath = getComponent("fileChoices").getValue(); getComponent("status").setValue("Searching for "+filepath); // get a handle to the destination database var dbTarget:NotesDatabase = session.getDatabase(server,filepath); // delete the Manuals view var oldView:NotesView = dbTarget.getView("Manuals"); if ( @IsNull (oldView) ) { getComponent("status").setValue("Null"); } else { getComponent("status").setValue(getComponent("status").getValue()+", Trying "+ dbTarget.getTitle()); try { oldView.remove(); // get a handle to this Manuals view // copy the view to the destination database thisdb.getDocumentByUNID(thisdb.getView("Manuals").getUniversalID()).copyToDatabase(dbTarget); getComponent("status").setValue(getComponent("status").getValue()+", Updated on "+filepath); } catch (ex) { getComponent("status").setValue(getComponent("status").getValue()+", No update for "+filepath); }; }
Any thoughts on how to improve the code (especially the null-checking, which I cannot tell whether it does any good or if the try-catch ends up doing everything) will be greatly appreciated, with credit provided and the code updated.
Somehow, when I posted this internally, it won “Most Popular Newsfeed of the Month” at our office in January. When I tell you I work for an international development company, that seems to make sense… until I point out that the development the rest of the company does is the other kind of development. That is projects designed to help people in developing countries. So, rather than show how well-received my post was internally, it shows that we’re still early on in our efforts at Social Business.
Pingback: Exporting from #XPages to Excel without Excel, Part 1 | Lost in XPages, Soon to be Found
Pingback: Copying design elements via script in #XPages | Lost in XPages, Soon to be Found
If some one needs to be updated with newest technologies then he must be pay a visit
this website and be up to date all the time.