среда, 22 апреля 2015 г.

LINQ примеры

LINQ крутая штука пришедшая к нам из C# 3.0. Приведу подборку примеров которая поможет всегда освежить воспоминания или же дополнить пробелы

Where

IEnumerable<Product> x = products.Where(p => p.UnitPrice >= 10);


IEnumerable<Product> x =
    from p in products
    where p.UnitPrice >= 10
    select p;

Select

IEnumerable<string> productNames = products.Select(p => p.Name);
IEnumerable<string> productNames = from p in products select p.Name;
var namesAndPrices =
    products.
    Where(p => p.UnitPrice >= 10).
    Select(p => new { p.Name, p.UnitPrice }).
    ToList();
IEnumerable<int> indices =
    products.
    Select((product, index) => new { product, index }).
    Where(x => x.product.UnitPrice >= 10).
    Select(x => x.index);

SelectMany

IEnumerable<Order> orders =
    customers.
    Where(c => c.Country == "Denmark").
    SelectMany(c => c.Orders);
var namesAndOrderIDs =
    customers.
    Where(c => c.Country == "Denmark").
    SelectMany(c => c.Orders).
    Where(o => o.OrderDate.Year == 2005).
    Select(o => new { o.Customer.Name, o.OrderID });
var namesAndOrderIDs =
    customers.
    Where(c => c.Country == "Denmark").
    SelectMany(c => c.Orders, (c,o) => new { c, o }).
    Where(co => co.o.OrderDate.Year == 2005).
    Select(co => new { co.c.Name, co.o.OrderID });
var namesAndOrderIDs =
    from c in customers
    where c.Country == "Denmark"
    from o in c.Orders
    where o.OrderDate.Year == 2005
    select new { c.Name, o.OrderID };

Take

IEnumerable<Product> MostExpensive10 =
    products.OrderByDescending(p => p.UnitPrice).Take(10);

Skip

IEnumerable<Product> AllButMostExpensive10 =
    products.OrderByDescending(p => p.UnitPrice).Skip(10);

TakeWhile SkipWhile

s.TakeWhile(p) s.SkipWhile(p)
Join

var custOrders =
    customers.
    Join(orders, c => c.CustomerID, o => o.CustomerID,
        (c, o) => new { c.Name, o.OrderDate, o.Total }
    );
var custOrders =
    from c in customers
    join o in orders on c.CustomerID equals o.CustomerID
    select new { c.Name, o.OrderDate, o.Total };

GroupJoin

var custTotalOrders =
    customers.
    GroupJoin(orders, c => c.CustomerID, o => o.CustomerID,
        (c, co) => new { c.Name, TotalOrders = co.Sum(o => o.Total) }
    );
var custTotalOrders =
    from c in customers
    join o in orders on c.CustomerID equals o.CustomerID into co
    select new { c.Name, TotalOrders = co.Sum(o => o.Total) };
var custTotalOrders =
    from c in customers
    join o in orders on c.CustomerID equals o.CustomerID
    select new { c.Name, o.OrderDate, o.Total };
var custTotalOrders =
    from c in customers
    join o in orders on c.CustomerID equals o.CustomerID into co
    from o in co
    select new { c.Name, o.OrderDate, o.Total };
var custTotalOrders =
    from c in customers
    join o in orders on c.CustomerID equals o.CustomerID into co
    from o in co.DefaultIfEmpty(emptyOrder)
    select new { c.Name, o.OrderDate, o.Total };
Concat

IEnumerable<string> locations =
    customers.Select(c => c.City).
    Concat(customers.Select(c => c.Region)).
    Concat(customers.Select(c => c.Country)).
    Distinct();
IEnumerable<string> locations =
    new[] {
        customers.Select(c => c.City),
        customers.Select(c => c.Region),
        customers.Select(c => c.Country),
    }.
    SelectMany(s => s).
    Distinct();

OrderBy / ThenBy

IEnumerable<Product> orderedProducts1 =
    products.
    OrderBy(p => p.Category).
    ThenByDescending(p => p.UnitPrice).
    ThenBy(p => p.Name);
IEnumerable<Product> orderedProducts1 =
    from p in products
    orderby p.Category, p.UnitPrice descending, p.Name
    select p;
IEnumerable<Product> orderedProducts2 =
    products.
    Where(p => p.Category == "Beverages").
    OrderBy(p => p.Name, StringComparer.CurrentCultureIgnoreCase);
IEnumerable<string> orderedProductNames =
    products.
    Where(p => p.Category == "Beverages").
    Select(p => p.Name).
    OrderBy(x => x);

GroupBy

IEnumerable<IGrouping<string, Product>> productsByCategory =
    products.GroupBy(p => p.Category);
IEnumerable<IGrouping<string, string>> productNamesByCategory =
    products.GroupBy(p => p.Category, p => p.Name);

Distinct

IEnumerable<string> productCategories =
    products.Select(p => p.Category).Distinct();

AsEnumerable

Table<Customer> custTable = GetCustomersTable();
var query = custTable.AsEnumerable().Where(c => IsGoodCustomer(c));

ToArray

string[] customerCountries =
    customers.Select(c => c.Country).Distinct().ToArray();

ToList

List<Customer> customersWithOrdersIn2005 =
    customers.
    Where(c => c.Orders.Any(o => o.OrderDate.Year == 2005)).
    ToList();

ToDictionary

Dictionary<int,Order> orders =
    customers.
    SelectMany(c => c.Orders).
    Where(o => o.OrderDate.Year == 2005).
    ToDictionary(o => o.OrderID);
Dictionary<string,decimal> categoryMaxPrice =
    products.
    GroupBy(p => p.Category).
    ToDictionary(g => g.Key, g => g.Group.Max(p => p.UnitPrice));

ToLookup

Lookup<string,Product> productsByCategory =
    products.ToLookup(p => p.Category);
IEnumerable<Product> beverages = productsByCategory["Beverage"];

OfType

List<Person> persons = GetListOfPersons();
IEnumerable<Employee> employees = persons.OfType<Employee>();

Cast

      ArrayList objects = GetOrders();
IEnumerable<Order> ordersIn2005 =
    objects.
    Cast<Order>().
    Where(o => o.OrderDate.Year == 2005);
ArrayList objects = GetOrders();
IEnumerable<Order> ordersIn2005 =
    from Order o in objects
    where o.OrderDate.Year == 2005
    select o;

First

string phone = "206-555-1212";
Customer c = customers.First(c => c.Phone == phone);

Single

int id = 12345;
Customer c = customers.Single(c => c.CustomerID == id);

ElementAt

Product thirdMostExpensive =
    products.OrderByDescending(p => p.UnitPrice).ElementAt(2);

Range

int[] squares = Enumerable.Range(0, 100).Select(x => x * x).ToArray();
Repeat

long[] x = Enumerable.Repeat(-1L, 256).ToArray();

Empty

IEnumerable<Customer> noCustomers = Enumerable.Empty<Customer>();

Any

bool b = products.Any(p => p.UnitPrice >= 100 && p.UnitsInStock == 0);

All

IEnumerable<string> fullyStockedCategories =
    products.
    GroupBy(p => p.Category).
    Where(g => g.Group.All(p => p.UnitsInStock > 0)).
    Select(g => g.Key);

Count

int count = customers.Count(c => c.City == "London");

Sum

int year = 2005;
var namesAndTotals =
    customers.
    Select(c => new {
        c.Name,
        TotalOrders =
            c.Orders.
            Where(o => o.OrderDate.Year == year).
            Sum(o => o.Total)
    });

Min

var minPriceByCategory =
    products.
    GroupBy(p => p.Category).
    Select(g => new {
        Category = g.Key,
        MinPrice = g.Group.Min(p => p.UnitPrice)
    });

Max

decimal largestOrder =
    customers.
    SelectMany(c => c.Orders).
    Where(o => o.OrderDate.Year == 2005).
    Max(o => o.Total);

Average

var averageOrderTotals =
    customers.
    Select(c => new {
        c.Name,
        AverageOrderTotal = c.Orders.Average(o => o.Total)
    });

Aggregate

var longestNamesByCategory =
    products.
    GroupBy(p => p.Category).
    Select(g => new {
        Category = g.Key,
        LongestName =
            g.Group.
            Select(p => p.Name).
           
Aggregate((s, t) => t.Length > s.Length ? t : s)
    });

понедельник, 6 апреля 2015 г.

Поиск и удаление мусора после SharePoint Designer

Если вы когда-либо откроете файл главной страницы SharePoint в SharePoint Designer на редактирование, а затем попробуете взял тот же файл в Visual Studio, вы обнаружите, что он будет завален мусором в виде нового атрибуты для многих из ваших элементов. Эти атрибуты, называются __designer:Preview и __designer:Values. Чтобы избавиться от этого мусора есть удобное регулярное выражение, которое можно использовать в поиске Visual Studio и замены текста (убедитесь, что у вас есть отмечен параметр Regular Expression в диалоге поиска):
__designer\:[^=]*[=\"][^"]*["]([^"]|(\n|:Wh))*["]

воскресенье, 25 мая 2014 г.

Структура полей согласно Element.xml

Single Line of Text:

<Field id="{FDDC4E38-25E0-4FD9-92E7-D17F34A5AB12}" Description="My Content ID of Item" Staticname="ContentID" name="ContentID" displayname="ContentID" Type="Text" Group="Sample Site Columns" Sourceid="http://schemas.microsoft.com/sharepoint/v3"></Field>

Number:
Field ID="{13b3652a-d543-465d-91cb-a9d625637855}" StaticName="Read_Times" Name ="Read_Times" DisplayName ="Read_Times" Description="Read Time count of Item" Type="Number" Group ="Sample Site Columns" SourceID ="http://schemas.microsoft.com/sharepoint/v3"></Field>

Date Time:
Field ID="{d076e4d5-c785-4c04-8b56-c1f021721749}" StaticName="CreateDate" Name="CreateDate" DisplayName="Create_Date" Description="Create Date of Item" Group="Sample Site Columns" Type="DateTime" Format="DateOnly" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields"></Field>

Multiple lines of text:
Field ID="{2ae59f08-0fb0-4a9c-8a31-a180161b1029}" StaticName="PublisherDescription" Name="PublisherDescription" Description="Publisher Description of Item" DisplayName="Publisher_Description" Type="Note" RichText="FALSE" NumLines="6" Group="Sample Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields"></Field>

Rich Text HTML:
Field ID="{13cd0291-df15-4278-9894-630913e4d2b9}" StaticName="AccrediterDescription" Name="AccrediterDescription" DisplayName="Accrediter_Description" Description="Accrediter Description of Item" Type="Note" NumLines="6" RichText="TRUE" RichTextMode="FullHtml" Group="Sample Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields"></Field>

Publishing HTML:
Field ID="{E2CC0231-FA6C-4F90-839C-118C304DFCF1}" StaticName="PMediaDescription" Name="PMediaDescription" DisplayName="MediaDescription" Type="HTML" RichText="TRUE" RichTextMode="ThemeHtml" Group="Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3" UnlimitedLengthInDocumentLibrary ="TRUE"

Publishing Image:
<Field id="{148e8191-afe7-4422-b1d1-7202eda667f1}" Description="Image 1 link of Item" Staticname="PImageID1" Name="PImageID1" Displayname="Image_ID1" Type="Image" Group="My Site Columns" Sourceid="http://schemas.microsoft.com/sharepoint/v3" Richtext="TRUE" Richtextmode="ThemeHtml">

HyperLink & Image:
<Field ID="{635a2031-2088-4413-b54e-d2af5daf08bf}" StaticName="ImageAuthor" Name="ImageAuthor" DisplayName="Image_Author" Description="Author Image" Type="URL" Format="Image" Group="Sample Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields"></Field>

YES/No Boolean:
<Field ID="{11018312-58f9-4eb0-867d-71298f82d98d}" Name="isActive" StaticName="isActive" DisplayName="isActive" Description="Select if Item is Active" Group="Sample Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3" Type="Boolean"><Default>0</Default></Field>

CHOICES:
<Field ID="{67f8faa4-e3ee-44bf-a3b4-6e7fc9c6b9fe}" Name="Market" StaticName="Market" DisplayName="Market" Description="Market of the Country" Group="Sample Site Columns" SourceID="http://schemas.microsoft.com/sharepoint/v3" Type="Choice"><Choices><Choice>Gold</Choice></Choices></Field>

MultiSelect:
<Field Type="MultiChoice" DisplayName="Labels_Selected" FillInChoice="FALSE" Group="Sample Site Columns" ID="{2fdf0ba7-0052-4e9f-80f6-e7669ac4ae4f}" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="LabelsSelected" Name="LabelsSelected"></Field>

Lookup Columns:
<Field Type="Lookup" ID="{FE45AC76-C0E2-46C8-A047-E8C43C10315C}" Name="LU_Country" StaticName="LU_Country" DisplayName="LU_Country" Required="FALSE" List="Lists/Region Country Master" ShowField="RollOutCountry" UnlimitedLengthInDocumentLibrary="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields" Group="Sample Site Columns"></Field>

Multi Lookup Columns:
<Field Type="LookupMulti" Mult="TRUE" ID="{85062ACF-315B-460A-B756-2230A5FE082F}" Name="LU_Language" StaticName="LU_Language" DisplayName="LU_Language" Required="FALSE" List="Lists/Language Master" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields" Group="Sample Site Columns"

Lookup with Additional Field Lookup column:
<Field Type="Lookup" ID="{9AA2985D-AA17-4EA2-9556-9B0E112A64F6}" Name="LU_ApplicationType" StaticName="LU_ApplicationType" DisplayName="LU_ApplicationType" Required="FALSE" List="Lists/Application Type" ShowField="ApplicationType" UnlimitedLengthInDocumentLibrary="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields" Group="Sample Site Columns"></Field>

<Field Type="Lookup" ID="{668D51C4-804D-43E7-8211-950AE3BCD9A3}" Name="LU_ApplicationType_ID" StaticName="LU_ApplicationType_ID" DisplayName="LU_ApplicationType_ID" List="Lists/Application Type" ShowField="ApplicationTypeID" FieldRef="9AA2985D-AA17-4EA2-9556-9B0E112A64F6" ReadOnly="TRUE" UnlimitedLengthInDocumentLibrary="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields" Group="Sample Site Columns"></Field>

вторник, 20 мая 2014 г.

Добавление или удаление групп Sharepoint

Добавление группы:
            using (SPSite site = new SPSite("http://UKREDDY:6969/"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    web.SiteGroups.Add("TestGroup", web.CurrentUser, web.CurrentUser, "This is Test Group created by Uday.");
                    web.Update();
                }
            }


Удаление группы:
            using (SPSite site = new SPSite("http://UKREDDY:6969/"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    web.SiteGroups.Remove("TestGroup");
                    web.Update();
                }
            }


четверг, 5 декабря 2013 г.

Microsoft Theme Builder

Существует Microsoft Theme Builder, инструменте, позволяющем создавать темы. Его особенность – глубокая настройка. При запуске программы мы видим следующее (рис. 1). На этой вкладке настраиваются цвета и шрифты темы. Удобно, что в правой части вкладки располагается область предварительного просмотра.

Рис. 1. Вкладка для работы с цветами и шрифтами


На следующей вкладке настраиваются стили линий (рис. 2)

Рис. 2. Вкладка для работы со стилями линий

На следующей вкладке настраивается стили заполнения (рис. 3)

Рис. 3. Вкладка для работы со стилями заполнения

Также есть вкладка для работы с эффектами (рис. 4)

Рис. 4. Вкладка для работы с эффектами

И, наконец, есть вкладка для работы с фоном (рис. 5)


Рис. 5. Вкладка для работы с фоном

После того, как тема готова, нужно сохранить ее в библиотеке тем, для чего перейдем к параметрам сайта и в группе Коллекции выберем Темы (рис. 6). Добавим туда наш файл.

Рис. 6. Группа коллекции в параметрах сайта

Теперь тема доступна для использования, в чем можно сразу же убедиться. В параметрах сайта в группе Внешний вид и функции выбираем Тема сайта (рис. 7). В списке Выбор темы можно найти созданную нами тему.

Рис. 7. Группа Внешний вид и функциив параметрах сайта

среда, 4 декабря 2013 г.

SharePoint 2010 и Windows Phone 7

Как известно, Windows Phone 7 и SharePoint 2010 тесно интегрированы, и при этом можно создавать собственные приложения для телефона, использующие возможности SharePoint 2010. Доступен Windows Phone 7 Training Kit, в котором собраны обучающие материалы по созданию приложений, настройке среды разработки и последующей публикации приложений в Marketplace

Настройка FBA в SharePoint 2010


При работе с SharePoint 2010 возникает потребность использовать авторизацию, при которой данные о пользователях хранятся не в Active Directory, а во внешних источниках, например, в SQL Server. Для таких целей используется Forms Based Authentication (FBA).

ASP.NET Membership Provider

Настроим ASP.NET Membership Provider, который использует базу данных в SQL Server для хранения ролей, пользователей и их членства. Установить этот поставщик довольно легко. Приступим!
На стенде с SharePoint 2010 или SQL Server, запустите файл aspnet_regsql.exe, который можно найти в C:\Windows\Microsoft.NET\Framework64\v2.0.50727. Запускается мастер для настройки ASP.NET SQL Server (рис. 1).

Рис. 1. Мастер для настройки ASP.NET SQL Server
Кликаем на Далее. На следующем шаге (рис. 2) нужно выбрать, что мы хотим сделать с базой данных. В первом случае создается новая или настраивается старая база данных для хранения информации о членстве, профилях и ролях. Во втором случае подобная информация удаляется из указанной базы данных.
В нашем случае выбираем первый пункт, и кликаем на Далее.
Рис. 2. Выбираем задачу для настройки базы данных
На следующем шаге (рис. 3) указываем данные для подключения к SQL Server. В качестве базы данных можно использовать существующую (выбрав ее из выпадающего списка), либо создать новую (просто набрав ее имя в поле).
Рис. 3. Подключение к SQL Server
Заполнив данные, кликаем на Далее, и переходим к просмотру указанных параметров подключения к SQL Server (рис. 4).
Рис. 4. Подтверждение параметров подключения к базе данных
Если все указано верно, то кликаем на Далее. На следующем (последнем) шаге кликаем на Готово.
После завершения работы мастера запускаем SQL Server Management Studio и даем права db_owner аккаунтам веб-приложений и пула приложений Центра администрирования для созданной базы данных.

Веб-приложение

Заходим в Центр администрирования (нужно обладать правами администратора фермы), и создаем новое веб-приложение (Управление веб-приложениями, далее Создать). В появившемся окне обязательно нужно выбрать Проверка подлинности на основе утверждений (рис. 5). Данный тип проверки подлинности позволяет использовать FBA.
Рис. 5. Тип проверки подлинности при создании веб-приложения
Далее выбираем тип проверки подлинности на основе утверждений (рис. 6). Также нужно написать имя поставщика контроля членства и имя диспетчера ролей ASP.NET. Названия нужно запомнить, так как они нам еще пригодятся.
Рис. 6. Типы проверки подлинности на основе утверждений
Заполним остальные поля, и создадим веб-приложение. Для тестирования создадим коллекцию сайтов на основе любого шаблона.

Настройка SharePoint 2010 для ASP.NET Membership Provider

Таким образом, у нас уже создано веб-приложение, и база данных для ASP.NET Membership Provider. Остается их связать. Для этого нужно будет отредактировать web.config для следующих веб-приложений и сервиса:
·         Центр администрирования
·         Security Token Service
·         Наше веб-приложение
На помощь приходит FBA Configuration Manager for SharePoint 2010. Утилита позволяет изменить 3 конфигурационных файла за один клик.
Интерфейс программы минималистичен (рис. 7). Удобно, что в выпадающем списке Sample Configuration можно выбрать шаблон SqlMembership, который нужно будет отредактировать, и кликнуть на Update Configs.
Рис. 7. Пример конфигурационного файла для настройки FBA
Уже на этой стадии можно проверить, что мы сделали. Откроем созданную нами коллекцию сайтов. При этом для входа на сайт нужно будет выбрать один из доступных способов (рис. 8)
Рис. 8. Выбор учетных данных для входа
На данный момент у нас нет пользователей, которые смогли бы войти на сайт с помощью проверки подлинности на основе форм. Есть несколько способов создания пользователей:
·         В Visual Studio создаем новое веб-приложение ASP.NET и добавляем строку подключения, MembershipProvider и RoleManager в web.config. Далее запускаем Конфигурацию ASP.NET из меню Проект, в результате чего открывается средство администрирования веб-узла
·         Используем SharePoint 2010 FBA Pack. После установки входим на сайт с помощью проверки подлинности Windows. В параметрах сайта находим FBA User Management. Кроме этого, у утилиты есть и другие полезные возможности.

Заключение

Использовать FBA не так сложно, как кажется. Да, процесс конфигурации занимает время, но его можно значительно уменьшить, используя различные утилиты.

Ссылки


Взято из http://dplotnikov.wordpress.com/2011/08/31/настройка-fba-в-sharepoint-2010/