Sunday, December 30, 2007

50 Great E-Businesses

I just started reading this book named "50 Great E-Businesses and the Minds Behind Them" written by Emily Ross and Angus Holland. The book uses 50 case studies to offer you the stories behind all these successful e-businesses which is quite attractive for a web developer like me to read. Strongly recommended. Take Wotif as an example, the book talks about how the Wotif's founder Graeme Wood came up with the idea of selling last minutes vacate hotel rooms. The initial cost was Aus$200,000 and is mainly for web development. The site went on live in March 2000, weeks after the dotcom crash, there was only one booking made through the site for the first week, the book explores how Wood managed to sell his site and gone through the difficult time and later got its stocks listed on the ASX.



Great fun to read, highly recommended.

Wednesday, December 26, 2007

volatile keyword

  • The volatile keyword indicates that a field can be modified in the program by something such as the operating system, the hardware, or a concurrently executing thread.
  • The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.
  • The volatile modifier is usually used for a field that is accessed by multiple threads without using the lock statement to serialize access. Using the volatile modifier ensures that one thread retrieves the most up-to-date value written by another thread.
  • The type of a field marked as volatile is restricted to the following types:
    * Any reference type.
    * Any pointer type (in an unsafe context).
    * The types sbyte, byte, short, ushort, int, uint, char, float, bool.
    * An enum type with an enum base type of byte, sbyte, short, ushort, int, or uint.

C# Programmer's Reference - volatile

Static Members (2) Things to note

Static members

  • A static member belongs to the class rather than to the objects of the class.
  • Static members are also known as class members and non-static members are known as instance members.
  • Indexers in C# can't declared as static.
  • All un-initialized static fields automatically get initialized to their default values when the class is loaded first time.
  • A derived class can inherit a static member.
  • But a static member in C# can't be marked as override, virtual or abstract. However it is possible to hide a base class static method in a derived class by using the keyword new.

Static constructor

  • A static constructor is used to initialize any static data, or to perform a particular action that needs performed once only.
  • It is called automatically before the first instance is created or any static members are referenced.
  • A static constructor does not take access modifiers or have parameters.
  • A static constructor cannot be called directly.
  • The user has no control on when the static constructor is executed in the program.
  • A typical use of static constructors is when the class is using a log file and the constructor is used to write entries to this file.
  • Static constructors are also useful when creating wrapper classes for unmanaged code, when the constructor can call the LoadLibrary method.

Static Constructors (C# Programming Guide)

C# - Static Members

Tuesday, December 25, 2007

Static Members (1) A Test Program


using System;

namespace Console_CSharp

{

class TestStatic

{

static void Main(string[] args)

{

//----------Test_StaticField-----------

Console.WriteLine("{0},{1},{2}", Test_StaticField.x, Test_StaticField.y, Test_StaticField.z); //1,2,0

Test_StaticField t = new Test_StaticField(3);

Console.WriteLine("{0},{1},{2}", Test_StaticField.x, Test_StaticField.y, Test_StaticField.z); //3,3,3

//----------Test_StaticConstructor-----------

Console.WriteLine("{0},{1}", Test_StaticConstructor.x, Test_StaticConstructor.y); //100,200

//----------Test_StaticMethod-----------

Test_StaticMethod.Method(); //10,20

//----------Test_StaticProperty-----------

Test_StaticProperty.X = 20; //SET

int val = Test_StaticProperty.X; //GET

//----------TestInheritance-----------

Console.WriteLine(SubTest_Inheritance.x); //25

//----------Test_InheritanceHide-----------

SubTest_InheritanceHide.Method(); // Derived static method

Console.WriteLine(SubTest_InheritanceHide.x); //50

Console.ReadLine();

}

}

}

//--------------------------------------------------------------------------------------------------

class Test_StaticField

{

public static int x = 1;

public static int y = 2;

public static int z; //default value = 0 before initialization

public Test_StaticField(int i)

{

x = i; //normal constructor can access static members

y = i;

z = i;

}

}

//--------------------------------------------------------------------------------------------------

class Test_StaticConstructor

{

public static int x;

public static int y;

public int z; //default value = 0 before initialization

static Test_StaticConstructor() //static constructor is to initialize the static members

{

x = 100;

y = 200;

//z = 300; //compile error - static constructors can't access non-static data members

}

}

//--------------------------------------------------------------------------------------------------

class Test_StaticMethod

{

private static int x = 10;

private static int y = 20;

private int z = 30;

public static void Method()

{

Console.WriteLine("{0},{1}", x, y); //cannot access z here, static method can access only static members

}

}

//--------------------------------------------------------------------------------------------------

class Test_StaticProperty

{

public static int X

{

get

{

Console.WriteLine("GET");

return 10;

}

set

{

Console.WriteLine("SET");

}

}

}

//--------------------------------------------------------------------------------------------------

class Test_Inheritance

{

public static int x = 25;

}

class SubTest_Inheritance : Test_Inheritance

{

}

//--------------------------------------------------------------------------------------------------

class Test_InheritanceHide

{

public static int x = 25;

public static void Method()

{

Console.WriteLine("Base static method");

}

}

class SubTest_InheritanceHide : Test_InheritanceHide

{

public new static int x = 50;

//A static member can't be marked as override, virtual or abstract.

//However it is possible to hide a base class static method in a derived class by using the keyword new.

public new static void Method()

{

Console.WriteLine("Derived static method");

}

}

C# - Static Members

Escape Characters


Modifiers







Modifiers
C# to VB.NET
  • Internal (Friend in VB) types or members are accessible only within files in the same assembly

Constructors (1) Default Values Table




  • If you do not provide a constructor for your object, C# will create one by default that instantiates the object and sets any member variables to the default values listed here: Default Values Table (C# Reference).
  • Static classes and structs can also have constructors.

Formatting Numeric Results Table


You can format numeric results by using the String.Format method, or through the Console.Write method, which calls String.Format.

Singleton Pattern (3) Things to note

  • The constructor could be protected or private
  • Do not implement ICloneable interface
  • Do not use Serialization
  • Will create more instances in a multi-threading environment

This article will talk about how to program a singleton into a fully lazily-loaded, thread-safe, simple and highly performant version: Implementing the Singleton Pattern in C#

Monday, December 24, 2007

Singleton Pattern (2) Lazy Initialization

Declarative Code - Lazy Initialization (Craig Shoemaker)

"You have a holder for an object or data that is not filled with the contents until the code makes a request to the property or object. Thus the code is "lazy" because the work is not done unless the procedure explicitly requires it. No wasted data access or initialziation here."

Javascript example:

window.onload = Window_Load;

function Window_Load()

{

txtTitle().value = "Title";

}

var mTitle = null;

function txtTitle()

{

if(mTitle == null)

{

mTitle = document.getElementById("txtTitle");

}

return mTitle;

}

C# example:


private Customers mCustomer = null;

private Customers Customer

{

get

{

if(this.mCustomer == null)

{

this.mCustomer = (Customers)ObjectBroker.GetObject(typeof(Customers),primaryKey);

}

return this.mCustomer;

}

}

private void Page_Load(Object sender, System.EventArgs e)

{

this.txtCustomer.Name = this.Customer.Name;

}

Singleton Pattern (1) Structure


using System;

namespace DoFactory.GangOfFour.Singleton.Structural

{

class MainApp

{

static void Main()

{

// Constructor is protected -- cannot use new

Singleton s1 = Singleton.Instance(); //this will call: instance = new Singleton();

Singleton s2 = Singleton.Instance(); //this will use the reference created above

if (s1 == s2)

{

Console.WriteLine("Objects are the same instance");

}

Console.Read();

}

}

//-----------------------------------------------------------------------

class Singleton

{

//static field

private static Singleton instance; //use static because we don't want to create instance of the class

// protected constructor

protected Singleton()

{

}

//static method

public static Singleton Instance() //use static because we don't want to create instance of the class

{

// Uses lazy initialization

if (instance == null)

{

instance = new Singleton();

}

return instance;

}

}

}

Singleton

Friday, December 21, 2007

A sequence column

I learnt something from one of our senior developers from Elcom. Let me give you an example.
Say we have a very simple table called MenuItem which may contains:
  • MenuID
  • MenuName

This table may be used to populate the menu items on top of each web pages. Now if we want to order the menu items, we need to add a sequence column, so you may want to add 1,2,3... for each items in the menu table. Now what if we want to add an item in future that needs to be in between of these items, you will need to reorder a lot of the columns, so instead of add 1,2,3.. you can add 10,20,30.. so that you have more flexibility in the future. Another thing is that since the number of menu items will be very limited, the data type should be tinyint.

Tuesday, December 18, 2007

Generics

ArrayList vs. List<T>

List<T> has three major benefits:


  • Code reusability
  • Type safety: compile-time type checking
  • Efficiency: avoid casting, boxing and unboxing

Monday, December 17, 2007

.NET Framework Type (1) Int32, Byte

1) Int32 Structure

  • Represents a 32-bit signed integer. (4 bytes)
  • Namespace: System
  • Assembly: mscorlib (in mscorlib.dll)
  • Range: -2.14 billion to 2.14 billion (-2,147,483,648 to 2,147,483,647)

2) Byte Structure

  • Represents an 8-bit unsigned integer. (1 byte)
  • Namespace: System
  • Assembly: mscorlib (in mscorlib.dll)
  • Range: 0 to 255

[SerializableAttribute]

[ComVisibleAttribute(true)]

public struct Int32 : IComparable, IFormattable,

IConvertible, IComparable<int>, IEquatable<int>



[SerializableAttribute]

[ComVisibleAttribute(true)]

public struct Byte : IComparable, IFormattable,

IConvertible, IComparable<byte>, IEquatable<byte>

Mapping SQL Server Data Types to .NET



Friday, December 14, 2007

Managing Software Projects (1)

As a .NET developer, it is generally better for you to know what a project manager is responsible for and what problems they need to solve, so that you can work more collaboratively and efficiently with them.

We often hear about software projects that are late, over budget, or unable to satisfy customer needs. Why do so many software projects fail?

  • unclear objectives
  • bad planning
  • new technology
  • a lack of a project management methodology
  • insufficient staff

Various aspects of project management, including

  • effort estimation
  • risk management
  • project monitoring
  • configuration management
  • Although each proposed technique solves the problem it is designed to solve, it is not clear how to combine these techniques into a practical and workable process.
  • For effective project management, the need of the hour is a practical, what is needed is a balanced process that covers the management of the entire project from inception to completion.

What is a project management process?

  • A process encapsulates what the engineers and project managers have learned about successfully executing projects. Through the processes, the benefits of experience are conferred to everyone, including newcomers in the organization. These processes help managers and engineers emulate past successes and avoid the pitfalls that lead to failures.
  • The project management processes specify how to:
  • set milestones
  • organize personnel
  • manage risks
  • monitor progress
  • Project managers actually want to use processes but only if they're reasonable and will help them execute their projects better.

Benefits of having processes in place:

  • Processes lower your anxiety level. The checklists inevitably cover 80 percent of what needs to be done. Hence, your task reduces to working out the remaining 20 percent.
  • A process may have some extra steps, but you will not always know beforehand which ones are not needed, and hence you will increase your risks by taking shortcuts.

Software Project Management in Practice

Online Spending Increasing in Australia



Online Spending Increasing in Australia
SMEs are spending up online
Aussies' online spending tops $11 billion

Thursday, December 13, 2007

SharePoint Object Model



SharePoint is much more than just an application, it is an application framework. That essentially means that SharePoint doesn't truly shine until you begin extending its reach and influence and integrating it with other applications and solutions.

  • The Microsoft.Office.Server namespace is the root namespace of all Office Server objects.
  • Microsoft.SharePoint is the root namespace for all WSS objects.
  • Another reason you might find yourself creating code that utilizes the SharePoint object model is if you are creating Web Parts.
  • The only practical way to consume SharePoint data and functionality from a remote client is to use the SharePoint web services.
  • You might still want to expose specific SharePoint functionality contained in the object model in your own custom web service.
  • The object model is not designed to support Remoting. If you need to expose a portion of the object model that you can't easily access with one of the stock web services, you should create your own web service rather than attempting to use Remoting.

Setting Up a Local Development Environment:

  • The biggest advantage to the local development environment is the debugger.
  • Developers will often have their own Windows Server 2003 installations that are rough approximations of the target environment so that they can have the benefits of coding locally.
  • Browse to C:\program files\common files\microsoft shared\web server extensions\12\isapi, select the Microsoft.SharePoint.dll Assembly and add a reference to your solution.

Setting Up a Remote Development Environment:

  • A remote development environment is a development environment that is not on a SharePoint server.
  • Just need to copy the Microsoft.SharePoint.dll Assembly from the server to your development PC, and reference it from there.

Microsoft SharePoint 2007 Development Unleashed

Tuesday, December 11, 2007

WatiN




It is abosolutly amazing what you can do with WatiN, you can write a simple automated testing case in a matter of second by using this example.
You just need to create a console app, then fire up the app, it will open google in IE and type the 'search text' you want, and click the search button for you automatically. But it only works with IE.

Saturday, December 8, 2007

Development Tools

Open Source Software in C# has a hugh list of C# tools that you can use.
More links:

Here is a list of development tools/technology I have used or just know of:

Testing/Logging

Compare

Code generator

  • CodeSmith

Screen Shot

.NET

Html Editor

  • NotePad ++
  • UltraEdit

Source Control

  • Visual SourceSafe
  • CVS
  • SVN

.NET Web Control

Print To Pdf

Regex

VB/C# converter

  • Instant C#
  • Instant VB

Build tools

  • TFS
  • CruiseControl.NET

PowerShell

  • Powershell is a .NET application.
  • You can access .NET class through the powershell command line.
  • You can embed powershell script in C#/VB.NET.
  • It could be used to change the web.config settings through the command line
Windows PowerShell

Windows PowerShell

Deployments made easy

Working with web.config to switch

Deployment made simple using Powershell

Managing ASP.Net connection strings with Powershell (1)

Tuesday, December 4, 2007

Using Session State (1)

This HttpSessionState class supports the following properties (this is not a complete list):

  • CookieMode—Enables you to specify whether cookieless sessions are enabled. Possible values are AutoDetect, UseCookies, UseDeviceProfile, and UseUri.
  • Count—Enables you to retrieve the number of items in Session state.
  • IsCookieless—Enables you to determine whether cookieless sessions are enabled.
  • IsNewSession—Enables you to determine whether a new user session was created with the current request.
  • IsReadOnly—Enables you to determine whether the Session state is read-only.
  • Keys—Enables you to retrieve a list of item names stored in Session state.
  • Mode—Enables you to determine the current Session state store provider. Possible values are Custom, InProc, Off, SqlServer, and StateServer.
  • SessionID—Enables you to retrieve the unique session identifier.
  • Timeout—Enables you to specify the amount of time in minutes before the web server assumes that the user has left and discards the session. The maximum value is 525,600 (1 year).

The HttpSessionState object also supports the following methods:

  • Abandon—Enables you to end a user session.
  • Clear—Enables you to clear all items from Session state.
  • Remove—Enables you to remove a particular item from Session state.

Here are the things to note when using session:

  • Unlike cookies, Session state has no size limitations. You could store gigabytes of data in Session state.
  • When you use Session state, a session cookie named ASP.NET_SessionId is added to your browser automatically. This cookie contains a unique identifier. It is used to associate the correct data with the correct user.
  • The main application programming interface for working with Session state is theHttpSessionState class.
  • The Abandon() method enables you to end a user session programmatically. For example, you might want to end a user session automatically when a user logs out from your applicationto clear away all of a user's session state information.

Handling Session Events:

  • There are two events related to Session state that you can handle in the Global.asax file: the Session Start and Session End events.
  • The Session End event is not raised by all session store providers. The event is raised by the InProc session store provider (the default provider), but it is not raised by the StateServer or SQLServer state providers.

Controlling When a Session Times Out:

  • By default, session will time out in 20 mins, you can verify this by examining the IIS settings. The disadvantage of increasing the Session timeout is that more memory is consumed by your application. The longer the Session timeout, the more server memory is potentially consumed. You can specify the Session timeout in the web configuration file or you can set the Session timeout programmatically.

Using Cookieless Session State:

  • If you want Session state to work even when cookies are disabled, then you can take advantage of cookieless sessions. When cookieless sessions are enabled, a user's session ID is added to the page URL.
  • You enable cookieless sessions by modifying the sessionState element in the web configuration file. The sessionState element includes a cookieless attribute that accepts the following values:
  • AutoDetect—The Session ID is stored in a cookie when a browser has cookies enabled. Otherwise, the cookie is added to the URL.
  • UseCookies—The Session ID is always stored in a cookie (the default value).
  • UseDeviceProfile—The Session ID is stored in a cookie when a browser supports cookies. Otherwise, the cookie is added to the URL.
  • UseUri—The Session ID is always added to the URL.
  • When you enable cookieless session state, you should also enable this attribute regenerateExpiredSessionId="true", because it can help prevent users from inadvertently sharing session state.

ASP.NET 2.0 Unleashed

Monday, December 3, 2007

BI (4) Client tools for end users

Cubes in Excel

  • You can use Excel 2003 which allows user to use pivot tables to flatten the cubes.
  • You must install the Office component called Microsoft Query for connecting to SSAS cubes in Excel 2003
  • Microsoft Office 2007 fully supports data mining

Cubes in SSRS

  • SSRS 2005 has deeply integrated support for generating reports using SSAS cube as a data source
  • Visual query design of MDX (Multidimensional Expressions) language

Microsoft clients for SSAS

  • Data Analyzer
  • SharePoint - Web parts that include data generated from SSRS
  • Performance Point Server

You can also develop custom clients

  • Report Viewer controls in .NET 2.0 (win/web form)

Sunday, December 2, 2007

BI (3) Implement Sample Cube

1. Open VS2005 or BIDS
2. Open samples from C:\Program Files\Microsoft SQL Server\90\Tools\Samples
3. Choose the Enterprise Edition sample

4. You will see a number of source folders:

5. Test connection by right click the Adventure Works.ds under the Data Sources folder and follow the dialog to test the connection
6. Take a look at the data source views, it can be used for people who doesn't have admin access to the data source to review the data and adjust the schema.

7. In the above window, choose a table and right click it and choose explore data, this will take you to this window:

8. If you double click the first sample cube, you can see that the fact table are highlighted in yellow, and dimension tables are highlighted in blue. There are a number of design tabs on the top in the cube designer.

9. At this point we just want to look at the result of the cube, so we click the browse tab. You will notice that an error window will appear. That is because we need to deploy the solution to make it available to the SQL Server Analysis Services before you can actually see the result.
10. Right click the solution and click deploy, this will take 5-10 mins, a green check mark will appear once the deployment completed, otherwise you will get a red X.
11. Once deployed, you can see on the left hand side, we got metadata browser that consists of a list of the measures and the dimensions. Drag one or more measure tables and drop them onto the totals or detail fields in the right window. Drag one or more dimension tables and drop them onto the row fields or column fields or filter fields or the top dimension slicer window.

12. There are two ways to look at dimension information, one is by looking at individual attributes, the other is by looking at the roll-ups hierarchies.

Saturday, December 1, 2007

BI (2) OLTP vs. OLAP

Purpose

  • OLTP: To support business processes.
  • OLAP: To assist with making better business decisions.


Where the data comes from

  • OLTP: Online entry, point of sale devices, data loggers etc.
  • OLAP: OLTP databases, flat files.


Criticality

  • OLTP: Generally considered missioncritical. Regularly back up to protect from data loss.
  • OLAP: Important to decision support; however; organizations can continue to operate without it. Back up less often than OLTP databases.


Database Size

  • OLTP: Relatively small database size if the history information is regularly archived. Can quickly bloat if history is not removed.
  • OLAP: OLAP database can be very large. Contains historical information generated by various OLTP databases within an organization.


Concurrent Users

  • OLTP: Potentially very high numbers of users. Some OLTP databases support thousands of concurrent users.
  • OLAP: OLAP databases support a much lower number of users than their OLTP counterparts.


Response Time

  • OLTP: All application queries should complete in less than a second.
  • OLAP: Queries commonly take seconds, minutes, and hours.


Data Changes

  • OLTP: High number of insert, update, and delete operations are generate by user transactions.
  • OLAP: Very low number of data changes generated by users. Data is updated by bulk import batches.


Ad hoc querying

  • OLTP: Poor ad hoc query performance. Indexes are only created to support defined application queries.
  • OLAP: Very good ad hoc query performance. Indexes are created to support queries possible queries.


Querying complexity

  • OLTP: Data is highly normalized requiring many joins to retrieve information.
  • OLAP: Data is denormalized requiring few joins to retrieve information.

Professional SQL Server 2000 Data Warehousing with Analysis Services

BI (1) Intro

Why use OLAP?

  • Queries run 1000% faster
  • Click to query
  • Near real-time information
  • Reduce stress on your OLTP system

Two kinds of tables form a data warehouse:

Fact tables

  • Also called measures.
  • The fact table is the table that holds the facts of the business that need to be analysed, such as sales, profits, amount of storage at hand, etc.
  • This type of data is often numeric.
  • The values are quite often subject to aggregation (pre-calculating roll-ups of data over hierarchies, which subsequently yield improved query results).
  • Building the fact table is an important step towards building your data warehouse.

Dimension Tables

  • A dimension is a collection of properties along which we conduct our analysis of the facts.
  • Dimensions allow us to view the fact in different contexts.
  • Common dimensions used in sales -related data marts include:
  • Time
  • Geography
  • Customer
  • Salesperson
  • Scenarios such as actual, budgeted, or estimated numbers

OLAP Schemas

  • Star Schemas unite dimensions and facts
  • De-normalized schemas (deliberately duplicate data for fast query result, so no need to join tables)

Professional SQL Server Analysis Services 2005 with MDX

Professional SQL Server 2000 Data Warehousing with Analysis Services

Friday, November 30, 2007

BizTalk Server 2006 (14) Activity Monitoring

BAM:

  • The information worker needs to have answers to questions such as:
  • How many orders are there over $10,000.00?
  • How well are our products selling?
  • How long does it take for an order to be delivered to the customer from the time the order is placed?
  • In order to do so, the information worker can use the Business Activity Monitoring (BAM) addin within Excel.

HAT:

  • The administrator needs to answer the following questions:
  • Are all of the orchestrations, pipelines, and maps running?
  • Are the messages being processed in a timely manner?
  • Were any of the orchestration terminated accidentally or abnormally?
  • To do so, the administrator is able to use a tool called the Health and Activity Tracker (HAT) to run predefined queries and view the overall health of a system

Professional BizTalk Server 2006

Thursday, November 29, 2007

BizTalk Server 2006 (13) Business Rules

Vocabulary:

  • Collection of definitions for rule conditions and actions
  • Assigns a friendly name to the definitions

Policy:

  • Contains logical grouping of rules
  • Are published and deployed to a production environment

Rule Store:

  • Place to store policies and vocabularies
  • Stored in SQL Server by default
  • Can be exported and imported to/from SQL Server

Rules Engine:

  • Applies rules to the available facts and evaluates the result
  • Determines the necessary actions to take based on the evaluation
  • Executes the action

Business Rules and Orchestrations

  • You can incorporate business rules within your orchestration to allow flexibility to read and process constantly changing values instead of having to recode/recompile the orchestration
  • Based on a business rule, you can determine when a process requires a delay

Steps to integrate business rules are as follows:

  • Identify the business logic to be represented
  • Identify data sources for rule elements
  • Create rules from vocabulary definitions
  • Test and debug with facts
  • Publish and deploy policy
  • Bind send and receive shapes to ports
  • Call the rule from within an orchestration

Steps to integrate business rules with an orchestration are as follows:

  • Add a reference to the rule engine assembly
  • Make the orchestration transactional
  • Add an atomic scope
  • Add a message assignment shape
  • Create a message instance

Professional BizTalk Server 2006

Tuesday, November 27, 2007

BizTalk Server 2006 (12) Web Services

  • Using BizTalk Server 2006, you are able to publish an entire orchestration or a schema as a web service

In order to cosume a web service you need to:

  • Call a web service from an orchestration
  • Use the Universal Description, Discovery, and Integration (UDDI) to access service information
  • Specify if it will be a request-only (one-way) or a request-response (two-way) comsumption
  • Add a web reference
  • Create a web port
  • Create needed message variables
  • Construct a web message
  • Add send and receive shapes

Message Variables:

  • Used to store information sent and received by a web service
  • By using a web service, the orchestration never deals with the actual schema but rather message instances
  • Needed to construct a message whenever you introduce a message to the orchestration

Web message:

  • Can be either simple or complex .NET types

Send and Receive shapes:

  • Are used to send and receive requests to/from a web service
  • Are created using the Ochestration Designer
  • Are linked to a web port

Professional BizTalk Server 2006

Monday, November 26, 2007

BizTalk Server 2006 (11) Transaction

Using BizTalk Server 2006, multiple tasks can be combined into a unit of work known as a transaction. There are two primary types of transactions supported by BizTalk and they are:

  • Atomic
  • Long-Running

Scopes:

  • A scope is a framework for organizing actions
  • Scopes are primarily used for transactional execution of tasks and exception handling
  • A scope can contain one or more blocks that has a body and can have any number of exception handling blocks

Atomic Transactions:

  • guarantees rollback in the event the transaction process fails
  • Used when ACID properties are required

ACID:

  • Atomic - the entire transaction will succeed or fail as a whole
  • Consistent - provides a consistent view of the data and always leaves the data in a consistent state
  • Isolated - all transactions appear as though they are running by themselves
  • Durable - once the transaction is committed, the data is recoverable in the event of failure

Long-Running Transactions:

  • Are transactions that need to run for extended periods of time
  • Are used when ACID properties are not required
  • Data is not locked and can be modified
  • Individual steps are committed during the time the transaction is being processed
  • The transaction itself is not committed until the last statement has been completed
  • Within them, they can contain both atomic and other L-R transactions

Professional BizTalk Server 2006

Sunday, November 25, 2007

BizTalk Server 2006 (10) Orchestration

To develop a BizTalk Orchestration, you need to complete the following steps:
  • Define schemas to describe message formats
  • Add shapes to represent business process actions
  • Assign or transform data between messages
  • Define send and receive ports for messages
  • Define orchestration variables and types
  • Bind the send and receive shapes to ports
  • Build the orchestration and test it for errors

Professional BizTalk Server 2006

BizTalk Server 2006 (9) Pipelines

Understanding BizTalk Server 2006
Professional BizTalk Server 2006

Pipelines:
  • Components within the BizTalk system that are able to process messages either when they are received or just before they are sent out
  • Pipelines divide processing into several categories, known as processing stages
  • They also specify the sequence in which each stage of the work is performed

Processing stages:

  • Define logical work groups
  • Determine which components can belong to a stage
  • Specify how the pipeline components in the stage are run

Stages in a pipeline include:

  • Encrypting and decrypting
  • Encoding and decoding
  • Assembling and disassembling

Receive Pipeline:

  • Receive pipeline takes the initial message, performs transformations, and disassembles the raw data into zero, one, or multiple messages
  • These are XML messages that are then sent to be processed through the BizTalk server

Receive Pipeline Stages, each receive pipeline consists of the following four stages:

  • Decode: used to decode MIME encoded messages
  • Disassemble: used to normalize messages from native incoming format to BizTalk Server's internal XML format
  • Validate: used to verify an incoming document against a specified schema
  • Resolve party: used to verify that the incoming message was sent from a trusted source

Send Pipeline:

  • Responsible for processing documents before they are sent to their destination
  • Each send pipeline accepts one message and produces one message to be sent

Send Pipelines consist of three empty stages:

  • Pre-assemble: used to conduct processing on the message needed before it is assembled
  • Assemble: used to assemble the BizTalk XML document into a XML, flat-file, or a BizTalk Framework (BTF) format
  • Encode: used to encode the document to MIME/SMIME and to digitally sign messages

Using a Default Pipeline

Pass-through receive:

  • Contains no components
  • No decoding, validation, or disassembling required
  • Used when both send and receive destination are known and is commonly used in conjunction with the pass-through send pipeline

Pass-through send:

  • Contains no components
  • No encoding or assembling required
  • Used for basic message routing
  • Commonly used in conjunction with the pass-through receive pipeline

XML receive:

  • Contains the XML disassembler component
  • Party resolution component for security
  • No decoding or validation stage

XML send:

  • Contains the XML assembler component (Preassembling, Serializing, Encoding)

Saturday, November 24, 2007

BizTalk Server 2006 (8) BizTalk Schema

  • BizTalk utilizes the XML Schema Definition (XSD) to define the structure of all message that it processes
  • The XSD message structures are known as 'schemas' within BizTalk
  • It is by the use of these XML Schemas that BizTalk is able to conduct all of its integration operations

BizTalk supports the following types of schemas:

  • XML - (XSD)
  • Flat-file - structure of a message using flat-files that are delimited or positional
  • Property - special type of schema that identifies specific field elements that you want to make available to a BizTalk Orchestration

Different Types of BizTalk Schemas

BizTalk Server 2006 (7) BTS Maps

Through BTS Maps:
  • You can start creating a map in vs2005, and then open a source schema and open a destination schema
  • Then you can simply drag and drop item from the source item to the destination item to map them.
  • If you need to do furthur tasks when mapping such as string concatenation, multiplication of numbers, you will need to drag a Functoid from toolbox to the mapping grid and drag an item from the source schema to the Functoid, and then drag a line from this Functoid to the destination item.
  • Note that if more than one Functoid is used, the order of the placement of the Functoid matters.
  • You can program your custom Functoid to cater for specific needs.
Functoids in BizTalk

Writing Custom BizTalk Functoids

BizTalk Server 2006 (6) Flat File Schema




This walkthrough shows you how to create a flat file schema from a document instance using the BizTalk Flat File Schema Wizard:
Walkthrough: Creating a Flat File Schema From a Document Instance

BizTalk 2006 Flat File Wizard: How to model a complicated flat file schema

BizTalk Flat File Schema Wizard UI Help

Notes:

  • The Wizard is a very powerful tool that will saves lots of development times
  • You could generate a xsd schema from the flat file, such as a purchase order txt file which may be generated by a SAP system

The wizard will help you do the following:

  • Import a complex flat file

  • Specify a tag identifier

  • Define child elements
  • Define repeating records

  • Select Record Format Page: relative positions is very powerful

  • Validate the schema and the flat file instance
  • View the instance
  • The 'Allow Early Termination' property of the schema is very useful, it allows the repeating record to have a flexible number of digits in a certain element in a record row.