by1455的自留地

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 

有留言讲这是一个把MOSS当作后台的方案,基本上这样讲没有错,严格上应该是一个没有用sharepoint webpart的方案。
至于不如直接用asp.net+ado.net讲法。对牛人们来讲,大概是这样。不过对做工程的人而言,能不能多快好省,不从零开始才是第一等大事。

第十二周
用户有这样一个需求:当前公司有相当数量的基于web的应用(Web Application,或多或少均有一些工作流程(Workflow process,目前只能用email通知用户,相当不便,管理层希望在门户网站上,可以让用户知道当前有多少待决事项(Pending Task.同时又要求不对其他的web的应用有重大修改,也没有什么特别的预算。

关于这些web的应用的基本情况如下
操作系统OS: Windows 2000, Windows 2003, Linux Sun OS
平台platform:J2EE(Weblogic), ASP, ASP.NET 1.1, ASP.NET 2.0, Lotus Notes/Domino
编程语言Language: Java, ASP, C#, VB.NET, PHP, JSP, Domino
数据库Database: MSSQL2000, MSSQL2003, Oracle, MySQL, LotusNotes
权限控制Access Control: AD, LotusNotes application 本身的权限控制模块

这个子模块被命名为提示模块Alert Module

在仔细的和每个application team谈话后,发现对象千差万别。只有二点共同之处
-
都是用Web,也就是说用HTTP
-
都是用NT账号来管理用户权限

方案一
提示模块每次分别访问Web应用的数据库取得待决事项数据
==〉被否决
原因:工程浩大,旷日持久,LotusNotes无法访问。而且,把手伸进其他的Web应用项目也是违反本项目组的开发原则。

方案二
在使用最多的数据库MSSQL2000/2005上建立一个表(Table,每个Web应用把待决事项写入
==〉被否决
原因:和方案一一样,不同的是要求其他的Web应用项目来完成。有些项目完成已久,小修小补可以,不可能大动干戈。

方案三
要求每个Web应用组为待决事项建立一个web service.
==〉非常时髦,但是还是被否决
原因:大部分Web应用组回答,可以为门户网站(portal,新增几个HTML page可以,Web Service免谈。
少部分Web应用组回答:什么忙也不能帮。

领导并且要求portal设立一个简单通用跨平台的标准(Alert Standard,让以后的Web应用遵守

最后的解决方案
MOSS2007建立一个列表(Alert),主要有下列Fields
URL:String
DEMOXML:String
XSL:String
AlertName:String

要求每个Web应用组提供一个网址URL(例如:http://webserver/application/alert.aspx?user=)
这个网址必须返回一个XML文件,例如
<alert>
    <Claim>
        <UserID>
xxxx</UserID>
        <Counter>
nnn</Counter>
        <URL>
http://werbserver/application/pending.aspx</URL>
        <Description>
ssssssssssssss</Description>
    </Claim>
</alert>
其中的UserIDDescription是供检查之用。
URL
Web应用告知的待决事项(Pending task)网址。
Counter
当然是该用户当前的在这个Web应用的待决事项数目。

Alert Module
会根据Alert List逐个访问Web Application,并且传送userid 例如:http://webserver/application/alert.aspx?user=by1455)
Alert Module
并且要求每个url是匿名方式,因为服务器对服务器的访问在NTML方式下无法传递NT账号信息。
在取得Web应用传回的xml文件后,再与存放在XSL(field)中的xsl模板进行变换(transform),然后,逐一
显示在portal上(0 事件不显示)

以下是部分代码(第十二周版本)

       Dim myUserID As String = Mylib.getUserID(Request.ServerVariables("AUTH_USER").ToString())
        Dim Debug As String = Request.QueryString("debug")
        Dim stagingdata As String = ""


        Try
            ' SiteID = "Alert"
            SiteID = checkInput("SiteID")
            Myserver = "http://" + Request.ServerVariables("HTTP_HOST").ToString()

            Mylib.getSiteInfo(Myserver, SiteID, MySite, myCSS, myImages, MyXSLLIB)

            MyURL = Request.Url.ToString()
            myUrlwithEncode = Server.UrlEncode(MyURL)


        Catch ex As Exception
            'Response.Write(ex.ToString)
            'Response.End()
        End Try

        Dim MyListName As String = "Alert"
        Dim MyViewName As String = "Visible"

        Dim MyMode As String = checkInput("mode")
        Dim MyID As String = Request.QueryString("ID")
        If MyID = Nothing Then
            MyID = ""
        End If

        Dim MyList As SPList
        Dim myView As SPView = Nothing
        Dim MyListItems As SPListItemCollection = Nothing
        Dim XMLBuffer As String = ""

        Dim ds As New DataSet
        Dim Dt As DataTable = Nothing
        Dim doc As XmlDocument = New XmlDocument

        MyList = Mylib.getList(Myserver, MySite, MyListName, err)
        CheckError(err)

        myView = MyList.Views(MyViewName)
        MyListItems = MyList.GetItems(myView)
        If MyListItems.Count = 0 Then
            Response.Write("Empty List")
            Response.End()
        End If
        Dt = MyListItems.GetDataTable()

        ds.DataSetName = "List"
        Dt.TableName = "View"
        ds.Tables.Add(Dt)


        If UCase(MyMode) = "XML" Then
            XMLBuffer = "<?xml version=""1.0"" encoding=""utf-8"" ?>" + vbCrLf
            XMLBuffer = XMLBuffer + "<!-- List is '" + MyListName + "' ,View is '" + MyViewName + "'-->" + vbCrLf
            XMLBuffer = XMLBuffer + ds.GetXml
            doc.LoadXml(XMLBuffer)
            AlertXML.Document = doc
        Else
            Dim CSSLocation As String = Myserver + MySite + myCSS
            Dim XMLData As String = ""

            Dim myAlertName As String = Request.QueryString("Alert")
            Dim Row As DataRow
            Dim buffer As String = ""
            AlertInfo = AlertInfo + addAlertInfo("Summary", " Done by")

            Dim ErrorMessage As String = ""

            For Each Row In Dt.Rows
                Dim AlertName As String = Row.Item("LinkTitle")

                AlertInfo = AlertInfo + addAlertInfo(AlertName, "Begin Time")

                ErrorMessage = ""
                If (myAlertName = "") Or (UCase(myAlertName) = UCase(AlertName)) Then
                    If UCase(MyMode) = "TEST" Then
                        XMLData = Row.Item("TestXML")
                    Else
                        XMLData = GetXMLfromURL(Row.Item("AlertURL"), myUserID, ErrorMessage)
                        If ErrorMessage <> "" Then
                            AlertInfo = AlertInfo + addAlertInfo(AlertName, "[Error get XML ]")
                        Else
                            XMLData = XMLData.TrimStart(Nothing)
                        End If
                    End If
                    If ErrorMessage = "" Then
                        buffer = buffer + cutQuizMark(Mylib.transformXMLwithXSL(XMLData, Row.Item("XSLT")))
                        If ErrorMessage <> "" Then
                            AlertInfo = AlertInfo + addAlertInfo(AlertName, "[Error create HTML]")
                        Else
                            AlertInfo = AlertInfo + addAlertInfo(AlertName, "End Time ")

                        End If

                    Else
                        AlertInfo = AlertInfo + addAlertInfo(AlertName, ErrorMessage)
                        AlertInfo = AlertInfo + addAlertInfo(AlertName, Row.Item("AlertURL"))

                    End If
                End If


            Next

            If Trim(buffer).Length = 0 Then
                buffer = "<html><head><link rel=""stylesheet"" type=""text/css"" href=""{0}""></head><body topmargin=""0"" leftmargin=""0"" marginwidth=""0"" marginheight=""0""  bottommargin=""0""></body></html>"
            Else
                Dim tmpbuffer As String = buffer
                buffer = "<div class=""personalize"">"

                buffer = buffer + "<h3><strong>Alert</strong></h3>" + vbCrLf
                buffer = buffer + tmpbuffer + "</div>"

            End If
            buffer = String.Format(buffer, CSSLocation, Myserver + MySite + myImages, myCSS)


            Response.Write(buffer)

            If Not (Debug Is Nothing) Then
                Response.Write("<table border=1>")
                Response.Write(AlertInfo)
                Response.Write("</table>")
            End If
            Response.End()

        End If

alert module还有很多改进的余地,但是,至少提供了一个简单的方式与现有的未来的web application在待决事项上
通讯界面。并且保持了和viewlist.aspx一样的参数设置,并没有增加项目的复杂度。

因为使用匿名方式,每个人都可以有办法看到其他人的待决事项数,包括CEO的。但是,SO WHAT !

posted on 2007-11-29 16:07  by1455  阅读(975)  评论(2编辑  收藏  举报