(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Средства Visual Studio 2010 для разработки в среде SharePoint

Источник: msdn

Разработка в среде SharePoint имела легкий налет загадочности для многих разработчиков: им казалось, что разработка для данной платформы требует слишком много усилий и ее трудно освоить. Кроме того, в сообществе разработчиков появилось несколько различных мнений относительно того, какой набор средств следует использовать. Например, некоторые разработчики успешно сочетали библиотеки классов, папки создаваемых вручную проектов с файлами конфигурации в формате XML и выходные события после построения, чтобы создавать компоненты и решения для SharePoint. Другие использовали разработанное сообществом средство STSDEV или Visual Studio Extensions для Windows SharePoint Services (VSeWSS), чтобы создавать различные приложения и решения и развертывать их в SharePoint. Иными словами, разработчики могли использовать огромное количество разных способов развертывания компонентов и пакетов решений в SharePoint. Несмотря на сложности сообщество разработчиков SharePoint выросло до внушительного размера - около 600000 человек - и продолжает расти. В будущем разработчики смогут использовать многие возможности разработки SharePoint прямо в Visual Studio 2010, пользуясь включенными в комплект новыми средствами SharePoint.

SharePoint 2010 представляет собой важный этап на пути создания платформы разработки не только из-за поддерживаемого платформой обширного набора возможностей, но и из-за значительных дополнений, предназначенных для того, чтобы сделать процесс разработки эффективнее и доступнее для разработчиков с любым уровнем подготовки. Двумя основными средствами разработки в SharePoint 2010 являются SharePoint Designer 2010 и Visual Studio 2010 (в качестве сопроводительного набора средств для разработчиков используется пакет Expression). В данной статье приведены основные сведения о разработке в SharePoint 2010, описываются средства SharePoint в Visual Studio 2010 (включая краткий обзор новых шаблонов проектов), а также создание и развертывание образца визуальной веб-части.

Средства SharePoint в Visual Studio 2010

Следует упомянуть несколько областей Visual Studio 2010, предназначенных для разработчиков в SharePoint. Во-первых, отображается окно с шаблонами проектов SharePoint, чтобы можно было сразу же начинать разработку решения. Во-вторых, средства были стандартизованы в соответствии со стандартом упаковки пакета Windows SharePoint Package (WSP), поэтому при импорте или развертывании решения в SharePoint система Visual Studio считает его пакетом решения. В-третьих, некоторые полезные компоненты для развертывания и упаковки, например отзыв решения и настраиваемые конфигурации развертывания, поставляются вместе со средствами SharePoint в Visual Studio 2010. И последнее, новый обозреватель SharePoint позволяет просмотреть встроенные и пользовательские артефакты (например, списки и рабочие потоки), существующие на вашем сервере SharePoint. Конечно же, это неполный список возможностей, представленных в расширенном наборе средств Visual Studio и предназначенных для того, чтобы удовлетворить требования сообщества и помочь разработчикам в освоении платформы SharePoint.

Кроме того, следует упомянуть несколько улучшений SharePoint 2010, которые определенно могут быть использованы в контексте Visual Studio 2010. Например, новая объектная модель клиента позволяет получить доступ к объекту SharePoint через библиотеку DLL, на которую указывает ссылка, а не только с помощью вызовов веб-службы. (В SharePoint 2007 для доступа к данным списка SharePoint используется, например, веб-служба ASP.NET.) Кроме того, LINQ для SharePoint делает доступным функцию LINQ - SharePoint, что позволяет обрабатывать списки как, например, строго типизированные объекты. Теперь Silverlight (особенно в сочетании с объектной моделью клиента) поддерживается в качестве собственного компонента в SharePoint 2010 - вам больше не нужно редактировать файл web.config для начала разработки. Изолированные решения также предоставляют способ построения веб-частей SharePoint и их развертывания на сайте без необходимости административного вмешательства - таким образом вы можете развернуть веб-часть на сайте SharePoint и запустить ее в контексте данного сайта в локальном экземпляре SharePoint или в облаке, используя размещенную версию SharePoint. И наконец, внешние списки данных превращают взаимодействие с бизнес-системами в процесс чтения и записи. Хотя данный пункт кажется не слишком важным, на самом деле это огромный шаг вперед благодаря предоставлению такой поддержки средств, которая позволяет быстро и эффективно построить бизнес-интеграции. Для каждой из этих инноваций в SharePoint 2010 система Visual Studio 2010 предоставляет определенную поддержку посредством шаблонов проектов или интерфейсов API, предназначенную для профессиональных разработчиков. Если существует время, когда следует начинать разработку в SharePoint, то оно наступило!

Разработка проекта визуальной веб-части

Одним из наиболее распространенных артефактов, который разработчики создают и развертывают в SharePoint, является веб-часть. Это имеет смысл при условии, что веб-части являются одними из базовых стандартных блоков в SharePoint. Поскольку среда SharePoint построена на основе ASP.NET, веб-часть наследует ключевые компоненты из архитектуры веб-части ASP.NET.

Одним из новых шаблонов проектов в Visual Studio 2010 является шаблон проекта визуальной веб-части, который позволяет разработчикам в визуальной форме создавать веб-часть, которую можно развернуть в SharePoint. Если у вас нет опыта работы в SharePoint, то это отличный способ начать построение пользовательских приложений для SharePoint 2010. Визуальная веб-часть содержит автономный код, который вычисляет стоимость продуктов и передает информацию в обычный пользовательский интерфейс веб-части.


Рис. 1. Новые шаблоны проектов SharePoint


Рис. 2. Представление конструктора для визуальной веб-части

Убедитесь, что у вас в 64-разрядной операционной системе Windows Server 2008 установлена бета-версия 2 Visual Studio 2010 и бета-версия 2 SharePoint 2010. Откройте Visual Studio 2010, выберите "File" (Файл), "New Project" (Создать проект) и перейдите к узлу SharePoint в разделе "Installed Templates" (Установленные шаблоны). На рис. 1 показаны различные типы доступных шаблонов проектов. Например, шаблон "Import VSeWSS Project" (Импорт проекта VSeWSS) предоставляет путь обновления для текущих проектов VSeWSS, шаблоны рабочих процессов позволяют создавать и развертывать проекты рабочих процессов в SharePoint, шаблон "Site Definition" (Определение узла) предоставляет инфраструктуру уровня сайта, которую можно построить и развернуть, а шаблон "Import SharePoint Solution Package" (Импорт пакета решения SharePoint) позволяет импортировать пакеты WSP для повторного развертывания на локальном экземпляре сервера. Для данного пошагового руководства выберите шаблон проекта "Visual Web Part" (Визуальная веб-часть), укажите имя (например, SampleWebPartProject) и расположение проекта, а затем нажмите кнопку "ОК".

После создания проекта Visual Studio 2010 создает ряд файлов по умолчанию. Разверните узлы проекта в обозревателе решений, чтобы отобразить эти файлы. Основные файлы, с которыми выполняется работа в данной статье, находятся в узле SampleWebPartProject. Обратите внимание на то, что веб-часть по умолчанию называется VisualWebPart1. Чтобы изменить это имя, щелкните узел VisualWebPart1 правой кнопкой мыши в обозревателе решений, выберите пункт "Rename" (Переименовать) и введите новое имя для веб-части.

Кроме того, обратите внимание на наличие в обозревателе решений узлов "Features" (Компоненты) и "Package" (Пакет). Это новые инфраструктурные части системы Visual Studio 2010, которые упаковывают решение SharePoint с использованием компонента SharePoint. Разработчикам, не имеющим опыта работы в SharePoint, следует знать, что компонент используется для организации приложения таким способом, который понятен для SharePoint. Компоненты можно развертывать в SharePoint, например на уровне сайта или на веб-уровне. Структура компонента представляет собой набор файлов конфигурации в формате XML, кроме того, компонент ссылается (в зависимости от уровня доверия к приложению) на сборку из глобального кэша сборок. В частности каждый компонент имеет в иерархии папок SharePoint свою собственную папку, в которой находятся его файлы конфигурации, предоставляющие ему требуемые метаданные. Пакет содержит компоненты и другие ресурсы, используемые при развертывании решений в SharePoint. Пакет также находится в месте развертывания сборки. В Visual Studio 2010 представлен конструктор пакетов, который значительно упрощает просмотр пакетов и управление ими. Если дважды щелкнуть узел "Package" (Пакет), открывается конструктор. В нем можно добавлять и удалять компоненты из развертываемого пакета. Этот конструктор значительно расширяет возможности разработчиков по формированию решений SharePoint путем добавления компонентов.

Перейдите обратно в представление обозревателя решений, щелкните правой кнопкой мыши файл ProductInfoUserControl.ascx и выберите пункт "View in Designer" (Открыть в конструкторе). Открывается представление, в котором можно перетаскивать элементы управления с панели элементов на рабочую область конструктора веб-частей. Доступны три представления: "Design" (Конструирование), "Split" (Разделение) и "Code" (Код). В данном примере добавлен (с помощью ввода) заголовок и несколько элементов управления, включая текстовые поля и кнопку для расчета стоимости продукта. Кроме того, введены метки для добавленных на страницу элементов управления (см. рис. 2).

После завершения работы с макетом визуальной веб-части можно добавить обработчики событий для кнопки. Но перед этим давайте быстро просмотрим исходный код для данной визуальной веб-части. Как можно видеть из фрагмента кода на рис. 3, Visual Studio добавляет в пользовательский интерфейс автоматически используемые стили в форме синтаксиса CSS. Можно также заметить действительные элементы управления (а в случае раскрывающегося списка - и коллекцию элементов), составляющие пользовательский интерфейс. Обратите внимание на то, что для краткости были удалены директивы, создаваемые автоматически и включаемые в верхнюю часть исходного кода.

Для добавления в веб-часть обработчиков событий дважды щелкните кнопку. Открывается окно с соответствующим кодом программной части. Кроме того, при этом в проект элемента управления ASCX добавляется событие onClick. Например, на рис. 3 обратите внимание на событие onclick="btnCalcPrice_Click", включенное в btnCalcPrice. Код программной части, который приведен на рис. 4, содержит простой код, позволяющий рассчитывать стоимость выбранного в списке продукта. Ключевыми элементами данного кода являются переменные уровня класса (типа double), представляющие обычный способ расчета стоимости продукта, коллекция List of Products (которая содержит число объектов Products, добавленных в список) и событие btnCalcPrice_Click. При загрузке страницы в SharePoint данный код вызывает метод generateProductList, заполняющий список. Затем событие btnCalcPrice_Click рассчитывает стоимость определенного продукта (в зависимости от выбранного пользователем элемента) и отображает информацию в списке в пользовательском интерфейсе.

Рис. 3. Исходный код для файла SalaryCalcWebPartUserControl.ascx

<style type="text/css">
.style1
{
font-family: Calibri;
font-size: medium;
font-weight: bold;
}
.style2
{
font-family: Calibri;
font-size: small;
font-weight: bold;
}

</style>
<p class="style1">
Product Catalog</p>
<p class="style2">
Product:  
<asp:DropDownList ID="dropdwnProducts" 
runat="server" Height="20px"
style="margin-left: 21px" Width="200px">
<asp:ListItem>Helmet</asp:ListItem>

<asp:ListItem>Stick</asp:ListItem>
<asp:ListItem>Skates</asp:ListItem>
<asp:ListItem>Elbow Pads</asp:ListItem>
<asp:ListItem>Kneepads</asp:ListItem>
</asp:DropDownList>

</p>
<p class="style2">
Description: <asp:TextBox ID="txtbxDescription" runat="server"
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style2">
SKU:
<asp:TextBox ID="txtbxSKU" runat="server" style="margin-left: 48px"
Width="200px" Enabled="False"></asp:TextBox>
</p>

<p class="style2">
Price:<asp:TextBox ID="txtbxPrice" runat="server"
style="margin-left: 48px"
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style2">
Quantity:
<asp:TextBox ID="txtbxQuantity" runat="server" 
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style1">

<asp:Button ID="btnCalcPrice" runat="server"
onclick="btnCalcPrice_Click"
Text="Calc." />
</p>

Когда пользователь нажимает кнопку, веб-часть выполняет обратную передачу для запуска события, которое в нашем случае рассчитывает стоимость продукта. Возможно, интереснее приведенного на рис. 4 кода, который по большей части довольно прост, является то, как веб-часть подключает этот код в действительную веб-часть. С учетом того, что мы создали пользовательский элемент управления ASP для нашей веб-части, которая включает обложку и код программной части, структура проекта все еще содержит действительную веб-часть, которая должна подключать этот элемент управления. Для этого Visual Studio создает строку _ascxPath, которая представляет путь к пользовательскому элементу управления ASCX, расположенному в иерархии папок SharePoint 2010. Обратите внимание и на то, что в методе CreateChildControls создается экземпляр элемента управления, для которого назначается путь пользовательского элемента управления (с помощью метода LoadControl). После этого он добавляется в коллекцию Controls с помощью метода Add. Это позволяет веб-части подключать пользовательский элемент управления ASP в веб-части в SharePoint. На рис. 5 приведен соответствующий код.

Рис. 4. Исходный код для файла ProductInfoUserControl.ascx.cs

using System;
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using System.Data;
namespace SampleWebPartProject.ProductInfo
{
public partial class ProductInfoUserControl : UserControl
{
double tax = .11;
double totalCost = 0.0;
List<Products> lstOfProducts = new List<Products>();
protected void Page_Load(object sender, EventArgs e)
{
generateProductList();
}
private void generateProductList()
{
lstOfProducts.Add(new Products()
{ strName = "Helmet", strDescr = "Hockey helmet.", strSKU =
"KLSONHELMT1224", dblPrice = 59.00, intQuantity = 28 });
lstOfProducts.Add(new Products()
{ strName = "Skates", strDescr = "Hockey skates.", strSKU =
"SKATWOKSH0965", dblPrice = 438.00, intQuantity = 88 });
lstOfProducts.Add(new Products()
{ strName = "Stick", strDescr = "Composite hockey stick.",
strSKU = "STIK82910JJKS", dblPrice = 189.99, intQuantity =
35 });
lstOfProducts.Add(new Products()
{ strName = "Elbow Pads", strDescr = "Hockey elbow pads.",
strSKU = "ELBOP563215NN", dblPrice = 34.00, intQuantity =
12 });
lstOfProducts.Add(new Products()
{ strName = "Knee Pads", strDescr = "Hockey knee pads.",
strSKU = "KPDS7827NNJS1", dblPrice = 47.99, intQuantity =
44 });
}
protected void btnCalcPrice_Click(object sender, EventArgs e)
{
double dblCost = 0;
string strPrice = "";
if (dropdwnProducts.SelectedValue == "Helmet")
{
dblCost = lstOfProducts[0].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[0].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[0].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[0].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Skates")
{
dblCost = lstOfProducts[1].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[1].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[1].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[1].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Stick")
{
dblCost = lstOfProducts[2].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[2].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[2].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[2].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Elbow Pads")
{
dblCost = lstOfProducts[3].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[3].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[3].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[3].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Knee Pads")
{
dblCost = lstOfProducts[4].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[4].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[4].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[4].intQuantity.
ToString();
}
}
}
}

Рис. 5. Исходный код для файла ProductInfo.cs

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace SampleWebPartProject.ProductInfo
{
public class ProductInfo : WebPart
{
private const string _ascxPath =
@"~/CONTROLTEMPLATES/SampleWebPartProject/ProductInfo/" +
@"ProductInfoUserControl.ascx";
public ProductInfo()
{
}
protected override void CreateChildControls()
{
Control control = this.Page.LoadControl(_ascxPath);
Controls.Add(control);
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter writer)
{
base.RenderContents(writer);
}
}
}

Рис. 6. Файл ProductInfo.webpart в формате XML

<?xml version="1.0" encoding="utf-8"?>
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="SampleWebPartProject.ProductInfo.ProductInfo,
SampleWebPartProject, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=db3a9f914308c42a" />
<importErrorMessage>
$Resources:core,ImportErrorMessage;
</importErrorMessage>

</metaData>
<data>
<properties>
<property name="Title" type="string">
Product Info Web Part</property>
<property name="Description" type="string">Provides some
information about hockey products.</property>
</properties>

</data>
</webPart>
</webParts>

Теперь, когда визуальная веб-часть построена, можно развернуть ее на сервере SharePoint. При создании проекта вы задавали его сопоставление с определенным экземпляром сервера. Здесь подразумевается, что существует некоторая программная связка, которая объединяет только что написанный код с сервером SharePoint. Если открыть эти файлы в обозревателе решений, можно найти несколько файлов в формате XML, которые обеспечивают эту интеграцию. Например, файл Feature.xml (см. приведенный ниже код) задает определение компонента. В коде XML видно, что этот файл пару раз ссылается на другие файлы в формате XML, которые также содержат определенную информацию о данной веб-части. Здесь можно увидеть ссылки на файлы Elements.xml и ProductInfo.webpart:

<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/" 
Id="416172c1-cfa7-4d7a-93ba-fe093b037fab" 
ImageUrl="" Scope="Site" Title="SampleWebPartProject Feature1">
  <ElementManifests>

    <ElementManifest Location="ProductInfo\Elements.xml" />
    <ElementFile Location="ProductInfo\ProductInfo.webpart" />
  </ElementManifests>

В файле Elements.xml приведена информация о включенных в компонент основных сборках, а в файле ProductInfo.webpart определяются метаданные веб-части, например заголовок и описание. На рис. 6 приведены свойства по умолчанию Title и Description. Эти свойства можно обновить, чтобы метаданные веб-части, предоставляемые в коллекции веб-частей, были осмысленными и интуитивно понятными. Для данной веб-части вам, вероятно, потребуется изменить заголовок на "Product Information Web Part" (Веб-часть информации о продукте), а описание на "Web Part that provides calculated product pricing and information" (Веб-часть, предоставляющая рассчитанную стоимость и описание продукта).


Рис. 7. Веб-часть на веб-странице

Существуют и другие файлы конфигурации в формате ML, и если вы не имеете опыта разработки в SharePoint, я рекомендую вам ознакомиться с каждым из таких файлов в проекте, чтобы лучше понять их назначение. Теперь давайте перейдем к развертыванию веб-части на сервере SharePoint.

Развертывание проекта визуальной веб-части

До SharePoint 2010 для развертывания приложений в SharePoint обычно использовалось средство администрирования на базе командной строки - Stsadm. Но необходимость в этом средстве отпала с выходом Visual Studio 2010 (и с появлением Window PowerShell, однако это тема для отдельной статьи). Поскольку проект уже имеет связь с сервером SharePoint, а сопоставление имеет заданный уровень доверия, необходимо просто щелкнуть проект правой кнопкой мыши и выбрать пункт "Build" (Построить), убедиться в построении проекта, а затем щелкнуть правой кнопкой и выбрать пункт "Deploy" (Развернуть). Конечно, при отладке решений SharePoint можно использовать клавишу F5. При этом в процессе отладки становятся возможными такие действия, как присоединение к соответствующему процессу и сброс IIS.

После успешного развертывания веб-части необходимо открыть сайт SharePoint и создать новую страницу веб-части. При нажатии клавиши F5 для отладки приложения по умолчанию вызывается страница создания веб-части. В противном случае выберите "View All Site Content" (Просмотреть весь контент сайта), а затем "Create" (Создать). Щелкните параметр "Web Part Page" (Страница веб-части) и укажите требуемые сведения о данной конкретной странице веб-части. Например, укажите имя и шаблон макета страницы. После ввода этих сведений нажмите кнопку "Create" (Создать), и SharePoint создаст страницу веб-части.

Теперь необходимо добавить визуальную веб-часть, которая была создана и развернута на сервере. Для этого перейдите на страницу веб-части, выберите "Site Actions" (Действия сайта), а затем "Edit Page" (Изменить страницу). Щелкните зону веб-частей, в которую хотите поместить визуальную веб-часть, выберите вкладку "Insert" (Вставка) и щелкните элемент "Web Part" (Веб-часть).

После этого SharePoint предоставляет несколько категорий веб-частей, которые можно просмотреть для того, чтобы выбрать определенную веб-часть для добавления в выбранную на странице зону веб-частей. Перейдите к категории "Custom" (Настраиваемые) и затем к панели "Web Parts" (Веб-части), чтобы увидеть созданную и развернутую веб-часть. Если вы использовали приведенный в статье код, щелкните веб-часть ProductInfo и нажмите кнопку "Add" (Добавить).

Данная веб-часть добавляется в зону веб-частей на странице веб-части, изображенную на рис. 7. На данном этапе можно настроить параметры веб-части с помощью панели "Tools" (Инструменты) или просто принять параметры по умолчанию и щелкнуть "Stop Editing" (Завершить редактирование).

Участие в разработке SharePoint

Для разработчиков в среде SharePoint система Visual Studio 2010 предоставляет не только комплект встроенных средств, но и потрясающую возможность участвовать в разработке SharePoint. Я предлагаю вам попробовать эти средства в работе. Кроме того, доступны замечательные функции для разработчиков, которые предпочитают полностью контролировать код, а также для тех, кому нравится использовать возможности проектирования для построения и развертывания отличных решений в SharePoint.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 07.12.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft 365 Apps for business (corporate)
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft Windows Professional 10, Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
3D и виртуальная реальность. Все о Macromedia Flash MX.
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100