array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 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 !

相关文章: