Tuesday, November 29, 2011

Connecting to a local Team Foundation Server

Here are details of how to connect to TFS for all your Source Control needs within VS2010/2008.
  1. Open Visual Studio
  2. From the “Team” menu select “Connect to Team Foundation Server..”
  3. Click “Servers”
  4. Click “Add”
  5. Enter the URL for the server e.g. “:8080/tfs">http://<server>:8080/tfs” in the Name field and Click “OK” and Click “Close”.

     6. Select the projects you want to have access too and click “Connect”.

    7. Select “Team Explorer” from the bottom right; Then click the “Source Control Node”; Then “Not Mapped” and Finally enter a local directory on which you will store the code.
    8.  Click “Map” and “Yes” if you are prompted to to a Get.

Thursday, November 3, 2011

Customising CSV export in Business Objects

Classic thing today, something that should be very, very simple turned out to be a total pain.  Using the Business Objects fat client you can choose any CSV export parameter you wish to use, however on the InfoView interface these options a read-only!  This is really silly as the engine to generate the reports is exactly the same. 

To get around the problem required a bit of hacking on the underlying InfoView scripts.  this is probably not support by Business Objects, but it was a fairly simple change.

All that is needed is to edit two files (why two? well I’ve no idea, but figured it was safer to do both): \scripts\CSVoptions.js and \html\CSVOptionsDialogue.html which are located in the “C:\Program Files (x86)\Business Objects\BusinessObjects Enterprise 12.0\java\server\work\APAPPBO01.WebApplicationContainerServer\businessobjects\AnalyticalReporting\12\AnalyticalReporting-12.war\viewers\cdz_adv\language\en” folder.

The code change is simple;

arr=separators.split(' ');

becomes

arr=(separators+' |').split(' ');

Note: You’ll need to reboot the server as TomCat will not register the change.. weird…

Tuesday, July 26, 2011

Business Objects – the basics

Here is some basic information relating to Business Objects which you may find useful..

Setting Up the Server

  • Go to the installer directory
  • Run the "Setup.exe"
  • Note: you’ll need the product code
  • Take all the default settings.

Web Services Available

When installed Business Objects provides 2 main services over the web.
  1. InfoView (:6405/InfoViewApp/logon.jsp">http://<server>:6405/InfoViewApp/logon.jsp); this is the main interface for Users within the Organisation
  2. Central Management Console (:6405/CmcApp/logon.faces">http://<server>:6405/CmcApp/logon.faces) ; this is the administration and control interface for Power Users and Support staff.

Creating and Managing Users

Access the Central Management Console (:6405/CmcApp/logon.faces">http://<server>:6405/CmcApp/logon.faces and click on the User/Group Tab or select "Users and Groups" from the option drop down at the top of the page.

You can create a new User or Group by clicking on the "User List" node and selecting the "New User" icon or "New Group" icon on the menu.

Equally you can edit User/Group details by clicking on the name on the right of the screen.

After you have modified the details you should click "Save" on the bottom right of the screen.

Wednesday, February 2, 2011

Encrypting Web.Config part 2

Someone noted that my previous script for encrypting web.config files was missing out some applications and I discovered it was because they where at the root level and my script expected everything to running under a virtual directory.  This was correct for the development machines but on a production machine the site could be anywhere.

Working by file

To fix this I changed the script to simply find all the web.configs on a specific drive and do it that way.  It turned out to be easier than going via IIS and probably more accurate too.  There modified script is below:

$Dir = get-childitem G:\ -recurse
$List = $Dir | where {$_.name -eq "web.config"}

## Sections we want Hashed ###
$configSections = @('connectionStrings','appSettings')
## Command line for the encrypting system ###
$CmdLine = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "

foreach($file in $List)
{
    ### Process the directories ###
    write-Host "processing  -> " $file.fullname;
    foreach($section in $configSections)
    {
        $command = $CmdLine + $section + " " + $file.fullname + "' -prov 'RsaProtectedConfigurationProvider'";
        #invoke-expression -command $command | out-null
    }

}

Tuesday, February 1, 2011

Encrypting Web.Config

Today I spent a few hours getting a script together that would encrypt all the web.config files for all the sites and applications on a server.   It was more difficult than expected, but I think that’s more because I don’t really know PowerShell as well as I figured.  It was also the fact that our servers are running version 1 rather than version 2 which makes things a little more complicated.

The Script

The script is given below (not much sot show for 4 hours work!). 

### Powershell script to encrypt all web.configs###
$objSites = [adsi]"IIS://localhost/W3SVC"
foreach ($objChild in $objSites.psBase.children)
{
    $sitePath=$objChild.psBase.Path + "/Root";
    Write-Host "Processing Site:" + $sitePath;
    $iis=[adsi]$sitePath;
    $vroot = $iis.psbase.children ;
    trap  { continue;}

    ## Sections we want Hashed ###
    $configSections = @('connectionStrings','appSettings')
    ## Command line for the encrypting system ###
    $CmdLine = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pe "
    ### Process the directories ###
    foreach($vdir in $vroot)
    {   
        Write-Host "processing  -> " $vdir.psBase.Name;
        foreach($section in $configSections)
        {
            $command = $CmdLine + $section + " -app '/" + $vdir.psBase.Name + "' -prov 'RsaProtectedConfigurationProvider'";
            invoke-expression -command $command | out-null
        }
    }
}

In essence its a simple loop, find all teh defined sites, then all the virtual directories below these.  Run teh command line utility “aspnet-regiis –pe ”, which will work it’s magic.

Powershell

One of the major things you need to have on teh server for this work is PowerShell.  This feature is built into Windows 2008 so all you need to do is enable it by adding the “Microsoft Powershell” feature.  For Windows 2003 you’ll need to download the installation package from Microsoft.

If you’ve installed PowerShell for teh first time tehn you’ll also need to set th Execution Policy.  Just enter “Powershell” at the command prompet and enter “Set-ExecutionPolicy RemoteSigned”, then exit.

 

The Timer Job

The simplest way of making sure that this is always applied to all sites is to create a timer job that runs every hour.

Wednesday, December 15, 2010

BOMGR 0220 errors on Business Objects server

The lads in SKSWood Brunei change the service account running Business Objects this week and it cause the server to bring up BOMGR 0220 errors. Below is the solution…

Steps for solution:

1. Stop the WebI service.

2. Log into the Business Objects Configuration Tool. Start\Programs\Business Objects\Configuration Tool 6.5

3. On the Cluster Manager Page. Go to the Service Parameters branch. At the bottom of the screen there is a drop down - select 'Update Service Parameters'. Edit the username and password. Hit next or finish

4. Refresh the ORB. On the Cluster Manager Page. Select ORB. Select 'Define ORB' from the drop down. Then hit the 'Test Ports' button. Once done, hit next.

5. Hit finish. and close the configuration tool.

6. You change the settings for the Distributed COM Configuration Properties by doing the following:

6.1 Start\Run\type 'dcomcnfg'

6.2 In the Applications Tab, you should see at least BusinessObjects.document

6.3 Click on BusinessObjects.document and select 'Default Security' tab. Ensure that Edit Default for Access Permissions and Launch Permissions includes Interactive, System and the service account you are using.

6.4 Go back to the Applications Tab, select BusinessObjects.document and hit properties.

6.5 Select the Identity Tab. Select 'This User'.

6.6 Type in the new account and password.

6.7 Once you have changed the settings there may be a need to reboot your server.

Monday, December 6, 2010

Mocking a View for Unit Testing

Had a very interesting question yesterday asking if it was possible to mock up a database view along side the in-memory SQLLite database we use for ActiveRecord.  Initially I figured it was a simple matter of just finding some form of attribute within the ActiveRecord class definition but it turns out that this is not the case.  Views not not actually supported by the CreateSchema() method we normally use with NHibernate/ActiveRecord.

As a work around you can create a view using the existing connection, for example I want to create a view called “mockview” which is based on the applications table.  All we need to do this is create a method:

private void CreateMockView()
{
    using (IDbCommand command = service.GetConnection().CreateCommand())
    {
        command.CommandText = "Create view mockview as select applicationid from applications";
        command.ExecuteNonQuery();
    }
}

If there is already an ActiveRecord class definition for this you need to decorate the class with the Schema=”none” parameter which will prevent the creation of a table with the same name.

[Serializable , ActiveRecord("mockview ", DynamicUpdate = true, Lazy = false, Schema="none")]
public partial class ApplicationsDAO : ActiveRecordBase    {
………………………….
}

Now you can query this to your hearts content.

If we want to query this but there is no ActiveRecord table definition we can just use a normal datareader, for example;

[Test]
public void GetApplications_Test()
{
    IList<Application> results = Application.FindAll();      // the AR Class
    Assert.IsTrue(results.Count > 0, "Returned values");
    _log.InfoFormat("GetAll Complete returned {0} records", results.Count);

    using (IDbCommand command = service.GetConnection().CreateCommand())
    {
        command.CommandText = "select applicationid from applications";  // the View on the database
        IDataReader reader = command.ExecuteReader();
        Assert.IsTrue(reader["applicationid"].ToString() == “1”, "there should be records in the view!");
    }
}