First semester of MBA is over!!

I do not know how to start to express my feelings in regard to my study even though it just pass through a few months of a two years journey. But I think it is a good idea to write down my experience which is new for me. It is an interesting and unique experience for me.

I remember that on the first day to the class which is the orientation day, I was very nervous, wondering how difficult the course will be as “MBA” sounds so high which I cant achieve easily or rather more suitable for experience executives/managers. Figuring out did I made a mistake in taking up this decision. Of course I have my own reason to pursue this course, may be I’ll share in later post. Anyway so here I am, in the class with a group of unknown and different age group of people who pursue the same course. They are smart, professional and experience in each respective field. These people are from engineering, human resource, architect, legal, finance, accounting, supply chain, operation, management, compliance, sales and marketing and IT background. It is interesting to know these people as they have different ideas and suggestions from different perspective that make the class interesting, broaden the way of viewing on a single matter from different point of view. It is nice to be with them as they will encourage and help one another in study or work life, and gradually my fear were reduce and have confidence to go on with them in this few months.

The lecture class were intensive and it is challenging to absorb all the stuff in that few days. Assignments were also challenging as it is a team work rather than an individual task. So group members come into place where coordination and commitment to work on each allocated part were needed in order that the work be done complete on schedule so that other assignments would be carried out following after that as planned. Argument and dissatisfaction do exist as different opinions, characteristics and leadership style to lead and complete an assignment. However, it is a good time to learn to mange dispute and come to find a common understanding which fit best to all.  As time pass, the understanding toward each members were improve, and it will be easier to move as one in completing a task.

MPIO revision
MPIO revision

Exam, the nightmare that haunted everyone as no one had taken any exam for the past few years.  However this would never defeat us as everyone will still spend time to discuss and revise the subjects together, helping one another especially  in the weaker areas.

I think that throughout this semester, it is fun and interesting regardless in class or in group as I gain more knowledge and soft-skills which helps me in my future career progression. I do look forward for coming semester to meet new challenges. So for now here is the end for first semester. Let’s have a good break!!

TF400018: The local version table for the local workspace ‘pc name’;’user’ could not be opened. The workspace version table contains an unknown schema version.

I had this problem yesterday, my nightmare. First thing come into my mind is to back all my project files. As I have a lot of branches in TFS for different projects. I’ll share what I did to solve this issue.

1. Backup all projects. It takes a lot of time, but is worth it I think, just in case.

2. remove current workspace and reset the workspace to the current project folder. You can find it here. File -> Source Control -> Advanced -> Workspace.

3. Go to Source Control Explorer and get the latest version of your project.

4. Close the Visual Studio.

5. Go to the project folder in your local PC and replace the projects folder with the one you have backup.

6. Open the project in Visual Studio. All your newly added and uncheck-in files will be inside. Add them back to the project.

* This can be done unless there is no one updated the project in TFS while you are solving this issue, else you have to get latest version after adding your newly added files.

Repeat page header in each page – Crystal Reports

By default, crystal report will automatically display the page header in each page. But if there is more than one report, where now I have few subreports in a report where each subreport contain its own page header, it will not display the page header in a new page. I have tried to use this method and it works to display the page header for each subreport in each page.


In each of the subreports,

1. add a formula field.

cr22. Put in this formula in the formula field as below


3. Group by the formula field

cr44. Put all the columns to the group header section


Each page header will be display nicely in each page.

NHibernate to handle search and paging from stored procedure

Basically my task is to create a page that display data in grid, able to filter (search), and print the data I retrieve from a stored procedure using NHibernate.


I will pass a filter with few parameter into the SP to retrieve the data to be display.

In xml file, I have added ‘sql-query’ query tag to query out the data. ‘query-param’ is the parameter to pass into the SP.


in .hbm.xml file:

<?xml version=”1.0″ encoding=”utf-8″?>
<hibernate-mapping namespace=”Domain.Entity” assembly=”Domain” xmlns=”urn:nhibernate-mapping-2.2″>
<class name=”Domain.Entity.ClientAccountReport, Domain” table=”ClientAccountReport_UI” schema=”dbo”>
<id name=”Id” column=”[Id]”>
<generator class=”native”/>
<property name=”SalesPerson”/>
<property name=”SalesPersonName”/>
<property name=”SalesPersonOpenDate”/>
<property name=”ClientAccountType”/>
<property name=”ClientCode” />
<property name=”ClientName”/>
<property name=”AppointCode”/>
<property name=”AppointName”/>
<property name=”AppointPersonCreatedDate”/>
<property name=”AppointPersonAmendedDate”/>
<property name=”AuditDate”/>
<property name=”AuditRecordID”/>
<property name=”FieldName”/>
<property name=”ActionType”/>
<property name=”OldValue”/>
<property name=”NewValue”/>
<property name=”Remarks”/>
<property name=”UserID”/>
<property name=”OpenDate”/>
<property name=”CloseDate”/>
<property name=”LastActiveDate”/>
<property name=”ClientDeleteDate”/>

<sql-query name=”ClientAccountReport_UI” callable=”true”>
<query-param name=”ClientCode” type=”String”/>
<query-param name=”ClientRefTypeCode” type=”String”/>
<query-param name=”ActionType” type=”String”/>
<query-param name=”AuditDate” type=”DateTime”/>
<return class=”ClientAccountReport”>
<return-property column=”ID” name=”Id” />
<return-property column=”SalesPerson” name=”SalesPerson” />
<return-property column=”SalesPersonName” name=”SalesPersonName” />
<return-property column=”SalesPersonOpenDate” name=”SalesPersonOpenDate” />
<return-property column=”ClientAccountType” name=”ClientAccountType” />
<return-property column=”ClientCode” name=”ClientCode” />
<return-property column=”ClientName” name=”ClientName” />
<return-property column=”AppointCode” name=”AppointCode” />
<return-property column=”AppointName” name=”AppointName” />
<return-property column=”AppointPersonCreatedDate” name=”AppointPersonCreatedDate” />
<return-property column=”AppointPersonAmendedDate” name=”AppointPersonAmendedDate” />
<return-property column=”AuditDate” name=”AuditDate” />
<return-property column=”AuditRecordID” name=”AuditRecordID” />
<return-property column=”FieldName” name=”FieldName” />
<return-property column=”ActionType” name=”ActionType” />
<return-property column=”OldValue” name=”OldValue” />
<return-property column=”NewValue” name=”NewValue” />
<return-property column=”Remarks” name=”Remarks” />
<return-property column=”UserID” name=”UserID” />
<return-property column=”OpenDate” name=”OpenDate” />
<return-property column=”CloseDate” name=”CloseDate” />
<return-property column=”LastActiveDate” name=”LastActiveDate” />
<return-property column=”ClientDeleteDate” name=”ClientDeleteDate” />
exec [ClientAccountReport_UI] @ClientCode=:ClientCode, @ClientRefTypeCode=:ClientRefTypeCode, @ActionType=:ActionType, @AuditDate=:AuditDate


In Dao.cs  class file

public void GetClientAccountReportByPage(IPage<ClientAccountReport> page, IList<IFilter> filters)
HibernateDaoHelp.SearchByPageForSP(page, “ClientAccountReport_UI”, filters);


In HibernateDaoHelp.cs class file

public void SearchByPageForSP(IPage<T> page, string hql, IList<FXBOSS.Utils.IFilter> Filters)
IQuery iQuery = this.GetSession().GetNamedQuery(hql);

if (Filters.Count > 0)
foreach (var obj in Filters)
if ( == 0)
iQuery.SetParameter(obj.field, String.Empty);

IList<T> ListOfObj = iQuery.List<T>();

if (page.pageSize != -1)
var list = ListOfObj.Skip((page.pageNo – 1) * page.pageSize).Take(page.pageSize).ToList();
page.totalCount = ListOfObj.Count();
page.result = list;
var list = ListOfObj.ToList();
page.totalCount = ListOfObj.Count();
page.result = list;


In controller.cs file

private Page<ClientAccountReport> filterPage(Page<ClientAccountReport> Page, string filters)
SystemSeg.GetClientAccountReportByPage(Page, FilterUtil.GetQuery<ClientAccountReport>(filters));
return Page;


Manual Cross Tab Dynamic Crystal Report

Lately I’m been involve in a lot of crystal reports and one of them is a cross-tab dynamic report which will grow vertically and horizontally. There are a lot of ways to do it. And I think the most easiest way is to use the cross-tab function in the Crystal report which directly pump in all your data and let the crystal report do the rest. Unfortunately, it is too late for me to realized there is such function to use, and I used the way of coding which will faced some challenges in the midst of preparing the format of data before putting it into crystal report and display it.

OK. Here is just something to share for those who wanna use such method to display your data. This is what I’ve done, and may not be the most efficient way to do. Btw, I’m using MVC c# and nHibernate for this case.

Below is the View in my database, which you can see where the report will be display according to do order ValueDate, BrokerName, and TradePLCcyCode.

data in database
data in database

And Below is the Crystal report format where data will be populated into and be display. I have created a sub report for this to make ease if next time there is a need of adding new extra report to this report. And the below diagram shows the section where data will be displayed. I have fix it to 10 rows for Currency, 6 Columns for Broker and Total. And yeah, it is group by ValueDate. These fields are also define in my dataset file(.xsd).

crystal report
crystal report

Now, we go to the coding part. Before I pump in my data from view to the report, I have to convert all the data from view into a datatable before assigning them row by row into an object. Below is the datatable generated from the view where all data are populated into. As you can see there are different ValueDate which we have to group them later.


Now is the challenging part where I have to split this ‘huge’ datatable into sections of smaller datatable to be displayed. So What I’ve done is, firstly I split it by ValueDate. It depends on how many ValueDate in my datatable.

split by value date
split by value date

Above code split the ‘huge’ datatable into smaller lists of datatables with different ValueDate. And from here, I will loop through the number of distinct ValueDate. However, the rows and columns may exceed what I’ve set in the Crystal report, so I have to split these smaller lists of datatables into the sections that fit in the report.

How to know how many section for my rows and columns? As above, I have set 6 rows and 10 columns. So a loop function is use to loop through the ‘huge’ datatable to do the following process:

1. splitting it into smaller datatables. It will split by rows then by columns.

E.g. table is 12 X 20, it will split into 4 smaller tables.

table is 12 X 10, it will split into 2 smaller tables.

2. assigning each smaller datatables in an object.

3. assigning all objects into a list of object.

After that, will pass this list of object into the crystal report to be print.

Below is a sample of the report generated.