Monday, December 29, 2008

Documentum BizTalk Adapter V0.1 Available for Download

You can download the Documentum BizTalk Adapter from here

Installation Steps:

- Extract the zip file to the BizTalk Folder (X:\Program Files\Microsoft BizTalk Server)

- The registry file adds the necessary keys to the registry, please note that the registry file assumes that you installed BizTalk server on the C drive so if your installation is in a different drive just change the drive letter in the registry file

- Double click the registry file to create the keys

- Open the BizTalk Administration Console and go to Platform Settings, right click the Adapters folder and select New Adapter

- Enter “Documentum Adapter” in the Name, and select the Documentum Adapter from the list, click ok and restart the host instance

aa

- Now you should be able to see the Documentum Adapter in the list of the available adapters when you create a new send port

Tuesday, December 23, 2008

Documentum BizTalk Adapter V0.1 (Using the Adapter to send Custom Type Documents)

In the previous post I showed how we can use the adapter to send files to Documentum to be stored as documents of type “dm_document”.

A more practical use for the adapter is to use the adapter to send files to be stored as custom type documents, to do so we need to create a schema that reflects the custom type definition, I employed the adapter metadata wizard, here is a walkthrough on how to use this functionality:

- create a new empty BizTalk project, right click the project in the solution explorer and click add generated item

- The add adapter wizard will open, in the first step select the Dynamic Documentum Adapter

a

- On the next step enter the credentials to connect to Documentum and choose the Docbase

b

- In the next step select the custom type you want to import its schema (here I have a custom type purchaseorder that has the following attributes: ponumber(string), supplier(string), podate(time), items(repeating string) )

c

- click the finish button and the wizard will import the schema of the custom type to your project

d

- if you examined the schema generated by the adapter, you will find four xml elements: the first one is DocumentumName which should contain the name of the document to be saved in Documentum, the second element DocumentExtension should contain the extension of the file to be uploaded to Documentum, the third element DocumentContent contains the file content in base64Binary format, the fourth element DocumentAttributes is a complex element with sub-elements that correspondences to the custom attributes of the custom type 

e

- To test the adapter I will pass an XML file that matches the schema above, I will set the DocumentContent to be a simple string represented in base64Binary and will upload it to Documentum as a text file(DocumentExtension=”.txt”), of course a better way to do this is to use a custom pipeline component to automatically convert the physical file to its base64Binary but I will leave this to another post

- In the orchestration file created by the add adapter metadata wizard add a receive port that receives xml files from a certain folder

g

- add another port to send to Documentum, when prompted for the adapter type choose the existing adapter type SubmitpurchaseorderPortType this port type correspondences to the schema described earlier, set the communication direction to send request and receive response, specify the binding later

f

- The response returned from the Documentum adapter contains the r_object_id on the new document sent to Documentum, I will take this response and send it to a specific folder using a simple FILE send adapter, so my orchestration will look like the following

h

- Deploy the orchestration and go to the BizTalk Admin Console to configure it, choose BizTalkServerApplication as a host, and for the outbound logical port “SendToDocumentumPort” choose to create a new send port

i

- In the new send port properties window, choose the BizTalkServerApplication as the send handler and the XMLTrasmit, XMLReceive for the send and the receive pipelines, configure the adapter and set the adapter specific information (Docbase, username, password, Document path, etc.)

j

- Now start the orchestration and try to place xml file with our schema in the receive folder, go to Documentum to the location you specified in the send adapter configuration you will find a new document of type purchaseorder there that has the Name, file type, content and attributes that is specified in the xml file

Friday, December 19, 2008

Documentum BizTalk Adapter V0.1 (Using The Adapter to send Un-typed Documents)

I finished developing the features I planned for the first release of the Documentum BizTalk Adapter. I will try to package the adapter and make it available for download next week.

The adapter allows you to send documents to Documentum Content Server from within BizTalk Server 2006, you can use the adapter in two ways:

1- either send a file to be stored as a document of the general type “dm_document”

2- or use the adapter to send a file to be stored as a document of a certain custom type, in this case I use the add adapter metadata wizard to generate a schema for the selected custom type

In this post I will demonstrate the first way, to do so I created a BizTalk messaging solution that allows you to drop files in a specific folder and automatically these files are sent to Documentum to be stored as objects of type “dm_document”, here are the steps:

- From BizTalk server administration, I created a new Receive Port “ReceiveInputFile” and associated a receive location with this port, the receive location uses a FILE adapter that watches a certain folder (e.g. C:\Inbox\*.*), I used the “PassThruReceive” pipeline

1ntitled

- To send to Documentum I created a new static one way send adapter, choosed the Documentum Adapter as the transport type and the “PassThruTransmit” as the send pipeline, added a filter(BTS.ReceivePortName==ReceiveInputFile) to allow only messages coming from our receive port.

2Untitled

- To Configure the adapter properties, all I have to do is to click on the Configure button and the BizTalk automatically creates a UI based on my custom adapter configuration, through this UI I can choose the Docbase, set the username/password that i will use to connect to Documentum and specify the path inside Documentum where I want my files to be saved, as you can note from the image below I set the Document Name property to be equal to the BizTalk variable %MessageID%

3

- this all that I have to do, now if dropped any file in the folder the file immediately is transferred to Documentum to the location I specified in the adapter configuration

I will post another entry on how you can use the adapter to send documents of a certain custom type

Monday, November 17, 2008

It’s The Cloud Stupid!

It seems that this cloud hype is spreading everywhere, the idea of having your data, information, business and computing infrastructure seems, well, amazing, futuristic, scary, promising, you name it.

the fact is that the industry giants (Google, Microsoft, Amazon, EMC, IBM, others) are strongly embracing the cloud.

I’m more concerned in how third party companies and ISVs will change their business model to accommodate for the upcoming changes

Tuesday, September 02, 2008

Google Web Browser

Today google will release a beta version of its new web browser, keep your eye on this blog

Tuesday, August 19, 2008

Documentum DQL Query Custom Data Extension For SQL Server Reporting Services

When it comes to Reporting SQL Reporting Services is my favorite choice.

SQL Reporting Services has a plenty of data source types but unfortunately Documentum is not one of them, whenever we have to develop some reports based on the data in Documentum we first develop a web service that contains the necessary DQL queries and returns the result in a Data Set, then we create an XML data source that consumes this web service and use it in our reports.

Fortunately SQL Reporting Services allows you to extend its data access capabilities by developing a custom data extension (CDE)that retrieves data from your custom data source.

I developed a Custom Data Extension for Documentum that allows you to specify a Documentum Repository as a data source and provide your DQL query that will populate your report, I used the Reporting Services SDK Sample (FsiDataExtension) and this Article as starting points

You can download the extension from here

To install the extension:

you have to install the extension both on the report designer machine and the report server machine:

  • first install the DqlDataExtension assembly into the GAC (by simply dropping the file in the "C:\windows\assembly" folder)
  • on the report designer machine open the file "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\RSReportDesigner.config", locate the <Data> element, Add the following line after the last <Extension> element in the <Data> section.
<Extension Name="DQL"
Type="DqlDataExtension.DqlConnection,DqlDataExtension,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=4fc4d3cd73258ff6"
/>
  • on the report server machine open the file "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rsreportserver.config", locate the <Data> element and register the custom extension just like you did with the Report Designer configuration file.

To test the extension:

  • Create a new SQL Reporting Services project
  • Add a new shared data source, select the type of the data source to be "Documentum DQL Query", set the connection string to be "docbase=YOUR_DOCBASE_NAME;username=USER_NAME; password=PASSWORD;"
  • On the credentials tab set the credentials to No Credentials
  • Create a new report by selecting the shared data source you just created, in the Query string enter your DQL query, you can include parameters in the query string the same way you do in SQL queries, for example you can write the following
Select * from dm_document where  owner_name=@Owner 

  • select the report layout, the columns to display and finish the wizard
  • You can work normally with the report as you do with any SQL Reporting Services report
  • When you deploy the report to the report server, you have to remove the username and password from the connection string and move them to be stored securely on the report server

Friday, July 25, 2008

Documentum BizTalk Adapter

EMC Documentum (for those who don't know) is a great enterprise content management system which I started working with about two years ago.

I have to say that I'm a lucky that I started with Documentum in this specific period as Documentum is entering the SOA world with wide steps, recently they released the Documentum Foundations Services (DFS) which is their SOA Development Framework for Documentum. they are also developing a new Client for Information Workers (Code name Magellan) that contains the Web 2.0 functionality (wikis, blogs, social networking, RSS feeds, tagging and more)

For a quick info in Magellan Read the FAQ

You may know that I love BizTalk Server, I decided that I should develop a Custom Documentum BizTalk Adapter, I know that there may be simpler solutions to do this like creating a web service on top of Documentum (Like FirstDoc web service) but this will be a good way to practice creating a custom adapter for BizTalk Server 2006.

Here is my plan for the features to be implemented:

- Develop the send adapter that allows the user to specify the Docbase, Cabinet and File where the document will be saved

- Enhance the send adapter to support generating a schema for a custom document type.

- Develop the receive adapter (I haven't thought about this yet, any suggestions will be appreciated)

To accelerate things, I started with the good old Sample File Adapter provided with the BizTalk SDK as a sample for the Adapter Framework, changed the schema of transmit location to allow the user to enter the docbase, username, password, cabinet and folder where the document will be saved, over the past weekend i implemented the send port (currently I'm sending only xml files).

I will post my progress on the adapter here on my blog.

1ntitled

2Untitled

Thursday, July 03, 2008

Accessing the Properties of a Web User Control from JavaScript

I ran into this situation where I have a web user control (*.ascx file), in this control I defined some properties that will control the appearance and the logic of the user control

public partial class WebUserControl : System.Web.UI.UserControl
{

protected void Page_Load(object sender, EventArgs e)
{
}
public string Address
{ get; set; }
}


I wanted to be able access this property from JavaScript from the web page that hosts the user control like this

document.getElementById('<%=WebUserControl1.ClientID %>').Address

My idea is as follows:

- Add a hidden input control to the user control

- Override the ClientID property of the user control to return the ClientID of the hidden input, so when you write the following JavaScript in the page hosting the user control

document.getElementById('<%=WebUserControl1.ClientID %>').Address

what will happen is that you will set the value of an attribute on the hidden input

this will allow us to access the user controls properties from the JavaScript, but there will be a problem : these attributes that are set on the client side will not be posted back to the server

we need to take these values from the attributes and put them in the "value" field of this hidden input control because we can read the "value" field at the server. so i added the following JavaScript function that reads the attributes values of the hidden input and puts these values in the "value" field of the hidden input


function ReadAttributedProperties(objID)
{
if (document.getElementById(objID)==null)
return;
var atts=document.getElementById(objID).attributes;
var value='';
for(var j=0;j<atts.length;j++)
{
if (atts[j].specified)
{
if (atts[j].nodeName!='id' && atts[j].nodeName!='name'
&& atts[j].nodeName!='type' && atts[j].nodeName!='value' )
{
value+= atts[j].nodeName+ ':' + atts[j].nodeValue;
if (j!= (atts.length-1))value += ',';
}
}
}
document.getElementById(objID).value=value;
}

To make things simpler i created a class that inherits UserControl and do all of this for you, all you have to do is to create a user control that inherits this class and define your properties as follows


public partial class WebUserControl : ScriptedUserControl.ScriptedServerControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string Address
{
get
{
return GetPropertyValue("Address");
}
set
{
SetPropertyValue("Address", value);
}
}
}

You can download the source code and a sample web site from here

My Blogs

I will dedicate the blog http://mosalem.blogspot.com to the technical posts and the personal posts will be posted to my windows live space http://mmosalem.spaces.live.com

Thursday, March 06, 2008

I'm Back!!

Wow!! my last post here was about 9 months ago!!, i almost forgot that i have a blog :) , Here are what happened to me during the past months:

  • I got married :)
  • I performed Hajj (thanks to Allah)
  • I joined NesmaCMS as a Development Team Leader

 Now is just a great time in the IT and software development industry, the amount of new technologies (coming out of Microsoft of course) is overwhelming, just a few days ago Microsoft started its global launch wave all over the world for a three major products (Windows Server 2008, SQL Server 2008, Visual Studio 2008), KSA was the first country in the middle east to host the launch, i attended the launch event  in Riyadh last Monday, about over 1500 Developers and IT professionals were there.

Another thing i should mention here is that SilverLight beta2 is out, Enjoy :)