IS CAML the only way to Query MOSS? - sharepoint

CAML is hard to learn, and dificult to use, is there a better way to get results from MOSS, besides using CAML queries? And not referring to the Web Services, which are slower, or the object model, which again is slower.

Essentially, yes, you need to at least be able to read and understand CAML. However you can probably get out of writing it. I've used these tools:
U2U CAML Query Builder by U2U - download and online
Yet Another CAML Query Tool by Carlos Segura Sanz (good if you know SQL) - CodePlex

There is also a Linq to Sharepoint provider which gives the ability to use Linq syntax over CAML - definitely worth a look.
Linq To Sharepoint provider

Yes, Sharepoint 2010 has introduced a tool named SPMetal, using which we can have entities representing the lists in our site.
We can perform CRUD (Create Read Update Delete) operations using SPMetal and Linq.
This link shows you how to generate custom entities using SPMetal and parameters.

I depends on what you want to do.
You can also use the MOSS search engine to search for documents.
http://msdn.microsoft.com/en-us/library/ms544561.aspx

Related

Introduction to CAML in SharePoint

I am new to SharePoint development and i just saw a scripting. It was about retrieving list data using CAML and CSOM.
I somehow understood the scripting but i cant write a script on my own. Can someone tell me how should i start with this? I just need a direction on where to start.
Below guidelines should helpful.
CSOM CRUD
CAML schema

Is creating SharePoint sandbox field types possible?

I want to create custom field type for SharePoint Online. Therefore, AFAIK, it must be sandbox solution. Is there any possibility to create this? Or something that allows me to work on "single item level" on the list (not in edit form but on the list). Maybe some option in item menu or sth?
you have to remember that SharePoint Sandbox Model doesn't offer custom FieldTypes.
There is a really good introduction for Sandboxed SharePoint Solutions on MSDN (http://goo.gl/uXGLo).
SPIs like
ContentTypes
SiteColumns
Lists
could easily be created by using CAML (SharePoint XML-DSL) or by custom .NET Code
Only fields that use a built-in SharePoint Foundation field type, or a custom field type that is previously installed in a farm solution, are possible. A custom field type cannot be deployed in a sandboxed solution.
Yes.
For XML support, see Sandboxed Solution Considerations:
Sandboxed solutions support the following capabilities and elements:
...
Content Types/Fields
For API support, see SPFieldCollection.Add:
Available in SharePoint Online
P.S. It is possible to deploy farm solutions to SharePoint Online in some circumstances. But it is so painful that it should be avoided unless absolutely necessary.

Accessing a List on demand using SharePoint WebService

I am able to access a Site then Lists inside the Site and then List Items inside all the Lists. This works fine when I want to crawl/access all the Items in a Site.
I am keen to know if there is a way through which we can directly access a List in a Site. To elaborate on this :: If I have 1000 sites and 1000 documents then I would have to go through 1999 items at the worst before finding the one I want.
Any help/suggestion on this would be greatly appreciated.
Thanks
Try using an SPSiteDataQuery to get what you need. There are many ways to develop the CAML query you want such as CAML Query Builder.
This is the best way to avoid trolling through all Webs->Lists->ListItems to find items.
I prefer to limit the SPSiteDataQuery to one site collection and call the query for each site collection that is relevant as there are some limitations to the SPSiteDataQuery.
The equivalent for webservices would be the GetListItems in the SiteData webservice

How to query data in SharePoint from multiple lists

I have multiple SharePoint lists and want to display data from them on to a gridview control.
Please guide me.
Grace
Your question inspired me to develop a web part that demonstrates:
How to query SharePoint data in the many ways offered by the API, and
How to bind it to a grid view.
It can be found on CodePlex here. Some of it is a little rough but it should be enough to show you the basics. It demonstrates the following query types:
For loop (if that counts)
GetListItems from Lists web service
SPQuery for SPList objects
SPSiteDataQuery for cross-site list queries
CrossListQueryInfo for cached cross-site list queries
PortalSiteMapProvider for SharePoint Server publishing sites only
There is code for using the search engine but this isn't wired up to the web part itself yet.
I hope it helps you. If you try it and have problems please use the CodePlex site to get support from me.
Two options that I can think of:
SPSiteDataQuery
Set up a search scope, metadata, and then query your Scope using Enterprise Search SQL and FullTextSqlQuery
With SharePoint 2007 you can use CrossListQueryCache and CrossListQueryInfo. More information here.

Easiest way to extract SharePoint list data to a separate SQL Server table?

Edited:
What is the easiest way to scrape extract SharePoint list data to a separate SQL Server table? One condition: you're in a work environment where you don't control the SQL Server behind the SharePoint Server, so you can't just pull from the UserData table.
Is there there any utilities that you can use to schedule a nightly extract?
Is Microsoft planning any improvement here for "SharePoint 4"?
Update Jan 06, 2009:
http://connectionstrings.com/sharepoint
For servers where office is not installed you will need:
this download
There is a SSIS SharePoint task you can use to grab the data info a regular dataflow:
http://www.codeplex.com/SQLSrvIntegrationSrv
Scraping? As in screen scraping? Are you serious? ;)
2 Options
SharePoint Object Model - http://msdn.microsoft.com/en-us/library/ms441339.aspx
SharePoint Web Services - http://msdn.microsoft.com/en-us/library/ms479390.aspx
specifically the Lists web service
The web services is how Excel/Access communicate with SharePoint to integrate with its lists.
In fact a bit of Google foo gives these two results :-
Connecting SQL Reporting Services to a SharePoint List
Accessing SharePoint List Items with SQL Server 2005 Reporting Services
The 2 minute answer is to use Data Synchronisation Studio from Simego ( http://www.simego.com ) just point it at your List and database and it will sync all the changes.
There is an ADO.NET adapter for MOSS 2007/2010 and WSS 3.0/4.0 available which goes under the name Camelot .NET Connector for Microsoft SharePoint. It enables you to query lists in SharePoint through standard SQL language, using SharePoint as a data layer.
Besides from the connector, there will be a large number of open source tools and utilities available, such as webparts for exporting data to various formats (XML, MySQL, ..), Joomla plugins, synchronization services, etc.
See http://www.bendsoft.com for more details and to watch webcasts. BendSoft is currently looking for beta-testers and encourage all feedback from the community.
Example:
SELECT * FROM My Custom SharePoint List
INSERT INTO Calendar (EventDate,EndDate,Title,Location) VALUES ('2010-11-04 08:00:00','2010-11-04 10:00:00','Morning meeting with Leia','Starbucks')
DELETE FROM Corp Images WHERE Image Name = 'marketing.jpg'
I had written a full article about this with step by step screenshot procedures. It does not use any third party components only SQL BI Tools and Sharepoint. Have a look here
http://macaalay.com/2013/11/01/how-to-archive-sharepoint-list-items-to-sql-server/
As Ryan said I would also suggest using object model / web services to store data to separate SQL database. I think that the best approach is to write an event handler that will trigger on your least and copy the data user inserted/updated.
Regarding your query about "SharePoint 4", Bill Gates made some remarks at SharePoint Conference 2008. He suggests enriching SQL tables with SharePoint data, and goes on to mention several other potentially cool things. What exactly he means and whether it will help solve your problem in the future is hard to say until we start seeing betas of WSS4 / MOSS 14.
I would go with the simego software, but i dont have the money, maybe a 15 days trial is enough!
If you have MOSS installed, the Business Data Catalog can be setup from the Sharepoint Central Administration to automagically synchronize data for you. This is a very powerful product and is included with MOSS. I love it when a client has it enabled so I can take advantage of it.
But some don't and for myself, I've found that if they don't have BDC running and available, inevitably they don't give developers many rights to SQL Server so SSIS is generally out of the question (but maybe that's just me). No problem; for those I'll pull together a lightweight EXE that runs on a scheduled task that queries Lists.asmx and pushes changes to a SQL Server table. Fairly trivial stuff for a simple list where nothing is deleted. Get yourself Visual Studio 2008, CAML Builder, and prepare for a good time. The Lists.asmx results is a little funny in that a list's row's fields are each a single node with a lot of attributes, with no child nodes ... something like this off the top of my head ... just remember that when coding ...
<z:row ows_Id="1" ows_Field1="A1" ows_Field2="B1"/>
<z:row ows_Id="1" ows_Field1="A2" ows_Field2="B2"/>
Complications in code occur with copying lists where items are deleted, or where there is a parent/child relationship between SP lists. You'd think I'd have some code to send you, but I haven't bothered putting together something I could reuse.
I'm sure there's other ways of handling it, but the scheduled task EXE so far has been reliable for me for multiple apps for multiple years.
i wrote some code to achieve it, you can find it over here
extract data from moss 2007
Depending on the exact nature of the data you need to insert, it may be possible to just use the auto generated RSS feed to get the information you want, a process will need to read the rss and formulate a query.
Otherwise a consoleapp/service could use the object model to do the same thing, but with more control over field information.
I wish something like this was much easier to do. Something that didn't need SSIS and was boiled down to a console tool that reads a xml config file for source/target/map info.
http://blogs.officezealot.com/mtblog/archive/2008/06/03/importing-list-data-into-sql.aspx

Resources