Editor's Note: The following MVP Monday post is by Russian SharePoint Server MVP Marat Bakirov and is available in both English and Russian.
How to create a LightSwitch Application that works with SharePoint Data.
In this article we will work with Microsoft SharePoint data in Microsoft Visual Studio LightSwitch. We will take a SharePoint site with existing data and make an application for the end users that will enter the data. In this article I would like to point out to the required protocol for SharePoint and also explain how to work with lookup columns in a right way.
In this article we will work with Microsoft SharePoint via Microsoft Visual Studio LightSwitch. I suppose that my readers have a basic understanding what SharePoint is.
However, LightSwitch is a relatively new technology, so at first it looks like one could explain it in a few words. This is true and false at the same time. There is a great book called “Framework Design Guidelines” and it clearly states that a good framework should give us simple ways to do our most popular tasks and at the same time provide flexibility and advanced customization methods. All these statements are true about LightSwitch.
As a user, you can drag/drop/click and make your interface and an application the way you want. As a developer, you can bring some parts to another level thanks to LightSwitch extensibility and the fact that it is built on the latest Microsoft technologies for applications.
So let us start and make an application that works with SharePoint data.
First, we need to install an extension SharePoint that allows us to work with SharePoint via OData. OData is a standard protocol for manipulating data via REST (Representational State Transfer. The idea of OData/REST is simple – we use standard HTTP GET/PUT/DELETE verbs and some variation of RSS/Atom format for operating with our data via web or network. For example, we can use an URL http://yoursite/_vti_bin/listdata.svc/IPPublic(3) and it means that we want to get element number 3 in a IPPublic collection from site your site. At the same time, we can PUT XML data to the same URL to save data and also we can add some parameters to the URL to sort, filter the data returned or even use data paging.
So we want to enable this technology for SharePoint. There is a quick way to see if the technology is installed on your SharePoint or not. Just take any URL of your existing SharePoint site and simply add a magic suffix “_vti_bin/listdata.svc”, put the combined url http://yourgreatsite/_vti_bin/listdata.svc into a browser, push enter and see what happens. Normally you will see an error message “Could not load type System.Data.Services.Providers.IDataServiceUpdateProvider from assembly System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” indicating that these data services are not installed.
By default all pages and web files required are already available in SharePoint, but we miss the actual Data Services DLL’s in Global Assembly Cache. There are several links for ADO.NET Data Services update, but I found out for myself that this link work for Windows 7/ Windows Server 2008 R2 and this should work for Vista / Windows Server 2008. If your installation is successful, you should see something like this
In our company Intranet solutions we have rather complex data structure. This structure includes information about job positions. When you create a new job position you need to enter information about a division first, because we have relations (lookup columns). Let us try to make an application that will allow us to enter and edit this data.
Here is a part of our data schema that is used on the portal. The schema is prepared with a great Visual Studio plug-in called Open Data Protocol Visualizer. You can see that Job positions refer to other entities such as divisions and job statuses.
Now let us start Visual Studio 2010 or Visual Studio LightSwitch 2011 (technically LightSwitch installs as a plug-in if you already have Visual Studio Professional version or higher). For this article I am using my Visual Studio 2010 version. Create a new Project, select LightSwitch \ LightSwitch Application (I am using C# for this demo).
After creating a new app, Visual Studio starts with a fancy screen.
Now we press a button “attach to external Data Source” and select SharePoint.
Next screen asks us for an address and the credentials – we can choose Windows credentials to authenticate as a current windows user (the option we do choose now) or we can enter specific credentials. The last screen allows us to select the lists we would like to work with. I have selected IPDivisions, IPEmployees and IPJobPositions. LightSwitch gives me a warning that I have some extra dependencies on three other lists and a special list called UserInformationList, and I press Continue. The UserInformationList is a special list SharePoint uses to store information about site collection users, and all system fields like Editor (a person last edited the item) can be considered as references to this list.
As I cannot wait to see what happens, I usually immediately try to run an app after the wizard. This time I have entered into an error like this.
“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\LightSwitch\v1.0\Microsoft.LightSwitch.targets(157,9): error : An error occurred while establishing a connection to SQL Server instance '.\SQLEXPRESS'.
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Done building project "LSAPplication.lsproj" -- FAILED.”
This should not normally happen on your machines, but happens on my geek machine. As I do have SharePoint installed, I am saving memory as much as possible, so I do only run the SQL server I need each day (and it is .\SharePoint). I do have SQL Express installed, but do not run it automatically. But wait a moment … we are working with SharePoint data, why then we do need a SQL Express for our application???!
The answer is that LightSwitch is intended to quickly make an application and to quickly design a data schema. When the user designs a data schema and creates some tables, they are stored in SQL Express running in the User mode. Moreover, when you deploy your solution as a multi-tier application having a layer deployed on IIS, you may need SQL Express for ASP.NET infrastructure such as user settings. However, if you do not have any data except SharePoint and deploy your application as a desktop application with app services running on local machine (it is one of the deployment options), the end user does not need a SQL Express. But Visual Studio uses full mode with web services running on local web server, and thus you need a SQL Express for running and debugging.
So SQL Express is installed and running and the user mode enabled –here is a link with instruction. You may sometimes face sometimes an error “Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance” – here is a solution.
So far we have added a SharePoint data connection to our application. Open a solution explorer. By default, the explorer may look confusing and offering nothing for a developer. But there are two views for a solution, which can be switched by a dropdown. One is called Logical View and the other is File
View. First one is simpler and presents an overall data and interface for your application. The second one shows you all the files and all the custom logic in your application and is good for a developer for deeper understanding the application structure.
Before we create our visual interface, let’s complete two simple but very important steps. Open each of your table in your data source (just double click it). You will see a list of columns. You can click on the table itself and on each column, and explore some settings in the standard Visual Studio property window.
The first important setting is “Display by default” defined the column level. When it is checked, the column appears in new screens you create in Visual Studio. Visual Studio LightSwitch is smart enough to hide SharePoint system columns such as Owshiddenversion or Version, but it displays ContentType by default. In most cases we do not need this column, when our list contains only one content type. We deselect ContentType from all our data tables.
The second important setting is a Summary property defined on a table level. This setting is very important when the table data is displayed as a list.
Consider an example. You need to edit a job position. When you edit a division, you see a drop-down list showing all divisions. In this dropdown, the summary column is shown. By default, SharePoint shows a content type, so you see nothing meaningful in a list.
That’s why I suggest changing summary property to Title for all our types and to Name in our UserInformationList.
Now we are ready to create our screen data. Open logical view, right click on Screens and select Add Screen. For this sample we will use List and Details screen type. Give a screen any name, and select the desired entity in a Screen Data drop down. For this sample, I have selected IP Job positions. Let us do the same for all entities referred by our JobPositions – for my data structure this would be Divisions, Job Statuses and some other entities.
Now the application is ready and we can press Ctrl F5 to run an application.
To further extend an application I suggest watching a 15 minutes video by Beth Massi which shows some additional functions such as querying data depending on a current user. LightSwitch contains a lot more features than we have seen today, such as custom validation logic or event handling that allows us to easily fill the data. LightSwitch is a quick way to build rich applications for end users and deploy them as Desktop or Web application.
Author's Bio
Marat worked in the IT industry since 1993. First with Borland Pascal , Assembly language and MS DOS.
He has worked on projects for companies like www.x-tensive.com (DataObjects.NET project), www.mesware.be .
In 1996-2000 Marat worked on projects for Rocket Software and IBM companies. And from 2007-2010 worked at Microsoft Russia as a Community Developer Evangelist. He is currently the Chief Software Architect at UMSOFT company.
MVP Mondays
The MVP Monday Series is created by Melissa Travers. In this series we work to provide readers with a guest post from an MVP every Monday. Melissa is a Community Program Manager for Dynamics, Excel, Office 365, Platforms and SharePoint in the United States. She has been working with MVPs since her early days as Microsoft Exchange Support Engineer when MVPs would answer all the questions in the old newsgroups before she could get to them
Как создать приложение LightSwitch для работы с
данными SharePoint.
Марат Бакиров
В данной статье мы будем работать с данными Microsoft SharePoint с помощью Visual Studio LightSwitch. Мы возьмем уже созданный сайт Sharepoint и сделаем приложение воода данных конечными пользователями. В статье я укажу необходимые настройки Sharepoint, а также укажу как правильно работать с колонками типа Lookup.
В статье мы работаем с Microsoft Sharepoint с помощью Visual Studio LightSwitch. Я предполагаю, что читатели статьи имеют базовое понимание того, что такое Sharepoint.
В то же время, LightSwitch является достаточно новой технологией, и на первый взгляд может показаться, что данное приложение можно было бы объяснить за две секунды. Это одновременно и правда, и неправда. Есть замечательная книга “Framework Design Guidelines’, в которой сказно, что любая хорошая библиотека ( в оригинале framework) должна предоставлять возможность быстро и просто решать самые распространенные задачи, но в то же время предоставлять гибкость и различные возможности по настройке. Все вышесказанное однозначно относится к LIghtSwitch.
Действительно, LIghtSwitch содержит упрощенный режим, в котором с помощью drag and drop можно очень быстро настроить и сделать приложение. Но будучи разработчиком, можно сильно улучшить итоговое приложения благодаря тому, что LIghtSwitch предлагает расширяемость с помощью самых новых технологий Microsoft для построения приложений.
Итак, давайте попробуем сделать приложение для работы с данными Sharepoint.
Первым делом необходимо установить специальное расширения для Sharepoint , которое позволит нам работать с Sharepoint через интерфейс OData. OData это стандартный протокол для работы с данными через REST (Representational State Transfer). Идея REST очень проста – мы используем стандартные команды HTTP GET/PUT/DELETE , а также некую разновидность формата RSS/Atom для того, чтобы читать и писать данные. Если мы, например, обращаемся к данным по URL http://yoursite/_vti_bin/listdata.svc/IPPublic(3), то это означает, что мы хотим на сайте yoursite в списке или библиотеке IPPublic получить элемент номер 3. Также мы можем записать данные с помощью команды PUT или с помощью добавления параметров к URL команды GET получить отфильтрованные или отсортированные данные.
Мы хотим включить на нашем Sharepoint сайте данную технологию. Можно очень быстро проверить – установлена ли у вас поддержка Odata – для этого достаточно взять URL любого сайта и добавить к нему строчку _vti_bin/listdata.svc и открыть то, что получилось с помощью веб браузера. Обычно при свеже-установленном Sharepoint Вы при этом получаете сообщение об ошибке «Could not load
type System.Data.Services.Providers.IDataServiceUpdateProvider from assembly System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089». Это происходит потому, что все необходимые страницы уже присутствуют в Sharpepoint, но
необходимые сборки не установлены в Global Assembly Cache. Существует несколько ссылок для скачивания ADO.NET Data Services, и в них
можно запутаться, я лично записал для себя что данная ссылка работает в Windows 7/2008R2 и вот эта должна работать в Windows Vista/2008. Если Вам удалось все правильно установить, то Вы должны увидеть что то вроде этого:
Я решил попробовать для примера решение нашей компании для интранет порталов. У нас в решении достаточно сложная структура данных, содержащая, в частности, данные о должностях сотрудников. Но поскольку у нас есть связи между данными (lookup
columns), то прежде чем вводить данные о сотруднике, приходится вводить данные о структуре предприятия. Именно поэтому мы хотим создать Windows приложение для быстрого ввода данных.
Ниже приведена часть схемы данных нашего портала. Кстати, есть совершенно замечательный плагин для визуализации структур OData под названием Open Data Protocol Visualizer, картинка подготовлена с помощью него. Видно, что данные о должностях содержат ссылки на другие данные.
Запуcтите Visual Studio 2010 или Visual Studio LightSwitch 2011 (по сути, LightSwitch устанавливается в качестве дополнения, если у Вас уже есть Visual Studio Professional или выше). Выберите новый проект, далее выберите LightSwitch \ LightSwitch Application (я обычно выбираю C#, но у Вас есть варианты). После создания Вы получите стартовый экран с двумя опциями «Create New table» и «Attach to external Data Srouce». Выбираем вторую опцию, выбираем SharePoint.
Далее необходимо будет выбрать вариант аутентификации – либо Windows (то есть наше конечное приложение будет соединяться с сайтом Sharepoint от имени текущего пользователя), либо указать конкретные учетные данные. На последнем экране можно выбрать необходимые нам списки из имеющихся на сайте. Я выбрал три списка. LightSwitch предупреждает, что существует зависимость относительно служебного списка UserInformationList и предлагает его тоже добавить. Тут остается только согласиться и нажать Continue. Список UserInformationList – это специальный служебный список, в котором храниться информация о всех пользователях, которые хотя бы раз появлялись на сайтах из указанной коллекции (авторизовались либо указывались в списках или списках прав), и технически очень многие системные поля такие, как Editor (пользователь, последним изменивший запись), можно считать ссылками на данный список.
<image 4>
После этого можно уже пробовать запускать приложение. Если Вы ставили все по умолчанию, то все будет хорошо, но я при запуске столкнулся со следующей ошибкой.
“C:\Program Files
(x86)\MSBuild\Microsoft\VisualStudio\LightSwitch\v1.0\Microsoft.LightSwitch.targets(157,9): error : An error occurred while establishing a connection to SQL Server instance '.\SQLEXPRESS'.
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Done building project "LSAPplication.lsproj" -- FAILED.”
Ну ясно, нет или не запущен SQL Express. Хотя секунду… мы работаем с данными Sharepoint, почему же нам нужен SQL Express?
Дело в том, что одной из основных возможностей LightSwitch является быстрое создание схемы данных. Пользователь создает таблицы схемы данных, и данные хранятся в SQL Express в режиме User Mode. Более того, если вы будете впоследствии разворачивать приложение в режиме ASP.NET, SQL Express может понадобиться для хранения системных данных ASP.NET – например для данных о пользователях и ролях. Тем не менее, если Вы не используете дополнительных данных кроме Sharepoint, то после сборки и публикации приложения в режиме Desktop SQL Express будет необязателен. Но Visual Studio всегда запускает Ваше приложение в полном режиме с веб сервисами , запускаемыми на локальном веб сервере, и поэтому во время отладки и запуска из Visual Studio нужен SQL Express.
Итак, допустим, что у нас запущен SQL Express, включен режим User Mode (вот ссылка на инструкцию по настройке). Иногда Вы можете столкнуться с ошибкой “Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance” – тут можно найти решение данной проблемы.
Итак, мы пока только добавили в приложение соединение с данными. Теперь нам необходимо добавить пользовательский интерфейс. Откройте solution explorer. По умолчанию окно выглядит немного странно для разработчика. Но дело в том, что данном окне есть два режима просмотра, между которыми можно переключаться. Один из режимов называется Logical View, а другой — File View. Первый – более простой и показывает данные и интерфейс Вашего приложения. Второй показывает все имеющиеся файлы и большое подходит уже для более профессиональной доработки приложений, а также хорош для понимания общей структуры проекта с точки зрения разработчика.
Перед тем как создать наш интерфейс, давайте сделаем два простых, но очень важных шага. Для каждой таблички необходимо проделать следующее – откройте таблицу в разделе Data Source окна Solution Explorer (делается простым двойным кликом). Появится список колонок. Можно нажать мышью на таблицу или на конкретную колонку, и в стандартном окне Properties появятся важные интересные настройки.
Первая интересующая нас настройка это “Display by default” (определена для каждой колонки). Если ее выбрать, то колонка будет появляться на всех вновь созданых «экранах». Visual Studio LightSwitch самостоятельно распознает большинство системных колонок SharePoint , напртмер таких, как Owshiddenversion или Version, но почему то по умолчанию показывает также ContentType, который обычно не нужен. Необходимо отключить использование ContentType по умолчанию.
Вторая важная настройка (уровня таблицы данных) — Summary. Эта настройка очень важна в случае, когда у нас есть ссылки на другие таблицы.
Рассмотрим пример. Нам необходимо редактировать должность, но должность содержит ссылку на подразделение, и мы хотим, чтобы подразделение показывалось в выпадающем списке. В выпадающем списке будет показываться именно колонка, указанная в настрйке Summary. По умолчанию выбирается ContentType,поэтому я рекомендую сразу поменять настройку Summary на что то более подходящее, например Title.
Теперь мы готовы создать «экраны». Открываем logical view, кликаем правой кнопкой мыши на Screens и выбираем Add Screen. Для данного примера я использовал тип экрана List and Details. Выбираем произвольное имя, выбираем необходимую нам таблицу – здесь я использовал сначала IP Job positions, а потом подразделения (Divisions) и другие таблицы.
Теперь приложение готово и его можно запускать с помощью Ctrl F5.
Я рекомендую также просмотреть это видео для понимания дополнительных возможностьей по расширению приложения. В этом видео Бет Масси (Beth Massi) показывает некоторые дополнительные интересные возможности – например возможность использовать запросы (query) и указывать в запросе текущего пользователя. Вообще LightSwitch содержит огромное количество возможностей yнапример возможность добавлять логику проверки данных или обработку событий. LightSwitch – это быстрый способ создать приложение и в дальнейшем установить его в Web или Desktop режиме.
Author's Bio
Марат работает в индустрии ИТ с 1993 года, начиная еще со времен Borland Pascal, ассемблера и MS DOS.
Работал в таких компаниях, как www.x-tensive.com (проект DataObjects.NET), www.mesware.be.
В 1996-2000 работал над проектами для компаний Rocket Software и IBM. В 2007-2010 работал в компании Майкрософт в должности Community Developer Evangelist. В данный момент работает в компании Умсофт (www.umsoft.ru) в должности главного архитектора и иногда пишет в блог по адресу http://www.gotdotnet.ru/blogs/mbakirov.