Archive for the ‘Software Applications’ Category.

How to convert a number of seconds to a time format?

Ok, lets say you have a table with seconds in it.

TimeInSeconds
10
199
765
402
398
107
40

First use this function to convert it to a time based number:

Time#(TimeInSeconds,’ss’)

Second, wrap that

Time(Time#(TimeInSeconds,’ss’), ‘m:ss’)

Now your table will look like this:

TimeInSeconds
0:10
3:19
12:45
6:42
6:38
1:47
0:40

While there is more to this, as you will see with a wide range of data, this should get you started and you should be able to go from here.

Why does Firefox prompt for Domain (AD) Authentication? or How to get Firefox to automatically login to web sites with Domain Credentials (Sharepoint for example)?

Why does Firefox prompt for Domain (AD) Authentication? or How to get Firefox to automatically login to web sites with Domain Credentials (Sharepoint for example)?

Hey all,

I am sure you have been annoyed by the fact that when you use Firefox, the sites that require Domain credentials can popup and ask you to login. Sites like Sharepoint can ask you to log in over and over and over and over again. And then just when you are about as annoyed as you can be with typing your Domain user name and password, it prompts you some more.

For those of you who know, I work for LANDesk and we have server software and our Web Console uses NTLM authentication or Active Directory Domain credentials. You can log into the LDMS Web Console using Firefox using this method.

Well, this is really easy to make this “authentication prompt” go away. A quick search in your favorite search engine will resolve this (on a Windows box at least).

I found this site rather quickly:
http://www.1stbyte.com/2008/03/15/automatic-windows-authentication-with-firefox-networkautomatic-ntlm-authtrusted-uris/

Step 1 – Gather the lists of Sites that require domain authentication

  1. Determine all the sites you go to at work that require domain or active directory credentials and put them in a text file.

    http://CompanyName-Sharepoint
    http://CompanyName-HelpDesk
    http://InternalServer1
    http://InternalServer2
    http://InternalServer3
    http://LDMSCore

  2. Now format them like this:

    CompanyName-Sharepoint, CompanyName-HelpDesk, InternalServer1, InternalServer2, InternalServer3, LDMSCore

    Don’t worry if you don’t get them all, you can add new sites at any time.

    Note: Save this text file as you may want to do this again for someone else or you may want to do it again yourself computer gets rebuilt/upgraded.

Step 2 – Configure Firefox to Automatically Authenticate to these sites

  1. Open Firefox.
  2. Enter the following for the URL:
    about:config

  3. When warned to be careful, click the “I’ll be careful, I promise” button.
  4. In the Filter field, enter this value: network.automatic-ntlm-auth.trusted-uris
    Note: If the value is not there, you can add it as a new string.

  5. Right click on the value and choose Modify.
  6. Enter your servers as we formatted them above:

    CompanyName-Sharepoint, CompanyName-HelpDesk, InternalServer1, InternalServer2, InternalServer3, LDMSCore

  7. Click Ok.
  8. You shouldn’t have to close and re-open firefox but some poeple like to do this anyway.

You should now be able to browse your sites without having to enter credentials.

How to convert QlikView Time to Salesforce time in a load script?

Ok, so here is what I am doing:

  1. I am storing Salesforce data in a QVD file.
  2. I am getting the QVD file date using:
    Let QVDPath='C:\ProgramData\QlikTech\QVD';
    Let ThisExecTime = Reloadtime();
    Let LastExecTime = QvdCreateTime('$(QVDPath)\SFCase.qvd');
    
  3. I am trying to only get data modified since load using WHERE LastModifiedDate > $(LastExecTime ).

According to salesforce, the time stamp should be in this format:

1999-01-01T23:01:01Z

See this page for more detailed information and alternate formats:
http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_soql_select_dateformats.htm

So I created this sub to get Salesforce time from QlikView time:

Sub SFTime(inDateTime)
    Let inDateTime=date(inDateTime, 'YYYY-MM-DD') & 'T' & time(inDateTime, 'HH:MM:SS') & 'Z';
EndSub

It works.

LANDesk Support Tools Beta 7

Hey all,

It has been a while again and again there are good reasons for this.

If you find something not working, please let me know.

Version: 9.0.0.7
( 9.0.0.x Matches our current release of LDMS, though this is not really version dependent.)

Release Notes
===============

  1. Compiled using LDMS 9.
  2. Changed the OSType xml object to search for the value as an exact match and as a contains. (This resolve an issue where in 9.0 Windows Workstations just say Workstation and Windows Servers just say Server, but 8.8 agents might scan in and say XP Workstation, 2008 Server, so by just putting “Workstation, Server” all windows machines should be obtained.)
  3. Added a trick to handle the different the patch to the LDClient directory, which is now much more necessary since %ProgramFiles% doesn’t point to “c:\program files (X86)” on 64 bit machines. (I use this: %LDMS_LOCAL_DIR%\..\)

WARNING: This version is not tested on 8.8 and it is recommend you continue with version beta 6 for 8.8 and only use this version for LDMS 9.

Latest Version:

LANDesk Support Tools beta 7a.exe

Previous Version for LDMS 8.8

LANDesk Support Tools beta 6.exe

What files are required to create a theme for dotProject 2.1.2?

Ok, so I want to create a theme for dotProject. I love doing something for open source projects but it is never easy. So much is not documented.

I would imagine that since dotProject is free, it would be worth it to a company to pay for some customization and some really shiny themes. I know another open source project, SquirrellMail, has a lot of themes that can be purchased out there.

So I am going to look at the three themes that come with dotProject by default and determine what it takes to make my own.

Files in a dotProject Theme

So each them appears to have most of the following files (though each theme does not have all files):

  • footer.php
  • header.php
  • images (directory)
  • index.html
  • login.php
  • lostpass.php
  • main.css
  • overrides.php

So the only directory is the images directory. So what images does it usually contain? I usually contains the following files in general. Some contain more, some less. Some similar files with different names. But that gives you a basic idea.

  • dp_icon.gif
  • favicon.ico
  • index.html
  • obj (directory)
  • titlegrad.jpg
  • tabBg.png
  • tabLeft.png
  • tabRight.png
  • tabSelectedBg.png
  • tabSelectedLeft.png
  • tabSelectedRight.png

Again, there is often a directory in images called obj. The obj directory has the following files.

  • index.html
  • tick.gif

Well, that is pretty much it for the file structure of a dotProject theme.

So lets look at the common files and what is in them? However, how should we group them? How about by extension first, then by name:

HTML File (Optional)

There is only one, but it is in each folder, and as I suspected, it is optional.

  1. index.html – Ok, so why are there these random index.html files? They all only contain one line:
    <html><body bgcolor="#FFFFFF"></body></html>
    

    I have to say that these index.html files are for no other reason that to prevent directory browsing, which should probably be done by a security setting in your web server, so these files are completely optional.

CSS File (Required)

There appears to be only one CSS file, but that doesn’t mean you can’t have multiple CSS files in your theme. However, this is probably the most important file for your theme, so obviously it is required.

  1. main.css – This is of course the file that determines all the style information for the web page. Each HTML element has a style and this is where you change it.

PHP Files – (Requirements unknown)

  1. footer.php – By the name, you can tell this script has to do with the footer of your web page.

    There doesn’t seem to be much variation on this file. It seems to usually have the following script:

    <?php
    	echo $AppUI->getMsg();
    ?>
    	</td>
    </tr>
    </table>
    </body>
    </html>
    
  2. header.php – This file is a lot more complex and has over 100 lines in each theme I have looked at. It will take some time to see what is required. It looks like this is actually both the header and the body. The body appears to be formatted with an HTML table instead of using CSS. So here is the code from the default theme.
    <?php /* STYLE/DEFAULT $Id: header.php 5544 2007-11-27 01:04:12Z merlinyoda $ */
    if (!defined('DP_BASE_DIR')) {
    	die('You should not access this file directly');
    }
    $dialog = dPgetParam( $_GET, 'dialog', 0 );
    if ($dialog)
    	$page_title = '';
    else
    	$page_title = ($dPconfig&#91;'page_title'&#93; == 'dotProject') ? $dPconfig&#91;'page_title'&#93; . '&nbsp;' . $AppUI->getVersion() : $dPconfig['page_title'];
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    	<meta name="Description" content="dotProject Default Style" />
    	<meta name="Version" content="<?php echo @$AppUI->getVersion();?>" />
    	<meta http-equiv="Content-Type" content="text/html;charset=<?php echo isset( $locale_char_set ) ? $locale_char_set : 'UTF-8';?>" />
    	<title><?php echo @dPgetConfig( 'page_title' );?></title>
    	<link rel="stylesheet" type="text/css" href="./style/<?php echo $uistyle;?>/main.css" media="all" />
    	<style type="text/css" media="all">@import "./style/<?php echo $uistyle;?>/main.css";</style>
    	<link rel="shortcut icon" href="./style/<?php echo $uistyle;?>/images/favicon.ico" type="image/ico" />
    	<?php @$AppUI->loadJS(); ?>
    </head>
    
    <body onload="this.focus();">
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr>
    	<td><table width="100%" cellpadding="3" cellspacing="0" border="0"><tr>
    	<th background="style/<?php echo $uistyle;?>/images/titlegrad.jpg" class="banner" align="left"><strong><?php
    		echo "<a style='color: white' href='{$dPconfig&#91;'base_url'&#93;}'>$page_title</a>";
    	?></strong></th>
    	<th align="right" width='50'><a href='http://www.dotproject.net/' <?php if ($dialog) echo "target='_blank'"; ?>><img src="style/<?php echo $uistyle;?>/images/dp_icon.gif" border="0" /></a></th>
    	</tr></table></td>
    </tr>
    <?php if (!$dialog) {
    	// top navigation menu
    	$nav = $AppUI->getMenuModules();
    	$perms =& $AppUI->acl();
    ?>
    <tr>
    	<td class="nav" align="left">
    	<table width="100%" cellpadding="3" cellspacing="0">
    	<tr>
    		<td>
    		<?php
    		$links = array();
    		foreach ($nav as $module) {
    			if ($perms->checkModule($module['mod_directory'], 'access')) {
    				$links[] = '<a href="?m='.$module&#91;'mod_directory'&#93;.'">'.$AppUI->_($module['mod_ui_name']).'</a>';
    			}
    		}
    		echo implode( ' | ', $links );
    		echo "\n";
    		?>
    		</td>
    		<td nowrap="nowrap" align="right">
    		<form name="frm_new" method=GET action="./index.php">
    		<table cellpadding="0" cellspacing="0">
    		<tr><td>
    <?php
    	$newItem = array( 0=>'- New Item -' );
    	if ($perms->checkModule( 'companies', 'add' )) $newItem["companies"] = "Company";
    	if ($perms->checkModule( 'contacts', 'add' )) $newItem["contacts"] = "Contact";
    	if ($perms->checkModule( 'calendar', 'add' )) $newItem["calendar"] = "Event";
    	if ($perms->checkModule( 'files', 'add' )) $newItem["files"] = "File";
    	if ($perms->checkModule( 'projects', 'add' )) $newItem["projects"] = "Project";
    
    	echo arraySelect( $newItem, 'm', 'style="font-size:10px" onChange="f=document.frm_new;mod=f.m.options[f.m.selectedIndex].value;if(mod) f.submit();"', '', true);
    
    	echo "        <input type=\"hidden\" name=\"a\" value=\"addedit\" />\n";
    
    //build URI string
    	if (isset( $company_id )) {
    		echo '<input type="hidden" name="company_id" value="'.$company_id.'" />';
    	}
    	if (isset( $task_id )) {
    		echo '<input type="hidden" name="task_parent" value="'.$task_id.'" />';
    	}
    	if (isset( $file_id )) {
    		echo '<input type="hidden" name="file_id" value="'.$file_id.'" />';
    	}
    ?>
    		</td></tr>
    		</table>
    		</form>
    		</td>
    	</tr>
    	</table>
    	</td>
    </tr>
    <tr>
    	<td>
    		<table cellspacing="0" cellpadding="3" border="0" width="100%">
    		<tr>
    			<td width="100%"><?php echo $AppUI->_('Welcome').' '.$AppUI->user_first_name.' '.$AppUI->user_last_name; ?></td>
    			<td nowrap="nowrap">
    				<?php echo dPcontextHelp( 'Help' );?> |
    				<a href="./index.php?m=admin&a=viewuser&user_id=<?php echo $AppUI->user_id;?>"><?php echo $AppUI->_('My Info');?></a> |
    <?php
    	if ($perms->checkModule('calendar', 'access')) {
    		$now = new CDate();
    ?>                              <b><a href="./index.php?m=tasks&a=todo"><?php echo $AppUI->_('Todo');?></a></b> |
    				<a href="./index.php?m=calendar&a=day_view&date=<?php echo $now->format( FMT_TIMESTAMP_DATE );?>"><?php echo $AppUI->_('Today');?></a> |
    <?php } ?>
    				<a href="./index.php?logout=-1"><?php echo $AppUI->_('Logout');?></a>
    			</td>
    		</tr>
    		</table>
    	</td>
    </tr>
    <?php } // END showMenu ?>
    </table>
    
    <table width="100%" cellspacing="0" cellpadding="4" border="0">
    <tr>
    <td valign="top" align="left" width="98%">
    <?php
    	echo $AppUI->getMsg();
    ?>
    
  3. login.php – These all seem to be a login web page and each seem to have almost the exact same code.
    <?php /* STYLE/DEFAULT $Id: login.php 4842 2007-03-17 15:56:19Z caseydk $ */
    if (!defined('DP_BASE_DIR')) {
    	die('You should not access this file directly');
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    	<title><?php echo $dPconfig&#91;'page_title'&#93;;?></title>
    	<meta http-equiv="Content-Type" content="text/html;charset=<?php echo isset( $locale_char_set ) ? $locale_char_set : 'UTF-8';?>" />
           	<title><?php echo $dPconfig&#91;'company_name'&#93;;?> :: dotProject Login</title>
    	<meta http-equiv="Pragma" content="no-cache" />
    	<meta name="Version" content="<?php echo @$AppUI->getVersion();?>" />
    	<link rel="stylesheet" type="text/css" href="./style/<?php echo $uistyle;?>/main.css" media="all" />
    	<style type="text/css" media="all">@import "./style/<?php echo $uistyle;?>/main.css";</style>
    	<link rel="shortcut icon" href="./style/<?php echo $uistyle;?>/images/favicon.ico" type="image/ico" />
    </head>
    
    <body bgcolor="#f0f0f0" onload="document.loginform.username.focus();">
    <br /><br /><br /><br />
    <?php //please leave action argument empty ?>
    <!--form action="./index.php" method="post" name="loginform"-->
    <form method="post" action="<?php echo $loginFromPage; ?>" name="loginform">
    <table align="center" border="0" width="250" cellpadding="6" cellspacing="0" class="std">
    <input type="hidden" name="login" value="<?php echo time();?>" />
    <input type="hidden" name="lostpass" value="0" />
    <input type="hidden" name="redirect" value="<?php echo $redirect;?>" />
    <tr>
    	<th colspan="2"><em><?php echo $dPconfig&#91;'company_name'&#93;;?></em></th>
    </tr>
    <tr>
    	<td align="right" nowrap><?php echo $AppUI->_('Username');?>:</td>
    	<td align="left" nowrap><input type="text" size="25" maxlength="255" name="username" class="text" /></td>
    </tr>
    <tr>
    	<td align="right" nowrap><?php echo $AppUI->_('Password');?>:</td>
    	<td align="left" nowrap><input type="password" size="25" maxlength="32" name="password" class="text" /></td>
    </tr>
    <tr>
    	<td align="left" nowrap><a href="http://www.dotproject.net/"><img src="./style/default/images/dp_icon.gif" border="0" alt="dotProject logo" /></a></td>
    	<td align="right" valign="bottom" nowrap><input type="submit" name="login" value="<?php echo $AppUI->_('login');?>" class="button" /></td>
    </tr>
    <tr>
    	<td colspan="2"><a href="#" onclick="f=document.loginform;f.lostpass.value=1;f.submit();"><?php echo $AppUI->_('forgotPassword');?></a></td>
    </tr>
    </table>
    <?php if (@$AppUI->getVersion()) { ?>
    <div align="center">
    	<span style="font-size:7pt">Version <?php echo @$AppUI->getVersion();?></span>
    </div>
    <?php } ?>
    </form>
    <div align="center">
    <?php
    	echo '<span class="error">'.$AppUI->getMsg().'</span>';
    
    	$msg = '';
    	$msg .=  phpversion() < '4.1' ? '<br /><span class="warning">WARNING: dotproject is NOT SUPPORT for this PHP Version ('.phpversion().')</span>' : '';
    	$msg .= function_exists( 'mysql_pconnect' ) ? '': '<br /><span class="warning">WARNING: PHP may not be compiled with MySQL support.  This will prevent proper operation of dotProject.  Please check you system setup.</span>';
    	echo $msg;
    ?>
    </div>
    <center><?php echo "* ".$AppUI->_("You must have cookies enabled in your browser"); ?></center>
    </body>
    </html>
    
  4. lostpass.php – These all seem to be a full web page to provide a lost password interface and each seem to have almost the exact same code.
    <?php /* STYLE/DEFAULT $Id: lostpass.php 4771 2007-02-18 03:06:27Z ajdonnison $ */
    if (!defined('DP_BASE_DIR')) {
    	die('You should not access this file directly');
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    	<title><?php echo @dPgetConfig( 'page_title' );?></title>
    	<meta http-equiv="Content-Type" content="text/html;charset=<?php echo isset( $locale_char_set ) ? $locale_char_set : 'UTF-8';?>" />
           	<title><?php echo $dPconfig&#91;'company_name'&#93;;?> :: dotProject Login</title>
    	<meta http-equiv="Pragma" content="no-cache" />
    	<meta name="Version" content="<?php echo @$AppUI->getVersion();?>" />
    	<link rel="stylesheet" type="text/css" href="./style/<?php echo $uistyle;?>/main.css" media="all" />
    	<style type="text/css" media="all">@import "./style/<?php echo $uistyle;?>/main.css";</style>
    	<link rel="shortcut icon" href="./style/<?php echo $uistyle;?>/images/favicon.ico" type="image/ico" />
    </head>
    
    <body bgcolor="#f0f0f0" onload="document.lostpassform.checkusername.focus();">
    <br /><br /><br /><br />
    <?php //please leave action argument empty ?>
    <!--form action="./index.php" method="post" name="loginform"-->
    <form method="post" name="lostpassform">
    <table align="center" border="0" width="250" cellpadding="6" cellspacing="0" class="std">
    <input type="hidden" name="lostpass" value="1" />
    <input type="hidden" name="redirect" value="<?php echo $redirect;?>" />
    <tr>
    	<th colspan="2"><em><?php echo $dPconfig&#91;'company_name'&#93;;?></em></th>
    </tr>
    <tr>
    	<td align="right" nowrap><?php echo $AppUI->_('Username');?>:</td>
    	<td align="left" nowrap><input type="text" size="25" maxlength="20" name="checkusername" class="text" /></td>
    </tr>
    <tr>
    	<td align="right" nowrap><?php echo $AppUI->_('EMail');?>:</td>
    	<td align="left" nowrap><input type="email" size="25" maxlength="64" name="checkemail" class="text" /></td>
    </tr>
    <tr>
    	<td align="left" nowrap><a href="http://www.dotproject.net/"><img src="./style/default/images/dp_icon.gif" width="120" height="20" border="0" alt="dotProject logo" /></a></td>
    	<td align="right" valign="bottom" nowrap><input type="submit" name="sendpass" value="<?php echo $AppUI->_('send password');?>" class="button" /></td>
    </tr>
    </table>
    <?php if (@$AppUI->getVersion()) { ?>
    <div align="center">
    	<span style="font-size:7pt">Version <?php echo @$AppUI->getVersion();?></span>
    </div>
    <?php } ?>
    </form>
    <div align="center">
    <?php
    	echo '<span class="error">'.$AppUI->getMsg().'</span>';
    
    	$msg = '';
    	$msg .=  phpversion() < '4.1' ? '<br /><span class="warning">WARNING: dotproject is NOT SUPPORT for this PHP Version ('.phpversion().')</span>' : '';
    	$msg .= function_exists( 'mysql_pconnect' ) ? '': '<br /><span class="warning">WARNING: PHP may not be compiled with MySQL support.  This will prevent proper operation of dotProject.  Please check you system setup.</span>';
    	echo $msg;
    ?>
    </div>
    </body>
    </html>
    
  5. overrides.php – I will have to analyze this more to see what it is for. The code looks pretty similar in each file, though the files are slightly different lengths.
    <?php /* STYLE/DEFAULT $Id: overrides.php 5725 2008-06-02 16:20:34Z merlinyoda $ */
    
    if (!defined('DP_BASE_DIR')) {
    	die('You should not access this file directly');
    }
    class CTitleBlock extends CTitleBlock_core {
    }
    
    ##
    ##  This overrides the show function of the CTabBox_core function
    ##
    class CTabBox extends CTabBox_core {
    	function show( $extra='', $js_tabs = false ) {
    		GLOBAL $AppUI, $dPconfig, $currentTabId, $currentTabName;
    		$uistyle = ($AppUI->getPref( 'UISTYLE' )
    		            ? $AppUI->getPref( 'UISTYLE' )
    		            : (($dPconfig['host_style']) ? $dPconfig['host_style'] : 'default'));
    		reset( $this->tabs );
    		$s = '';
    
    		// tabbed / flat view options
    		if (@$AppUI->getPref( 'TABVIEW' ) == 0) {
    			$s .= '<table border="0" cellpadding="2" cellspacing="0" width="100%">' . "\n";
    			$s .= "<tr>\n";
    			$s .= '<td nowrap="nowrap">' . "\n";
    			$s .= '<a href="' . $this->baseHRef . 'tab=0">' . $AppUI->_('tabbed') . '</a> : ';
    			$s .= '<a href="' . $this->baseHRef . 'tab=-1">' . $AppUI->_('flat') . '</a>' . "\n";
    			$s .= "</td>\n" . $extra . "\n</tr>\n</table>\n";
    			echo $s;
    		} else {
    			if ($extra) {
    				echo ('<table border="0" cellpadding="2" cellspacing="0" width="100%">'
    				      . "\n<tr>\n" . $extra . "</tr>\n</table>\n");
    			} else {
    				echo '<img src="./images/shim.gif" height="10" width="1" alt="" />' . "\n";
    			}
    		}
    
    		if ($this->active < 0 || @$AppUI->getPref( 'TABVIEW' ) == 2 ) {
    			// flat view, active = -1
    			echo '<table border="0" cellpadding="2" cellspacing="0" width="100%">' . "\n";
    			foreach ($this->tabs as $k => $v) {
    				echo '<tr><td><strong>'.($v[2] ? $v[1] : $AppUI->_($v[1]))."</strong></td></tr>\n";
    				echo '<tr><td>';
    				$currentTabId = $k;
    				$currentTabName = $v[1];
    				include $this->baseInc.$v[0].".php";
    				echo "</td></tr>\n";
    			}
    			echo "</table>\n";
    		} else {
    			// tabbed view
    			$s = '<table width="100%" border="0" cellpadding="0" cellspacing="0">' . "\n";
    			$s .= '<tr><td>' . "\n" .'<table border="0" cellpadding="0" cellspacing="0"><tr>' . "\n";
    
    			if ( count($this->tabs)-1 < $this->active ) {
    				//Last selected tab is not available in this view. eg. Child tasks
    //				$this->active = 0;
    			}
    			foreach( $this->tabs as $k => $v ) {
    				$class = ($k == $this->active) ? 'tabon' : 'taboff';
    				$sel = ($k == $this->active) ? 'Selected' : '';
    				$s .= '<td valign="middle"><img src="./style/' . $uistyle . '/images/tab' . $sel . 'Left.png" id="lefttab_' . $k .'" border="0" alt="" /></td>' . "\n";
    				$s .= '<td id="toptab_'.$k.'" valign="middle" nowrap="nowrap"';
    
    				$s .= (($js_tabs)
    					   ? (' class="' . $class . '"')
    					   : (' background="./style/' . $uistyle . '/images/tab' . $sel . 'Bg.png"'));
    				$s .= '>&nbsp;<a href="';
    
    				if ($this->javascript) {
    					$s .= "javascript:" . $this->javascript . "({$this->active}, $k)";
    				} else if ($js_tabs) {
    					$s .= 'javascript:show_tab(' . $k . ')';
    				} else {
    					$s .= $this->baseHRef.'tab='.$k;
    				}
    
    				$s .='">'.(($v[2]) ? $v[1] : $AppUI->_($v[1])).'</a>&nbsp;</td>' . "\n";
    				$s .= ('<td valign="middle"><img id="righttab_' . $k . '" src="./style/' . $uistyle . '/images/tab'
    					   . $sel . 'Right.png" border="0" alt="" /></td>' . "\n");
    				$s .= '<td class="tabsp"><img src="./images/shim.gif" height="1" width="3" /></td>' . "\n";
    			}
    			$s .= '</tr></table>' . "\n" .'</td></tr>' . "\n";
    			$s .= '<tr><td width="100%" colspan="'.(count($this->tabs)*4 + 1).'" class="tabox">' . "\n";
    			echo $s;
    			//Will be null if the previous selection tab is not available in the new window eg. Children tasks
    			if ( $this->tabs[$this->active][0] != "" ) {
    				$currentTabId = $this->active;
    				$currentTabName = $this->tabs[$this->active][1];
    				if (!$js_tabs)
    					require $this->baseInc.$this->tabs[$this->active][0].'.php';
    			}
    			if ($js_tabs)
    			{
    				foreach( $this->tabs as $k => $v )
    				{
    					echo '<div class="tab" id="tab_'.$k.'">';
    					$currentTabId = $k;
    					$currentTabName = $v[1];
    					require $this->baseInc.$v[0].'.php';
    					echo '</div>';
    					echo ('<script language="JavaScript" type="text/javascript">' . "\n"
    						  . '//<!--' . "\n"
    						  . 'show_tab('.$this->active.');' . "\n"
    						  . '//-->' . "\n"
    						  . '</script>');
    				}
    			}
    			echo '</td></tr>' . "\n" . '</table>' . "\n";
    		}
    	}
    }
    ?>
    

Image files, gif, jpg, png

These are all just images. You can change them if you want. The image type doesn’t have to remain constant. If you do change them, your theme will be noticeably different.

  1. Tab Images – These are images for the tabs you click on at the top of the web page.
    • tabBg.png
    • tabLeft.png
    • tabRight.png
  2. Tab Selected Images – These are images for the tab that is currently selected at the top of the web page.
    • tabSelectedBg.png
    • tabSelectedLeft.png
    • tabSelectedRight.png

    favicon.ico

    This is the icon that shows up in the tool bar of your browser next to the URL.

In QlikView 9, How to report on what Support Cases were open on any given date using open date and close date?

In QlikView 9, How to report on what Support Cases were open on any given date using open date and close date?

So here is what I have in the most basic terms:
1. A Calendar (see my previous post)
My new and improved Calendar in QlikView 9

2. A table loaded from a Ticketing/Case Management database (in this instance it is Salesforce but if could be any ticketing system).

Load CaseId as CaseNumber,
	CreatedDate as DateOpened
SQL SELECT CaseId,
	CreatedDate as DateOpened,
	ClosedDate as DateClosed,
FROM Case;

The table loaded would look like this (only I would have exact times to the second for open and closed dates:

CaseNumber, DateOpened, DateClosed
0001, 11/2/09, 11/5/09
0002, 11/2/09, 11/12/09
0003, 11/3/09, 11/4/09
0004, 11/3/09, 11/9/09
0005, 11/3/09, 11/1/09
0006, 11/4/09, 11/4/09
0007, 11/4/09, 11/3/09
0008, 11/4/09, 11/12/09
0009, 11/4/09, 11/4/09
0010, 11/5/09, 11/9/09
0011, 11/5/09, 11/6/09
0012, 11/5/09, 11/6/09
0013, 11/6/09, 11/6/09
0014, 11/6/09, 11/9/09
0015, 11/6/09, 11/9/09
0016, 11/9/09, 11/11/09
0017, 11/9/09, 11/21/09
0018, 11/10/09, 11/13/09
0019, 11/10/09, 11/13/09
0020, 11/11/09, 11/21/09
0021, 11/12/09, 11/31/09
0022, 11/13/09, 11/115/09
0023, 11/16/09, 11/17/09
0024, 11/16/09, 11/31/09
0025, 11/17/09, 11/31/09
0026, 11/17/09, 11/31/09
0027, 11/17/09, 11/25/09
0028, 11/18/09, 11/23/09
0029, 11/19/09, 11/27/09
0030, 11/20/09, 11/21/09
0031, 11/23/09, 11/23/09
0032, 11/23/09, 11/23/09
0033, 11/24/09, 11/25/09
0034, 11/24/09, 11/26/09
0035, 11/25/09, 11/29/09
0036, 11/25/09, 11/31/09
0037, 11/26/09, 11/30/09
0038, 11/27/09, 11/31/09
0039, 11/27/09, 11/30/09
0040, 11/30/09, 11/31/09
0041, 11/30/09, 11/31/09
0042, 11/30/09, 11/31/09
0043, 11/31/09, 11/31/09
0044, 11/31/09, 12/1/09
0045, 11/31/09, 12/1/09

So each of these cases have a range of time they were open.
For example, Case 0001 was opened on 10/2/09. It continues to be open at the start of the day on 10/3/09, 10/4/09, and 10/5/09 before it was closed later in the day on 10/5/09.

So I have a MasterCalendar that has every day in it. I want to click on 10/4/09 and have this case show as being opened on that day.

I will be getting this to work this week, I hope. So stay in touch.

….

I am back, and much faster than I thought I would be.

Ok, so you won’t have my Salesforce database, so I created an inline load of data you can use to see this work.

Cases:
LOAD * INLINE [
CaseNumber,	DateOpened,	DateClosed
	0001,	11/2/09,	11/5/09
	0002,	11/2/09,	11/12/09
	0003,	11/3/09,	11/4/09
	0004,	11/3/09,	11/9/09
	0005,	11/3/09,	11/1/09
	0006,	11/4/09,	11/4/09
	0007,	11/4/09,	11/3/09
	0008,	11/4/09,	11/12/09
	0009,	11/4/09,	11/4/09
	0010,	11/5/09,	11/9/09
	0011,	11/5/09,	11/6/09
	0012,	11/5/09,	11/6/09
	0013,	11/6/09,	11/6/09
	0014,	11/6/09,	11/9/09
	0015,	11/6/09,	11/9/09
	0016,	11/9/09,	11/11/09
	0017,	11/9/09,	11/21/09
	0018,	11/10/09,	11/13/09
	0019,	11/10/09,	11/13/09
	0020,	11/11/09,	11/21/09
	0021,	11/12/09,	11/31/09
	0022,	11/13/09,	11/115/09
	0023,	11/16/09,	11/17/09
	0024,	11/16/09,	11/31/09
	0025,	11/17/09,	11/31/09
	0026,	11/17/09,	11/31/09
	0027,	11/17/09,	11/25/09
	0028,	11/18/09,	11/23/09
	0029,	11/19/09,	11/27/09
	0030,	11/20/09,	11/21/09
	0031,	11/23/09,	11/23/09
	0032,	11/23/09,	11/23/09
	0033,	11/24/09,	11/25/09
	0034,	11/24/09,	11/26/09
	0035,	11/25/09,	11/29/09
	0036,	11/25/09,	11/31/09
	0037,	11/26/09,	11/30/09
	0038,	11/27/09,	11/31/09
	0039,	11/27/09,	11/30/09
	0040,	11/30/09,	11/31/09
	0041,	11/30/09,	11/31/09
	0042,	11/30/09,	11/31/09
	0043,	11/31/09,	11/31/09
	0044,	11/31/09,	12/1/09
	0045,	11/31/09,	12/1/09
];

Now just do this, and you have your information that you need.

LEFT JOIN ([MasterCalendar])
INTERVALMATCH (CalendarDate)
LOAD
	DateOpened,
	DateClosed
RESIDENT [Cases];

LEFT JOIN ([MasterCalendar])
LOAD
	CaseNumber,
	DateOpened,
	DateClosed
RESIDENT [Cases];

Now load this script up with the calendar script and you can see how it works by playing with a few charts.

Ok I am back with a problem.

PROBLEM
If the case is not closed yet, it is not being counted. I need to fix that, because that is not going to work for me. I need to count the cases that are currently open.

So back to research mode…I will update you as I can.

See this forum post:
http://community.qlikview.com/forums/t/23247.aspx

Solved my own question by continuing to RTM.

I needed to add the following just before my Load Statement:

NullAsValue SFCaseDateClosed;

My new and improved Calendar in QlikView 9

Hey all,

After working with QlikView for a few days, and working with the calendar, here is my new and improved load script for a Calendar.

Calendar:
LET vDateMin = Num(MakeDate(2000,1,1));
LET vDateMax = Floor(YearEnd(Today()));

TempCalendar:
LOAD
$(vDateMin) + RowNo() – 1 AS DateNumber,
Date($(vDateMin) + RowNo() – 1) AS TempDate
AUTOGENERATE 1
WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); MasterCalendar: LOAD TempDate AS CalendarDate, // Standard Date Objects Day(TempDate) AS CalendarDay, WeekDay(TempDate) AS CalendarWeekDay, Week(TempDate) AS CalendarWeek, Month(TempDate) AS CalendarMonth, 'Q' & Ceil(Month(TempDate)/3) AS CalendarQuarter, Year(TempDate) AS CalendarYear, // Calendar Date Names DayName(TempDate) as CalendarDayName, WeekName(TempDate) as CalendarWeekName, MonthName(TempDate) as CalendarMonthName, QuarterName(TempDate) as CalendarQuarterName, YearName(TempDate) as CalendarYearName, // Start Dates DayStart(TempDate) as CalendarDayStart, WeekStart(TempDate) as CalendarWeekStart, MonthStart(TempDate) as CalendarMonthStart, QuarterStart(TempDate) as CalendarQuarterStart, YearStart(TempDate) as CalendarYearStart, // End Dates DayEnd(TempDate) as CalendarDayEnd, WeekEnd(TempDate) as CalendarWeekEnd, MonthEnd(TempDate) as CalendarMonthEnd, QuarterEnd(TempDate) as CalendarQuarterEnd, YearEnd(TempDate) as CalendarYearEnd, // Combo Dates 'Q' & Ceil(Month(TempDate)/3) & '/' & Year(TempDate) AS CalendarQuarterAndYear RESIDENT TempCalendar ORDER BY TempDate ASC; DROP TABLE TempCalendar; LET vDateMin = Null(); LET vDateMax = Null(); [/sourcecode] It is much better and more complete than the previous one I had. Update: Here is what I am using now. Almost the same, but not quite: [sourcecode language="sql"] ///$tab Calendar Calendar: LET vDateMin = Num(MakeDate(2003,1,1)); LET vDateMax = Floor(MonthEnd(Today())); LET vDateToday = Num(Today()); TempCalendar: LOAD $(vDateMin) + RowNo() - 1 AS DateNumber, Date($(vDateMin) + RowNo() - 1) AS TempDate AUTOGENERATE 1 WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); Calendar: LOAD Date(TempDate) AS CalendarDate, // Standard Date Objects Day(TempDate) AS CalendarDayOfMonth, WeekDay(TempDate) AS CalendarDayName, Week(TempDate) AS CalendarWeekOfYear, Month(TempDate) AS CalendarMonthName, 'Q' & Ceil(Month(TempDate)/3) AS CalendarQuarter, Year(TempDate) AS CalendarYear, // Calendar Date Names WeekName(TempDate) as CalendarWeekNumberAndYear, MonthName(TempDate) as CalendarMonthAndYear, QuarterName(TempDate) as CalendarQuarterMonthsAndYear, // Start Dates DayStart(TempDate) as CalendarDayStart, WeekStart(TempDate) as CalendarWeekStart, MonthStart(TempDate) as CalendarMonthStart, QuarterStart(TempDate) as CalendarQuarterStart, YearStart(TempDate) as CalendarYearStart, // End Dates DayEnd(TempDate) as CalendarDayEnd, WeekEnd(TempDate) as CalendarWeekEnd, MonthEnd(TempDate) as CalendarMonthEnd, QuarterEnd(TempDate) as CalendarQuarterEnd, YearEnd(TempDate) as CalendarYearEnd, // Combo Dates 'Q' & Ceil(Month(TempDate)/3) & '/' & Year(TempDate) AS CalendarQuarterAndYear, Year(TempDate) & '/' & 'Q' & Ceil(Month(TempDate)/3) AS CalendarYearAndQuarter, 'Wed ' & DayStart(WeekStart(TempDate) + 3) as CalendarWednesdays RESIDENT TempCalendar ORDER BY TempDate ASC; DROP TABLE TempCalendar; LET vDateMin = Num(MakeDate(2000,1,1)); LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12))); LET vDateToday = Num(Today()); STORE Calendar INTO C:\ProgramData\QlikTech\Support\QVD\Calendar.qvd; [/sourcecode]

A guide for analyzing the quality of an open source application?

Ok, so you want to evaluate and open source application?

What guidelines should you use? Here is a guideline. I will continue to update this as I find valid items to measure. If you have something I should add to the list, please let me know.

Obtaining the Software

  1. A top link in search engine when searching for open source app’s name?
  2. A quick download link?
  3. Clear description of different downloads per platform?

Installation of Open Source App

  1. Clear description of different downloads per platform?
    List of platforms:

  2. Ease of install score:
  3. Ease of initial configuration score:

Authentication

  1. Integration with Active Directory?
    Score:

  2. Integration with LDAP?
    Score:

  3. Database authentication?
    Explanation: Can authentication occur in a database such as Postgresql, MySQL, etc…
    Supported Database list:
    Score:

  4. Authentication to a 3rd party programs database?
    Explanation: So that if you have an application A with a database that hosts a username a password, can this open source application B use your database from application A to authenticate?
    Score:

Security

  1. How secure is this application?
  2. What security holes have been reported and fixed?
  3. What development designs were taken into consideration to enhance security?
  4. What security analysis tools such as Nessus has this open source application been analyzed with?

Documentation

  1. Install guide exists?
    Quality Score:

  2. Users guide exists?
    Quality Score:

  3. Admin guide exists?
    Quality Score:

  4. Developer’s guide exists?
  5. Compile/Debug guide on how to load in an IDE and compile and debug (Visual Studio 2008, Eclipse, KDevelop, other, etc…)
  6. Guide for submitting a bug or suggestion?
  7. Guide for contributing documentation?
  8. Ease of contribution Documentation?

Ease of Use

  1. Is the application easy to use?
  2. Can non-technical users use the application with minimal training?

Stability

  1. How stable is the application? Determine this from normal use for a period of time.
  2. How stable is the platform(s) and/or 3rd party dependencies the application runs/depends on?
  3. Does the application crash with normal use?
  4. Does the application crash with abnormal use?
  5. Does the application crash with prolonged use?
  6. Is the process for submitting a bug simple?
  7. Is the process for applying a patch simple?
  8. Does applying patches decrease stability?

Community Strength

  1. Is it being maintained by a strong community?
  2. Is there a high adoption rate for this application?
  3. What is the average turn around time for a bug in the community?
  4. Is there a forum? What is forums user base? How quick do questions get responses?
  5. Is there a mailing list?
  6. Is there an RSS feed?

Customization of Open Source Application

  1. What language is this written in?
  2. Ease of customization.
  3. Ease of contributing to project
  4. Ease of compiling/debugging?
  5. Ease of getting fixes committed to source?

Scalability

  1. Does the application scale well with increased usage?
  2. Does this application integrate with the two most used operating systems for desktops? Windows and OS X?

How to create a Calendar in QlikView 9?

How to create a Calendar in QlikView 9?

UPDATE: Check out my new calendar here: http://rhyous.com/2009/11/30/my-new-and-improved-calendar-in-qlikview/

Ok, so the fact that I cannot just have one line in a Load Script is a negative for QlikView. In a perfect world, I would have one line that would give me a bunch of possible values I could use for a dimension, such as CalendarDay, CalendarWeek, CalendarMonth, CalendarQuarter, CalendarYear, etc… It would be one line like this:

Calendar(StartDate, EndDate);

Alas…it is not a perfect world, so this feature doesn’t exist in QlikView. (Enhancement Request please!!!!)

So there is a Wiki on how to do it. Here is the link.
http://community.qlikview.com/wikis/qlikview-wiki/how-to-create-a-calendar.aspx

However, the problem is that this didn’t work.

So after some research I remember that internet search engines exist and I don’t have to just search QlikView’s site and documentation. I did a google search for this string:
qlikview how to create a calendar

The script didn’t fail to load…yeah…wait…there is not data in my report that has to do with a Calendar.

This sucks. Why can’t I just create a new Calendar. This is common problem with some software companies. There is a “key features” that can be done, but with great difficulty. However, because it can be done, they don’t spend any more development time on it.

Anyway, I added a post in the QlikView Forum and watched the QlikView free training Video for developers (especially module 8).

Here is the result:

LET vDateMin = Num(MakeDate(2000,1,1));
LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12)));
LET vDateToday = Num(Today());

TempCalendar:
LOAD
$(vDateMin) + RowNo() – 1 AS DateNumber,
Date($(vDateMin) + RowNo() – 1) AS TempDate
AUTOGENERATE 1
WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); MasterCalendar: LOAD TempDate AS CalendarDate, Day(TempDate) AS CalendarDay, WeekDay(TempDate) AS CalendarWeekDay, Week(TempDate) AS CalendarWeek, Month(TempDate) AS CalendarMonth, Year(TempDate) AS CalendarYear, 'Q' & Ceil(Month(TempDate)/3) AS CalendarQuarter, WeekDay(TempDate) & '-' & Year(TempDate) AS CalendarWeekAndYear, Month(TempDate) & '-' & Year(TempDate) AS CalendarMonthAndYear RESIDENT TempCalendar ORDER BY TempDate ASC; DROP TABLE TempCalendar; LET vDateMin = Num(MakeDate(2000,1,1)); LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12))); LET vDateToday = Num(Today()); [/sourcecode] Now when your script loads, you can right click and choose New Sheet Object, Slider/Calendar Object. Choose Calender, not Slider and base it off of the CalendarDate field. Also on the Sort tab, use the Numeric Value to change the sort to Descending.

Windows 7 64 bit VPN Client – ShrewSoft

Ok, so I couldn’t get Cisco’s VPN client to work for Windows 7 64 bit. So I went in search of another VPN solution that would be more compatible.

(UPDATE: I got ShrewSoft’s VPN Client working, so keep reading down below.)

I came across ShrewSoft’s VPN Client a while ago, but it originally blue screened my Windows 7 box, but it was a version that didn’t support Windows 7. However they have a new version that is out that is for Windows 7 64 bit. Actually they now have a release version on their download site but there is a beta of the next version (Update 3/05/2010)2.1.6-beta-6 that your may want to use (or a later version if you are reading this well after I wrote or updated it). See the comments on why.

I installed it and it requested a reboot so I rebooted, and the first good news is that I didn’t blue screen when my workstation booted up. Horray!!!

After installing, I tested undocking my laptop from its docking station and then docking my laptop, and again, no blue screens, so I think it is good to go. Now I just have to figure out how to configure it to connect here at work.

I like the license, they say:

The Shrew Soft Client for Windows is free for both commercial and private use. Please read below for complete license details. Click here…

Stay tuned for more testing….

Ok…I am back for more notes.

At work we are using a Cisco VPN solution, so it turns out that when my Cisco VPN would install on a 32 bit machine, it used a .pcf file. Well, guess what is awesome about ShrewSoft’s VPN Client? It can import a .pcf file.

I imported the .pcf file and I appear to connect, then disconnect. Not sure what is going on. I am at work, but I should be able to connect to the VPN while at work, at least that is what my IT staff said.

So hopefully it connects when I am at home.

Here is my log:

config loaded for site ‘MyConfig.pcf’
configuring client settings …
attached to key daemon …
peer configured
iskamp proposal configured
esp proposal configured
client configured
local id configured
pre-shared key configured
bringing up tunnel …
network device configured
tunnel enabled
session terminated by gateway
tunnel disabled
detached from key daemon …

I will try to debug later…

All right I am back again and I am trying to debug. I found this post:
http://lists.shrew.net/pipermail/vpn-help/2009-October/002282.html

There is a program under Start | All Programs | Shrew Soft VPN Client called “Trace Utility” that is installed with the Shrew Soft VPN Client can be used for debugging. However, it wouldn’t work for me. The buttons weren’t enabled.

I had to right-click on the “Trace Utility” shortcut and choose “Run as administrator” then I was able to turn on debugging.

Positives for Shrew Soft VPN Client
– It has a debugging utility.
– It supports Windows 7 64 bit
– It imports cisco .pcf files.
– There is a lot of documentation.

Negatives for Shrew Soft VPN Client
– I don’t have it working yet
– There is not really any clear failure reason for a user.

So I will keep at it. I think I am about going to email the developer, but I sure don’t want to bug him.

Hopefully for some of you, it worked first time for you when you imported the .pcf file.

Got it working

Another positive. The developer has a mailing list, as you saw with one of my links above. I found this link:
http://lists.shrew.net/pipermail/vpn-help/2009-October/002275.html

The key piece of information I needed was this:

If it gets to the ‘tunnel enabled’ point, that means you completed phase1, Xauth and modecfg negotiations. Its probably a phase2 option. As I mentioned to others on the list, try playing with the PFS setting or enabling the cisco-udp NAT-T option.

In the tool, after importing my .pcf file, I only had to make one configuration change. I had to change the PFS setting to “group 2”. See this screen shot.

VPN Setting

So I have this working now.

I have to say that I am very impressed with Shrew Soft. It took me some time to figure it out, but it works. Now the only question time will tell is how stable it is. Expect an update in a week or two about whether I think the Shrew Soft VPN Client is stable.

The steps are easy for me to connect to my VPN at work. Now every VPN is different so I am sorry if these steps don’t work for you:

  1. Use the correct (and latest) version: 2.1.6-beta-6 or later
  2. Install Shrew Soft VPN Client
  3. Reboot.
  4. Import the .pcf file.
  5. Modify the configuration and change the PFS setting to “group 2”.
  6. Apply the configuration.
  7. Click connect.
  8. Enter your domain user and password and you will connect.

Success!!!!

Also, I exported my configuration as a Shrew Soft VPN Client export, which is a .VPN file. When I import it, I don’t have to make a configuration change like I did with the Cisco .pcf file.

Key words: cisco vpn window 7 64 bit

Adding a SQL 2008 Server as a DataSource to JasperServer

Ok, so at work I installed JasperServer and spent quite a lot of time in their documentation and could find the basic information of how to connect to a Microsoft SQL 2008 server.

JasperSoft has a nice installer that installs everything for you: JasperServer, Tomcat, Java, MySQL, etc…

The first problem was I had a 2008 R2 64 bit VM that I thought I would use that OS and their installer just crashed with MySQL errors. So I installed MySQL myself, and then reinstalled JasperServer and pointed to my MySQL install and it appeared to work better but there were still a lot of errors in normal use that I couldn’t find documentation on. So I am now using a 2003 R2 SP2 server and everything installed just fine, first time.

I thought Microsoft was really friendly about deploying their JDBC driver for SQL 2005/2008 and that anyone could distribute it as long as they just told Microsoft first, (maybe I am wrong and maybe MS charges to distribute it). Anyway, I expected JasperServer to install the JDBC driver for me (included in their all-encompassing package) but to my dismay, the driver wasn’t there. So that is fine, I was certain there would be a quick and easy document on how add SQL 2008 as a database. Yeah, three days later, still no documentation found….

Finally, with almost no help from the JasperServer documentation, I figured out that really it was Tomcat that needed the JDBC driver, not JasperServer. Well, it turns out that Tomcat no longer uses the CLASSPATH environment variable, so I just had to copy the SQL 2008 JDBC .jar file to a directory Tomcat did look at and I was done. It was simple.

  1. Download the Microsoft JDBC driver: Microsoft SQL Server JDBC Driver
  2. Extract to a good location. I chose c:\program files to extract to.
  3. Copy the sqljdbc4.jar to your installation directory which by default is:
    c:\program files\jasperserver-pro-3.5.1\apache-tomcat\webapps\jasperserver-pro\WEB-INF\lib

  4. Restart JasperServer (there is a shortcut in the start menu to restart it).
  5. Log into JasperServer’s web site. http://YourServer:8080/jasperserver-pro
  6. Go to View | Repository.
  7. Click the second icon called Add Resource and select Data Source.
  8. Choose JDBC Data Source and click next.
  9. Provide any Name, Label, and Description.
  10. For the driver put this:
    com.microsoft.sqlserver.jdbc.SQLServerDriver

  11. For the URL put this:
    jdbc:sqlserver://ServerName:1433:databaseName=MyDatabase;

  12. Enter the username and password.
  13. Select a time zone.
  14. Click Test and it should succeed.
  15. Troubleshooting: If it doesn’t succeed, save anyway and restart the JasperServer and watch for any exceptions.

Wow that was easy once I figured it out. Too bad that the lack of good documentation resulted in me spending three days to figure out that I just needed to spend three seconds to copy a file.

JasperServer score card

Install = 8 (Minus two points for not working Server 2008 R2 64 bit)
Documentation = 0 (no points as so far I have not found a document that has been helpful yet.

Also I note that the JasperForge (the opensource part of JasperSoft) has a wiki, but it is nothing but headers and the data is pretty much blank.

I am not trying to knock JasperSoft with this post, but I am just trying to make sure that someone who tries to do the same thing ends up finding my post and getting their SQL 2008 server added as a data source rather quickly, instead of wading through the lack of documentation for three days.

Even to show my good will towards open source projects, I documented my steps on their wiki for them.
http://jasperforge.org/plugins/mwiki/index.php/Jasperserver/DataSources#Adding_a_Microsoft_SQL_Server_2008_Database_as_a_Data_Source

WinPE Add-on: Updated PEShell.exe for LDMS 8.7 or 8.8

Description

This article contains alternate version of PEShell.exe.

One is an enhanced version of the PEShell.exe that comes with LANDesk’s version of WinPE.  It includes some menu options that can be beneficia.

The other is a PEShell.exe has that no menu options at all, for environments that need more security in WinPE.

Both have only been tested with 8.8.

Download Link

PEShell.exe Exe Zip
PEShell.exe with Enhanced Menu PEShell.exe PEShell.zip
PEShell.exe with No Menu (for secure environments) PEShellNoMenu.exe PEShellNoMenu.zip

How do I install it?

There is really no need for an installer. It can be added to the LDVPE1.IMG on the Core Server or it can be added to the peboot.img file on the PXE Representative directly.

Adding the new PEShell.exe to the LDVPE1.IMG on the Core Server

  1. Download the new PEShell.exe to your Core Server.
  2. Browse to \ManagementSuite\LANDesk\Vboot and open LDVPE1.IMG using a tool such as Winimage (http://www.winimage.com).
  3. Inject the new PEShell.exe into the i386\System32 folder in your LDVPE1.IMG file. The old PEShell.exe will be overwritten.

Any PXE Representatives deployed after replacing the PEShell.exe in the LDVPE1.IMG file will have the new PEShell.exe.

Any Provisioning Boot Media created after replacing the PEShell.exe in the LDVPE1.IMG file will have the new PEShell.exe.

Adding the new PEShell.exe to the PEBOOT.IMG on the PXE Representative

  1. Download the new PEShell.exe to your PXE Representative.
  2. Browse to C:\Program Files\LANDesk\PXE\System\Images and open PEBOOT.IMG using a tool such as Winimage (http://www.winimage.com).
  3. Inject the new PEShell.exe into the i386\System32 folder in your PEBOOT.IMG file. The old PEShell.exe will be overwritten.

Console Add-on: LANDesk Support Tools beta 6

Hey all,

It has been a while and there are good reasons for this.

First, I have been working too hard both at work and at home.  I stripped, sanded, and stained my deck with a lot of help from my brother in law.  Never-the-less I have continued this project.

A lot of the DLL file I was using was coded a long time ago by someone else and it was mostly procedural code (even though it was C#), and I rewrote it with a bit more oject oriented-ness. Hopefully, this will make it easy to maintain in the future, not to mention the fact that I am now no longer using functions that I don’t know what they do, cause now I wrote them.

Anyway, here are some of the new enhancements.  They aren’t amazing, because it is the same thing rewritten.  If you find something not working, please let me know.

Release Notes
===============

Version 8.80.3.6
===================
1. Mostly rewrote the SupportTools.dll
    a. Now the SupportTools.xml can be updated and the changes are seen in the console immediately without restarting.
    b. It is now using OS Type instead of OS Name for a filter.
    c. Filtered OS Types no longer show the option disabled, the option is now removed and I didn’t leave in the grayed out option.
    d. Only remote executes check for Remote Control rights, instead of everything checking for those rights.
    e. I slightly altered the XML format.
    f. Moved the SupportTools.xml file to the SupportTools directory.

    g. The Support Tools now are listed in the order placed in the XML, and not automatically sorted, so if you want to change the order you can.
2. Slightly enhanced who.vbs to not crash, but instead give a friendly error for disconnected devices.

3. Added a few options that weren’t there before.

4. Fixed typos in the XML.

5. Added RemoteRegistry.exe (an autoit script recommended to me by user Rich Sterling from community.landesk.com.  Thanks Rich.)

I know most won’t see much difference because they are already using most of the tools in this build.  But there were great strides made that will allow me to now start developing more tools that talk to the agents using LANDesk not RPC, so yeah!

As always you can get the latest link here:

Console Add-on: LANDesk Support Tools

I will keep both versions available for download for now.

I expect my new DLL to be more stable, more rebust, and overwall better.  However, being newly rewritten there is always the chance of an unforseen bug on someone elses system so I am leaving beta 5 downloadable as well.

Latest Version:

LANDesk Support Tools beta 6.exe

Previous Version

LANDesk Support Tools beta 5.exe