Share your thoughts and find that its getting better every day. This work of mine helps me realize that.
Tuesday, December 10, 2013
"Command Not Handled Exception" after removing "XPageDebugToolbar_v3.0.1" custom control from XPages
Tuesday, December 3, 2013
Getting current column name from dynamic view control in managed bean
Hence I was trying to obtain my view name from one of the values in the "svals" variable. For some reason all my attempts kept failing and I even got worked up. I was tired and XPageDebugToolbar came to my rescue after a couple of days of headache.
"svals" seemed to hold references of all stuffs present in the page and that was a sheer nonsense in terms of what I was expecting
I got it through the following code fragment
for (Map.Entry
dBar.info("Key = " + entry.getKey().toString() + ", Value = " + entry.getValue().toString());
}
So I tried using the ColumnDef object to determine the column name and that worked -
if (colDef.getName().equals("C1")) {
dynamicColumn.setRendered(false);
}
Hurray I got my work complete now :). Hope this helps some one else as well :)
Debugging managed beans in xpages
The error page was set to the error page mentioned by the XPageDebugToolbar v3.0.1 as per the documentation and hence I changed it back to default settings. Now I was able to see some clear meaningless errors. rolf.
It displayed something like the dbar.warn or dbar.error pointed to undefined values and hence no such methods existed.
So I made an attempt to check the "eu/linqed/debugtoolbar/DebugToolbar" file. That is where I found a clear error which upon fixing fixed the issue. The class (java design element) did not open up and instead it spoke of some refresh error and asked me to hit F9. How wonderful.
Now I have a managed bean with following lines of codes in different parts of the class which enabled me debug and fix the issue.
private static final DebugToolbar dBar = DebugToolbar.get();
dBar.info(colDef.getName()+"==C1 is " + (colDef.getName().equals("C1")));
for (Map.Entry
dBar.info("Key = " + entry.getKey().toString() + ", Value = " + entry.getValue().toString());
}
My code is now fixed and I am one happy me now. :)
Dont forget to download and use the XPageDebugToolbar. It is really a great work and made my life easier with XPages.
I used to use a custom built logger tool which I built a couple of years ago. I used the same to create log documents and dump all my debugging statements. This helped me watch my code all these years.Now that I had to use Dynamic View Control from Extension Library, I had to use managed beans to manipulate so me column values and hurray my xLog failed. It simply did not create any log documents. Some posts kept telling me to recycle objects after they are used. It did not help either.
Hope this helps some one. :)
Thursday, November 28, 2013
Roles in XPages - Part ||
var userRolesArray=database.getACL().getRoles().toArray()
var userRolesString="";
for (itr=0;itr
}
userRolesString;
My previous post on this topic can be navigated to by clicking on the following link
Monday, November 25, 2013
Could not open the editor: An unexpected exception was thrown - xpages
When I opened my XPage in the designer, I encountered the following error message
I felt like I was doomed. All my hard work for the day has went in vain as I did not take any backups :(
Eventually I started preparing my curse list starting with *hi**p Ri**d. No offense, just kidding. I closed down my Lotus Notes and opened it back again and the error vanished phew.... That was a silly damn thing to do. Saved me lot of hits against the wall with my head.
Also I found a post in the stackoverflow forum which gave me more ideas about why and how to handle this issue :)
Friday, November 22, 2013
A nice text font for websites
This post speaks nothing about any other technical stuffs. It is supposed to help me/ remind me with a the fact that the following combination of font-families and font sizes makes the page appear decent and good
font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;
A link like the following - XPages Extension Library - seems to be very neat too :)
I like the fonts used in the site Naveegator and also you can take a sneak peak at one of my post where I have some what ruined the UI
The styles for these links are pretty complex
color: #0077cc; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none;
Installing and running XPages Extension Library in your local machine
I had been hearing a lot about XPages Extension Library and finally got to try it out in XPages code-a-thon held at Mumbai. So I decided to try it on my local machine along with little help from experts on StackOverflow. Its a simple two-step procedure - install extension library and run extension library.
Install XPages Extension Library
First of all get the latest release of extension library from OpenNTF. Unzip the file and find "updateSiteOpenNTF-designer.zip". Unzip it and you will get two folders of "features" & "plugins" and a file "site.xml". In Lotus Notes sidebar, go to My Widgets and select "Options > Configure a Widget from... > Features and Plugin on an Update Site". If you are unable to see My Widgets in your sidebar then click here.
Now enter the URL for the update site as: file:///C:\
After you are done installing restart the Notes client. Then you would be able to see the extension library components in your Controls tab in Domino Designer.
Running XPages using Extension Library components
If you try to preview any XPage which uses extension library components then you would get an error as Cannot find the library com.ibm.xsp.extlib.library, required by the application
For that go to
onClick event not working in XPage Link Control - A work around
I have had issues with XPage Link Controls in the past, especially with the onClick events of the links. I was under an impression that I had a work around to solve it. Unfortunately I rediscovered that I still have issues with the same and my work around from the past failed.
It was because, I had a link with my known work around inside a table cell whose onClick event was coded.
My previous solution was for 8.5 version and with all of the new nice features in 8.5.3 I thought its time for me to go for a more stabler solution. And ended up with a better work around lol, may not be a perfect solution
In respect to my analysis, following is a possible list of reasons that your onClick event of XPage Link Controls would fail in 8.5.3
1. The onClick event of your Link Control might fail if you had associated a url to your link. Refer to the following image
2. When both URL and onClick events are provided on the XPage Link Controls, Page gets redirected to the linked url before its onClick event gets executed properly. Its a wild guess. Please check for its authenticity your self
3. The onClick event might fail on the wonderful IE browser if a parent container like a div or a table cell which contains the Link Control has code on its onClick event or other events like onMouseover etc
In order to over come all still be able to use both "link" and onclick event, remove the url mapping to the link control and use call a button controls onclick event on the client side onclick event of the link. And code all you want in the button both client and server side. This seems to remove alot of problems and has worked for me. I know that I am complicating stuffs with my words here, so take a look at the following image. Probably you would understand stuffs better.
And dont even think about screaming something like "HEY, THATS CHEATING. ITS NOT A FAIR SOLUTION". As I said earlier, this is a possible work around that has worked for me. I dont mean this to be a final solution :P
Friday, November 8, 2013
"last" link in Xpage pager control not working
Thursday, November 7, 2013
Get label of link in XPages
getComponent("ControlName").getValue()
When it comes to a link it will give you the URL Value that the XPage link control has been mapped. In order to obtain the Label or the Name of the link (and not url) you got to use the getText() method.
Following is a brief illustration of what I am talking about
Get class name of Components in XPage
Well for starters (like me) drag and drop a control on to an XPage. Give it a name say "MyControl"
Now add a label to the XPage where you performed the above mentioned difficult steps and use the following code to compute its label
getComponent("MyControl").getClass().getName()
In my case I tried it with a link object and got the following stuffs on my screen
If you feel curious about understanding (most likely about simply knowing) controls better you can refer to the control documentation. Following post speaks about its where abouts.
http://xcellerant.net/2013/09/17/tip-finding-all-properties-and-methods-available-for-xpages-components/
Thursday, October 31, 2013
JSON Issues in XPages - Unknown literal of class com.ibm.jscript.types.FBSUndefined
I encountered this error when I tried to apply toJson method on a json construct.
I had the following json construct. Let me say this as "x"
{"menuItems": [
{
"serialNumber": 1,
"Label": "Label_1",
"Link":"Link_1",
"subMenuItems": [
{
"serialNumber": 1,
"Label": "Label_1",
"Link":"Link_1",
"subMenuItems": [
,
]
},
]
},
]}
When i attempted some thing like toJson(x), I got the FBSUndefined error. How ever, when I attempted, fromJson(x) I got sort of I got the following error
Encountered " "object "" at line 1, column 2. Was expecting one of: "false" ... "null" ... "true" ...blah blah blah
When I just put my json construct on to a field's default value and tried to parse the field's value using the following code
y=fromJson(x);
getComponent("result").setValue(y.menuItems.length)//-> result was 2.0 (i guess)
I understand that this must be sort of, a beginner level stuff for Json in XPages.
If you would like to be saddened further by coding a lot to obtain perfection, may be you can explore "com.ibm.commons.util.io.json" and use them in your SSJS :P
Issues working with XPage Tabbed Panel Controls - Aligning Tab Headers with Margin
Hmm looking at this part of screen alone make me realize why my customer was like "WHAT THE HELL!!! WHY IS THE PASSENGER DATA OUT OF LINE!!!". That was scary :P
At last (so at least now) I was able to modify that to look like the following
Looks pretty nice tight. My customer is really something. Wonder about the eagle eyes my customer has got :)
The trick that helped me do this is very simple. Just add the following to your style sheet
ul.xspTabbedPanelTabs {
left: 0px;
}
Monday, October 28, 2013
Working with Design Definition in Custom Controls - XPages
I see this more like a beautification part to your design. Cos I think , simple multiline comments also would serve the same purpose. The top side is , I looks good when included on the XPages.
The down side is, I feel little irrated to work with the xml mark up I have to provide in the Design Definitions tab.
Coming to the point, the simplest syntax that I learn is, you got to provide xml markup inside the Design Definitions text area as you would do in a normal XPage. Take a look at the following screen shot on how/where to provide the markup value
If you do this, you custom control when included on an XPage, would look something like the following on the designer
Looks pretty design to me :), at least better when compared to the native appearence
Working with Property Definition in Custom Controls - Xpages
I dont remember using this or seeing this in 8.5 or 8.5.1. And now I see that this is very useful and can be used in a lot of ways. To me this feature really does make more sense to the existence or employment of custom controls in designs. As a matter of fact, I think I should start sticking with Custom controls and use Xpages only to resuse my custom control. Dont O.o me if you think other wise. May be I am just curious
Jumping right on to the topic, try the following and you may understand how it works.
1. As always, You must start with creating or using an existing custom control. Open it and go to the properties pane.
2. Now add a property to the custom control as illustrated in the following screen shot. In addition you can go to the validation and visible tabs and code your way as per your necessity
Tuesday, October 1, 2013
Accidentally discovered Mirror Image of L (:P)
I cannot type in that symbol here as I did on the lotusscript editor, so as an alternative I will do the most brilliant thing of showing you a screen shot, rofl.
I guess its easy for you to see what I am speaking about in the image. I must say that I have found some thing different to decorate my multi line comments with :)
Also I tried an msgbox on that. Seems to work. Another discovery - mirror image of L, rofl
Now I can give more meaningful message boxes for my client ;P
Monday, September 30, 2013
Crash Lotus Notes - Oops I did it again
I knew that theoretically, I can write custom lotus script classes which can extend native lotus script classes and I can possibly extend/create events like querySave, queryClose etc using some thing like the following
On Event Querysave From customUidoc Call customQuerysave
So I went a head and tried it to discover that I crashed my client. I am great full that I dont posses the talent to corrupt database designs at will. Honestly.
Sometimes the thought scares the hell out of me. I just tried to do the above mentioned stuff. Just tried. And following happened. Note- I am not sure if this would happen always or not, but I think its worth mentioning this. I already had a custom class on the script library where I was trying to build my new custom class and extend NotesUIDocument.
I am on the way persuading about what really guided me to collapse my Lotus Client. Hope I would find a solution to the same :@ !!!!
Saturday, September 21, 2013
Handling Variants - Becare full about the Type Name or Class Name of Variants refering to Array Objects
I often get the feel that with the current hardware capacities heightened to tera bytes, 16 bytes wont matter that much, if we recyle them properly.
I performed a small test today as my code kept failing and failing and there was not much for me to look for.
I first checked what type of values result in which type of variants. So I did the following in a test button
Eventually, I previewed the button on a client interface and did the MAGIC JOB of clicking it. And there comes my BELOVED BABY popups as to the left.
Now I understood that these are of types "INTEGER", "STRING" and "STRING()"
Is there any soul out there who agrees with me. If so, join the club and clean your eyes/specs and look at the god damn thing properly.
It is actually "STRING( )" and not "STRING()". This screwed me for over 30 minutes. Some time back due to a specific individual in my life, I became of fond of reading and understanding the "LAWS OF STUPIDITY". The fourth law stated that,
"Non-stupid people always underestimate the damaging power of stupid individuals. In particular non-stupid people constantly forget that at all times and places and under any circumstances to deal and/or associate with stupid people always turns out to be costly mistake."
Now my question is who is stupid - Me , the Variant or ***
Saturday, September 14, 2013
Obtain class name of objects in lotusscript
Thought I would make it simpler with a proper titled post dedicated for this issue of finding the class name of a lotusscript object on run time.
The lotusscript key word that does it is "TypeName". Though I had used this for doing the overloaded functions, It took me an hour to recollect it X(. Guess I had grown rusty in the last two years with less coding. Am happy now, that I get enough stuffs to challenge my skills again
In short, following is a little illustration about the way this keyword works. For a quick test, add the following code to a button and test it on Notesclient.
dim doc as NotesDocument
dim uiDoc as NotesUIDocument
msgbox TypeName(doc)
msgbox TypeName(uidoc)
Now when you click on the button, you will receive a couple of prompts saying
"NOTESDOCUMENT" and "NOTESUIDOCUMENT"
Thursday, September 12, 2013
Crash Lotus Notes - Oops I did it again
Tuesday, September 10, 2013
Custom sort using @Sort in lotus notes
I happened to cross through a scenario where I had to perform a custom sort in such a way that a list of words appear in a drop down in such a way that "Red" if present always appears first followed by "White" and "Blue" if they are present and the rest of the list must be alphabetically sorted.
I found a close way to do that but not the best solution though. It took me quite a while to understand the way the parameters "$A" and "$B" were used in the @Sort function.
I use a list named a s"myList" as an input parameter. The list elements present inside my list is as follows
Blue : Custom : XCustom : Red : DCustom : White
Take a look at the following code.
@Sort(myList; [CustomSort]; @Do(
@If(
@UpperCase($A)="RED";-1;
@UpperCase($A)="WHITE" & @UpperCase($B)="RED";1;
@UpperCase($A)="WHITE" & @UpperCase($B)!="RED";-1;
@UpperCase($A)="BLUE" & (@UpperCase($B)="WHITE" | @UpperCase($B)="RED") ;1;
@UpperCase($A)="BLUE" & !(@UpperCase($B)="WHITE" | @UpperCase($B)="RED") ;-1;
@UpperCase($A)>@UpperCase($B)
)
) )
The out put that I have obtained is as follows
Red : White : Blue : Custom : DCustom : XCustom
When I change the last line of code to @UpperCase($A)<@UpperCase($B) my out put becomes
Red : White : Blue : XCustom : DCustom : Custom
It returns two types of values 1 and -1. The confusion was, It is supposed to return an integer equivalent for @true and @false which are to my understanding 1 and 0 respectively.
I dont know how was one able to think about the scenario of using -1 as a return type which was not documented in Designer help. It works great.
As per my understanding if you return
1 - it means $A will be put behind $B in the list after the comparison occurred
0 or -1 - it means $A will be put in front of $B in the list after the comparison occurred.
-2 ( and probably all other negative number) is treated like 0 as well O.o
Tuesday, September 3, 2013
Colors in Lotus Notes View Columns
This post is typically about how you give different colors to different columns in Notes Client. Actually there is no such thing. Hence as always we end up doing simple work arounds. Let me give you a visual sneak peak before you end up reading my entire post and feel bored
Thats looks color full doesn't it :). The trick behind these colored columns with custom backgrounds are using hidden columns with "Use value as colors" enabled with a column formula like
backgroundColor:textColor where each of these would assume a value between 000000 to ffffff or 0:0:0 to 255:255:255. Refer to following image for more details
If you take a closer look at the image, you will be able to see that I am referring to three small columns with no titles and the two important properties "Use value as color" and "Hide column" enabled.
Make a note of the way in which I had assigned the color values to the variables. They are not in quotes. I have assigned the numbers colon separated just as is. So these variables are typically arrays containing three color codes as its elements
Thursday, August 22, 2013
No communication ports found in notes ports dialog after installation issue
The issue was simple and the background was funny. I needed Lotus Notes to be installed and the guy who helped me out gave me a client but no designer/admin clients. Felt great and had a headache trying to help him understand what I want. And finally I did it again - "gave up" and figured out an other way to do it myself. It feels like I am experiencing the attitude face that Mr.Han wanted from Xaio Dre during his training.
Now I got the installation files and completed installing Lotus Notes and found that I was not able to connect to servers.
I went to File -> Preferences -> Notes Ports and "Awe :/ No Communication Ports found X("
I tried adding TCP to the list and trace my server it did not work.
So went through uninstallation and re installation horror and the issue still persisted.
This time I had ! over my head. When I tried to trace a different server I found that the port I added was missing.
So the Answer is "ADD A PORT NAMED TCP AND FOR GOD SAKE RESTART YOUR LOTUS NOTES" and it worked. This time the "Show status" button really shows info on my TCP port that I added
Feeling relieved at last - again - ;'|
Tuesday, August 6, 2013
Android Application Development 5 – Action Bars
I have an advanced device with me. So I am going to be selfish here. I want to know what I can do with my device and see what my device is capable of. So I am going to try out stuffs that work good with my device. So if you are working with a device that is lesser than Andriod 3 and if you find this not helping you, you could probably visit developer.android.com for exhaustive neat documentation.
Running down what I have understood so far in respect to the previous posts Android Hello World Part 1 to 4
1. Define layout in activity_main.xml
2. Define ids to elements (they are the view objects as per SDK) use android:id="@+id/yourid"
3. + symbol comes behind the @ symbol for id declarations alone
4. The above said declaration will help me access my element using R.id.yourid
5. @symbol is required to refer any resources
6. setContentView(R.layout.activity_main); -> will look for the layout defined in the activity_main.xml file in the layout folder and render it .
7. Call the above mentioned line in the onCreate event of the activity to get the layout
8. Use findViewById(R.id.yourid) to find your components. Its equivalent to document.getElementById in javascript.
9. Use "Intent" objects to communicate between activities
10. Use Intent.putExtra(key,value) to transfer values
11. Use startActivity(Intent) in button clicks to start activites
Now its time for the action bars to come into the picture.
I intend to add a couple of actions to the action bar of my main activity page. In order to do that
create the following xml file - res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />
</menu>
For some reason, the following line kept erroring out.
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
So I added the following line of mark up to the strings.xml file
<string name="action_settings">Settings</string>
And added an image by the name ic_action_search to the project file as illustrated by the following screen shot
To add the action to the action bar, Modify the onCreateOptionsMenu in the MainActivity.java call to the following
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return true;
}
To respond to the action button clicks add the following function to the mainActivity.java class. Note the way in which the ids of the action items are being used
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
// openSearch();
return true;
case R.id.action_settings:
// openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Now to ensure that we are able to navigate from the child activities to the parent activity, we need to add a up button in them.
Honestly, it got created automatically even before I realized the need for it. So may be the following code is required for some lol faulty advanced mobiles
Add this to the child activity class' onCreate function. In this case it is the DisplayMessageActivity.java class
getActionBar().setDisplayHomeAsUpEnabled(true);
Now I see an action button my action bar. Yeppieee