relacionar - vistas en sharepoint 2013
¿Cómo crear una vista de datos en Sharepoint con datos de una consulta de combinación? (5)
¿Quieres mostrar el resultado de la consulta en SharePoint Designer? Creo que SPD ha fusionado fuentes de datos. Mira eso.
Tengo 3 listas en Sharepoint.
Quiero crear una vista de datos que sea una combinación de 3 tablas.
Table1 se une con Table2 en FieldA Tableta 2 se une a Table3 en FieldB
La Tabla 1 tiene valores duplicados en FieldA, por lo que solo debo devolver un valor para unirme a Table2.
En Access, mi consulta tiene este aspecto: SELECCIONE 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 EN WRK_InputWorkOrders.WorkOrder = Production1. [Work Order]) ON StationItems.Item = Production1. [Número de pieza] WHERE (((WRK_InputWorkOrders.Status) <> "closed"));
¿Hay alguna manera de escribir consultas tipo sql para dataviews?
Tengo Sharepoint Designer 2007 y Access.
El objetivo es obtener un informe que un usuario pueda ver en Internet Explorer. He intentado usar este método. Pero devuelve registros duplicados. Encontré esta sugerencia. Sugiere usar un filtro XPath no (@yourvalue = precedente-hermano :: dfs: YourRepeatingRowName / @ yourvalue)
Pero no fue capaz de hacerlo funcionar. No sé qué ingresar como YourRepeatingRowName
Encontré este enlace. ¿Alguien sabe si se puede usar para realizar dicha unión?
Encontré esta tercera parte agregar
Enesys RS Data Extension le permite consultar (recuperar, unir, fusionar, ...) los datos de cualquier lista de SharePoint y usar el resultado para crear informes de "Reporting Services" como lo haría con cualquier otra fuente de datos. http://www.enesyssoftware.com/
No puedo usarlo porque actualmente estoy ejecutando la versión básica de Sharepoint que usa la base de datos interna.
Tu pregunta es más una pregunta de ADO.NET. Lamentablemente, ADO.NET no tiene una manera fácil de hacerlo, y es por eso que las empresas como Bamboo Solutions crean su elemento web de lista cruzada: http://store.bamboosolutions.com/pc-42-1-cross-list-web- part.aspx
De lo contrario, intentaría usar LINQ para consultar las tablas. Puede que tengas más suerte haciendo eso.
Aquí hay un ejemplo de una consulta JOIN proporcionada por MS (solo cambié las primeras dos líneas DataTable para representar el llenado de una DataTable con un objeto SPListItemCollection)
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();
Microsoft tiene una demostración de video y un informe que puede ser justo lo que quiere:
Visualice datos de múltiples fuentes en una única vista de datos http://office.microsoft.com/en-us/sharepointdesigner/HA103511401033.aspx
Con Microsoft Office SharePoint Designer 2007, puede vincular dos o más orígenes de datos que contengan datos relacionados y luego crear una única Vista de datos que muestre datos de esas fuentes de datos vinculadas.
He hecho algo como esto, pero no pude usar una vista de datos. Terminé escribiendo una parte web personalizada para hacerlo. El enfoque fue:
- Use un objeto
SPQuery
para obtener unaSPListItemCollection
para cada lista. Use la consulta CAML para restringir los elementos devueltos. - Utilice el
SPListItemCollection
GetDataTable()
del objetoGetDataTable()
para recuperar un objeto ADO.NETDataTable
para cada lista. - Agregue las tablas a un objeto
DataSet
. - Crea relaciones entre las tablas.
- Renderice los datos como desee, usando
DataList
oRepeater
o lo que sea.
Aquí hay un código que muestra los trazos generales:
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
}