我在Sharepoint中有3个列表。
我想创建一个数据视图,它是3个表的连接。
Table1与FieldA上的Table2连接在一起 表2加入了FieldB上的表3
Table1在FieldA中有重复的值,所以我只需要返回一个值来加入Table2。
在Access中,我的查询如下所示: SELECT DISTINCT WRK_InputWorkOrders.WorkOrder,Production1。[Part Number],Production1。[Work Order],Production1.Location,StationItems.Station,Production1.Description,Production1.Revision,WRK_InputWorkOrders.Status FROM StationItems INNER JOIN(WRK_InputWorkOrders INNER JOIN Production1 ON WRK_InputWorkOrders.WorkOrder = Production1。[Work Order])ON StationItems.Item = Production1。[Part Number] WHERE(((WRK_InputWorkOrders.Status)<>“关闭”));
有没有办法为数据视图编写类似sql的查询?
我有Sharepoint Designer 2007和Access。
目标是获取用户可以在Internet Explorer中查看的报告。 我尝试过使用this方法。但它返回重复记录 我找到了this的建议。它建议使用XPath过滤器 不(@yourvalue = preceding-sibling :: dfs:YourRepeatingRowName / @ yourvalue)
但是无法让它发挥作用。我不知道输入什么作为YourRepeatingRowName
我找到了this链接。有谁知道它是否可以用于执行这样的连接?
答案 0 :(得分:1)
您的问题更多的是ADO.NET问题。不幸的是,ADO.NET没有一种简单的方法可以做到这一点,这就是像Bamboo Solutions这样的公司构建他们的Cross List Web部件的原因: http://store.bamboosolutions.com/pc-42-1-cross-list-web-part.aspx
否则我会尝试使用LINQ来查询表。你可能会有更多的运气。
以下是MS提供的JOIN查询示例(我只更改了前两个DataTable行以表示使用SPListItemCollection对象填充DataTable)
DataTable orders = spListCol1.ToDataTable();
DataTable details = spListCol2.ToDataTable();
var query =
from order in orders.AsEnumerable()
join detail in details.AsEnumerable()
on order.Field<int>("SalesOrderID") equals
detail.Field<int>("SalesOrderID")
where order.Field<bool>("OnlineOrderFlag") == true
&& order.Field<DateTime>("OrderDate").Month == 8
select new
{
SalesOrderID =
order.Field<int>("SalesOrderID"),
SalesOrderDetailID =
detail.Field<int>("SalesOrderDetailID"),
OrderDate =
order.Field<DateTime>("OrderDate"),
ProductID =
detail.Field<int>("ProductID")
};
DataTable orderTable = query.CopyToDataTable();
答案 1 :(得分:1)
微软有一个视频演示和一个可能正是你想要的写作:
在单个数据视图中显示来自多个来源的数据 http://office.microsoft.com/en-us/sharepointdesigner/HA103511401033.aspx
使用Microsoft Office SharePoint Designer 2007,您可以链接包含相关数据的两个或多个数据源,然后创建一个显示来自这些链接数据源的数据的数据视图。
答案 2 :(得分:0)
您想在SharePoint Designer中显示查询结果吗?我相信,SPD合并了数据源。看看那个。
答案 3 :(得分:0)
我发现第三部分添加
Enesys RS数据扩展允许您从任何SharePoint列表中查询(检索,加入,合并......)数据,并使用结果来构建“Reporting Services”报告,就像使用任何其他数据源一样。 http://www.enesyssoftware.com/
我无法使用它,因为我目前正在运行使用内部数据库的基本Sharepoint版本。
答案 4 :(得分:0)
我做过类似的事情,但我无法使用数据视图。我最后编写了一个自定义Web部件来完成它。方法是:
SPQuery
对象为每个列表获取SPListItemCollection
。使用CAML查询来限制返回的项目。 SPListItemCollection
对象的GetDataTable()
方法为每个列表检索ADO.NET DataTable
对象。 DataSet
对象。 DataList
或Repeater
或其他方式呈现您喜欢的数据。 以下是一些显示广泛笔画的代码:
protected DataTable GetDataTableFromQuery(string camlQry, SPList theList) {
SPQuery listQry = new SPQuery();
listQry.Query = camlQry;
SPListItemCollection listItems = theList.GetItems(listQry);
return listItems.GetDataTable();
}
protected void BuildDataSet() {
// get SPList objects for the lists in questions ... left as an exercise for the dev -- call them list1, list2, and list3
string camlQry = "the CAML necessary to retreive the ites from list1";
DataTable table1 = GetDataTable(camlQry, list1);
table1.TableName = "Table1";
camlQry = "the CAML necessary to retreive the ites from list2";
DataTable table2 = GetDataTable(camlQry, list2);
table1.TableName = "Table2";
camlQry = "the CAML necessary to retreive the ites from list3";
DataTable table3 = GetDataTable(camlQry, list3);
table1.TableName = "Table3";
// now build the DataSet
DataSet ds = new DataSet();
ds.Tables.Add(table1);
ds.Tables.Add(table2);
ds.Tables.Add(table3);
ds.Relations.Add("Table1_2", ds.Tables["Table1"].Columns["FieldA"], ds.Tables["Table2"].Columns["FieldA"]);
ds.Relations.Add("Table2_3", ds.Tables["Table2"].Columns["FieldB"], ds.Tables["Table3"].Columns["FieldB"]);
// now you can do something with these, like store them in the web part class and bind them to repeaters in the web part's Render() method
}