•   1. 管理的例外哲学(三)
         1) 例外的处理范围问题
            所谓例外处理或例内处理,其实就是“组织业务”或“组织事务”,所谓例外处理的范围, 就是业务
            所在的各类或各级组织。当组织内事务不处理例外时,势必将例外引致的事故抛向上层组织, 这些抛
            出去的异常,有些可能是下级组织正该处理的,有些是无力处理,需要上级组织协调指导或支援。 但
            如果过多的例外被抛向上层组织处理,则他们也会疲累。 这就是所谓的“所有的项目经理都是老大一
            人”怪现象的由来。
           
            以上讲的是例外通过组织层层外抛,如果都不处理(有时也可能是掩盖或强行Close)就会抛到消费者手
            里, 最终造成所谓的返工或退货。

         2) 例外处理的递归
            组织内任何事务的成功,都是假定没有例外,其实有例外是绝对的,无例外是相对的。 所谓例外处理
            的递归,就是如下的情形,在常规处理中,或在异常处理中均允许再出现低层异常处理:

              // 1 组织事务
              try {
                // 1.1 此处会有异常
                // 1.2 以下不允许有异常,必须局部处理掉
                try {
                  // 1.2.1 此处会有异常
                } catch exception {
                  // 子异常处理
                }
              } catch exception {
                // 异常处理
              }

            此处强制业务 1 以及 1.2 不允许出现例外,业务 1.1 与 1.2.1允许出现异常,但如果内层的子业务
            1.2 不/不能处理异常,则势必要抛到上层去处理。协调的例外处理,应该均匀地分散在各及组织中,
            且正常情况下不应超过正常业务的一半,否则就会出现失衡。

         3) 如何才能“不允许有问题”
            我们要求改变思路时,说联想的文化假定有问题,如何改善。 我们的思路:不允许有问题!要看死!
            这句话用例外的观点可解释为:“你不能将任何例外抛给我,你必须将你组织的例外完全消灭, 我这
            里不捕捉与处理你的例外,自己解决问题!我自有自己的例外要处理。”

            不捕捉例外不等于就没有例外,但可以说“没例外”,因为当大家都处于盲人摸象的懵懂状态, 大家
            又都渴望成功,大家假定没有例外比较容易达成,这就是所谓的集体无意识。 因此过分理性的公司总
            会假定无问题是不可能的,就是所谓总是假定有问题。 “假定有问题”和“不能有问题”两种思路都
            是正确的,只是组织内外视角问题: 假定底下有问题,要自己处理自己的问题,顶层自然就没问题。
            前者看似悲观消极,后者看似乐观积极;前者不容易忽视问题,后者易于蒙蔽问题; 前者强调事后堵
            漏,后者则强调事先主观能动性。

            组织内必须养成善于捕捉/分析例外/异常的习惯, 并将新产品在研发、生产、销售各阶段可能存在的
            问题分门别类,明确上下层例外的处理职责,并在组织间形成例外处理契约。 逐渐养成“自己的问题
            自己解决(而非我替你动脑)”的习惯,其结果自然就是所谓将问题“看死”。

            我们经常日复一日地“看产品、说产品、做产品”, 但中间惟独缺少了产品分析、产品规划、甚至产
            品设计, 或者深度不够或引不起重视。只有有质量的分析,或够深度的分析,才能设置恰当的“管理
            设施/机构Facility”或“异常捕捉器Indicator”,才能快速(Rapid)发现并解决问题。

      2. EOffice改进
       v 1) 邮件系统改造:必须将服务器地址不对、端口错误、帐号错误、密码错误从其它异常中分离出来。
            因为该类错误,不必重复尝试,下次还是错误,只有网络异常值得重复尝试,直接将引擎停掉即可。
            ' 增加 TryCount 计数,以停止当前帐户,永久停止需要 Pop3Exception 来判断
            ' 限制:只是关闭当前引擎帐户,并不永久关闭帐户
            Private Const TRY_LIMIT As Integer = 3  ' 允许 Pop3Exception 的最大尝试次数
            Private TryCount As Integer = 0         ' 目前 Pop3Exception 的尝试次数
            // 无法建立网络连接,也抛出 Pop3Exception 帐号异常
            if (nst==null) throw new Pop3Exception("TcpConnect Failed: " + mailhost + ":" + port);
            // 异常:网络错误或帐户错误,会抛出原始异常;
            // 问题:原来 AcquireStat 才会抛出异常,现在已放弃,似乎不会抛出异常了?
            //       子线程的异常会抛到哪里呢?
            // 限制:每个 ElementPop3 对象,只允许一个接受(含统计)进程,因为它们共享一个tcp/nst对象。
            public bool AcquireAsync()
            // 说明:异步启动 AcquireThread 线程方法。
            //       原来 AcquireStat 才会抛出异常,现在已放弃,基本不会抛出异常;
            //       子线程的异常会抛到 AcquireThread 线程。
         2) 系统一旦判定为垃圾邮件,目前无法恢复回去
            垃圾邮件需要按标签分类;

      3. Miscs
         处于审美状态的人不是计算着的人,其心灵是宁静的,愉悦的,也是高度自由的。—— 潘天群
         资源冲突的实际情况:双方获胜概率配置、资源的价值评价配置、冲突成本配置也不是双方的公共知识。

  •   1. 管理的例外哲学
         管理中的例外就是所谓出问题或出事,例外就是非常规,也叫异常,英文都是Exception。管理中的所谓
         “疲于应付”,就是说异常处理成了管理的主要事务,例内与例外比例严重失衡的结果, 此时管理异化
         为异常事务的奴役,管理团队成了救火队。以下是自己一些对例外管理的基本认识。
         1) 例外处理框架
            以下是用程序语言描述的基本事务例外处理框架,现代网络对象程序语言处理都是这个模式。虽然是
            程序语言,其实它也同样来自于人类普遍的管理智慧。
            Loop { // 戴明PDCA循环
              ... // 常规处理,无例外或例内
              Try {
                ... // 非常规处理,会发生各种例外
              } Catch Exception ex1 {
                ... // 例外1处理
              } Catch Exception ex2 {
                ... // 例外2处理
              } Catch Exception ex {
                ... // 未知例外处理
              } Finally {
                ... // 最终处理
              } // End Try
            } // End Loop
            符号说明:{一组事情},// 说明
         2) 例外管理需要成本
            例外管理的终极目标是要消除例外,但之前还需要些步骤:首先是要一一捕捉例外,然后是增加适当
            设施以消化例外。这样一个过程就是事务处理的常规化、模板化、流水化,从而加快生产效率、降低
            生产成本、简化管理细节。这一切显然需要资源、成本,需要整理、总结和条分细缕的成本,甚至能
            力成本,并非所有的例外都能内部消化。
         3) 例外的消化与转化
            当事务都转化为常规例程后,就没有了例外及其处理。正是因为不太好常规化,所以才有各种例外处
            理,甚至未知例外处理——所谓盲人摸象,这当然未必不是最优的,要鼓励尝试,鼓励敢于失败者。
            当然也可以没有例外处理,此时就表现为无管理的例外,其外在表现就是不可控的事故与错误。在资
            源如时间不足、能力不足时,这并非不是好的选择。
         4) 允许例外,但必须收敛!
            管理的真谛:重在预防,不在堵搂!不能老干“一集结差颗料”那种事!计划先行。其实计划与程序
            说的是一件事,只是前者强调最后静态的结果,后者强调的全程动态的过程;前者更具命令强制性,
            后者则更具因果逻辑指导性;相应地,前者给了实现者更多的自由发挥空间,后者多了些要求与处事
            的框架性限制;后者较前者也更具可计算性。
            要学会消化例外(Exception),让例外在震荡中趣于收敛,才能最终减少例外; 即使有,也要提高例
            外的层次,杜绝低水平重复,此种境界表现出的就是能力和业务、我们与公司的共同成长。

      2. EOffice改进
         1) 邮件系统改造:必须将服务器地址不对、端口错误、帐号错误、密码错误从其它异常中分离出来。
            因为该类错误,不必重复尝试,下次还是错误,只有网络异常值得重复尝试,直接将引擎停掉即可。
         2) 邮件地址建立独立 EmailAddress 类
            在 Manage 包里继承该类以处理 EOffice 用户邮件及其关系处理。
         3) 微博删除需要二次确认。

  •   1. 什么是过程计算?
         1) 什么是过程计算?
            现在网络计算领域最时髦的词汇莫过于“云”了。 其实云与过程计算的概念紧密相关,所谓计算的可
            持续性问题,大尺度讲让客户的网络交互过程完全独立于时空, 不只是凌驾于物理上的云了,这可能
            是过程计算的最高境界,交互计算也属于过程计算范畴。 云在很大程度上是虚拟主机、虚拟存储概念
            的应用,此外还有虚拟操作系统、虚拟应用等, 这些问题都涉及过程的迁移、持续性计算领域。

            过程管理涉及的概念:计算的连续性、现场(Context)/会话(Session)的存储、腾挪、可序列化、对象
            的生存周期、冻结/解冻/复活,类工厂化为对象。
         2) 共享的历史意义解释
            我生产一个信息,属性为共享, 则现组织内可共享,但当我移动到另一个组织时,我的那个历史上在
            老组织内共享的信息,能否也在新组织下共享呢?目前的工作日志就是这种情形。 类似的“汇报”关
            系也存在类似问题,我给上个领导汇报的东西不想让现领导看到。

            显然管理粒度细化到这些问题上,其复杂性是显而易见的。

      2. 邮件系统问题调试
       v 1) Content-Type: image/jpeg
            Content-Disposition: attachment
            Content-Transfer-Encoding: base64
            Content-ID: 532j3na2qkxu@webmail.indonesianetworks.com
       v 2) INSERT Email 字段超长
            SQuoteEscape(str, maxByteLen)
       v 3) 日期格式分析
            Tue,22 Mar 2011 19:39:43 +0800 (GMT+08:00)
       v 4) info自动邮箱代理不知何故停摆;
            可能是以上5点引起的,更新以上5点,暂时先观察再说。

      3. Miscs
         一季度总结与二季度计划;
         监事提案:关于提高工人技能培养晋升制度的提案

         1) 标杆管理的需要
            人的标杆,技能标杆,劳动技能竞赛,让他们能看到进步的果实,进而产生学习进步的欲望,这最终
            必将直接改善劳动生产率,降低消耗、提高产品质量,产品质量最终都是经他们的手做出来的。
         2) 和谐社会建设的需要
            提高工人的荣誉感、归宿感,与公司、社会共同成长,共享成长。要从制度上尊重他们,真正做到爱
            厂、爱工作,让他们以厂为家。要让“中国制造”很美,首先要和谐。
         3) 群策群力与全员管理的需要
            关于“群策群力”,我们恐怕叫的最响,但较之那些老牌资本主义国家,我们做的可能是最差的,和
            他们相比,我们要惊醒:不能让制度成为“群策群力”的障碍!我们既然确立目标为大生产,就必须
            明白所有成功的大生产首先必须是群策群力的。
         4) 技能也有福利
            为保留住熟练工人,配合机械简单的工龄福利政策,之外再增加与技能挂钩的福利,彻实尊重术有专
            长的工人,让他们参与到创新与管理之中。

  •   1. EOffice作业系统设计
         ' 名称:抽象 JobPage 作业页面
         ' 说明:建立“作业页面JobPage”抽象类,以实现标准的定期自动作业页面。
         Public MustInherit Class JobPage : Inherits SecurePage
           Private JobName As String ' 作业名称
           Public MustOverride Function Refresh() As DataSet ' 由实现类实现
           Public Function GetCache(ByVal jobName As String) As DataSet
             Me.JobName = jobName
             Dim res As DataSet = Cache(jobName)
             If res Is Nothing Then
               RemovedCallback(Nothing, Nothing, Nothing)
               res = Cache(jobName)
             End If
             Return res
           End Function

           ' 名称:作业调度回调方法
           ' 说明:根据作业调度规则 scd,计算下次调度时间 dan
           Public Sub RemovedCallback(k As String, v As Object, r As CacheItemRemovedReason)
             Dim dts As DataSet = Refresh() ' 刷新数据
             Dim scd As String = MiscMeta.GetCatNote("JobSchedule", JobName)
             Dim dat As DateTime = Now
             Dim qrt As Integer = Math.Floor(dat.AddMinutes(1).Hour / 6)
             Dim dan As DateTime = Now.Today.AddHours((qrt + 1) * 6)
             Cache.Insert(JobName, dts, Nothing, dan, _
               TimeSpan.Zero, CacheItemPriority.High, AddressOf RemovedCallback)
           End Sub

           ' 名称:获取作业数据
           ' 说明:作业运行调度可系统配置化,采用如下格式:
           '       Misc:Cat=JobSchedule, CKey=JobName, CValye=PageClassFullName, CNote=ScheduleInfo
           '       页面类全名 PageClass 如:EOffice.Web.Class1
           '       调度信息格式 ScheduleInfo 如:D/W1/2/3/4/5
           Shared Function GetDataSet(ByVal jobName) As DataSet
             Dim cln As String = MiscMeta.GetCatItem("JobSchedule", jobName)
             Dim typ As Type = Type.GetType(cln)
             Dim obj As Object = Activator.CreateInstance(typ)
             Dim jop As JobPage = obj
             Return jop.GetCache(jobName)
           End Function

           ' 名称:作业系统启动初始化
           ' 说明:系统启动时,由 OnApplicationStart 方法统一调用
           Public Shared Function Reset() As Boolean
             For Each job As String In MiscMeta.GetCategory("JobSchedule").Keys
               GetDataSet(job)
             Next
           End Function

         End Class

      2. 事件、回调、委托关系
         1) 使用回调函数?Event/AddressOf/AddHandler:
            Private Shared VasletTimer As New System.Timers.Timer()
            AddHandler VasletTimer.Elapsed, AddressOf EOfficeRegister
            VasletTimer.Interval = VASLET_REGISTER_INTERVAL
            VasletTimer.Start()
            Public Shared Sub EOfficeRegister(sender As Object, ev As Timers.ElapsedEventArgs)
            备注: AddHandler和RemoveHandler使您可以在程序执行过程中的任何时候启动和停止事件处理。
            Sub TestEvents()
              Dim Obj As New Class1()
              AddHandler Obj.Ev_Event, AddressOf EventHandler ' Associate an event with handler
              Obj.CauseSomeEvent()                            ' Ask the object to raise an event.
            End Sub
            Sub EventHandler()
              MsgBox("EventHandler caught event.")            ' Handle the event.
            End Sub
            Public Class Class1
              Public Event Ev_Event()                         ' Declare an event.
              Sub CauseSomeEvent()
                RaiseEvent Ev_Event()                         ' Raise an event.
              End Sub
            End Class
         2) 委托 Delegate/AddressOf
            Public Delegate Function Sub MatchEvaluator(ByVal match As Match) As String
            Dim eva As MatchEvaluator = New MatchEvaluator(AddressOf ReplaceCC)
            res = rex.Replace(res, eva) ' Replace matched characters using the delegate method.
            res = rex.Replace(res, AddressOf ReplaceCC) ' 以上两种方法等价
            Public Function ReplaceCC(ByVal m As Match) As String

      3. EOffice改进
         1) 邮件系统改造,理顺异常分类处理;
            异常时正确抛出与错误隔离;ReceivedMark.idx 的正确保存;
         2) 改StatCount 与 ReceiveEmail 两次打开与邮件服务器连接为一次;
       v 3) 为日程新建增加标签输入 Tags 字段。
            问题:新增的标签 Tags 字段如何过滤选择的下拉标签?
         4) 是否引入“警报Alert”概念?
            用户可自定义通用警报器功能?

  • v 1. 增加“EOffice剪贴板”Cube 属性
         1) 为剪贴板 CubePage 接口增加是否能复制与粘贴属性
            ' 名称:页面是否支持复制与粘贴
            ReadOnly Property CanCopy() As Boolean
            ReadOnly Property CanPaste() As Boolean
         2) 为安全页面 SecurePage 类增加“EOffice剪贴板”Cube 属性
            以 Session("CUB") 来存储。

    v 2. 剪贴板 CubePage 接口应用矩阵
         通过接口 CubePage 来实现邮件复制粘贴。
         复制粘贴页面 动作    NewTopic  AddAgenda  DiartMgmt  SendEmail  TopicDetail ReadDoc
                              v Paste   v Paste    v Paste    v Paste    v Paste     v Paste
         ------------ ------- --------- ---------- ---------- ---------- ----------- --------
         TopicDetail  v Copy  x         v Agenda   v Diary    v Email    v Post      v Post
         AgendaDetail v Copy  v Topic   x          v Diary    v Email    v Post      v Post
         DiaryDetail  v Copy  v Topic   v Agenda   x          v Email    v Post      v Post
         ReadEmail    v Copy  v Topic   v Agenda   v Diary    x          v Post      v Post
         ReadDoc      v Copy  v Topic   v Agenda   v Diary    v Email    v Post      v Post
         ------------ ------- --------- ---------- ---------- ---------- ----------- --------
         注意:x 表示自身转化,无意义;v 表示已经完成的转化。

  • v 1. 今日完成主题转日程
       v 1) 通过 Session("CUB") 存储来解决对象的复制、粘贴;
            同时自动增加“实体彼此引用”;
            增加Calendar\image\copy/paste.gif 图标;
            重新布局 Today.ascx 模块,并实现实体间的复制、粘贴;
            ' 名称:实体复制
            Private Sub CubCopy_ServerClick(ByVal sender As Object, ByVal e As EventArgs) _
            Handles CubCopy.ServerClick
              Dim cub As CubePage = Page
              If cub Is Nothing Then Return
              Session("CUB") = cub.EntityCopy()
            End Sub
       v 2) 在 CommonModule 包增加 CubePage 接口
            ' 名称:EOffice实体间转换接口
            ' 说明:通过 Session("CUB") 存储来解决页面实体对象的复制、粘贴
            ' 说明:每个实现 CubePage 操作的页面必须实现该接口方法
            Public Interface CubePage
              ' 名称:实体复制
              ' 返回:当前页面返回的复制实体
              Function EntityCopy() As Object
              ' 名称:实体粘贴
              ' 参数:obj 要粘贴的实体
              ' 返回:粘贴成功与否
              Function EntityPaste(ByVal obj As Object) As Boolean
            End Interface
       v 3) 实现实体复制接口
            首先在 TopicDetail 和 AddAgenda 页面间实现;以完成主题转日程应用。
            ' 名称:通过复制粘贴 EntityPaste 实现实体转换。
            Public Function EntityPaste(obj As Object) As Boolean Implements CubePage.EntityPaste
              If TypeOf obj Is String Then
                Note.Text = obj
                Return True
              ElseIf TypeOf obj Is Topic Then
                Dim tpc As Topic = obj
                Note.Text = "//*引用:Topic#" + tpc.TopicID + ", 作者:@" + GetNID(tpc.UserID) _
                          + ControlChars.NewLine + tpc.Content
                Return True
              End If
              Return False
            End Function

      2. 增加微博转发功能
       v 1) 用例设计
            //*转发:Diary#10784 作者:@张海萍(zhanhp)
            我的路非康庄,欠辽阔,但只要努力不懈,前程终能在望!
         2) 增加微博排行榜页面
            终于找到了真正的“实体引用”应用了,此处即是:“实体引用统计”的应用而已!
         3) 问题:转发时如何共享原始图片(如果有)?

      3. EOffice问题
       v 1) 建立 Mention 表索引
            IX_Cat/EID/UserID/RegDate/RefCat/RefEID
       v 2) 微博页面MicroBlog.aspx显示不超过10行:
           
         3) Topic.Content 限制 4K 长,而邮件 Email.Abstract 是不限制的 Text类型,转化时需要裁剪处理。

  • v 1. EOffice改善
       v 1) 客户修改错误
            现象:部分客户信息无法修改
            分析:在州没有选填的情况下无法修改客户信息……
                  州需要判断 IsDbNull。
            解决:Util.NullStr(Container.DataItem("State"), , "")
       v 2) 客户查询 Query.aspx 页面也做
            Name +FullName LIKE …… 的同样调整,避免客户简称、名称、全称之间的混乱。
       v 3) 客户列表信息布局调整
            ITEMSTYLE_WRAP="False" ITEMSTYLE_HORIZONTALALIGN="center"

      2. Miscs
         1) 实体评论附件的命名规则需要调整为:实体分类缩写 + 实体标识 + "_" + 附件名称,即让实体评论
            跟着实体走,原来是:帖子分类名PT + 帖子标识 + "_" + 附件名称,是跟着帖子走。这样做的目的
            有三:首先让附件浏览有了更大的范围,二是与实体自身附件取得了统一,最后,更重要的是为未来
            附件到实体的统一安全搜索铺平了道路。
         2) 关注统计
            SELECT EntityID, Cnt=COUNT(*) FROM Attention WHERE Category='User'
              GROUP BY EntityID ORDER BY Cnt DESC
            SELECT UserID, Cnt=COUNT(*) FROM Attention WHERE Category='User'
              GROUP BY UserID ORDER BY Cnt DESC
         3) 所谓理性就是对目标的计算能力:推理与计算。 个体理性总有局限或困境,此时便产生了群体理性;
            所谓群体理性就是若干个个体间的道德与法轨约束。 在更大的群体层面上,群体理性又粒化为个体理
            性,更大的群体理性就形成了所谓文明。

  •   1. 实体提及Mention与实体收藏Attention方案实现
         1) 实体EID 提及/引用 实体RefEID,其实就是在实体之间的建立有向关系!
            实施路径:先从微博的提及人与收藏开始,逐步向外一般化扩展;
            UI设计:仍然在 MicroBlog 中实施;
         2) “收藏实体”就是“关注实体”
            这样就可仍然采用 Attention 表存储收藏信息,其UI处理与相关方法函数也会简单化,直接复用“关
            注逻辑”即可!
            实施路径:微博收藏、日志收藏、新闻收藏;
            UI设计:改关注图标为收藏图标,在个人办公/个人信息中增加“我的收藏”Favorite.aspx 页面。

    v 2. EOffice改善
       v 1) 客户查询错误已经修复,今早已经更新,以后要要求他们养成习惯, 发现问题要第一人第一时间在相
            应事务中报告。SQL += " AND Name + FullName LIKE '%" + QName.Value + "%'"
            //*回复:Diary#10838 作者:@王海玉(hywang)
            客户管理,客户名称查询有误
       v 2) 扩展实体阅读到实体文件柜阅读
            Dim fid As String = CStr(eid)
            Dim spi As Integer = fid.IndexOf(":")
            目前仍然只有 Forum#BBS001:\ 可以扩展阅读,对于 Group#XYZ:\ 尚不能阅读,因为 Group组尚未纳
            入实体范畴,CanIRead 无效,因此不能阅读,将来再说。
       v 3) 模板编辑的错误分析
            其实没问题,模板参数命名空间ew大小写混乱,而系统是对此敏感的,导致参数列表不能完整生成。

  •   1. 客户资料 Customer 的分阶安全解决方案
         1) 目前方法:是经理全部,否则自己的:
            Dim sql As String = "SELECT * FROM Customer WHERE 1=1 "
            If Not Session("gsUser").IsManager Then _
              sql += "  AND UserID = '" + Session("gsUserID") + "' "
            RefreshGrid(sql)
            问题分析:首先,组织是复杂的,当组织庞大时会有问题,是经理未必就能看全部的, 只有在该业务
            只分配在一个销售部时是正确的;第二,如果有多个销售部时就会出错; 第三,对管理几个客户经理
            的主管无效。无论查询 Query 还是管理 Maintain 都是如此的逻辑,显然需要改造。
         2) 彻底的解决方案
            分开阅读者 vid / 业务员 uid;
            完全采用汇报关系 IsOnesReporter(vid, uid) 函数解决;

    v 2. “非正常定单IFO台帐管理”系统可行性分析
         1) “非正常定单”管理的意义和背景
            所谓“非正常定单”就是因条件不具备而不能正式确认为定单的定单;
            “非正常定单”管理目前没有,基本都跑掉,现在要通过台帐这些动作进行回笼;
            “非正常定单”日程是由销售部的客户经理发起,跨部门管理;
       v 2) 基本解决方案
            就以目前的日程管理为蓝本,增加如下功能:
            定制到带标签参数(Tag=IFO)的业务中:业务名称:“非正常定单台帐”;
            通过标签技术即可实现,标签就是“非正常定单”或“IFO:Informal Order”;
            台帐管理人就是带“非正常定单IFO”标签的日程发起人;
            日程管理页面允许带入标签参数,以进行标签过滤,此时新增日程也自动增加该标签;
         3) 第二意义发现:
            如果将“事务A”“标签IFO”日程管理应用为“非正常定单台帐管理”,则还会有:
            “事务B”“标签NCR”日程管理应用为“新客户需求台帐管理”。
            事务之间是有关联的,目前的事务是零散的,将事务、组织/人、时间周期、资源、客户、产品再深度
            关联就是项目管理。2005年就有按该思路的项目管理PFM初稿,未推动起来。
         4) 玄而未决的未来问题
            问题1:领导是否可以查看下属的日程;
            问题2:日程标签现在是与主日程挂接,是否改造到分享人;
            问题3:非正常定单、新客户需求可能都与文档流程系统PUM有关,我有所不知,还是需要倾听凯心中
                   “非正常定单台帐管理”蓝图;
         5) 结论:
            下周先出“日程标签IFO”方案的第一版,并推动实行;

      3. Miscs
         1) 日程搜索,日程的多标签过滤,日程标识是否显示?
            目前和客户的MeetingMemo一样,先采用统一的 TagDetail.aspx?Tags=Category= 进行多标签过滤。
         2) 系统通知消息App("Message")、用户心情(User.Mood)、宣传语Cache("gcSlogan")允许标记连接
            res = "<marquee behavior=alternate>通告:" _
                + Util.HtmlEscape(msg, TextPseudo.LinkMode.MARK_LINK) + "</marquee>"
            EOffice.Common.Util.HtmlEscape(usr.Mood, EOffice.Common.TextPseudo.LinkMode.MARK_LINK))
            DateTodo.InnerHtml = Util.HtmlEscape(Slogan(), TextPseudo.LinkMode.MARK_LINK)
         3) 微博备忘
            * 增加周期性日程类型、日历框应跟随日期框;
            * 汇报圈有问题,应只向上级汇报,不应向上上级汇报,这可能被视为打扰?
            * 如何在EOffice中收藏日志?

  • v 1. 自动化统计AutoTrace参数扩展
         1) TraceMonthly 页面
            ext = New ElementXTable("TraceMonthly", Request("Type"), Request("Param"), Request("Title"))
            ElementTable.InnerHtml = ext.GenerateXTable()
         2) New ElementXTable(Type, Param, Title)
            ' 参数:AutoTraceCat 自动报表分类,AutoTraceKey 自动报表类型;
            '       可选 param 可带参数,诸如用户标识或部门标识之类的参数,允许以SQL格式多参数,如:
            '         以“,”分割的两个参数“'UserID',12”,前者为字符串,后边为数字;
            '       可选 title 报表标题,缺省则采用 Misc 定义值。
            If title Is Nothing Then title = tca(AutoTraceKey)
         3) 文档状态 FileStatus 使用
            Dim uid As String = Session("gsUserID")
            Dim bid As String = Request("BizID")
            Dim tit As String = "文档发行数量月度统计"
            If Not bid Is Nothing Then
              uid = Nothing
              tit = bid + tit
            ElseIf Not uid Is Nothing Then
              tit = uid + tit
            End If
            Response.Redirect("../../manage/sys/TraceMonthly.aspx?Type=TraceDoc" _
              + "&Param='" + bid + "','" + uid + "'&Title=" + tit)

    v 2. “当前日程”Current下不该包括非等待日程
         If current And type = "MA" Then
           str += " AND GETDATE() BETWEEN FinishDate " _
                + " AND DATEADD(DAY, " & TodoHash.AGENDA_PERIOD & ", AskDate) "
           If sta = TodoHash.TODO_NONE Then
             sta = TodoHash.TODO_WAIT
             Me.Status = sta
           End If
         End If

    v 3. 关于汇报渗透
       v 1) 目前的共享解释为“本部门及以上部门人员可阅读”,逻辑如下:
            OR e.Privilege = '1S' AND ( " _
              + "     dbo.DepContain('" + vwr.DepID + "', u.DepID) = 1 OR " _
              + "     '" + vwr.LeaderDepID + "' = u.DepID OR " _
              + "     '" + vwr.DepID + "' = '" + DepSystem.GenDepID + "' ) " _
       v 2) 目前“工作权限”解释为:“仅直接汇报者可阅读”,逻辑如下:
            OR e.Privilege = '1W' AND " _
              + "     dbo.IsOnesReporter('" + viewerID + "', e.UserID) > 0 "
       v 3) 目前的“IsOnesReporter”返回角色号
            可直接修改该函数为“汇报层级数”,直接汇报级数为1,增加一层为 2,依次类推。这样其逻辑就如
            同共享一样,对称解释为“汇报人及其上级可阅读”。
            这样就等于统一 IsOnesReporter/IsAncReporter 函数。
            用新的 IsAncReporter 函数替换老的 IsOnesReporter,删除 IsAncReporter 函数。
         4) 是否也需要删除 IsOnesLeader 函数,以与 IsOnesReporter 统一?
            目前只有 Porject 里用到该函数,似乎可以删除:
            + "IF dbo.IsOnesLeader('" + uid + "', '" + ManagerID + "') = -1 " _
            + "  SELECT @bis = dbo.IsPrjLeader('" + ProjID + "', '" + uid + "'); " _
            + "ELSE " _
            + "  SELECT @bis = 1; "

  • v 1. EOffice改进
       v 1) 邮件标签点击的邮箱选择问题;
            * 帐户无法选择;* 发送箱无法选择;
       v 2) Email 附件长度由 256 改为 1280;
       v 3) 部门介绍 DeptIntro?DepID=质量部(QA) 部门参数支持NID格式有误
            问题:部门是实体吗?组呢?
       v 4) 新增部门或部门信息修改如何放进首页?
            * 部门 Department 表新增 EditDate 字段,在部门修改时,增加 EditDate 信息;
              修改 DepSystem.UpdateDepartment 方法:EditDate = GETDATE()
            * 扩展新闻视图 Exinf 即可:
              UNION ALL
                SELECT 'Department', DepID, ManagerID, EditDate, Name + '介绍', NULL
                  FROM Department
                  WHERE Type <> '#'
            * 修改 InfoQuery?Category 分类浏览路由逻辑;
              ExEntity.BrowseUrl(cat)
            * 增加 NewsDeaprtment.gif 图标;

      2. EOffice思想备忘
         1) 系统 UI设计对系统成功至关重要,同样的城市道路接驳UI设计对交通顺畅,公民出行方便也是至关重
            要的。如何让系统自然自我成长? 和在城市中如何让系统自然自我发育这些问题一样,也都是需要设
            计的。自我帮助、自我成长都是重要的环节。 在中国哲学里元、组织、结构、系统、设计这些概念是
            缺乏的。
         2) 目前“部门意见”、“论坛”、“系统帮助”都是知识管理的入口, 其推动也都很被动的,如何打通
            它们之间的屏障?“统一论坛”是它们共同的载体, 对用户而言“我有问题”是共同的入口,如何通
            过分散的专家、斑竹、部门经理或文书这些的角色使知识自由在其中顺畅流转就成为至关重要的!
         3) 要系统化实体微内容与宏内容的概念与关系。
            要重视角色的登记、赋予、关联表等的时间信息。能否画出角色关系图?从而引出用户关系图?
            部门留言能否作为部门宏内容?
         4) 扩展标签Tag表为既与内部实体关联,又与系统自动实体、外部实体的关联。

      3. 与Tao探讨MP3/MP4能力不足问题
         MP3/4 目前仍然占出货量的 50% 强,但赢利能力仍占 10%左右,而U盘利润率只能占不到5%。因此丢失,
         战略重点跑到了30%上的Note/MID上。 MP3/4能力的弱化和两年前U盘能力奇怪地丧失如出一辙,理由都是
         那么低的利润率养不活我们“大公司”,因此公司的定位也在奇怪地转移,或上一个阵地奇怪地丧失,照
         此循环推算,将来 MID利润率降低时,我们将再转移?《定位》中讲到产品延伸的陷阱时,讲过:

         1) “产品延伸不利于通用性品牌名称,它使通用性品牌在人们头脑里的清晰印象变得模糊, 使得顾客想
            要阿司匹林时,不能再用拜尔来替代”。
         2) “来的容易,去得也容易,产品延伸名称容易被人忘记, 因为它在人们心目中没有自己的独立位置,
            它们是原有品牌的卫星,只会使原有品牌名称变得模糊不清”。

         这种状况和这些话需要我们深思,但愿不适用于新兴市场或初创公司。

  • v 1. 部门负责人计算澄清
         可以是其它部门人员代管,以“最大角色的父角色”来定义跨部门代管;
         计算顺序:先求有无经理、无则再看有无最大角色的父角色,最后看父部门负责人,依次类推;

         RoleUser.aspx 下属 Join 有问题,见销售经理角色。
         ' 名称:获取角色的下属用户视图
         ' 说明:父角色可能有多人导致存在同一下属多汇报关系,因此需要用 Distinct 过滤。
         str = "SELECT DISTINCT r.UserID, a.DepID, r.RoleID, RoleName = a.Name "

      2. 是否消除系统组的概念?
         和 GenDepID(总经办)、CompDepID(综合办) 一样,再增加 HRDepID(人力资源)/SysDepID(信息中心),且
         可以配置。这样就不会产生 admin 是用户但又不是用户,系统管理部门是个又不是部门的尴尬。 再者,
         EOffice“分阶”、系统“生长”的观点,也不支持特殊用户的概念,它们只不过是系统的“种子”。

  • v 1. EOffice.DCC完善
         1) 索引优化与同步
            索引优化完毕,耗时:445秒钟;
            索引空间:deletable 1K, segments 1K, _5gfh.cfs 440M;
            优化的同时,有新文档加入;
         2) 本地云支持调试
            避免本地非云的 D: 被解释为云

    v 2. UrlReferrer中目录的URL编码问题
         1) 解决目录中保留字 "&%#" 对 UrlReferrer 编码影响错误。
            mur = Page.Request.UrlReferrer.ToString
            AppLog.WriteInfo(mur)
            AppLog.WriteInfo(Page.Request.UrlReferrer.AbsoluteUri)
         2) 啊 u554a xB0A1
            特殊&目录 u7279 xCCD8 u6b8a xCAE2 u0026 x26 u76ee xC4BF u5f55 xC2BC
            UrlEncode(Def:GB2312): %cc%d8%   %ca%e2    %26 %c4%bf    %c2%bc
            UrlEncode(UTF8):       %E7%89%B9 %E6%AE%8A %26 %E7%9B%AE %E5%BD%95
            UrlEncodeUnicode(UTF8):%u7279    %u6b8a    %26 %u76ee    %u5f55
            x  http://yucun/EOffice/common/file/FileMgmt.aspx?cat=public&dir=特殊&目录
            v  http://yucun/EOffice/common/file/FileMgmt.aspx?cat=public&dir=特殊%26目录
            x  http://yucun/EOffice/common/file/FileMgmt.aspx?cat=public&dir=%E7%89%B9%E6%AE%8A%26...
            v  http://yucun/EOffice/common/file/FileMgmt.aspx?cat=public&dir=%u7279%u6b8a%26%u76ee...
         3) 增加 UriEscape 转转义函数,删除混乱而不必要的 Url2DEF/UTF8DEF/DEF2UTF8 函数。
            ' 名称:URI保留字转转义
            ' 说明:目前只用于文件系统的引用地址 UrlReferrer.AbsoluteUri 的参数
            '       主要解决IE的UrlReferrer编码的错误Bug,保留必要的"&#%"转义,避免将其暴露给URL指示
            '       时被吃掉。
            Public Shared Function UriEscape(ByVal str As String) As String
              Return HttpUtility.UrlDecode(str.Replace("%25u", "%u"). _
                Replace("%25", "%2525").Replace("%26", "%2526").Replace("%23", "%2523"))
            End Function

      3. DRM文件问题
         1) 读取错误
            LoadDRM failed 这是一个意外的标记。标记应为“SEMICOLON”。 行 3,位置 86。
              at System.Xml.XmlScanner.ScanNamedEntity() ...
              at System.Xml.XmlDocument.Load(String filename)
              at EOffice.Common.eleMentDRM.Load(String fpn)
         2) 保存调整
            ' 名称:将该 DRM 保存到文件消息队列目录 FMQDir 下的 DocID.drm 文件中
            ' 说明:保存格式以 XML 1.0 保存,编码采用 GB2312;
            '       Sourece/TargetFile/DRM 文件目录名称和DRM属性信息要进行 XML 转义编码。
            ' 限制:假定 DocID/Publisher/PubDate 没有 XML 保留字,
            Public Function Save() As Boolean
         3) 尚未测试

  • v 1. 文件与目录移动文件表的变更 ModCreator 的核实
         ' 登记文件的移动,废弃共享目录里外的区别逻辑
         If IsBrowseCat() Then  ModCreator(fis, fid)
         云文件柜访问代理 AcquireCloudAgent 跟踪统计。

    v 2. 目录名称支持“&#%”URL 保留字
         目录参数 dir 中保留字 "&%#" 的处理:dir= Util.UrlEscape(firDir)。
         ' 名称:URL保留字转义
         ' 说明:目前只用于文件系统的目录参数 "&dir=" + Util.UrlEscape(firDir)
         Public Shared Function UrlEscape(ByVal str As String) As String
           Return str.Replace("%", "%25").Replace("&", "%26").Replace("#", "%23")
         End Function

  • v 1. EOffice文件管理器的各级目录均可选择,目前只有子目录和父目录选择。
         ' 名称:计算文件柜目录显示的HTML代码
         ' 说明:文件浏览模式下需要处理文件拖拽处理,当前目录无须连接;
         '       文件阅读模式下无须处理拖拽,且当前目录也要处理。
         ' 参数:stb 字符串构造器;
         '       reading 是否文件阅读模式;
         '       dragDrop 是否处理拖拽
         ' 返回:文件柜目录显示的HTML代码
         Private Sub GenHtmlFolder(ByVal stb As StringBuilder, _
           ByVal reading As Boolean, ByVal dragDrop As Boolean _
         )

      2. EOffice改善
         1) 虚拟的主题成就了实体评论
            建立“虚拟的论坛”或“自动化论坛”成就页面帮助信息;
            页面帮助信息 HelpText 为主题内容,页面标题 Title 为主题标题;
            帮助信息变更时,将以前的帮助信息“压入”评论内容。
       v 2) 文件管理器统计信息
            增加 eleMentFile.LastMessage 函数返回最新消息,目前用以显示“文件、容量与目录数量”。
            message = String.Format("共有 {0} 个文件,总容量 {1:#,##0} 字节,{2} 个子目录。", _
              fileCount, fileVolume, dirCount)
         3) EOffice根用户 root 可以为系统组,自己和系统管理员admin建立和分配业务。

  • v 1. EOffice各模块版本更新
         1) EOffice.Common
            2010.03.10  V3.5.7  完成 JsonXmlParser 分析器类,用以完成 Json 对象到 XML 对象的转化。
            2010.04.01  V3.5.8  从 eleMentFile 包里,独立出 eleMentDCC 包,包含 eleMentDCC/DRM 类。
            2010.04.20          正式确认 [黑体重点强调] 为标记连接 MarkLink。将TextPseudo独立成类。
            2010.04.22          增加EntSystem.SelectLogo函数,选择更换企业标识Logo和标题Title图片。
            2010.04.27          将*SYSMSG改为*SYSTEM,获取今日宣传语迁移至 EntSystem.SelectSlogan。
            2010.04.30  V3.5.9  增加实体附件浏览功能eleMentFile.SelectAttach/File选择相邻文件函数。
            2010.05.06          增加帖子视图搜索功能 PostView.Search(kwd) 函数。
            2010.05.17  V3.6.0  扩展“云文件柜Cloud”概念,Session("EntID") 为云标识或网络文件夹。
                                创建Win32Util包,为“云文件柜”建立云访问代理Impersonator类。
            2010.05.19          为“云文件柜”建立云访问标识代理 Impersonator 类,改造EntFilePath类。
            2010.05.20          定义“云文件柜EFP=cloud\cloudID\dir\file.ext。独立 Win32Util 包。
            2010.05.21          解决 Util.File2Html 打开文件时的私有冲突,改为共享阅读打开方式。
            2010.05.26  V3.6.1  通过EntityEdit.Ajax技术在FileMgmt浏览页面修改文件的 Intro 介绍信息。
                                在“缩略View大图Browse”浏览模式下及目录浏览时也要显示介绍Intro信息。
            2010.05.27          系统管理员或作者可对文件与目录收编Embody(ffp,isDir,isMine)开始工作。
            2010.05.28  V3.6.2  解决文件与图片选择的次序问题,增加 OrderNDS 排序字与方向参数。
                                文件系统的标题的排序字与方向选择OrderNDS功能,目录文件列表统一采用:
                                GetDirectories/GetFiles 函数。
            2010.05.31  V3.6.3  增加获取当前GetEFP/CreatorID/DwonloadID/GetIntro/GetTags等属性函数。
            2010.05.31          增加“私贴”支持,开始启动“父贴”概念。
            2010.06.01  V3.6.4  完善文档说明显示、修改与评论功能,上传同名文件版本[i.j]自动+1处理。
            2010.06.02          统一搜索字段:path,author,date,dir,file,ext,efp,text。
            2010.06.03          文件标签域索引修改 Entity.UpdateTags -> eleMentDCC.IndexNoteTags。
            2010.06.04  V3.6.5  创建目录、移动/删除文件或目录的相关索引处理。
            2010.06.04          IndexDoc/Dir是覆盖,IndexDel是删除,IndexNoteTags是对已有索引的扩展,
                                而体外的 ElementSearcher 则是存在则只继承author/note/tags,其余覆盖。
            2010.06.10          分离 IndexMove 为 IndexMoveDoc 和 IndexMoveDir,目录移动要递归进行。
            2010.06.12          增加同步文件Download表的附加信息到文档Lucene索引库方法SyncToIndex()。
            2010.06.13  V3.6.6  统一CloudURL阅读函数容纳各种路径类型,改名ReadUrl(efp,cid,typ)方法。
            2010.06.17          为提高 Ajax 效率,索引追加 IndexNoteTags 方法改为缺省不优化。
            2010.06.22  V3.6.7  明确 EatBrowse 为可浏览文件柜,可浏览就了管理、可管理就可索引。
            2010.06.22          DRM调度文件统一到 IndexDocQueue() 方法;DRM 文件编码为 GB2312。
            2010.06.23  V3.6.8  调试新版外部使用AppConf.OnApplicationStart工作,通过LoadConfig加载。
            2010.06.24  V3.6.9  增加MergeIndexCloud(cloud)方法,合并云文件柜索引到本地EOffice主索引。
            2010.06.25          云代理获取函数AcquireCloudAgent可同时获取云根目录root和访问帐号unpw。
            2010.06.25          让 PDE2TXT 后台默默进行,设置 sif.CreateNoWindow = True 参数。
            2010.06.28          将索引目录名改为标准的系统目录前缀“~index”。
         2) EOffice.Manage
            2010.03.15  3.3.3  将Help/MessageText直白化,并将HelpMessage属性计算移到 Footer.ascx 中。
            2010.03.19         将企业标语 Slogan 函数从 Calendar 模块移至这里统一处理。
            2010.04.19  3.3.4  修改 User.DepName 与 DepID 的同步修改。
            2010.04.23         增加获取部门组人数 DepSystem.GetUserCount(degID, sittingOnly) 函数。
                               增加 Department.RegDate 创建日期字段。
            2010.04.29  3.3.5  用户照片轮换方法改造 User.Attach / DeAttach / UpdateAttach。
                               用户照片选择挪到 eleMentFile.SelectAttach(atf, sibling) 方法。
            2010.05.06  3.3.6  将某数据视图的用户字段填加到用户列表中 UserList.AddListItem 方法。
            2010.05.17  3.3.7  DepUserView 缺省不包含非在职用户。
            2010.06.28  3.3.8  用户列表UserList初始化支持@Name(uid)的标记格式,NIDList返回也支持。
         3) Element.Email
            2010.05.06  1.8.0  解决空Body错误,算做垃圾邮件处理,将FFFE属性改为Trashed垃圾邮件标记。
            2010.06.17         邮件的From超过64字节长度就认为是垃圾邮件。
         4) EOffice.POffice
            2010.05.07  V2.9.8  增加编辑实体字段文本内容 ExEntity.Edit 函数。
            2010.05.10          实体修改EntityEdit数据库已经变更,如何更改系统中的值,解决同步问题。
            2010.05.10  V2.9.9  增加用户座右铭压进日志方法 Diary.PushUserMood 用以用户座右铭更新。
            2010.05.12          增加变更本类个性化信息UpdatePersonalInfo(name, value, oldValue)方法。
            2010.05.14          对于非标准的实体也允许通过 ExEntity.Edit(...byUserID) 预处理。
            2010.05.28  V3.0.0  在 P13n 中存储当前文件排序与方向,名称 Session("gsOrderNDS")。
            2010.06.03  V3.0.1  文件索引的说明域修改Edit->IndexNoteTags,便于搜索时也能搜索到说明。
            2010.06.17  V3.0.2  增加判断是否有权阅读实体CanIRead(cat,eid,vid)函数,用于ReadUrl阅读。
            2010.06.18  V3.0.3  增加“我能看的某类实体视图”EntityView和GetSibView“相邻实体视图”。
         5) EOffice.WCL       
            2010.04.28  V2.3.1  调试 PagerFere.GridBind 的页号记忆处理。
         6) ElementSearch
            2010.06.02  V1.3.1  文档索引统一为如下十个字段域:path/dir/file/ext/text/author/note/tags
            2010.06.03          跳越系统(~前缀)目录与文件,目录信息也加入检索。
            2010.06.04          新的索引流程:如果索引以前已经存在,首先继承其note/tags域信息。
            2010.06.07          新版错误调试,文本分析器错误提示,增加EOffice混合搜索作者、标签列。
            2010.06.08  V1.3.2  索引清理处理 PurgeIndex,删除那些文件或目录不存在(体外删除)的索引。
            2010.06.09  V1.3.3  新增错误跟踪WriteLog方法、系统隐藏目录回避、进程限时等待等措施。
            2010.06.11          进程返回的退出码分析Process.ExitCode,增加错误显示、文档信息显示。
            2010.06.25  V1.3.4  让 PDE2TXT 后台默默进行,设置 sif.CreateNoWindow = True 参数。
            2010.06.28  V1.3.5  将索引目录名改为标准的系统目录前缀“~index”。
         7) ElementWatcher
            2010.06.24  V1.1.3  在 OnChanged 方法中过滤掉文件删除通知。
         8) EOffice.Doc
            2010.05.14  V3.6.1  增加获取文档标签视图Doc.TagsView(bizID,uid,cat)函数,用于标签过滤。

    v 2. EOffice版本更新
         2010.03.10  V4.1.1  完成 JsonXmlParser 分析器类,用以支持 Json 格式数据阅读。
         2010.04.20  V4.1.2  正式确认 [黑体重点强调] 为标记连接 MarkLink。将 TextPseudo 独立成本类。
         2010.04.22  V4.1.3  增加EntSystem.SelectLogo函数,选择企业标识Logo图片和企业标题Title图片。
         2010.04.27          增加 ExpostList 阅读,将 *SYSMSG 改为 *SYSTEM 系统。
         2010.04.28          新增 EOffice.SFA 材料确认书系统,文件系统开始应用于业务流程。
         2010.04.30  V4.1.4  增加实体附件浏览选择功能 eleMentFile.SelectAttach/File选择相邻文件函数。
         2010.05.06  V4.1.5  增加帖子视图搜索功能 PostView.Search(kwd) 函数。
         2010.05.14          增加获取文档标签视图Doc.TagsView(bizID,uid,cat)函数,用于标签过滤。
         2010.05.17  V4.1.6  扩展“云文件柜cloud”概念,Session("EntID")为云标识或网络文件夹。
         2010.05.17          创建Win32Util包,为“云文件柜”建立云访问标识代理 Impersonator 类。
         2010.05.26  V4.1.7  通过EntityEdit.Ajax技术在FileMgmt.aspx浏览页面修改文件的Intro介绍信息。
         2010.05.27  V4.1.8  系统管理员或目录作者可对文件与目录收编Embody(ffp,isDir,isMine)开始工作。
         2010.05.28  V4.1.9  解决文件选择的次序问题,增加OrderNDS 排序字与方向参数,文件柜允许排序。
         2010.06.01  V4.2.0  完善文档说明显示、修改与评论功能,上传同名文件版本[i.j]自动+1处理。
         2010.06.03  V4.2.1  文件索引的标签修改 Entity.UpdateTags -> eleMentDCC.IndexNoteTags。
         2010.06.04          创建目录、移动/删除文件或目录的相关索引处理。
                             IndexDoc/Dir是覆盖,IndexDel是删除,IndexNoteTags是对已有索引的扩展,
                             而体外的 ElementSearcher 则是存在则只继承author/note/tags,其余覆盖。
         2010.06.10          分离 IndexMove 为 IndexMoveDoc 和 IndexMoveDir,目录移动要递归进行。
         2010.06.12  V4.2.2  增加同步文件 Download 表的附加信息到文档Lucene索引库方法SyncToIndex()。
         2010.06.13          统一CloudURL阅读函数容纳各种路径类型,改名为ReadUrl(effp,cid,type)方法。
         2010.06.17          为提高 Ajax 效率,索引追加 IndexNoteTags 方法改为缺省不优化。
                             增加判断是否有权阅读实体 CanIRead(cat, eid, vid) 函数,用于ReadUrl阅读。
         2010.06.18  V4.2.3  在DiaryDetail增加“我能看到的某类实体视图”EntityView和GetSibView函数。
         2010.06.22  V4.2.4  明确 EatBrowse 为可浏览文件柜,可浏览就了管理、可管理就可索引。
                             DRM调度文件统一到 eleMentFile.Upload -> IndexDocQueue() 方法。
         2010.06.24  V4.2.5  在Doso中增加MergeIndexCloud(cid)方法,合并云文件柜索引到本地主索引。
                             新增 EOffice.SOP 标准作业书管理系统,“云文件柜”开始应用于业务系统。
         2010.06.28  V4.2.6  在日程中用户列表UserList初始化支持@Name(uid)的标记格式,NIDList也支持。

  • v 1. 文件分析错误调试
       v 1) Error Skipped: F:\EOffice\Arc\YF\attachment\DI2615_N-FN100.jpg 内存不足。
            文件为空,长度为0;正常错误。
       v 2) Error Skipped: F:\EOffice\Arc\YF\attachment\UP\tangxue_oo.jpg 索引超出了数组界限。
            SK 的 EXIF 拍摄时间格式无日期部分,prp.ID=0x0132 "20:30:12" 转换时需考虑即可。
       v 3) Proc Failed pdftotext "F:\EOffice\Arc\YF\forum\BBS003\DVB技术资料\DVB-T.pdf" "DVB-T.lut"
            文档保护错误:Copying of text from this document is not allowed.
            // check for copy permission
            if (!doc->okToCopy()) {
              error(-1, "Copying of text from this document is not allowed.");
              exitCode = 3;
              goto err2;
            }

    v 2. 增加 ElementSearch 的跟踪视图
         private void UpdateTraceLog() {
           String fnp = System.Environment.CurrentDirectory + "\\ElementSearch.log.txt";
           StreamReader str = null;
           try {
             // 临时关闭跟踪文件
             if (appLog != null) appLog.Close();
             // 再读取跟踪文件
             str = new StreamReader(fnp, Encoding.Default);
             TextBoxLog.Text = str.ReadToEnd(); str.Close();
             // 读完恢复跟踪文件
             if (appLog != null) appLog = new StreamWriter(fnp, true, Encoding.Default);
           } catch (Exception ex) {
             TextBoxLog.Text = "跟踪文件不存在或打开错误: " + ex.Message;
           } finally {
             if (str != null) str.Close();
           }
         } 

  •   1. 测试 CloudURL
         \\192.168.0.18\Log\EOffice.AF.100514.log
         \\192.168.0.12\MQPEN英文站点\camp\img
         cloud\MQPEN\camp\img\winter_0912_dual.jpg
         ..\..\产品发行资料\工程确认书\包材类\MP3\保护膜
         cloud\SFA\产品发行资料\工程确认书\包材类\MP3\保护膜

      2. 为原 SFA 查询增加“云文件柜”特性
         SFA.aspx 页面
           <ASP:DATAGRID ID="ContGrid" RUNAT="server" ONITEMCOMMAND="Item_Command" ...>
             <ASP:LINKBUTTON COMMANDNAME="Cloud" RUNAT="server" TITLE="云文件柜" ID="Cloud">
         SFA.aspx.vb 后台代码
           Public Sub Item_Command(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
             Select Case e.CommandName
               Case "Edit"
                 Edit_Grid(e)
               Case "Cloud"
                 Dim dtv As DataView = Session("DTV")
                 Dim drv As DataRowView = dtv(e.Item.DataSetIndex)
                 CloudSFA(Util.NullStr(drv("FileURL")))
             End Select
           End Sub

      3. EOffice.SFA索引对速度的影响
         对于有15000条记录的 SFA 数据库,简单 SELECT TOP 100 * FROM SFA ORDER BY RegDate DESC的查询,
         需要耗时10秒。分析原因,原来虽然建立索引,但建立的是 SFAID, PaperNo 的索引,没有建立关键的排
         序字段 RegDate 的索引,重新建立索引,耗时提高10倍,只须1秒钟。 

  •   1. 继续测试网络代理访问
         1) 采用 WindowsIdentity 的 ImpersonateAgent 方案,测试各种云文件柜类型,观察Log结果;
            * 一般的 Everyone 共享的 Log
              11:21:28.937 Invalid file cloud ID: LOG = \\192.168.0.19\Log
              11:21:28.937 Before impersonation: NT AUTHORITY\SYSTEM
              11:21:28.953 \\192.168.0.19\Log, False
              11:21:28.953 Impersonation: 192.168.0.12, kaixiang
              11:21:28.968 After impersonation: NT AUTHORITY\SYSTEM
              11:21:43.984 \\192.168.0.19\Log, True
              11:21:43.984 After impersonation undo: NT AUTHORITY\SYSTEM
              11:21:44.000 \\192.168.0.12\Log, False
              11:21:44.000 NRL:\\192.168.0.19\Log, False
            * 特定用户共享的 MQPEN
              11:22:55.234 Invalid file cloud ID: MVPEN = \\192.168.0.19\MQPEN英文站点
              11:22:55.234 Before impersonation: NT AUTHORITY\SYSTEM
              11:22:55.250 \\192.168.0.19\MQPEN英文站点, False
              11:22:55.250 Impersonation: 192.168.0.19, kaix
              11:22:55.265 After impersonation: NT AUTHORITY\SYSTEM
              11:22:55.296 \\192.168.0.19\MQPEN英文站点, True
              11:22:55.296 After impersonation undo: NT AUTHORITY\SYSTEM
              11:22:55.312 \\192.168.0.19\MQPEN英文站点, False
              11:22:55.328 NRL:\\192.168.0.19\MQPEN英文站点, False
            * 特定用户共享的 SFA
              11:24:00.640 Invalid file cloud ID: SFA = \\192.168.0.11\质量部\文控\...工程材料确认书
              11:24:00.640 Before impersonation: NT AUTHORITY\SYSTEM
              11:24:00.671 \\192.168.0.11\质量部\文控\产品资料\产品发行资料\...工程材料确认书, False
              11:24:00.671 Impersonation: 192.168.0.11, sfb
              11:24:00.687 After impersonation: NT AUTHORITY\SYSTEM
              11:24:00.703 \\192.168.0.11\质量部\文控\产品资料\产品发行资料\...工程材料确认书, True
              11:24:00.718 After impersonation undo: NT AUTHORITY\SYSTEM
              11:24:00.734 \\192.168.0.11\质量部\文控\产品资料\产品发行资料\...工程材料确认书, False
              11:24:00.750 NRL:\\192.168.0.11\质量部\文控\产品资料\产品发行\...工程材料确认书, False
            * 本地驱动器
              11:27:46.609 Valid file cloud ID: DRV = C:\JYX2005SH\Project.Net\EOffice\Log
            结论:采用 WindowsIdentity.impersonateUser 方案,测试全部通过。
         2) 采用 ImpersonateLogonUser 的 Impersonator 方案,测试各种云文件柜类型,观察Log结果;
            * 一般的 Everyone 共享的 Log
              11:56:53.781 Invalid file cloud ID: LOG = \\192.168.0.19\Log
              11:56:53.781 Before impersonation: NT AUTHORITY\SYSTEM
              11:56:53.781 \\192.168.0.19\Log, False
              11:56:53.796 Impersonation: 192.168.0.19, kaix
              11:56:53.796 After impersonation: NT AUTHORITY\SYSTEM
              11:56:53.796 \\192.168.0.19\Log, True
              11:56:53.796 NRL:\\192.168.0.19\Log, True
            * 特定用户共享的 MVPEN
              11:56:46.765 Invalid file cloud ID: MVPEN = \\192.168.0.19\MQPEN英文站点
              11:56:46.765 Before impersonation: NT AUTHORITY\SYSTEM
              11:56:46.781 \\192.168.0.19\MQPEN英文站点, False
              11:56:46.781 Impersonation: 192.168.0.19, kaix
              11:56:46.781 After impersonation: NT AUTHORITY\SYSTEM
              11:56:46.796 \\192.168.0.19\MQPEN英文站点, True
              11:56:46.796 NRL:\\192.168.0.19\MQPEN英文站点, True
            * 特定用户共享的 SFA
              11:56:59.875 Invalid file cloud ID: SFA = \\192.168.0.11\...工程材料确认书
              11:56:59.875 Before impersonation: NT AUTHORITY\SYSTEM
              11:56:59.890 \\192.168.0.11\质量部\文控\产品资料\产品发行资料\...工程材料确认书, False
              11:56:59.890 Impersonation: 192.168.0.10, sfa
              11:56:59.906 After impersonation: NT AUTHORITY\SYSTEM
              11:57:14.921 \\192.168.0.11\质量部\文控\产品资料\产品发行资料\...工程材料确认书, True
              11:57:14.921 NRL:\\192.168.0.11\质量部\文控\产品资料\产品发行\...工程材料确认书, True
            * 本地驱动器
              11:27:46.609 Valid file cloud ID: DRV = C:\JYX2005SH\Project.Net\EOffice\Log
            结论:不仅代理授权后为 True,此后的当前进程一直为 True,见 NRL:... True
         3) 测试NET运行标识的 System / Network Service 三种进程模型;
            一切顺利,在两种运行标识进程安全模式下均工作正常。
            唯一的区别是,在 Network Service 的情况下共享给Everyone 的目录,无须 Impersonator 代理。
         4) 读写、浏览、下载文件一切均正常
            所有测试都使用 Doso.aspx 测试页面;
            保存文件时的 Download 记录:
            FileName:maxldr FilePath:\\192.168.0.11\质量部\...\U 盘 FileType:mbr
            索引文件先保留,以后再说,尚未测试。

      2. 独立成类 Impersonator 演员类
         1) 网络代理Impersonator定义
            ' Check the identity, before impersonation.
            If Not LogonUser(userName, domainAddr, passwd, ... pExistingTokenHandle) Then ...
            ' Impersonate the Toekn
            If Not ImpersonateLoggedOnUser(pExistingTokenHandle) Then ...
            ' Check the identity, after impersonation.
            If Not testNRL Is Nothing Then ...
         2) 网络代理Impersonator使用 eleMentFile.Recalc
            ' “云文件柜”处理,会话参数传递云标识 Session("ExtID") = CloudID | NRL,
            ' 再由云表Cloud来查找具体的网络文件柜 NRL(Network_Shared_URL)
            eid = pag.Session("ExtID")
            ' 先查找云表,云表格式如下:
            ' Cat=CLOUD, CKey=CloudID, CValue=\\domainAddr\dir网络地址NRL,CNote=身份用户:密码
            fileRoot = MiscMeta.GetCatItem("CLOUD", eid)
            ' 云表找不到找表明是临时云表,即直接传递地址
            If fileRoot Is Nothing Then fileRoot = eid
            ' 如果“云文件柜”不存在,则尝试采用网络身份
            If Not Directory.Exists(fileRoot) Then
              ' 通过标识 IdentityScope 模拟访问:
              Dim unp As String = MiscMeta.GetCatNote("Cloud", eid)
              ' 求出域地址,假定 NRL 格式:\\domainAddr\dir
              Dim dom As String = fileRoot.Substring(2, fileRoot.IndexOf("\"c, 2) - 2)
              ' 求出用户名和密码,假定 UNP 格式:userName/passWord
              Dim spi As Integer = unp.IndexOf("/"c)
              cloudAgent = New Impersonator(unp.Substring(0, spi), dom, unp.Substring(spi + 1))
              If Not Directory.Exists(fileRoot) Then
                AppLog.WriteInfo("Invalid file cloud ID: " + eid + " = " + fileRoot)
              End If
            End If

      3. 推广使用 Impersonator 网络云文件柜技术
         首先在 SFA 的工程材料确认书文件系统中使用;
         需要改造 EntFilePath EFP 类,使其适应“云文件柜cloud”,这样可自动使用其 ReadURL 等方法;
         暂时不允许云文件柜的动态自动 EID,必须事先定义;
         测试数据:
           SFA 云根:\\192.168.0.11\质量部\文控\产品资料
           原始的SFA索引开始位置:\\192.168.0.11\质量部\文控\产品资料\文件目录
           测试SFA用例:\\192.168.0.11\质量部\文控\产品资料\
           正确位置:\\192.168.0.11\质量部\文控\产品资料\

      4. 彻底解决邮件空体(Body==null)错误
         1) 又一个收邮件空体错误:
            未将对象引用设置到对象的实例。
              at EOffice.Common.Util.IsHtml(String txt)
              at EOffice.Common.Util.Html3Text(String str)
              at Org.eleMentSoft.Email.Email.BodyText()
              at Org.eleMentSoft.Email.EmailTable.InsertEmail(mal, Pop3Server, EUserID, Folder)
              at Org.eleMentSoft.Email.ElementPop3.SaveEmail(Email mal)
              at Org.eleMentSoft.Email.ElementPop3.AcquireEmail()
              解决方案如下:
         2) 所有空体均做垃圾邮件处理;
            if (Body==null) Trashed = true;
         3) 空体邮件的 BodyText 直接返回空即可;

  •   1. 即席文本编辑Ajax尝试用于实体内容修改
         需求:在主题内容显示处,由作者或系统管理员可即席文本框修改,通过Ajax传回服务器保存;
         项目:命名为 EntityEdit;
         尝试:首先用于论坛主题的修改上;
         参考:完全仿照 www.flickr.com 网站的方式。

      2. EntityEdit 设计
         1) UI设计:
            可在 TD/DIV 的对象 obj 上进行文本放置;
            通过 obj.GetBoundingClientRect 获取 obj 的即席位置矩形信息;
            替换为相同高度可自动下拉滚动的 TextBox,内容为 obj.innerText;
            底部增加“保存”与“取消”两个按钮;保存时调用 Ajax 页面;
            限制:如果有 HTML 信息则会丢失,就是说只限于进行纯文本即席编辑;
         2) Ajax页面 EntityEdit.aspx
            参数设计为:Cat=分类 & EntID=实体标识 & Field=字段名
            更改的文本 dat,以请求数据 Post 到这里:GetAjax(url, dat), Ajax.Send(dat)
            限制:数据库表设计为标准的实体Entity表设计,如表名为Cat,实体标识字段名为$Cat_ID。
         3) Javascript脚本方法设计
            实体文本元素方法
              ONMOUSEOVER="OverEntityEdit(this);"                   保存以前属性,底色变黄
              ONMOUSEOUT="OutEntityEdit();"                         恢复以前底色
              ONMOUSECLICK="ActiveEntityEdit(this, cat, eid, fld);" 激活即席编辑工具
              通过全程变量保存当前实体字段信息,供后期保存调用,弹出即席编辑文本框工具。
            编辑工具方法
              保存:ONCLICK="SaveEntityEdit();"                    
              取消:ONCLICK="CancelEntityEdit();"
         4) 使用方法
            <TD ID=EEID RUNAT=Server>...
            IF UserID=Session("gsUserID") THEN
              EEID.AddAttibute("ONMOUSEOVER", "OverEntityEdit(this);")
            END IF

      3. Miscs
         转义属性值引号:<ELEMENT ATT="双引号&quot;单引号&apos;"/>

  •   1. 增加帖子视图搜索功能 PostView.Search(kwd) 函数
         1) PostView.Search(kwd)
            ' 名称:在当前帖子视图下搜索
            ' 参数:keyWord 关键字
            ' 返回:搜索的帖子数量
            Public Function Search(ByVal keyWord As String) As Integer
              RowFilter = "Content LIKE '%" + keyWord + "%' OR Attachment LIKE '%" + keyWord + "%'"
            End Function
         2) 改造的页面
            TopicDetail 主题帖子列表
            ExpostList 扩展帖子列表
            其它的各实体评论页面不再修改允许搜索。
         3) 增加帖子视图的用户过滤功能
            ' 名称:将某数据视图的用户字段填加到用户列表中
            ' 说明:使用步骤:1) DropDownList, 2) DataView, 3) UserList.AddListItems,
            '       4) RowFilter = "FieldName=uid"
            ' 参数:dtv 含UserID的数据视图,uidField 用户标识字段,userItems 用户过滤下拉框
            ' 限制:暂不过问用户是否在职
            Public Shared Sub AddListItem(dtv As DataView, uidField, userItems)

      2. 增加 Email.Trashed 属性字段
         解决空的 Body 的错误,算做垃圾邮件处理,将 FFFE属性改为 Trashed垃圾邮件标记。
         保存邮件时直接加入到 trash 邮件夹。

      3. BOM多级查询问题
         BOM多级展开查询功能,本周完成,阶号表示格式采用标准的:1.2.3格式,依次为各个子阶号,并按其排
         序。 保留原来的纯列表格式,增加“分阶树型显示”按钮即可。

      4. Miscs 邓新华:央行为何回避加息
         但是央行既想紧缩货币规模、又想避免震荡的这把算盘是否能如意呢?很显然是困难的。前期放出的天量
         信贷,已经刺激企业,尤其是地方政府和国有企业,进行了大量“错误的投资”(哈耶克语)。宽裕资金环
         境掩盖了这些错误,一旦货币紧缩,它们就会被证明是完全错误的,也是必然无法维持的。即使央行想在
         紧缩货币的同时,仍然给它们提供低息资金,也不可能完全照顾到面广量多的错误投资。

  • v 1. 由 GetAjax 函数统一处理 Token
         在页面 TemplateHeader.inc 统一生成 curToken,由页面的所有 Ajax 请求共享此 curToken。
         <SCRIPT LANGUAGE="javascript1.2">curToken = '<%=GenToken()%>';</SCRIPT>
         该变量的定义在 eleMentCalendar 文件里,因此需要在页面头部的 script 的最后赋值。
         这样做的好处是,在具体的 Ajax 服务镶嵌页面中无须再处理 GenToken 以及活动的 Javascript 的 URL
         合成的问题, 并且如果存在多个 GenToken 也不必重复计算 Token,但坏处是不管有无 Ajax响应,都须
         进行 GenToken 的合成,当然也可另外增加 TemplateAjax.inc 的模块,但暂无此必要。

         在 Ajax 服务页面需要做的工作如下:
           ' 服务访问限制与令牌控制
           If ValidateToken() Then ...
         当然也可以建立专门的 AjaxPage 基类统一处理,目前考虑暂无必要。

    v 2. 由 GetAjax 函数统一处理系统服务的 Ajax 请求
         1) Entity.TagsLink -> js:TagEdit -> Ajax
            ONCLICK=""TagEdit('" + cat + "', '" & eid & "', '" & tok & "')""> "
         2) TopicList.aspx:
            ONCLICK="Attention('Forum', '<%=CurForum.ForumID%>', '<%=GenToken()%>');"
         3) 图片浏览工具 ImgTool
            ActiveImgTool(img) -> GetAjax(url)

    v 3. 统一服务目录到 common/ajax
         原来都在 manage/sys 目录下,将之移动到 common/ajax 目录下:
         1) UpdateTags.aspx
         2) Attention.aspx
         3) MediaBrowse.aspx
         页面代码的命名空间改为 EOffice.Web.Ajax。

      4. 扩展 MediaBrowse 图片浏览也适用于可浏览文件柜的图片浏览
       v 1) 保留原始的 eleMentFile.SelectAttach 新增 SelectFile 函数
            新的 SelectFile 采用标准的 CDF 参数格式,直接用当前文件柜对象求出,不再用静态方法。
         2) 修改参数 "/EOffice/common/ajax/MediaBrowse.aspx" + "?Sib=" + sib + "&" cdf;
            CDF 意味着标准的 eleMentFile 参数 Cat/Dir/File 三参数。

  • v 1. 附件直接在图片下通过 Ajax 浏览
         1) PictureHtml 页面修改
            <IMG ONMOUSEOVER="ActiveImgTool(this);" ONMOUSEOUT="DeactiveImgTool(this);">
         2) 增加实体附件浏览选择功能 eleMentFile.SelectAttach 函数
            从 User.SelectAttach 改造到这里。
         3) 增加 Ajax.js 处理
            function GetAjax(url)
            function LoadImgTool()
            function ActiveImgTool(img) {
              far.style.left = rec.right - 15 + document.body.scrollLeft;
              far.style.top = rec.top + 2 + document.body.scrollTop;
              far.onclick = function() {
                url = "/EOffice/manage/sys/MediaBrowse.aspx?Sib=1&File=" + url;
                url = GetAjax(url);
                img.src = img.src.substr(0, spi) + url;
              };
            }
            function DeactiveImgTool(img)
         3) 增加 MediaBrowse.aspx 页面
            Dim atf As String =
            ' 选择下副照片
            res = eleMentFile.SelectAttach(atf, Request("Sib"))
            If res <> atf Then Session("ATF") = res
            Response.Write(res)
         4) 用户照片替换 UserModify
            If Not Session("ATF") Is Nothing Then
              usr.UpdateAttach(Session("ATF"))
              MessageText += "用户当前照片已经替换。"
            End If

      2. 让帖子的附件的 EntID_* 文件名称前缀以父实体 EntID 为前缀,不再以独立的 PostID_为前缀。如:
         1) 在主题中,主题下所有的帖子附件都有相同的前缀;
         2) 日志下的评论的所有评论附件都有相同的 DI212_* 为前缀;
         3) 新闻的附件处理也是如此;
         缺点:对同一个实体的来自不同用户的评论附件不能同名;
         好处:a. 实体删除时,所有实体下的附件可以很快删除;
               b. 可以在图片浏览模式下工作;

      3. 用户照片轮换方法改造
         User.Attach -> eleMentFile.Upload, User.UpdateAttach
         User.DeAttach -> eleMentFile.RemoveFileTM, User.SelectAttach, User.UpdateAttach
         User.UpdateAttach -> Database.Update
         User.SelectAttach(Dir=0_TopMost|1_Next|-1_Previous, Attach)

  •   1. EOffice完善
         1) 翻页页号继承错误处理
            概念错误:DataView(DataGrid.DataSource).Count <> DataView.Table.Rows.Count
            末页预计算 CurrentPageIndex = Max(0, Math.Ceiling(DataView.Count/DataGrid.PageSize)-1)
         2) 约定俗成:搜索框和搜索按钮放在右下角
         3) 角色删除时需要二次确认

      2. 恢复数据库 YFOA.bak,重新转出 Slogan
         zip 2分钟 bak 10分钟 mdf 即可
         SELECT * FROM Post WHERE ForumID='*SYSTEM' AND TopicID='Slogan'

      3. Miscs
         决不要害怕争执,重新定位的关键在于从根本上动摇现有的观念、产品或人。一旦旧观念被推翻,推广新
         理念就变得简单至极。事实上人们会主动去寻找一个新的理念去填补由此造成的空白,人们喜欢看到骗局
         破灭。——《定位》里斯·特劳特

  • v 1. 为 ExpostList 增加选择功能
       v 1) 选择的几种情形:
            * 选择一条系统通知消息 *SYSTEM:Message;
            * 选择一条系统当前口号 *SYSTEM:Slogan;
            * 选择一个系统标志图标 *SYSTEM:Logo;
            * 选择一个系统标题图标 *SYSTEM:Title;
       v 2) 宣传语也改进到ExpostList管理
            原来是采用 Misc 来管理的,如果 ExpostList 可以选择,最好挪过来统一管理;
            将获取今日宣传语从 MiscMeta.DrawSlogan 迁移至 EntSystem.SelectSlogan
       v 3) 几处改造
          v * 将 *SYSMSG 改为 *SYSTEM 系统;
          v * 将 Application 改为 Message 系统消息;
          v * 将 Feedback 里的系统管理员选择功能挪到 ExpostList 管理中,包括选择按钮与处理;
          v * 增加选择处理:只有 Cat=*SYSTEM 才允许选择;
          v * 将 ExpostList.aspx?Cat=&ExtID= 改为 EntID;
          v * 原来的 EntMgmt 是统一的入口,但将所有的选择处理统一在 ExpostList 进行处理;
          v * 原 ListFeedback 同时开放给:各部门经理(含子部门)、总经办、系统管理员; 但只有总经办和系
              统管理员有权删除。

    v 2. 数据库改造
         1) 将数据库 Post 表的数据进行调整:
            UPDATE Post SET TopicID='Message' WHERE ForumID='*SYSMSG' AND TopicID='Application';
            UPDATE Post SET ForumID='*SYSTEM' WHERE ForumID='*SYSMSG';
            UPDATE Misc SET CKey='*SYSTEM' WHERE CKey='*SYSMSG'
         2) 宣传语Slogan的数据改造
            INSERT Post (AuthDate, AuthorID, ForumID, TopicID, Content)
              SELECT RegDate, 'root', '*SYSTEM', 'Slogan', CValue
                FROM Misc WHERE CKey='Slogan';
            DELETE Misc FROM Misc WHERE Cat='Slogan';
            DELETE Misc FROM Misc WHERE Cat='Misc' AND CKey='Slogan'
         3) 系统环境信息 Misc:Cat=*SYSTEM,CKey代表系统分类消息         
            Slogan    企业宣传语    日历框的企业宣传口号
            Message   系统消息      动态滚动的系统消息
            Logo      企业标志图标  左上角的133x70的logo.gif图片
            Title     企业标题图标  顶部633x76的title.gif图片

  • v 1. 部门介绍的自动宏内容
       v 1) 部门创建时间;
       v 2) 现有人数;
       v 3) 部门管理的公共论坛列表;

    v 2. 部门组人数计算
         1) 从部门组视图直接计算
            SELECT d.DepID, Cnt = Count(*)
              FROM UserDegView d LEFT JOIN [User] u ON u.UserID = d.UserID
              WHERE u.Status > 0
              GROUP BY d.DepID
            该方法简单,对于叶子部门、组是有效的,但对于父部门只能计算直接人数,不能计算子部门人数。
         2) 直接计算某部门总人数
            SELECT Count(*) FROM [User]
              WHERE Status > 0
                AND dbo.DepContain('M1', DepID) = 1
            该方法同样适应于组,最后的条件改为 dbo.GrpContain('*FMGR', UserID) = 1 即可。
         3) 增加方法 DepSystem.GetUserCount(Deg)

      3. 数据库的空间数据比较
         1) 原始数据空间
            YFOA.mdf 893M,YFOA.ldf 5606M
         2) 数据备份空间
            YFOA.bak 838M, YFOA.bak.zip 128M
         3) 空间比例分析
            mdf 1, ldf 6, bak 0.9, zip 0.14
            bak 文件仅占原始 (mdf+ldf) 的 13%
            zip 文件仅占原始 (mdf+ldf) 的 2%
         4) 日志文件的空间管理
            网上文章:LDF是日志文件,可以截掉.
              backup log database_name with no_log
              dbcc shrinkfile(filename)

      4. 数据库恢复 摘自 http://nysogo.spaces.live.com/default.aspx?wa=wsignin1.0&sa=436101955

  • v 1. EOffice.Logo允许系统管理员修改
         EntMgmt企业管理器:暂时允许在企业管理器 EntMgmt 中修改;
         增加 [标题图]、[标志图] 按钮以处理图片的轮换和图片附件的管理;
         图片附件的管理通过实体评论(带附件):ExpostList.aspx?Cat=*SYSMSG&ExtID=Logo/Title;
         图片的轮换通过 EntSystem.SelectLogo(Logo/Title) 来进行。
         同时相关的还有企业 [宣传语] 与系统 [服务语],目前企业 [宣传语] 是采用 Misc 元数据来管理的;
         而系统 [服务语] 也是通过实体评论来实现的:ExpostList.aspx?Cat=*SYSMSG&ExtID=Application;
         企业 [标志图]、[标题图] 的变更管理是 Google 经常做的事情。
         另也可考虑 [标题图] 变换交给组织内相关角色独立进行,目前就完全可行了。

    v 2. EntSystem.SelectLogo
         ' 名称:选择更换企业标识Logo图片和企业标题Title图片
         ' 说明:通过企业管理器,点击 [标题图]、[标志图] 来调用该方法,可在那里管理企业标题图和标志图
         ' 参数:可选 typ,更改的图标类型,缺省为标志图标 logo,也可选 title 标题图标
         '       可选 pid,帖子编号,直接指定某个帖子的图标,缺省为由早到晚轮换选择
         ' 返回:选择成功与否
         ' 限制:5分钟以内新增的 Logo 或 Title 就用当前新增图片;只采用 gif 图标。
         Public Shared Function SelectLogo(typ As String = "logo", pid As Integer = 0) As Boolean

    v 3. 新增实体评论通用管理浏览 ExpostList 页面
         目前暂时用于企业 [标题图]、[标志图] 的管理:ExpostList.aspx?Cat=*SYSMSG&ExtID=logo/title。

  •   1. SSME服务科学与管理工程
         IBM 率先在全球提出“服务科学”的概念, 并对此问题展开了系统的研究、学科探讨和应用实践。 在欧
         洲、北美等地区,服务型经济产业已占据 GDP总量的70%以上,形成了成熟的经济模式。 欧洲和北美地区
         的高等院校和研究机构专业的“服务科学”教学与研究以及完善的服务科学学科体系,正不断推动着服务
         型经济与社会经济的整体发展,成为它们发展的强大动力。

         北大2002年成立“电子服务系”,当时“电子商务”概念正铺天盖地的热起来,但被聘为学院理事长的我
         国软件业界泰斗杨芙清院士提出,电子商务的概念还是太窄.学院应该以“服务”为导向, 做基于IT和计
         算机软件的电子服务教育,这些人才能适用于制造业、金融、电子政务/商务、供应链等等。这个观念比
         IBM 公司提出“SSME(服务科学与管理工程)还早两年多。“刚成立时,学生们都不知道什么是‘服务’,
         还以为我们培养的是端盘子的呢。”今天的李伟平可以很自豪地回忆,“我们是全国乃至全世界大学里的
         第一个服务系,我们系从成立第一天起就致力于服务工程,这是非常有前瞻性的。” 按照IBM于2004年提
         出的SSME理念,该系当时的教学方向是面向服务工程,2006年,该系适时跟进SSMI理论体系,改名为“服
         务科学与工程系”。李伟平介绍说:“我们的教学就是两个方向,一是教学生用软件和IT的方法更好地提
         供原有服务,二是怎样用服务去更好地做一件事,比如有一个新的需求,需要做一项新的业务,都要用到
         IT,这比软件高一层,比业务又低一层,是承上启下的环节。”相对应的,林慧苹对记者介绍,她正在教
         授的ERP, 课程内容分为两部分,一部分是告诉学生什么是ERP,第二是告诉学生传统的模块化的ERP怎样
         在慢慢变成面向服务的 ERP,以后将以什么样的服务形式完成什么样的功能。“软件业最新的发展方向是
         SaaS(软件服务化,Software as a Service)。 所以我们的主导思想是把传统的IT应用往服务方向引,与
         产业最新的趋势结合起来。”

         在IBM看来,今天的服务业正像50年以前的计算机产业一样方兴未艾。令年IBM确立了三大发展战略:成为
         全球整合企业 (GIE)的典范, 专注于开放的科技和高价值的解决方案, 以及为客户带来整合与创新的价
         值。中国作为一个高速发展的新兴市场和世界上最具发展潜力的经济大国,一直是IBM关注的焦点。

         IBM于2004年率先在全球提出“服务科学与管理工程SSME(Service Science & Management Engineering”
         的概念,这些年又在信息科学领域提出“面向服务架构 SOA(Service Oriented Architecture )”。感觉
         这些概念的确很重要,一步步在将“服务与管理”这两个社会或经济学概念向信息系统领域的“可计算”
         方向推进,以弥合二者之间的鸿沟。不过目前市场上似乎有些误解,其实“服务科学”并不等同于“服务
         业科学”,管理工程也不是“工程的管理”或“管理与工程科学”。

      2. 终始观成语
         慎终若始、慎终如始、慎终承始、以终为始;
         慎始敬终、自始至终、始终如一、有始有终、善始善终、始终不渝、始终不懈、始终不易、始乱终弃;

  •   1. 商业模式创新与企业转型笔记
         1) 商业模式的若干定义
            * 简单来说,商业模式至少要回答如下两个问题:
              企业如何为顾客创造价值? * 企业如何从价值实现中赢利?
            * 以价值网络的形式,将内部和外部的角色连接起来,并创造、捕获价值的系统
            * 商业模式三要素:
              价值定位 Value Porposition:产品定位、价值发现、用户体验;
              价值网络 Value Network:各利益相关者的产品、服务、信息流,开放的可应用的网络;
                       注意:这里不是价值链(线性流);AppStore/iTune是开放的可应用的网络;
              价值实现 Value Capture:成本结构、赢利模式;

         2) 微笑曲线的进一步理解
            U型微笑曲线的一般形态:研发 -> 生产 -> 组装 -> 销售 -> 品牌
            其实这种微笑曲线的理解是静态的,应该动态地去理解,比如:
            * 在六七十年代,这是错误的;
            * 对不同业态类型、市场区域的企业也是不同的;
            * 生产与组装的规模足够大时,两头的利润也会压缩的,如Foxconn的情形;

         3) 企业关系的变化
            过去:销售 -> 采购
            现在:客户服务 <=> 采购经理 <=> 客户消费;各方专业化角色的协同完成价值的生产与消费;
            基于关系的变革:
            * 顾客参与设计与生产的个性化定制;
            * 非传统契约:合作生产、合作伙伴关系、引导消费、创造顾客,互相增值的渠道,标准联盟;
     
         4) 商业模式创新成功之道
            商业模式创新的主要形式:已有产品与服务的市场再定位;提供顾客产品与服务的新方式;
            价值主张、虚实结合:功能价值与体验价值相结合;
            价值网络,进退自如:企业核心能力与产品价值链核心环节相匹配;

         5) 十大轻商业模式
            轻制造、网销化、个性化定制、3G服务、微支付、自助广告;
            SAAS软件即服务、群包、硬件软件化(虚拟化)、泛电子商务;

         6) 商业模式与IT平台
            现代商业模式的创新,始终伴随IT平台的创新。从早期的DELL/Walmart,到近期苹果的 iTune / U3 /
            AppStore/QQ,国内Alibaba/Taobao的电子商务、传化的第四方物流,等等都是如此。更不用说处于云
            计算顶端的Google了。它们都伴随着业务IT平台的持续进化。总的来讲在后工业化, 随着网络化、信
            息化、虚拟化社会对人类沟通和组织形式的深入,商业模式的创新也必将形成业态的快速进化。
           
            随着云计算概念的实现与流行,总的趋势是管理越来越可以计算, 十几年前的电子商务,今天已经升
            级为电子服务;十几年前的网络计算,现在已经升级为云计算;十几年前的台式电脑的Windows已经可
            以跑在孩子们的裤兜里、耳朵里、书包里与汽车里;十几年前因为系统的分割与电脑的奢侈, 组织有
            录入员,今天电脑已变成易耗品,现在系统之间已经相互连接,系统无须录入就能计算。

    v 2. EOffice改进
         1) 正式确认 [黑体重点强调] 为标记描述
            EOffice[黑体重点强调][Black]
            (?<Black>\[[\w]+\])
         2) Footer.ascx模块引用
            <%= EOffice.Common.TextPseudo.MarkLink(CommonPage.HelpText)%>

  •   1. 企业架构新概念——论坛笔记精彩点(Flash Point Review)
         1) 什么是企业架构EA(Enterprise Architecture)?
            * 企业架构是系统的系统
              是信息化方法论,是元哲学在企业组织管理系统的应用, 是IT与业务融合的基础,帮助你快速进入
              无边界信息流的信息化社会。
            * 企业战略 + 业务架构 + IT技术架构 的 统一规划;
              结合EA的规划:战略规划,企业架构,企业架构能力与滚动计划;
            * 连接业务架构与IT架构;
            * 企业架构是企业核心业务流程和IT能力的组织逻辑;
         2) 无边界信息流:突破边界,无缝哲学;
            无论何时何地,当信息被需要时,即可安全地交付给需要使用该信息的人员或系统。
            四个边界:组织边界 + 区域边间 + 资源边界 + 系统边界
            格力:价值一体化:突破组织边界;
         3) 企业架构就是企业设计
            对一件事物的架构的认识,决定了我们能够利用它的能力和水平;
            企业架构是一个从高层定义企业发展的问题,它从业务、数据、应用和技术等元素上展现企业
            内部结构和关系,从而使各利益相关者做出有效决策的纪律(Discipline)。
            金蝶定位改变:ERP系统供应商 -> 企业管理专家;
            EA实施策略:全局规划EA;国际标准咨询;深度参与流程梳理;建立落地项目,树立样板;边破边立;
            企业设计 -> 企业管理 -> 企业沟通
         4) 产业价值链
            商业模式、管理模式、价值一体化;
            企业架构重要任务:对齐业务目标与IT能力(Alignment);
            电子商务 = IT + 业务;
         5) 信息化普遍的问题:
            * 大量的重复建设与浪费;        * 大量的信息孤岛与烟囱;
            * 大量的推倒从来与失败;        * 大量的投资黑洞与陷阱;
            信息化对管理变革的作用:
              高效、精细、透明;透明就意味着质量,明朝南京城墙的砖都刻有制作者姓名;
            IT治理:没有革命的理论,就没有革命的实践。—— 列宁
         6) 大企业的普遍痛点
            * 太多的项目没有组合视图,而项目是相关的;
            * 有该做什么(What)的计划,而没有如何做(How)的计划;
            * 更多资源致力于支持遗留系统而非创新;
            * 成碎片的劳动力分布在全球各个点上;
            * 太多的业务流程(知识)分布在各个子组织上,却没有全球唯一的流程和(知识)访问源;
            企业架构如同战略(Enterprise Architecture As Strategy);
            业务流程梳理,数据梳理;
         7) 企业架构EA的战略意义
            * 企业架构支持业务运营;* 支持业务创新;
            * 有利于构建核心竞争力:架构能力 -> 战略执行力 -> 快速反应能力
              恐龙灭亡源于反应迟钝;有问题不断失血;
            企业架构的驱动力:IT挂帅到业务挂帅,业务与IT的对齐(占44%);
         8) 企业连续统 Enterprise Continuum
            业务流程最终体现为组织服务;
            基础 -> 通用系统 -> 行业 -> 组织特定
            (成长度, 敏捷性):有机整合 20 -> 收购 30 -> 创新 40
         9) 企业为什么需要战略
            企业成功,30%来自于战略,40%来自于执行力;
            关键挑战:接受现有资源,业务目标,业务现实,世界不会停止不动;
            永远要做EA基线、EA目标与EA差距分析,目标与优先顺序,设定主要里程碑,建立Gantt图;
         10) 预期理论
            预期理论:心理学研究表明,失去的再小却很重要,得到的再多,却不重要。
            什么叫质量:就是满足客户期望;项目质量:就是控制预期。

      2. SOA与EA的比较
         领域           SOA框架                     EA框架
         -------------- --------------------------- -----------------
         业务           业务流程                    业务体系结构
         应用程序       服务与组件                  应用程序体系结构
         集成与中间件   集成体系结构/ESB            技术体系结构
         数据           数据体系结构                信息体系结构
         操作        QoS、安全性、监视和基础设施 技术体系结构

      3. 业务流程建模标记语言 BPMN 了解
         Business Process Modelling Notation (BPMN) is a graphical representation for specifying
         business processes in a workflow.

         BPMN was developed by Business Process Management Initiative (BPMI), and is currently
         maintained by the Object Management Group since the two organizations merged in 2005. As of
         January 2009, the current version of BPMN is 1.2, with a major revision process for BPMN 2.0
         in progress.

         The modeling in BPMN is made by simple diagrams with a small set of graphical elements. It
         should make it easy for business users as well as developers to understand the flow and the
         process. The four basic categories of elements are as follows:

         Flow Objects
           Events, Activities, Gateways
         Connecting Objects
           Sequence Flow, Message Flow, Association
         Swimlanes
           Pool, Lane
         Artifacts (Artefacts)
           Data Object, Group, Annotation

         BPEL Overview
         BPEL for Windows Workflow Foundation (WF) is an add on for Windows Workflow Foundation in
         the .NET Framework 3.0. BPEL is the Business Process Execution Language and this download is
         an unsupported Community Technology Preview (CTP) for using this technology with WF. The
         download, which is aimed at software developers, provides import and export tools for BPEL
         and includes WF activities representing BPEL for the WF designer in Visual Studio 2005.

         Developers using Visual Studio 2005 can benefit from the WF designer for the modification of
         BPEL workflows.