于SharePoint Designer 2007吃动用交叉列表查询的数据视图

概述:

前言:

     
使用列表作为店铺小型数据管理之解决方案是很便于的,但是未便于之地方是列表与列表中不便利进行数量的连接,但是利用SPD我们好起列表与列表中的陆续查询的数码视图。唯一非便利的凡,使用跨列表查询时,我们无得以行使“表单”这同种植多少视图,这代表我们虽未得以用规划出底页面进行编辑的操作。但是对于非复杂的使用,跨列表的数目视图功能要让了俺们大酷的便民。

每当8月份时,那时已经就此CYQ.Data 1.2本演示了一个完全的演示,留言版:详见:CYQ.Data
轻量数据层之路 应用示范一
留言版(四)
本篇将动用2.N多重版本,在非改原来留言版系统一行代码的气象下,实现其数据库操作日志功能。

结果的URL:http://www.sharepoint.org.cn/dosboy/remain.aspx

风行版本下载见:CYQ.Data 轻量数据层之路
bug反馈、优化建议、最新框架下载

前骤:
     
有些许独列表,其中一个凡“全部产品”,用来储存产品ID、总数据与其余基本信息,另一个列表是“使用产品”,记录了活ID和用的数额。
现在我们如果列有一个发明,来展示每一样起产品的库存数据,使用公式很简单:库存数量=总数量-使用量。

 

少数只说明的组织要下图:

 

图片 1

正文步骤:

图片 2

 

**步骤:

一:建表

1 打开SPD在彻底目录新建一个ASPX页面,起名为 Remain.aspx :

1:增加一个日记操作表[ActionLogs],这个必要,表结构如下

**方法是点击SPD的“打开”-“网站”,输入SP网站的URL,然后“新建”-ASPX页面。保存也Remain.aspx

图片 3

如下图:

2:创建表的数据库脚本如下:

图片 4

图片 5图片 6创建ActionLogs表

**2 新建链接源

CREATE TABLE [dbo].[ActionLogs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NULL,
    [Msg] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
    [LogTime] [datetime] NULL CONSTRAINT [DF_ActionLogs_LogTime]  DEFAULT (getdate()),
 CONSTRAINT [PK_ActionLogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

**方法是,点击“数据视图”-“插入数据视图”,在右手边的数码源库的链接源中,点击“新建连接源”,如下图:
图片 7

 

当弹出的窗口点击如图按钮:

 

图片 8

仲:建类库项目独立实现操作日志

挑选而连的列表:

1:新建一个型类库起名就于:AopLog,同时丰富对CYQ.Data.DLL的援[2.N多级版本]

图片 9

2:新建一个近似,继承自CYQ.Data.Aop.IAop接口,并实现之如:

生一致步来挑选总是方式:

图片 10图片 11

图片 12

    public class AopLog : IAop
    {

于“完成”后,你得望见如下的新链接源:

        #region IAop 成员

图片 13

         public void Begin(AopEnum action, string objName, params object[] aopInfo)
        {
            //这里先没下,用于权限判断
        }

3 插入“全部出品”的数视图
以新数据源中,点击它的上下文菜单,单击显示数据,以开拓这数据源的详细情况:

        public void End(AopEnum action, bool success, object id, params object[] aopInfo)
        {
            //这里相当会如落实
        }

图片 14

        public IAop GetFromConfig()
        {
            return null;//默认这样即便行了
        }

你见面盼含2个列表的XML树状结构:

        public void OnError(string msg)
        {
            //这里先没动用,数据库操作特别时引发
        }

图片 15

        #endregion
    }

进展“全部产品”,找到“产品ID”、“产品名称”和“总数据”,如图插入多类型视图:

 

图片 16

3:我们以切实贯彻分流至另外一个好像处理:新建类:ActionLog.cs,并事先留下方法接口:

然后,你就可以看到在页面编辑的的窗口中看见插入了一个表格,正如图于斯表右边插入两单空列:

图片 17图片 18

图片 19

public class ActionLog
{
    public void WriteFill(object id)
    {
    }
    public void WriteInsert(object id)
    {    
    }

立刻2只空列,用来存放使用数据及库存数据。

    #region 其它措施
     private int GetUserID()
    {
    }
    private void Write(object id, string msg)
    {   
    }
    private bool ContainUrl(string key)
    {     
    }
    #endregion
}

4 插入“产品采取”子视图:
肯定要是管光标移到如下拉的位置,并且以右展开“产品采用”选择下都用数码,点击图中的按钮,选择“连的子视图

 

图片 20

4:回到AopLog实现方式

这时候会弹有一个连续菜单,如下图,因为本示例被的成品ID,是转了系的“标题”字段为“产品ID”名称的,所以总是的字段都为@Title,如果你是别字段,请捎是的内部名称:

图片 21图片 22AopLog 实现
只是互补加了一个构造函数和兑现End方法

图片 23

    public class AopLog : IAop
    {
        ActionLog log;
        public AopLog()
        {
            log = new ActionLog();
        }
        #region IAop 成员

点击确定后,表格中见面多发生一个联按的子视图,如下图,你一直去这个标题,然后以列首加以一个“已用”就OK了。

        public void Begin(AopEnum action, string objName, params object[] aopInfo)
        {
        }

图片 24

        public void End(AopEnum action, bool success, object id, params object[] aopInfo)
        {
            if (success)
            {
                switch (action)
                {
                    case AopEnum.Fill:
                        log.WriteFill(id);
                        break;
                    case AopEnum.Insert:
                        log.WriteInsert(id);
                        break;
                    default:
                        break;
                }
            }
        }

如下图:
图片 25

        public IAop GetFromConfig()
        {
            return null;//这个默认返回null就实行了
        }

**5 插入库存数据

        public void OnError(string msg)
        {
            //在数据库操作非常时引发
        }

**在表的右边还有一个空列用来放开计算的库存数量。在列首,请填入上“库存”,并且将总数量下之字段(如齐图的100.00挺标签)复制到,库存下面,如图:
图片 26

        #endregion
    }

当“库存”一排列的率先个记录单元格里,同样
选择“粘贴”,之后,就见面出现零星只究竟数据,如下图,不要急:

5:实现ActionLog方法

图片 27

a:从Session获取用户ID

点击“库存”下之率先个字段,如图设置它的XPATH表达式:

图片 28图片 29

图片 30

       private int GetUserID()
        {
            int id=0;
            if (HttpContext.Current.Session[“ID”] != null)
            {
                int.TryParse(Convert.ToString(HttpContext.Current.Session[“ID”]), out id);
            }
            return id;
        }

在弹来窗口被输入如下的表达式:

b:插入表数据方式封装

图片 31format-number(number(@_x603b__x6570__x91cf_)-number(../../../产品下/Rows/Row[@Title=current()/@Title]/@_x5df2__x7528__x6570__x91cf_),’####’)
图片 32

图片 33图片 34

图片 35

        private void Write(object id,string msg)
        {
            int userID = GetUserID();
            if (userID == 0)
            {
                int.TryParse(Convert.ToString(id), out userID);
            }
            if (userID > 0)
            {
                MAction action = new MAction(TableNames.ActionLogs);
                action.SetNoAop();//写日记时,注意关闭Aop功能。
                action.Set(ActionLogs.UserID, userID);
                action.Set(ActionLogs.Msg, msg);
                action.Insert();
                action.Close();
            }
        }

点击确定后,就可以看到库存就于计算出来了。

c:检测Url是否带有指定字符

图片 36

        private bool ContainUrl(string key)
        {
            return System.Web.HttpContext.Current.Request.Url.ToString().ToLower().Contains(key);
        }

不过尚未使的“随变”这个活之库存好象计算不科学,我们管此公式再变成如下的公式,就搞定:

d:实现登陆日志记录

图片 37format-number(number(@_x603b__x6570__x91cf_)-number(concat(‘0′,../../../产品使用/Rows/Row[@Title=current()/@Title]/@_x5df2__x7528__x6570__x91cf_)),’####’)
图片 38

        public void WriteFill(object id)
        {
            if (ContainUrl(“login.aspx”))
            {
                Write(id,”登陆成功!”);
            }
        }

如下图:

e:实现挂号日志与留言日志记录

图片 39

图片 40图片 41

        public void WriteInsert(object id)
        {
            if (ContainUrl(“reg.aspx”))
            {
                Write(id,”注册成功!”);
            }
            else
            {
                Write(id,string.Format(“添加相同履行留言[id={0}]!”,id));//需要启用更多分时,请动”params object[] aopInfo信息[此要修改界面参数代码]”
            }
        }

 

 

其三:切入原有留言版系统

1:将类库生成的AopLog.dll放到留言系统的Bin目录下

2:升级原来CYQ.Data.DLL的1.2版及最新版本。[全盘匹配,直接复盖升级]

3:配置文件appSettings项增加一行配置:<add key=”Aop”
value=”AopLog,AopLog.AopLog”/>

 

季:运行结果

1:操作登陆、注册、留言!!!数据库记录结果如下图:

图片 42

 

五:示例下载

点击下载 [啊节空间,删除了转变的dll,请复引用dll编绎运行]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图