0 Comments
  • Posted in:
  • TFS

I found the latest TFS 2008 Installation Guide document (dated September 8th, 2008) a bit lacking in that it walked you through the entire single server installation but forgot one crucial step!  I hope the team will update the documentation soon to reflect this one important step that will save you tons of time trying to figure out what’s going on if you’re not familiar w/ how Windows Server 2008 and SQL Server 2008 work together, especially in regard to Reporting Service.

The installation will go through smoothly enough when you follow the guide.  Your best bet is to follow the Checklist: Single Server Team Foundation Server Installation page in the Installation Guide.

Just make sure you have TFS 2008 and TFS 2008 SP1 slipstreamed before you proceed with the install.  You need to do this if you are using SQL Server 2008.  To do this, follow the steps described in the Installation Guide titled: How to: Integrate the installation of Team Foundation Server and Service Pack 1 or follow the Fresh Install instruction in this blog post.

If you plan to use SQL Server 2008 SP1, make sure to make the necessary changes described in this KB or you won’t  be able to proceed with the TFS installation.

Some instructions in the Installation Guide are a little confusing.  For example, it talks about different types of accounts necessary for the installation, but during the installation of TFS, it will blindly tell you to use the same account (Step 12 and 14 in the How to: Install Team Foundation Server page).  In this case, you will only need 2 accounts really, which is TFSSETUP to run the installation and TFSSERVICE to run all the services including WSS and Reporting Service rendering TFSREPORTS and WSSSERVICE account useless / unnecessary.  Just give TFSSERVICE the Allow log on locally and Log in as a service permission and you’re set to go.

One common error that you are going to get once you are done with TFS installation steps is a reporting service error stated below:

“The permissions granted to user ‘…' are insufficient for performing this operation. (rsAccessDenied)”

You’ll get this when trying to access the report service from the browser (i.e. http://localhost/reports).

Now, this is the missing step which is not in the installation guide (I hope they’ll add this in soon)…You need to configure report server for local administration on Windows Server 2008 properly to get rid of the rsAccessDenied error.  To do that, followthis MSDN article.  Once you are done with this final step, your TFS 2008 should be working just fine on W2K8 and SQL 2008.

So, in summary:

  1. Please make sure your W2K8 installation is 32-bit!!!
  2. Please make sure TFSSETUP / its equivalent account is a member of the local machine Administrators group.
  3. Please login as the TFSSETUP / equivalent account before you do the installation (after it’s assigned as local administrator).
  4. Please make sure to slipstream your TFS 2008 media with TFS 2008 SP1 before the installation
  5. Make necessary changes per KB 969985 if you are going to use SQL 2008 SP1
  6. Properly configure Report Server for Local Administration post TFS installation

As a side note, although installing TFS 2008 on single server 64 bit windows, such as W2K8 R2 that is just released, is not currently supported by Microsoft, apparently it is doable.  See this blog post for detail.

0 Comments
  1. 1. Enable safe typing in the binding (this, more than often, will safe you headache of dealing w/ date and other numerical problem when converting one message to another in BizTalk (to and from SAP)
  2. 2. When pulling data from something like BAPI_EMPLOYEE_GETDATA that returns things back in an array, make sure you pass an empty node of the array that you are interested in inside the REQUEST message.  For example, in BAPI_EMPLOYEE_GETDATA... if you are interested in ARCHIVELINK and  PERSONAL_DATA being returned in the RESPONSE message, construct the REQUEST message like so:

    <ns0:BAPI_EMPLOYEE_GETDATA …>
      <ns0:AUTHORITY_CHECK>X</ns0:AUTHORITY_CHECK>
      <ns0:DATE>20090912</ns0:DATE>
      <ns0:EMPLOYEE_ID>0100001<ns0:EMPLOYEE_ID>
      <!—Here is the tricky part, need to add these empty placeholders -->
      <ns0:ARCHIVELINK>
        <ns1:BAPITOAV0 xmlns:ns1=”…” />
      </ns0:ARCHIVELINK>
      <ns0:PERSONAL_DATA>
        <ns1:BAPIP0002B xmlns:ns1=”…” />
      </ns0:PERSONAL_DATA>
    </ns0:BAPI_EMPLOYEE_GETDATA>
    and pass it to BizTalk to pass to SAP.  SAP will then return the two nodes w/ the appropriate content.
  3. Use Add Generated Item, Consume Adapter Service to create the appropriate SAP binding file.

0 Comments

Install the supported OS, BT2009 prerequisites and BizTalk 2009 server itself as described in the BizTalk 2009 installation documents found here.

Install the WCF LOB Adapter SDK SP2 and then BizTalk Adapter Pack 2.0 as described in this blog post.

Afterward, install all the SAP RFC Runtime and other component downloadable from SAP Marketplace.  The detail components you need are in installguide.htm of the SAP Adapter Pack downloable here.

Here is a little bit clearer sample instruction on what to do w/ the file downloaded.

If everything went right, Add Generated Item should work properly and so does Add Service Reference on non BizTalk WCF project.

0 Comments

I blogged regarding a particular error that you will received from not entering the correct Action during the WCF-SAP send port configuration in this post. but I didn't tell you what to put in there.

What should be in there is something like: http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/BAPI_NAME_YOU_WANT_TO_CALL.  Replace the last part with the appropriate value.

The easiest way I found to do this is by creating a WCF console application to consume an Adapter Reference to SAP and basically pick the BAPIs you are interested in and after it created the sapBinding.cs file, just open it and browse for the BAPI that you wish to map to WCF-SAP port, copy and paste the URI string that will look similar to the one above into the Action textbox of the WCF-SAP port setting.

If anyone know of a better way, please let me know.

0 Comments

I’m liking StackOverflow more and more.  Sort of addicted to it now.  You can really learn so much from answering other people questions and just browsing topics that interests you.

For example, today I learnt how to actually hide the Windows Taskbar using PInvoke and very easy way to cover the entire screen with your Windows Form application.

The following code can be used to hide and show the taskbar (supposedly work on Vista.  Tested on Win7):

public static class TaskBarHelper
{
    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string className, string windowText);

    [DllImport("user32.dll")]
    private static extern int ShowWindow(IntPtr hwnd, int command);

    [DllImport("user32.dll")]
    private static extern IntPtr FindWindowEx(IntPtr parentHwnd, IntPtr childAfterHwnd, IntPtr className,
        string windowText);

    private const int SW_HIDE = 0;
    private const int SW_SHOW = 1;

    public static void HideTaskBar()
    {
        HideWindow(GetTaskBarWindowHandle());
        HideWindow(GetOrbWindowHandle());
    }

    public static void ShowTaskBar()
    {
        ShowWindow(GetTaskBarWindowHandle());
        ShowWindow(GetOrbWindowHandle());
    }

    private static void HideWindow(IntPtr hwnd)
    {
        ShowWindow(hwnd, SW_HIDE);
    }

    private static void ShowWindow(IntPtr hwnd)
    {
        ShowWindow(hwnd, SW_SHOW);
    }

    private static IntPtr GetTaskBarWindowHandle()
    {
        return FindWindow("Shell_TrayWnd", "");
    }

    private static IntPtr GetOrbWindowHandle()
    {
        return FindWindowEx(IntPtr.Zero, IntPtr.Zero, (IntPtr) 0xC017, "Start");
    }
}

And to cover the entire screen with your application (Full Screen mode) you can use the following:

public static class FormHelper
{
    public static void ShowFullScreen(Form form)
    {
        form.FormBorderStyle = FormBorderStyle.None;
        form.WindowState = FormWindowState.Maximized;
    }
}