Blog Home  Home |  Breeze Home RSS 2.0 Atom 1.0 CDF  
Mick's Breeze Blogs - Biztalk/Sharepoint/... - Monday, February 12, 2007
Things hard and not so hard....
 Monday, February 12, 2007

If you're waking up after the new year and thinking about looking at SPS v3/MOSS 2007, it appears that you're not alone.

Breeze Training has put on extra courses due to popular demand. Breeze are partnering with Dimension Data Learning Solutions to bring these to you around Australia!

‘Additional dates have been put on because the 1st bootcamp sold out with a waiting list. For those that missed out we now have an additional date in Sydney for the end of Feb. If you are keen, book quickly as seats are limited.

Here’s the link Microsoft Office SharePoint Server 2007 Boot Camp (fixed link) check for dates in a city near you.

Code

State

Start Date

Status

MSSHARE07_BOOTCAMP_1

NSW

12/2/2007

SOLD OUT

MSSHARE07_BOOTCAMP_1

WA

26/2/2007

SOLD OUT

MSSHARE07_BOOTCAMP_1

VIC

27/2/2007

Few Places

MSSHARE07_BOOTCAMP_1

NSW

27/2/2007

Few Places

MSSHARE07_BOOTCAMP_1

QLD

12/3/2007

 

MSSHARE07_BOOTCAMP_1

ACT

20/3/2007

SOLD OUT

MSSHARE07_BOOTCAMP_1

WA

26/3/2007

SOLD OUT

MSSHARE07_BOOTCAMP_1

ACT

30/4/07 

 

MSSHARE07_BOOTCAMP_1

WA

7/5/2007

 

Monday, February 12, 2007 10:53:22 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   MOSS | Office | Other | Training  | 
 Sunday, February 11, 2007

MOM just got that much better!! - grab the following WebPart for Sharepoint V2 + V3.

MOM Web Part Power Toy 

Enables you to show MOM data from within SharePoint leveraging the MOM 2005 SDK tools.

Find it in the MOM 2005 resource Kit

http://www.microsoft.com/mom/downloads/2005/reskit/default.mspx
Sunday, February 11, 2007 9:41:01 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]    | 

It's all pretty easy actually - if you have IE7 look in the drop down list of search providers (top RHS) and you'll see me smile_regular 

Dont know whether you'll use it - but it saves me all the time when I'm out on site and "I know I put that somewhere....." thought comes into my head.

The way to set your own provider up:

  1. Create an XML Sample Provider file - from here 
  2. Upload the file to your blog somewhere - let's say the root.
  3. Add the line to the top of the page
    <link rel="search" title="<your title>" href="<url to searchProvider.xml>" type="application/opensearchdescription+xml" />
  4. Save all and you get a nice little drop down entry like mine!

    Enjoy!
Sunday, February 11, 2007 9:23:12 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   Other | Tips  | 

Here's an per an Email from Eric earlier - grab it!

Hi all,

An updated version of the BizTalk Server 2006 CHM has been published and is available for download here.

Thanks,

Eric

Sunday, February 11, 2007 8:22:34 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [1]   BizTalk | Other  | 

Basically - it can act as a fast backup/restore using this feature. No need to trawl throughback through the tapes and yes....I know WSS 3.0 has 2 levels of Recycle.....BUT guaranteed those Users are fantastic creatures :)

We could put 7 recycle bins in.....

Check out http://support.microsoft.com/default.aspx/kb/929649

Sunday, February 11, 2007 8:14:13 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   Office | Tips  | 
Sunday, February 11, 2007 7:59:44 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   Office | Tips  | 
 Friday, February 09, 2007

I came across this several times while onsite the other day and we have used MSMQ extensively.

Fortunately there is a FIX from MS available (yay!!)
If you have the problem, get it!

FIX: Error message when you try to use the SC tool to stop the service for the BizTalk host instance in BizTalk Server 2006: "The service did not respond to the start or control request in a timely fashion"

Enjoy

Friday, February 09, 2007 12:39:16 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk  | 
 Thursday, February 08, 2007

A buddy of mine sent me this link
http://www.thesuperheroquiz.com/

Do the quiz and see who you come out to be.

I got SuperGirl!!!!!!! now I dont know whether that was who I am, or who I'd like to end up with :)

Thursday, February 08, 2007 9:02:53 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [4]   Other  | 
 Monday, February 05, 2007

We had a great session last Wednesday at Microsoft - I gave the above session.

As promised, here's the slide deck

 

 

 

Meeting 2007 Jan 31 - A Lap around WCF Adapters in BTS R2.zip (2.54 MB)
Monday, February 05, 2007 9:24:30 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Insights | Events | Training  | 

A collegue of mine pointed me in the direction of this whitepaper
http://msdn2.microsoft.com/en-us/library/bb220799.... that talks about

Building Interoperable Insurance Systems with .NET 3.0 Technologies
(me being onsite at the moment at a financial services client - this comes in super handy!)

Talks and walks through the design and developing tooling and problems faced during implementation.

A great article to get a feel for some of the issues at hand.(look past the SQLServer 2006 mentioned on page 2 :)

Enjoy.

Monday, February 05, 2007 2:43:11 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Insights | WinWF  | 
 Friday, February 02, 2007

Came across some great sql to dig into the state of documents and their libraries.

Things like - 'top 100 largest documents in all document libraries' plus lots more. Check it out

http://www.codeproject.com/dotnet/QueriesToAnalyze...

Cheers,

Mick.

Friday, February 02, 2007 4:03:47 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   MOSS | Tips  | 
 Sunday, January 28, 2007

While struggling to get all the links together and the correct version of all the accessories to .NET 3.0 RC1 (as this is what BTS requires).

I wanted to develop Workflow based solutions as well and noticed my friend Paul Andrew has read my mind in his post HERE

Here's a snip:

I have a Windows Vista RC machine and a Windows XP machine which I've installed these on. It's also the same install on Windows Server 2003 if you use that as your development environment.

Sunday, January 28, 2007 8:23:27 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [2]   .NET Developer | BizTalk | Tips | WinWF  | 
 Saturday, January 27, 2007

While researching something else I came across this problem. I've been wrestling with the Admin Console's *.MSI creation and for the most part it works really well.

The next step is to add custom installer actions, registry keys etc. stuff that exists as part of the MSI install.

Here's a handy tool from the Windows Installer SDK and a related CHM file that talks about
How to Edit the MSI

How to use the Orca database editor to edit Windows Installer files
http://www.codeproject.com/dotnet/MSIShortcuts.asp

Enjoy.

Saturday, January 27, 2007 8:41:27 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 

Hi folks just to let you know that there's has been a recent update to this, make sure you grab the latest copy. Sept. 06 is the latest I believe.

How handy to have all that material in a searchable CHM file!!! (might add it to my classroom images :) )

Get it here

Saturday, January 27, 2007 8:30:54 AM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   BizTalk | Tips  | 
 Wednesday, January 24, 2007

Updated a machine to all the latest patches/updates/hotfixes...whatever.
Rebooted (there's always that moment where you wonder "will it" or "wont it" startup again.......

My system gave me a great error message (worst thing is - this was working fine before the patches. Windows didnt care)

Wednesday, January 24, 2007 1:02:47 PM (AUS Eastern Standard Time, UTC+10:00)  #    Comments [0]   Other | Tips  | 
 Tuesday, January 23, 2007

While working on a BTS 2006 solution - I decided to use the SQL Adapter to call a stored Proc to update data.

While the SQL Adapter wizard is OK, there's no real reason to use it. I usually delete everything it creates, apart from the Schema for namespace samples. The Namespaces you specify through the wizard is there mainly for the SQL Adapter to figure out where the bits are for it to process, and where return results should be inserted into......

In alot of solutions I build, I usually have a single generic SQL Update Orchestration, not an Orch, Schema + Port for each type of SQL action required.

The trick to all this is how the SQL Adapter handles the messages sent to it. More details is found in the SQLXML documentation.

The paper back version:

Let's say I have two tables and a Stored Proc that I want to use within the SAME DB (if I want to talk to different DB's then we'd need to create a separate message for the different DB's to update due to the fact that the physical SQL Port (whether it be 'dynamic' or physical) e.g. SQL://ServerName/DB.......

Table A: PacMan Players
Fields -
Name, email

Table B: PacMan Scores
Fields - email, score

Stored Proc: UpdateScores
Params:
email, score, gametime

If these three were in the same DB here's the message(s) that you'd need to send to the SQL Adapter (could even be via CBR and not ALWAYS an Orch).

e.g. a sample message for stored procs.
<sqlRequest xmlns='http://micksdemos.sql'>
     <Updates>
            <UpdateScores email='jackiechan@j.com' score='54' gametime='1200' />
            <AnotherStoredProc p1='2' p2='aaa' p3='....' />
      </Updates>
      <Results>
                     <!-- **** Set to be ANY element here, with 'skip' processing set via the schema **** -->
      </Results>
</sqlResults>

e.g. a sample message for tables (further details on this message structure can be obtained from SQLXML Documents)
<sqlRequest xmlns='http://micksdemos.sql'>   
      <sync>
             <after>
                  <PacManScores email='jackiechan@j.com' score='22000' />
                  <PacManPlayers Name='mick' email='mick@b.com'  />
                  ...
             </after>
      </sync>
</sqlResults>

Now the interesting thing upon the results being returned for the called Stored Procs
We sent down batches of 400 updates to be performed via the stored proc method, and the results were supprising!!!!

We got a message back via one of the several Two-Way SQL Ports defined (each talking to a different database, being activated via CBR)

The return results was a Multi-part message with 400 parts!!!!!! In this case I was waiting for the return message within an Orchestration and then carrying on (mainly for BAM purposes to capture timings, average call times etc)

Do you know how hard it was to find an appropriate message type?????? If I made a multi-part message type with 5 parts it's not 400. If I made one with 400 parts (each part was a type of ANY) then I'm sure we'd have a batch in the future with 401 updates...boom! blows up.

So my challenge was to find the appropriate message type for this return message.....needless to say "I'm still looking"
I tried
(1) XLANGMessage - not serializable and bts wont compile in the IDE. This is the most logical cause then I could just go through the parts grabbing each result message.
(2) XLANGPart - long shot, individual part of a message, but also if a Message if declared as ANY type then this is the .NET Message Type that represents it behind the scenes.
(3) ANY - Compiled and run, error when the results message is returned, as the ANY type is still dealing with a single part message
(4) XMLDocument - yeah right! Sort of the one that you cover your eyes, run the test and peep through your fingers looking at the screen to see if it worked....or more like *hoped' it worked :)

Solution: Create a simple Custom Pipeline Component to Consolidate the Return parts
The Orchestration is fine to go on continuing processing.
The thing that stumped me is that I send in a Batch within a Single XML Document, why dont I get that as a response??

I could imagine when sending a single update this problem never occurs. (and it hasnt in the past)

Here's the custom pipeline component - this one's in VB.NET as per the client's coding standards on this.
(I use the VirtualStream found in the SDK)
- this is not production ready code. Further stress testing needed.

Here's a snippet showing the execute method (BTSHelper.VirtualStream - is the VirtualStream class from the BTS 2006 SDK)

#Region "IComponent Members"
Public Function Execute(ByVal pContext As IPipelineContext, ByVal pInMsg As IBaseMessage) As _
IBaseMessage Implements IComponent.Execute

Try
                   Dim msgReturn As IBaseMessage = InternalMyExecute(pContext, pInMsg)
                   Return (msgReturn)
Catch ex As Exception
                   Throw ex
End Try         

End Function

Private Function InternalMyExecute(ByVal pc As IPipelineContext, ByVal inMsg As IBaseMessage) As IBaseMessage
         Dim outMsg As IBaseMessage = Nothing
         Dim outPt As IBaseMessagePart = Nothing
         Dim outStream As BTSHelper.VirtualStream = Nothing
         Dim sw As StreamWriter = Nothing
         Try
               If (inMsg.PartCount > 1) Then 'combine all the parts into one - painful return results from SQL.
                          outMsg = pc.GetMessageFactory().CreateMessage()
                          outMsg.Context = inMsg.Context
                          outPt = pc.GetMessageFactory().CreateMessagePart()
                          outStream = New BTSHelper.VirtualStream()
                          sw = New StreamWriter(outStream)
                          sw.Write("<{0}>", _documentRootElement)
                          For i As Integer = 0 To inMsg.PartCount - 1
                                        Dim sptName As String = String.Empty
                                        Dim s As String = GetMessagePartAsString(inMsg.GetPartByIndex(i, sptName))
                                        sw.Write(s)
                          Next
                          sw.Write("</{0}>", _documentRootElement)
                          sw.Flush()
                          ' we DONT want to close the stream i.e. sw.close()
                          outStream.Seek(0, SeekOrigin.Begin)
                          outPt.Data = outStream
                          outMsg.AddPart("Body", outPt, True)
                          Return (outMsg)
                  Else 'single part
                         Return (inMsg)
                  End If
          Catch ex As Exception
                  inMsg.SetErrorInfo(ex) ' the inMessage is the one that gets reported on in BizTalk within the pipeline
                  EventLog.WriteEntry(_EVENTLOG_SOURCE, "SQL Combiner Exception Internal Execute- "          
                          + ControlChars.CrLf + ControlChars.CrLf + ex.Message, EventLogEntryType.Error)
                  Throw ex
          Finally

          End Try
End Function

Private Function GetMessagePartAsString(ByVal pt As IBaseMessagePart) As String
                 Dim xdoc As XmlDocument = Nothing
           Try
                       xdoc.Load(pt.GetOriginalDataStream())
                       Return (xdoc.DocumentElement.OuterXml)
           Catch ex As Exception
                       Throw ex
           Finally
                       xdoc = Nothing
                       GC.Collect()
           End Try
End Function

Public Sub CopyStream(ByVal src As Stream, ByVal dst As Stream)
            Try
              &nb