• MOSS项目开发 周记(第十二周)


     

    有留言讲这是一个把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 !

  • 相关阅读:
    mysql不停库不锁表在线主从配置
    MySQL5.7不停机不锁表主从同步实战
    另类 k8s 集群灾难恢复方法:用 master 服务器镜像恢复出新集群
    我在新西兰卖挖掘机之续篇十八------坚持的秘诀(坚持的秘诀就2条,第一是初始摩擦力要足够小(开头不能太困难,时间不能太久);第二是坚持的事情能够不断地给你提供某种真实的好处)(其实就是正反馈,加上一点点兴趣)
    分布式系统中那些不靠谱任务-CAP 到底是什么
    分布式系统架构中关于切分数据库事务的 ACID 性质的可用性与性能-BASE 理论和CAP 定理
    SSO协议-SAML和OAuth2
    领域建模
    基于 Docker 容器Net Core微服务部署 Nginx 集群架构
    消息队列和分布式锁
  • 原文地址:https://www.cnblogs.com/by1455/p/974286.html
Copyright © 2020-2023  润新知