WINDOWS Live Search

To contact me for any clarifications regarding any posts / information, please mail me at arijit [dot] basu [at] gmail [dot] com


Sunday, January 18, 2009

AX 2009 Document Management & MOSS / WSS

Recently I was re looking at AX 2009 Document Management capabilities (Which is pretty limited) and trying to find some way to extend it. Since AX 3.x, the AX Document Management has hardly undergone any major changes. I was doing a POC on AX 2009 Document Management capabilities & MOSS. Since MOSS/WSS is an integral part of AX 2009, it would be a nice idea to integrate these so as to be able to take full advantage of the document features of MOSS/WSS. However there were challenges like Security, referential integrity etc which posed a challenge. However I did some R & D and created a POC which lets users attach documents to a MOSS Document library along with AX Metadata using the base AX 2009 Document handling functionality. Although its not complete and far from perfect, it opens up a new vista for developers who want to extend AX Document handling to MOSS.

If you are aware of the basics of WSS/MOSS, there are Web Services [_vti_bin\] (Specially copy.asmx) which lets u programatically upload documents. Other than that Microsoft,Sharepoint.dll also has some interesting methods which let u do the same .

The first step was to create a MOSS Site (Document Centre template - MOSS 2007 SP1). Now I needed to store documents of various AX Modules so I created subsites for the different AX modules like CRM, Projects etc. Then the next step was to create a document library, add some extra columns to store metadata from AX (I created columns for RecId, Company, Remarks). Then save this docu library as a template for reusability :-).








Since the plan was to have separate Sites for AX Modules and separate library for different kinds of documents within a module ( Say in CRM Module, the different types of documents required to be uploaded are case Studies, Brochures etc), I needed to create some parameter tables in AX which stored the parameters per module and per document category. See attached screens. I also had to tweak the basic docuview table and form as well as the Document handling functionality.




Then I created a C# Class library which accepts parameters and uploads the document to a specified URL, Site & Document Library and returns the URL of the attached document. See code snippet below:
======================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.IO;
using System.Net;
using Microsoft.SharePoint;
using System.Collections;

namespace DynamicsAX2009
{
public class MOSSDocumentManagement
{
public String uploadDocument(String _URL,
String _Site,
String _Library,
String _File,
String _AXID,
String _AXCompany,
String _AXRECID,
String _AXReference)
{
String sUser = "mossadmin";
String sPwd = "H@lloom24";
String sDomain = "MVP";
System.Net.NetworkCredential NC = new System.Net.NetworkCredential(sUser, sPwd, sDomain);
try
{
string SiteURL = _URL + _Site ;// "http://arijit:150/AXCRM";
String Library;
SPSite sp = new SPSite(SiteURL);
SPWeb site = sp.OpenWeb();
Library = _Library;
SPFolder folder = site.GetFolder(Library);//Case Studies ; Solution Brief
SPFileCollection files = folder.Files;
FileStream fStream = File.OpenRead(_File); //path of the file to upload
byte[] contents = new byte[fStream.Length];
fStream.Read(contents, 0, (int)fStream.Length);
fStream.Close();
Hashtable MetaDataTable = new Hashtable();
MetaDataTable.Add("AX-ID", _AXID);
MetaDataTable.Add("AX-Company", _AXCompany);
MetaDataTable.Add("AX-RECID", _AXRECID);
MetaDataTable.Add("AX-Reference", _AXReference);
_File = _File.Substring(_File.LastIndexOf("\\") + 1);

SPFile currentFile = files.Add(_File, contents, MetaDataTable, true);

if (currentFile.CheckOutStatus != SPFile.SPCheckOutStatus.None)
{
currentFile.CheckIn("New Version from AX");
}

return SiteURL + "/" + currentFile.ToString();
}
catch (Exception err)
{
return ("
" + err.Message);
}
}
}
}

======================================================

Then I deployed the dll in the \Client\Bin folder of the AX Client and added as a reference. Then write a few lines of code (See Project Screenshot) in the base AX Document Handling Functionality (Forms\DocuView) which let users upload documents into MOSS Site Library and store the URL in AX :-). Pretty kewl. However security remains still a challenge. I was hoping to use the Target Audience features of MOSS for Record level Secirity but didnt have time enuff :(.






Attaching a small video. Lemme know if anyone has any suggestions.




Uploading the video . Click on link below:



HAPPY DAX-ing :-)

7 comments:

Mr. Denize said...

As always - exciting to read your posts. I must agree that the print management capabilities out-of-the-box is pretty limited in AX2009, though wastly better than pre-4.0.

Anonymous said...

great work! i must say. today, i am actually doing the same research in terms of AX 2009 Documents handling capabilities. my major issue is SEARCH :)

do you know how WSS/MOSS search capabilites can be laveraged? i mean heare the scenario when for 40k records you store 80k documents, how to use Full-Text Search within content of docs? hmm? this is something i am lookin for recently,

thanks for any suggestions,
rjf

Daniel said...

Your Solution works only, if you develop and use the client on the sharepoint portal server.
If you try to use it on another client, you get a lot off dlls which are missing eg. Microsoft.SharePoint.Library.

I verified it with a little C# Program without AX.

But I'm sure thats very interesting idea to integrate the moss services in ax.

thanks for this great article.

Could you Post an *.xpo because I didn't understand all in your Screenshots.

Thanks a lot,

Daniel

Nitesh said...

Hi,
It work exactly the way I am looking for.Thanks for writting valuable article.

Regards
Nitesh

Fayaz said...

Another awesome stuff from arjit. This is exactly what i'm looking for could you please send me the .xpo file ?

Thanks

Anonymous said...

Awesome Post! Very Informative, especially for companies like mine, that specialize in document management solutions.

document management said...

Thank you for sharing such a valuable information about document management.Clearly explained how new technologies can be applied.
Regards,

document management services