Показаны сообщения с ярлыком Tips And Trick's. Показать все сообщения
Показаны сообщения с ярлыком Tips And Trick's. Показать все сообщения

воскресенье, 26 мая 2013 г.

Accelerate the entity framework application 20 times

 

Или некоторые соображения по скорости работы EF в реальных приложениях. Довольно часто мы не задумываемся сколько «стоит» удобство использования ORM и всякого «сахара». На днях сел писать программу для импорта данных из sqlite в MS SQL. Структура приведена ниже на рисунках.

Следующие поля в исходной базе строковые:

· Bssid

· Ssid

· Capabilities

· Type

Импортируемые данные

clip_image001

Схема таблиц для вставки данных

clip_image002

Хранить фичи в виде строки мне показалось плохой идеей поэтому распарсил строки и завел новую табличку для возможностей. Получившаяся схема приведена на рисунке «Схема таблиц для вставки данных»

Дальше использовал EF code first для чтения данных и для записи. Результаты не утешали, на обработку одной записи уходило 170- 210 ms. На 50 000 записях это 142 минуты. Ого!!!!!!! При том что чтение этих данных в редакторе заняло 2 – 3 секунды. Немножко про архитектуру - все в принципе стандартно:

public class KvnSiteContext : DbContext{

public DbSet<Node> Nodes { get; set; }

public DbSet<Feature> Features { get; set; }

public DbSet<UserProfile> UserProfiles { get; set; }

public DbSet<Location> Locations { get; set; }

}

Дальше создается базовый репозиторий для доступа к коллекциям и репозиторий под каждую коллекцию. Кода минимум, все красиво, но тормознуто. Начинаем оптимизировать. Для начала создал класс для логгирования временных промежутков.

sealed internal class Duration{

public Duration()

{

_start = DateTime.Now;

}

private readonly DateTime _start;

public TimeSpan GetDuration()

{

return DateTime.Now - _start;

}

}

Это позволило точно определить виновника по времени.

Итак первоначальный алгоритм:

· Считать записи из таблицы network

· Распарсить фичи

· Каждую фичу вставить в коллекцию и сохранить если новая

· Вставить элемент Node

· Сохранить контекст

· Считать записи из таблицы location

· Найти по полю bssid сущность Node

· Вставить сущность Location

· Сохранить контекст

Результаты были неутешительны, как я уже писал 170 – 210 ms.

Будем что то менять. Переносим сохранение коллекции фич на момент сохранения ноды.

Время уменьшается, до 140-160ms. Дальнейшее расследование показало что слишком много запросов даже при простом поиске, хотя данные уже у нас и зачем искать в БД?

Было применено локальное кэширование всего чего возможно, результаты неутешительные 110-120ms. И тогда я понял что время тяжёлой артиллерии. TSQL!!!!!!!!!!!!

Были созданы 3 хранимые процедуры и одна функция найдена в интернете. В результате время выполнения импорта снизилось с 142 мин до 7. Вот вам один из примеров того как влияют фреймворки на скорость.

Код хранимок:

USE [kvnwifi]

GO

/****** Object: StoredProcedure [dbo].[insertNode] Script Date: 05/26/2013 20:46:50 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[insertNode]

@Id uniqueidentifier OUT,

@bssid nvarchar(MAX),

@ssid nvarchar (MAX),

@frequency int,

@capabilities nvarchar(MAX),

@lasttime bigint,

@lastlat float,

@lastlon float ,

@type int,

@user_id int

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

set @id = NEWID();

-- Insert statements for procedure here

INSERT into [dbo].[Nodes]

(

[Id],

[BsSid],

[SSid],

[Frequency],

[LastTime],

[Lat],

[Lon],

[Type],

[User_UserId]

)

VALUES(

@id,

@bssid,

@ssid,

@frequency,

@lasttime,

@lastlat,

@lastlon,

@type,

@user_id

);

exec dbo.InsertCapabilities @Nodeid = @id, @Capabilities = @capabilities

END

USE [kvnwifi]

GO

/****** Object: StoredProcedure [dbo].[InsertCapabilities] Script Date: 05/26/2013 20:47:15 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[InsertCapabilities]

@NodeId uniqueidentifier,

@Capabilities nvarchar(MAX)

AS

BEGIN

SET NOCOUNT ON

DECLARE @i int

DECLARE @numrows int

DECLARE @feature_name nvarchar(100)

DECLARE @numfeature int

DECLARE @fid int

DECLARE @fn_table TABLE(

idx smallint Primary Key IDENTITY(1,1),

[Name] nvarchar(100)

)

INSERT @fn_table

select [Name] from [dbo].[splitstring](@Capabilities)

SET @i = 1

SET @numrows = (SELECT COUNT(*) FROM @fn_table)

IF @numrows > 0

WHILE (@i <= (SELECT MAX(idx) FROM @fn_table))

BEGIN

-- get the next employee primary key

SET @feature_name = (SELECT [Name] FROM @fn_table WHERE idx = @i)

SET @numfeature = (SELECT COUNT(*) from [dbo].[Features] WHERE [FeatureName] = @feature_name)

IF @numfeature != 0

BEGIN

SET @fid = (SELECT [Id] FROM Features WHERE [FeatureName] = @feature_name)

END

ELSE

BEGIN

INSERT INTO dbo.Features ([FeatureName]) VALUES (@feature_name)

SET @fid = @@IDENTITY

END

INSERT INTO dbo.FeatureNodes ([Feature_Id],[Node_Id]) VALUES (@fid,@NodeId)

-- increment counter for next employee

SET @i = @i + 1

END

END

USE [kvnwifi]

GO

/****** Object: StoredProcedure [dbo].[insertLocation] Script Date: 05/26/2013 20:47:33 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author: <Author,,Name>

-- Create date: <Create Date,,>

-- Description: <Description,,>

-- =============================================

ALTER PROCEDURE [dbo].[insertLocation]

@Id uniqueidentifier OUT,

@Bssid nvarchar(MAX),

@Level bigint,

@Lat float,

@Lon float,

@Altitude float,

@Accuracy float,

@LastDate bigint

AS

BEGIN

DECLARE @bsguid uniqueidentifier

DECLARE @return uniqueidentifier

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

SET @bsguid = (SELECT [Id] FROM [dbo].[Nodes] WHERE [BsSid] = @Bssid)

SET @Id = NEWID()

INSERT INTO [dbo].[Locations]

(

[Id],

[Bssid],

[Level],

[Lat],

[Lon],

[Altitude],

[Accuracy],

[LastDate]

)

VALUES

(

@Id,

@bsguid,

@Level,

@Lat,

@Lon,

@Altitude,

@Accuracy,

@LastDate

)

END

start: 26.05.2013 18:38:24 end: 26.05.2013 18:45:01

start: 26.05.2013 18:38:24 end: 26.05.2013 18:38:24 item processed: 43301 last time ms: 10,0006

вторник, 7 мая 2013 г.

Automaticaly detect user ticket based on email headers

Введение

Часто мне приходят письма из службы технической поддержки и они меня сильно раздражают такими фразами“Это письмо сгенерировано автоматически, при последующих обращениях указывайте в теме письма номер тикета xxx-1977”. По моему это бред. Сегодня мой коллега столкнулся с этой проблемой, как передать информацию в письме? После работы я посидел покурил RFC И решение пришло

Немного стандартов

http://tools.ietf.org/html/rfc822 собственно это наше все, уникальный заголовок письма описывается в 4.6.1.  MESSAGE-ID / RESENT-MESSAGE-ID это нам и нужно. В вольном переводе:

Данный заголовок должен представлять из себя уникальную строку формируемую сервером при ее отсутствии либо клиентом (Бинго!!!). Смотри дальше  видим заголовки

4.6.2. IN-REPLY-TO
 
4.6.3. REFERENCES

 

Конечно они опциональные, но таки нормальные клиенты их ставят (Бинго!!!)

 

Сам код

этот код стандартный C#, но я думаю на любом другом ЯП можно с легкостью его повторить

using (var client = new SmtpClient())
using(var message = new MailMessage("test@ya.ru",model.To,model.Subject,model.Body))
{
  int requestId = 1977;
  var messageid = string.Format("<{0}_{1}>", Guid.NewGuid().ToString("D"), requestId);
  message.Headers.Add("Message-ID", messageid);
                    client.Send(message);
}

пятница, 29 октября 2010 г.

How to add folder in list.

Проблема: необходимо создать папку в списке sharepoint. Данная проблема решалась в 2007 версии следующим кодом:

SPListItem item = list.Items.Add(list.RootFolder.Url, SPFileSystemObjectType.Folder, null);

string folderName = "foldername"; item["Title"] = folderName; item.Update();

К сожалению при переносе кода это не сработало. Немного покопавшись решение было найдено:

SPFolder folder = list.RootFolder; string folderName = "foldername"; SPListItem itemFolder = list.Items.Add(list.ParentWebUrl + "/" + folder.Url, SPFileSystemObjectType.Folder, folderName); itemFolder.Update();

Соответственно код функции для создания папок: private static SPFolder CreateFolder(SPList list, string baseUrl, string folderName) { SPFolder f = list.ParentWeb.GetFolder(baseUrl + "/" + folderName); if (f.Exists) return f; SPListItem itemFolder = list.Items.Add(list.ParentWebUrl + "/" +baseUrl , SPFileSystemObjectType.Folder, folderName); itemFolder.Update(); return itemFolder.Folder; }

вторник, 11 мая 2010 г.

Visual Studio 2010 Create Site Definition not adding site to SharePoint

После внедрения связки SharePoint 2010 + Visual Studio 2010 возникла проблема, сначала у моего коллеги, а потом и у меня. Описание проблемы ниже:

Здравствуйте.
Создаю тестовый site definition:
Visual Studio 2010 -> Create new Project -> SharePoint -> Site Definition.
В файле webtemp_..., для примера, задаю ID="10001", и в разделе Configuration указываю Title и Description.
Далее делаю Deploy.
Смотрю в C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\SiteTemplates папка с моим site definition создалась.
Затем на узле, под Системной учетной записью, Действие сайта -> Новый сайт и ... не наблюдаю своего site definition!
Подскажите, пожалуйста, что может быть? что попробовать сделать?

А вот собственно и решение:

Все дело в языке. Шаблон проекта предполагает что у вас язык SharePoint'а американский английский 1033, а вам нужен 1049 (для русского языка). Поэтому щелкаете по файлу webtemp правой кнопкой мыши и выбираете свойства. В разделе Deployment Location исправляете параметр Path: 1033\xml\ -> 1049\xml\

Так что правило: если что то не так проверь язык, снова подтвердилось, в общем будьте внимательны.

понедельник, 5 апреля 2010 г.

Создание личного узла в зависимости от роли человека

Задача: обеспечить  создание узла для пользователя в зависимости от его роли.

Решение: Прочитать документ “Руководства по установке шаблона личного сайта на основе ролей”. И соответственно следовать инструкциям

 

http://technet.microsoft.com/ru-ru/library/cc263453.aspx

четверг, 24 декабря 2009 г.

Выпадающее меню в WSS

Всем хорош WSS однако бывает мало функционала, один из вопросов как включить выпадающее меню как на портале? Собственно просто, подробности тут. http://sharingpoint.blogspot.com/2007/02/wss-v3-drop-down-menus-in-team-sites.html

понедельник, 30 ноября 2009 г.

Fast clean SPItems

Задача: быстро очистить список от большого количества элементов.

Решение: Будем использовать пакетное удаление элементов из списка.

private static void ClearList(SPList list)

{

string xmlCaml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>";

string itemNode = @"<Method><SetList Scope=""Request"">" + list.ID +

"</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>";

foreach (SPListItem item in list.Items)

xmlCaml +=

string.Format(itemNode, item.ID.ToString());

xmlCaml +=

"</Batch>";

list.ParentWeb.ProcessBatchData(xmlCaml);

}

Разница между этим методом и последовательным удалением элементов огромная и скорость при увеличении количества элементов падает по линейному закону. Так что крайне рекомендую для очистки списка использовать именно этот код.

суббота, 10 октября 2009 г.

Application Templates for Windows SharePoint Services 3.0 and language mistake

Для шарепоинта существуют целые наборы типовых решений предоставляемых самой компанией Microsoft

http://technet.microsoft.com/ru-ru/windowsserver/sharepoint/bb407286.aspx

Только нужно обратить особенное внимание на язык решения :)

Очень уважаемый мною человек бился в течении 2 дней над этой проблемой, просто скачал не то.

Так вот обращайте внимание на детали. Первая ссылка на этой странице указывает на 40 шаблонов на АНГЛИЙСКОМ языке.

А вот ссылка на 20 шаблонов содержит именно локализованные версии.

Разобрались с этим только после всего цикла троблешутинга, были перевернуты и логи системы и шарепоинта и разные версии WSS. Веселья было много. В конце концов я просто посмотрел солюшены и НЕ обнаружил там ветки 1049, которая собственно и указывает на наличие русского языка.

Так что внимательно читайте странички.

пятница, 25 сентября 2009 г.

Stsadm backup with current date

Основной синтаксис команды такой

stsadm -o backup

   -url <URL name>

   -filename <file name>

Нам нужно добиться создания архивных копий с датой в  названии файла.

stsadm –o backup –url http://localhost –filename stbackup_%DATE%.bak

получиться имя файла stbackup_25.09.2009.bak.

Кроме этого можно использовать переменную %TIME% содержащую текущее время

четверг, 23 июля 2009 г.

SharePoint 2007 Custom Fields and “Edit property on server”

Возникла проблема: при добавлении  Custom Field в библиотеку документов появилось предупреждение:

В большинстве клиентских программ данный тип поля не допускает изменения и может препятствовать сохранению документов в этой библиотеке.

Поиск по русскому интернету ничего не дал, тогда пришлось найти откуда WSS берет это значение, оказалось из файла

12\Config\Resources\wss.ru-ru.resx

и ключа fldedit_FieldTypeWarningForDocLibSupport

соответственно предупреждение на английском выглядит так

This field type cannot be edited from most client programs and might block the programs from saving documents to this library.

И решение сразу нашлось вот здесь

http://nickgrattan.wordpress.com/2008/01/06/sharepoint-2007-custom-fields-and-edit-property-on-server/

воскресенье, 19 июля 2009 г.

Move to display form after create element

Задача: после добавления нового элемента перейти на форму редактирования

Решение: Создаеться EventReciver и добавляется следующий код. На что особенно следует обратить внимание. Ни каким кастомайзингом вы этого не добьетесь, в момент щелчка по кнопке OK просто нет идентификатора записи поэтому и переходить некуда.

Это решение позволяет избежать этой ситуации.

Отдельные комментарии присутствуют в коде.

public override void ItemAdding(SPItemEventProperties properties)
        {
            // Get a "reference" to the list

           
            SPSite siteColl = new SPSite(properties.SiteId);
            SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
            SPList list = site.Lists[properties.ListId];

// Вызываем базовый метод и ничего не делаем, если это не наш список
            if (!list.DefaultViewUrl.Contains("Lists/Orders"))
            {
                base.ItemAdding(properties);
                return;
            }

// А вот тут идет обработка перехода с конкретной страницы, ну не нужен мне этот обработчик везде :)
            if (_currentContext.Request.CurrentExecutionFilePath.Contains("CopyListItem.aspx"))
            {
                base.ItemAdding(properties);
                return;
            }
            // Add the item and fill it with the values from properties
            DisableEventFiring();           
            SPListItem itemToAdd = list.Items.Add();
            foreach (SPField field in itemToAdd.Fields)
            {
                if (!field.Hidden &&
                    !field.ReadOnlyField &&
                    field != null &&
                    field.InternalName != "Attachments")
                {
                    itemToAdd[field.InternalName] = properties.AfterProperties[field.InternalName];
                }
            }
            itemToAdd.Update();
            EnableEventFiring();

            // Cleanup
            site.Dispose();
            siteColl.Dispose();
            string targetUrlOfNewItem = "DispForm.aspx?ID=" + itemToAdd.ID;
// ВАУ а вот тут Особая уличная магия :)

            // Redirect
            SPUtility.Redirect(targetUrlOfNewItem,SPRedirectFlags.Default, _currentContext);
        }

How do I get a user name in sharepoint

Задача: Определить имя текущего пользователя и выбрать его в выпадающем списке.

Решение: С помощью SharePoint Designer’a вставляем код JavaScript в файл newform.aspx.  

<!-- Определяем пользователя -->
<script type="text/javascript">
var username = getCurrentUser()
selectSender(username);
function selectSender(displayname)
{
var d = document.all.tags("SELECT");
for(i=0; i<d.length; i++)
{

// !NOTE change to you environment.  Field display name = 'Sender'

    if(d[i].title == 'Sender')
    {   
    for(j=0; j < d[i].options.length; j++)
        {
            var s = d[i].options[j];       
            if(s.text == displayname)
            {
                s.selected  = true;
            }
        }
    }
}
}
function getCurrentUser()
{

// выбираем все элементы со сылками и фильтруем по строке приветствия

var tags = document.getElementsByTagName('a');
for (var i=0; i < tags.length; i++)
{
     if(tags[i].innerText.substr(0,7) == 'Welcome')
     {
         return tags[i].innerText.substr(8,tags[i].innerText.length);
     }
     if(tags[i].innerText.substr(0,12) == 'Пользователь')
     {
         return tags[i].innerText.substr(14,tags[i].innerText.length);
     }
}
}
</script>

суббота, 18 июля 2009 г.

SharePoint Web.config Debug Settings

Описание флагов для вывода отладочной информации.

Внимание НИКОГДА не используйте эти настройки на “Боевом” сервере. Скорость работы падает примерно в 10 – 15 раз.

Однако для режима отладки и выявления проблем это именно тот режим, который вам нужен.

 <configuration>
  <SharePoint>
     <!—- отображение дерева вызовов функций -->
     <SafeMode CallStack="true" />
       </SharePoint>
      <system.web>
<!--  Чистый вывод ошибок -->
        <customErrors mode="Off" />
<!--  Включение отладочной информации -->
        <compilation debug="true" />
      </system.web>
 </configuration>

пятница, 17 июля 2009 г.

Sharepoint Unique Column (PK) : Using event handler

Оригинал тут:

http://jpy-tech.com/blog/post/Sharepoint-Unique-Column-%28PK%29-Using-event-handler.aspx

Задача: Обеспечить уникальное значение поля.

Решение: Написать EventHandler и внести логику для проверки введенного значения.

Исходный код немного кривоват так что используйте поправленный мною вариант.

Пояснения, после установки этого обработчика, достаточно будет добавить в описание поля метку [$UNIQUE$] и это поле будет проверяться на уникальность.

const string _QUERY = @"<Where><Eq><FieldRef Name=""{0}"" /><Value Type=""Text"">{1}</Value></Eq></Where>"; public override void ItemAdding(SPItemEventProperties properties) { using (SPWeb web = properties.OpenWeb()) { /*get the current list*/ SPList list = web.Lists[properties.ListId]; string columnName = ""; foreach (SPField fld in list.Fields) { if (fld.Description.Contains("[$UNIQUE$]")) { columnName = fld.InternalName; break; } }

if (properties.AfterProperties[columnName] != null) { string currentValue = properties.AfterProperties[columnName].ToString(); SPQuery _query = new SPQuery(); _query.Query = string.Format(_QUERY, columnName, currentValue); SPListItemCollection itemsWithSameValue = list.GetItems(_query); if (itemsWithSameValue.Count > 0) { properties.Cancel = true; properties.ErrorMessage = "There is already an item with the same value(" + currentValue + ") for the column / Field(" + columnName + ") in this list."; } } } }

четверг, 16 июля 2009 г.

Sharepoint localization

Описана процедура использования ресурсов, для создания локализациии ваших проектов на платформе SharePoint

http://blogs.technet.com/tatianasv/archive/2009/03/25/3217498.aspx

понедельник, 22 июня 2009 г.

LookupField and SharePoint Solution Generator

При автоматическом создании шаблона определения списка (ListDefinition) для полей типа Lookup создаються определения, но они закомментированы. Решить эту проблему можно раскомментировав эту строку или строки и изменить значение гуида на относительный путь к списку.
Было: List="33333-3333-cccc-ccc-bbbb"
Стало:List="Lists/ListName"
Особенно обратите внимание на русские имена в полях, как я уже говорил русский язык зло.

вторник, 9 июня 2009 г.

devenv command line

Столкнулся с очень неприятной штуковиной в MSBuild нельзя собрать пакет wsp для проекта типа VSeWSS, поэтому пришлось вот так вот извращаться:

devenv UserImage.csproj /projectconfig Release /Deploy

пятница, 10 апреля 2009 г.

Failed to install Expression studio 2 with installed localized version of Office 2007

Столкнулся вот с такой ошибкой при установленном русском Офисе не ставиться Expression studio 2. Решения 2:
  • Удалить полность офис и поставить студию, а позже установить офис.
  • Установить один из продуктов серии офис 2007, например Project 2007.
Техническая информация: Файл установки из папки %Temp%
11:30:07 8 апреля 2009 г.: Executing chained package: OfficeMUI.en-us 
11:30:07 8 апреля 2009 г.: 04/08/2009 11:29:57 Configuring chained package: OfficeMUI.en-us 
11:30:07 8 апреля 2009 г.: PERF: TickCount=76196531 Name=Verify MSI local install source Description=Begin function 
11:30:07 8 апреля 2009 г.: OSE is detected as a registered service. Service binary is reported at location: C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE 
11:30:07 8 апреля 2009 г.: OSE service binary is detected at location: C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE 
11:30:07 8 апреля 2009 г.: File at C:\Documents and Settings\vkorotenko.SDC\Local Settings\Temp\XSetup_ExpressionStudio_2009_4_8_11_15_19\438d1ac8_d88e_46eb_ba69_11fef34cce74\XWeb.WW\ose.exe has version: 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: File at C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE has version: 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: Running OSE version 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: OSE is detected as a registered service. Service binary is reported at location: C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE 
11:30:07 8 апреля 2009 г.: OSE service binary is detected at location: C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE 
11:30:07 8 апреля 2009 г.: File at C:\Documents and Settings\vkorotenko.SDC\Local Settings\Temp\XSetup_ExpressionStudio_2009_4_8_11_15_19\438d1ac8_d88e_46eb_ba69_11fef34cce74\XWeb.WW\ose.exe has version: 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: File at C:\Program Files\Common Files\Microsoft Shared\Source Engine\OSE.EXE has version: 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: Running OSE version 12.0.4518.1014 
11:30:07 8 апреля 2009 г.: LIS: wait for package "{90120000-0115-0409-0000-0000000FF1CE}" to complete caching 
11:30:07 8 апреля 2009 г.: LIS failed to cache download "{90120000-0115-0409-0000-0000000FF1CE}-C" resource "branding.xml". Cache Error 0x80070017 
11:30:07 8 апреля 2009 г.: Source Resolution aborted 
11:30:07 8 апреля 2009 г.: Log level changed from: Standard to: Verbose 
11:30:07 8 апреля 2009 г.: Error: LIS: Failed to cache download "{90120000-0115-0409-0000-0000000FF1CE}-C" resource "branding.xml". HResult: 0x80070017. 
11:30:07 8 апреля 2009 г.: Rolling back chain 
11:30:07 8 апреля 2009 г.: 04/08/2009 11:30:01 Rolling back package: OfficeMUI.en-us 
11:30:07 8 апреля 2009 г.: There appears to be no rollback work to do for package: OfficeMUI.en-us path: C:\Documents and Settings\vkorotenko.SDC\Local Settings\Temp\XSetup_ExpressionStudio_2009_4_8_11_15_19\438d1ac8_d88e_46eb_ba69_11fef34cce74\Office.en-us\OfficeMUI.MSI 
11:30:07 8 апреля 2009 г.: Stopping running ose 
11:30:07 8 апреля 2009 г.: LIS: start uncaching for download "{90120000-0010-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: finished uncaching for download "{90120000-0010-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: start uncaching for download "{90120000-002C-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: finished uncaching for download "{90120000-002C-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: start uncaching for download "{90120000-0045-0000-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: finished uncaching for download "{90120000-0045-0000-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: start uncaching for download "{90120000-0045-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: finished uncaching for download "{90120000-0045-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: start uncaching for download "{90120000-0115-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: LIS: finished uncaching for download "{90120000-0115-0409-0000-0000000FF1CE}-C" 
11:30:07 8 апреля 2009 г.: Stopping running ose 
11:30:07 8 апреля 2009 г.: SystemRestore : Attempting to cancelling System-Restore-Point for Product [Microsoft Expression Web 2] (with RestorePointType [0, Installed]). 
11:30:07 8 апреля 2009 г.: SystemRestore : Successfully cancelled System-Restore-Point for Product [Microsoft Expression Web 2] (with RestorePointType [0, Installed]). 
11:30:07 8 апреля 2009 г.: Not showing completion dialog because it was not requested. 
11:30:07 8 апреля 2009 г.: Catalyst execution finished: 04/08/2009 11:30:06. Return code: -2147024873. 
11:30:07 8 апреля 2009 г.: PERF: TickCount=76205890 Name=RunSetup Description=End function 
11:30:08 8 апреля 2009 г.: Error: Installation of the "Microsoft Expression Web 2" product has reported the following error: -2147024873. 
11:30:08 8 апреля 2009 г.: ========================================================================= 
11:30:09 8 апреля 2009 г.: Info: Config_Products_InstallNew: End installation of new product: Microsoft Expression Web 2 
11:30:10 8 апреля 2009 г.: Error: Config_Products_Install: Installation of Product Microsoft Expression Web 2 (failed): Installation of the "Microsoft Expression Web 2" product has reported the following error: -2147024873. Stack: at XSetup.OfficePackage.ConfigureNewInstall(Product product) at XSetup.Product.ConfigureNewProduct() 
11:30:10 8 апреля 2009 г.: Info: Config_Products_InstallNew: End installation of new product: Microsoft Expression Web 2 
11:30:13 8 апреля 2009 г.: Info: Expecting to find local release notes at 'C:\Program Files\Microsoft Expression\Encoder 2\Release Notes.mht'. 
11:30:32 8 апреля 2009 г.: Error: XSetup_DoTasks:: Installation of the "Microsoft Expression Web 2" product has reported the following error: Installation of the "Microsoft Expression Web 2" product has reported the following error: -2147024873.. Stack: at XSetup.XSetupSession.OnDoTasksThreadDoWork(Object sender, DoWorkEventArgs e) 
11:30:32 8 апреля 2009 г.: Error: Installation of the "Microsoft Expression Web 2" product has reported the following error: Installation of the "Microsoft Expression Web 2" product has reported the following error: -2147024873.. 
11:30:32 8 апреля 2009 г.: Info: End Setup session 
11:30:32 8 апреля 2009 г.: ------------------------------------------------------------------------------------------------- 
11:30:32 8 апреля 2009 г.: Error: XSetup_DoTasks:: Installation of the "Microsoft Expression Web 2" product has reported the following error: Installation of the "Microsoft Expression Web 2" product has reported the following error: -2147024873.. Stack: at XSetup.XSetupSession.OnDoTasksThreadDoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

понедельник, 30 марта 2009 г.

Folder view in WSS & MOSS

Как отобразить документы в виде дерева в среде MOSS. startexplorer folder_f folderEnd