четверг, января 19, 2006

Очередной прикол от Sharepoint

При реализации "Удаления" записей списка в "корзину" добавил к списку поле _deleted_ типа Boolean, в который ставил признак "удаления".
Но не всё так просто, MS лёгких путей не ищет:
конструкция list.Items.GetDataTable(); иногда возвращает в этом поле DBNull, иногда и правильные значения.
В итоге пришлось сделать поле целого типа и проверять на == 1.
 
Блин.

Application settings in C# 2.0 continued

Обнаружилась засада - не может засады не быть!
 
Для проекта типа "Class Library" можно задать настройки ровно так же, как и для проекта "Application". Разница небольшая - при загрузке сборки чтения конфига не происходит. Даже принудительное перечитывание при помощи settings.Reload(); ничего не прибавляет. Модуль работает с теми значениями настроек, которые были записаны в качестве default'ных.
 
Пришлось написать процедуру считывания значений настроек.

void LoadSettings(ref object settings) {
    PropertyInfo[] props = settings.GetType().GetProperties();
   
string path = this.GetType().Assembly.Location;
   
string cfgpath=path+".config";
   
if (! File.Exists(cfgpath)) return;
   
XmlDocument cfg = new XmlDocument();
   
try {
        cfg.Load(cfgpath);
    }
catch (Exception err) {
        ....
       
return;
    }
   
foreach (PropertyInfo prop in props) {
       
if (!prop.CanWrite) continue;
       
XmlNode setting = cfg.SelectSingleNode("//setting[@name = '" + prop.Name + "']" );
       
object value = "";
        if (setting != null) {
            
try {
                value = setting.SelectSingleNode(
"value").InnerText;
               
prop.SetValue(settings, value, null);
           
} catch { }
        }
    }
}

Использование:

object osettings = new Settings();
LoadSettings(
ref osettings);
settings = (
Settings)osettings;

Примечание. При настройке параметров в VS 2005 область действия (Scope) следует установить User (иначе будет сгенерён класс Settings с readonly свойствами).

вторник, января 17, 2006

«Секретная» страница

Соорудил aspx-страницу с авторизацией.
Для каждого юзера выдаётся список предназначенных для него файлов, которые можно сгрузить.
Регулируется вот таким конфигом:

<?xml version="1.0" encoding="utf-8" ?>
<users>
<user dirs="adir" pwd="ap" name="anton">
<user dirs="*" pwd="dp" name="DkmS">
</users>


Вполне даже симпатично получилось. Заодно кой-чему научился.

воскресенье, января 15, 2006

Settins & Versions

Хорошая вещь Properties.Settings, но не до конца продуманная.
Засада - в хранении пользовательских настроек. Без всяких споров/разговоров сохраняются в файле %USERPROFILE%\Local Settings\Application Data\<Company Name>\<appdomainname>_<eid>_<hash>\<verison>\user.config .
И вот из-за этой <verison> и всё горе - используется значение атрибута assembly:AssemblyVersion , которое у меня обычно выставляется автоматом наподобие "1.0.0.*", что довольно удобно при протоколировании . Но при отладке всё, естественно, корёжится.
Пришлось начать использовать атрибут assembly:AssemblyFileVersionAttribute, который студия (Express, по меньшей мере) автоматом менять не умеет. Для получения версии исполняемого файла пользуюсь процедурой
public static string AnyVersion( Assembly assembly) {
object[] attrs=null;
try{
    attrs=assembly.GetCustomAttributes(
typeof(AssemblyFileVersionAttribute ),false);
}
catch{}
if (attrs != null && attrs.Length > 0) {
   
return ((AssemblyFileVersionAttribute)attrs[0]).Version;
}
return assembly.GetName().Version.ToString(4);
}
 
Использование - AnyVersion(Assembly.GetExecutingAssembly()) или ещё как...

четверг, января 12, 2006

Application settings in C# 2.0

Использование новых возможностей по конфигурированию приложений в VS 2005 применительно к VB.NET описано вот тут.

В C# настройка средствами VS (в т.ч. Express Edition) выполняется точно так же. Отличается, ввиду отсутствия в C# конструкции My.Settings, способ использования этих средств.

В модуле, где необходимо использовать настройки, нужно подключить пространство имён Properties:

using MyProgram.Properties;

В соответствующем классе объявить член класса:

private Settings settings = new Settings();

Поля этого класса уже можно использовать по назначению:

this.Size = settings.MainFormSize;

Замечание.

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


среда, декабря 28, 2005

Из Writely

Из C# Express через Word: с заменой абзаца на разрыв строки

/// <summary>
///
Description for XmlView.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:XmlView runat=server></{0}:XmlView>"),
XmlRoot(Namespace="XMLviewer")]
public class XmlView : Microsoft.SharePoint.WebPartPages.WebPart {
private const string defaultText = "XmlView";
private string text = defaultText;
private string xml = "";
private string xmllink = "";
private string xsl = "";
private string xsllink = "";
private Evidence evidence=null;
}


XmlWebPart & XmlView continued

Заказчику потребовалось использовать в xslt-преобразователе конструкцию <xsl:apply-templates select="document(file)..."/>
В стандартном XmlWebPart - работает. В моём XmlView - ни в какую.
При раскопках выяснилось, что загружать xsl нужно не конструкцией, которая сама напрашивается

XmlDocument xsl = new XmlDocument();
xsl.
LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt =new XslTransform();
xslt.Load (new XmlNodeReader(xsl));
а немного поширше:

XmlDocument xsl = new XmlDocument();
xsl.
LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt= new XslTransform();
XmlUrlResolver resolver=new XmlUrlResolver();
xslt. Load(new XmlNodeReader(xsl), resolver, XmlSecureResolver .CreateEvidenceForUrl(XslLink));
В .NET 2.0 опять по-другому:

XmlDocument xsl = new XmlDocument();
xsl.Load(
http://...test.xsl
);
XmlUrlResolver resolver=new XmlUrlResolver
();
resolver.Credentials =
CredentialCache
.DefaultNetworkCredentials;
XslCompiledTransform xslt= new XslCompiledTransform();
XsltSettings settings = new XsltSettings
();
settings.EnableDocumentFunction =
true
;
settings.EnableScript =
true
;
xslt.Load(
new XmlNodeReader
(xsl),settings,resolver);

вторник, декабря 13, 2005

Очередной прикол от Sharepoint

Фрагменты
SPList list = web.Lists[ListName];
SPListItem WholeItem = list.Items[0];
WholeItem["Viewers"] = text;
WholeItem.Update();

и

SPList list = web.Lists[ListName];
list.Items[0]["Viewers"] = text;
list.Items[0].Update();


имеют совершенно разный эффект - второй ничего никуда не пишет!

вторник, ноября 29, 2005

WSS & SPS Administrator

Утилита для курочить Шарепойнт - копирование, редактирование, добавление всяких разных элементов.

Более подробно - здесь

пятница, ноября 18, 2005

Microsoft.SharePoint.WebPartPages.XmlWebPart

Ну и штуковина! Долго пытался выяснить, что же и как она делает - полный облом. Похоже, и никто не ухитрился её в деле использовать :-(.

А всего-то и надо было - прочитать из файла xml, преобразовать его через xsl и выдать юзеру. В итоге пришлось изобретать свой аналог, который даже и работает.


четверг, ноября 17, 2005

Sharepoint Portal & .NET 2.0 continued

История не заканчивается.

Установил релиз FW .NET 2.0 (описанное ранее было с beta2) - приключения с атрибутом enableEventValidation закончились.
Обнаружилась бяка хуже - перестала работать как следует функция создания узла в портале. Сам узел создаётся, но до формирования по шаблону дело не доходит - заедает на второй странице " Добавление ссылки на узел".
В итоге в области "Узлы" ссылки на новый узел нет, при первом обращении к узлу по адресу сначала выползает форма выбора шаблонов узла.
Попробовал варианты переключения версии .net на установленном узле портала и установки на сервер с включённым вторым дотнетом - один фиг. Мелочь, но противно.

Правда, у некоторых гладко проходит - Matthew Cosier's Blog: WSS and SPS on .NET 2.0

Но у некоторых - тоже не проходит: Steven Van de Craen's Blog

суббота, ноября 05, 2005

Sharepoint notes 4.

Очередной капкан.
 
При добавлении SPFieldLookup-полей к списку list в примерах рекомендуют нечто вроде:
 
list.Fields.AddLookup(fieldName, lookupListID, fieldRequired);
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup
;
newfield.LookupField = lookupFieldName;
 
Всё это проходит на примерах, где поле называется Title.
 
На самом деле, приходится использовать такой код:

AddLookup(list, fieldName, lookupListID, fieldRequired, lookupFieldName);
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup;
 
...
 
string AddLookup(SPList list, string FieldName, Guid LookupListID, bool FieldRequired, string LookupFieldName) {
XmlDocument fxml = new XmlDocument
();
XmlElement xf = fxml.CreateElement("Field"
);
xf.SetAttribute(
"DisplayName"
, FieldName);
xf.SetAttribute(
"Type", "Lookup"
);
xf.SetAttribute(
"Required"
, FieldRequired.ToString ());
xf.SetAttribute(
"List", LookupListID.ToString("B"
));
xf.SetAttribute(
"ColName", "int1"
);
xf.SetAttribute(
"ShowField"
, LookupFieldName);

return  list.Fields.AddFieldAsXml(xf.OuterXml);

}

Sharepoint notes 3.

Опять обманули...

The Delete method of the SPFieldCollection class deletes the field with the specified display name from the collection.

public void Delete(
   string strName
);

Parameters
strName   A string that specifies the display name of the field
 
На самом деле
strName   must be InnerName.

Sharepoint notes 3.

Опять обманули...

The Delete method of the SPFieldCollection class deletes the field with the specified display name from the collection.

public void Delete(
string strName
);

Parameters
strName A string that specifies the display name of the field
На самом деле
strName must be InnerName.

пятница, ноября 04, 2005

Sharepoint notes 2.

Опять обманули...

The Add method of the SPFieldCollection class creates a field in the collection.

public string Add(
   string strDisplayName,
   Microsoft.SharePoint.SPFieldType type,
   bool bRequired
);

Return Value
A string that contains the display name of the new field.
 
На самом деле
возвращает InnerName для нового поля.

вторник, ноября 01, 2005

Sharepoint notes 1.

При добавлении пользователя в роль пытался сделать так:

role.AddUser(user);

В SDK никаких оговорок по поводу этой конструкции не видно. Исполняется молча, но ничего не добавляет :-( Работает только такая конструкция:

role.AddUser( user.LoginName, user.Email, user.Name, user.Notes + "(added by Wss Admin)");

Мелочь, но время потрачено приличное.

.NET 2.0 release

Начал какие-то исследования по использованию релиза.

Установил на втором компьютере релиз и SDK.
Попробовал собрать на нём при помощи MsBuild проект от 2005-й Студии beta 2. Собирается, и даже работает.

Скомпилил своего Wss Admin'а На 2005-й Студии. Работает как под второй бетой, так и под релизом на "сервере".
Осталось уговорить заказчика перейти на вторую версию (пусть и без Sharepoint'а пока).

понедельник, октября 31, 2005

Пристали с хернёй!!!

Спам-блог, говорят!

Уйти, что ли, отсюда на хрен, да ещё и рекламу организовать...

Завтра не прекратится этот идиотизм - так и сделаю.

Херня продолжается...

Одумались, едрёныть - "Your blog has been reviewed, verified, and whitelisted so that it will nolonger appear as potential spam."

Тем временем надыбал ещё одну системку - Multiply site - вполне пристойное место для жизни. И даже отсюда импорт постов есть ;-)

воскресенье, октября 30, 2005

Sharepoint Portal & .NET 2.0 continued

После установки релиза FW вылезла ошибка при обращении к классу Microsoft.SharePoint.Security.SharePointPermission в сборке Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c.
Это приключилось в вебчасти на фрагменте

web.AllowUnsafeUpdates = true;

Добавление в web.config элемента <safecontrol assembly="Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.Security" typename="Microsoft.SharePoint.Security.SharePointPermission" safe="True" /> эффекта не возымело :-(

Пришлось поставить trust level="Full"

VistaDB 2.1 database for .NET has been released

This 2.1 update includes over 60 improvements, including new support for .NET 2.0 and Visual Studio .NET 2005. VistaDB is a small-footprint, embedded SQL database alternative to Jet/Access, MSDE and SQL Server Express 2005 that enables developers to build .NET 1.1 and .NET 2.0 applications. Features SQL-92 support, small 500KB embedded footprint, free 2-User VistaDB Server for remote TCP/IP data access, royalty free distribution for both embedded and server, Copy 'n Go! deployment, managed ADO.NET Provider, data management and data migration tools. Free trial is available for download.

Repost this to your blog and receive a FREE copy of VistaDB 2.1!

суббота, октября 29, 2005

Мои изделия для Шарепойта (My Sharepoint's tools)

На сегодня имеем несколько результатов:
  • Картотека ВШЭ с лихими свойствами. Установлено и работает (с разными приключениями) больше 1000 экземпляров.
  • Список страниц, где можно что-то редактировать. Подвесил разок систему заказчика, пока обшаривал рекурсивно все сайты.
  • Расширенный редактор на базе FCKEditor - аналог системной веб-части. Работает у заказчика, даже какой-то студент что-то совершенствует.
  • Утилита администратора - показывает структуры WSS и Портала (на манер SharepointExplorer) и делает кое-какие действия - копирование, удаление, показ свойств (будет).

Вроде, ничего так, полгода назад ничего про этот "Шарик" не знал.

Sharepoint Portal & .NET 2.0

Ну, блин, забава...
Результат перевода виртуальных серверов фиг знает от чего зависит - от погоды, что ли, или от магнитных бурь каких...

Порядок действий.
  1. Установить второй сервиспак для Sharepoint Services
  2. Установить второй сервиспак для Sharepoint Portal
  3. Перевести веб-сайт (через консоль управления) на работу под версией .NET 2.0
    1. В свойствах сайта на табе ASP.NET включить вторую версию FW.
    2. Организовать специальный AppPool для сайтов под второй версией FW, загнать туда этот сайт.
    3. Identity для этого пула д.б. account, назначенный главным для доступа к содержимому сайтов
    4. Проследить, чтоб в этот пул попали и подсайты _layouts, _vti_bin, _wpresources. Если не попали, загнать их туда вручную через свойства подсайта.
  4. Для модификации web.config выполнить команду stsadm.exe -o upgrade -forceupgrade -url http://YourCoolSite (см. KB894903 ).
    1. Проследить, чтоб прошла модификация, как сказано в KB.
    2. Если модификация не выполнилась, то сделать её вручную, при этом проследить, чтобы в теге pages не было атрибута enableEventValidation (этот же атрибут добавляется при сносе/восстановлении портала через Центр администрирования - похоже на глюк!? ).
  5. Выполнить iisreset.
  6. Лучше бы перезапустить IE.
После этого сайт вполне себе заработал.
Дальше буду пробовать что-то на втором FW сочинить.

понедельник, октября 03, 2005

Google Web Accelerator

Ну и какашка! Сгружает файлы как бы "заранее", а при начале загрузки пользователем качает их снова.
В общем, в 100 Мб трафика мне эта "радость" обошлась. Бля!

четверг, сентября 29, 2005

Sharepoint web-services

Вот бред - просто так в Студии подключить в проект эти сервисы не получается:
The document at the url http://localhost/_vti_bin/sites.asmx was not recognized as a known document type.
 
Помогает написать вместо, например, http://localhost/_vti_bin/Lists.asmx  немного другое -  http://localhost/_vti_bin/Listswsdl.aspx .
 
Ещё вот так срабатывает - http://localhost/sites/test/_vti_bin/Lists.asmx
Прочитал тут - http://blogs.msdn.com/trobbins/articles/220551.aspx

 
Здесь sites/test - существующий сайт.
 
Полный капец

суббота, сентября 03, 2005

DSL-200 on Windows 2003 sp1

Решил тут подключиться к Инету цивилизованным способом - через ADSL-модем.

В конторе провайдера предложили купить модем у них, явно дороже, чем в магазине, но ладно, согласился (в надежде, что бегать покупать не придётся, да и поддержку обещали). Естественно, подсунули самый дешёвый - DSL-200 с USB-интерфейсом. В общем, гадость полнейшая.

Установка.

В начале установки надо обязательно выбрать вариант LAN, указать значения VCI/VPI, как скажет провайдер, и обязательно указать "Bridget LLC Encapsulation":


Дальше можно всё делать по инструкции, в процессе Windows спросит про установку нового устройства - надо согласиться на установку по умолчанию, поставится правильное устройство. В конце длинной процедуры установки драйверов вывалится сообщение, что установка прошла неудачно. Не верить, снять установщик через Task Manager. После перезагрузки запустить DSL-200 Status, нажать там Ctrl-F1, выбрать "Driver Config" и посмотреть, что получилось. Если всё, как ожидалось, можно пробовать работать.


Проверка реестра


Необходимо проверить ключ HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata, который должен выглядеть примерно таким образом:

[HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata\GVInstDLL]
"OrgTcpipWinSize"=dword:00000000
"DriverType"="LAN"
"Vci"="33"
"Vpi"="0"
"Encapsulation"="2"
"hklmDriverSignPolicy"=hex:01
"hkcuDriverSignPolicy"=hex:01
"Driver"="{4D36E972-E325-11CE-BFC1-08002BE10318}\\0011"
"DriverInstalled"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata\GVInstDLL\DriverParameters] "SysTrayIconMode"="1"
"Rfc1483Mode"="0"
"Rfc1577Enable"="0"
"Rfc1483Vci"="33"
"Rfc1483Vpi"="0"
"Standard"="4"
"Win2kSurpriseRemoval"="1"
"Language"="english"
"VendorId"="39"
"CplDebugMode"="1"
"IsLogoTransparent"="0"

Здесь может отсутствовать ключ "Driver", который нужно добавить, а некоторые параметры могут иметь неверное значение - их надо исправить.

В разделе HKEY_LOCAL_MACHINE\SYSTEM найти параметры Rfc1483Vci и установить нужное значение.
После этого всего у меня модем заработал. Вот, через него сейчас и пишу

суббота, августа 06, 2005

"Плагин" для ИЕ

Хочет работодатель некое средство для сохранения страницы из браузера в точно заданное место. Странное желание, вообще-то - с третьего раза мартышку можно научить это делать, а сотрудника университета, способного эту страницу редактировать, научить не берутся...

Два дня искал информацию, как же, всё таки, написать плагин к ИЕ, чтоб это сохранение выполнить. Причём писать, желательно, на C# (ну, не люблю на плюсах, не нравится в кишках ковыряться). Чего-то нарыл, каких-то нескладных примеров.

Попытался соорудить ничего не делающий, с простым приветом плагин - дык, добился, что ИЕ падал сразу при запуске. Еле отбился от этой заразы.
В итоге плюнул на все эти мученья и за два часа соорудил "спец-браузер", умеющий загрузить страницу и сохранить её в файл, полный путь к которому указан в конфиге.

Выглядит как настоящий, да и действует, вообще-то.
Думаю, сгодится.

В принципе, можно будет со временем подумать о сооружении собственных браузеров такого типа - задать ему нужную функциональность, отбросив ненужное. Ещё бы разобраться, кто нужный, кто нет...

Давно не брал я в руки шашек...

Статейками, что ли, поразвлекаться, пока лето и жарко?

  • Про программирование AddIn'ов для Офиса.
  • Про web-парты кой-чего можно.
  • Ещё разное, чего в голову придёт.

Ожидайте, скоро будет!

пятница, августа 05, 2005

Пост из Ворда

с картинками и объектами - фокус не удался :-(
Из Outlook'а - практически так же.


Всё это накалякано в Word’е

воскресенье, июля 31, 2005

Офисные плагины

Новое по сравнению с ранее выставлявшимся:
  1. Добавлена возможность вывода списка плагинов в инспекторе Outlook.
    Реализовано только для наследников outlookPlugin. По умолчанию возможность отключена, включать надо в плагине атрибутом [ShowInInspector (true)] или установкой поля ShowInInspector = true; Проверить факт работы в окне Инспектора можно по значению логической переменной RunningInInspector.
  2. Добавлена возможность при установке выбрать приложения, в которых будут запускаться плагины (по умолчанию Word, Excel и Outlook выбраны).
  3. Добавлена возможность в файле конфигурации диспетчера указать приложения, в которые будут загружаться плагины при очередном старте (параметр <runin>, принимает значения * (для всех приложений) или Word, Excel и т.д.). Параметр может повторяться необходимое количество раз и может быть изменён только при использовании внешнего редактора.
  4. Добавлена возможность на пункте меню плагина выводить рисунки. Файлы рисунков (сам рисунок и маска) добавляются к проекту плагина в виде встраиваемых ресурсов (Bitmap размером 16*16). Имена файлов следует указать в переменных PictureBmpName и MaskBmpName в перегруженном методе InitializePlugin (по умолчанию используются значения " Picture.bmp" и "Mask.bmp" соответственно).
  5. Добавлена возможность в файле конфигурации задать произвольное количество путей к папкам с плагинами (параметр <path>). По умолчанию используется значение "OfficePlugins".
  6. Система переписана с использованием некоторых возможностей .NET v.2.0 и требует для работы установленной версии .NET Framework 2.0.50215.

Конкурс на Gotdotnet.ru

Получил на днях призы за заявки - VB.NET и VS 2003 - всё из себя лицензионное, хоть и устаревшее малость. Одно хорошо - к Студии Server 2003 приложен и SQL 2000 девелоперский. Можно с чистой совестью программки раздавать. И даже продавать, если кто купит.
А Бейсик Варьке отправить надо - поди, в нынешней продвинутой школе заставят программить чего - вот и пригодится.
 
Ну, и заодно вспомнил, что надо и сами разработки выкладывать - пришлось повозиться малость.
Музыкально-развлекушное почти не менял, а с Офисными плагинами поковырялся. Особенно с Outlook'овым, работающим и в Inspector'е - кривота жуткая. Зато научился вставлять текст в письма (даже в те, которые специально на редактирование не открыты пока). Надо будет развить как-нить эту линию.

понедельник, июля 18, 2005

FxCop

Решил поупражняться с сабжем, встроенным в Студию 2005.
Мама дорогая.
В общем, примерно 3 часа возился, выполняя его рекомендации. Попутно выяснилось, что некоторые ситуации распознаёт совсем криво, значительно хуже самой Студии. Но иногда и дельные советы подаёт тоже (типа убрать ненужные инициализации объектов, сделать методы статическими).
 
Следующие 3 часа возился, устраняя последствия предыдущего действия :-(
 
В общем, какое-то время воздержусь от этой забавы.

CommandBarButton.Picture

Часа 2 возился, чтоб изобразить картинку на кнопке в Ворде. Какой только фигни многомудрой не понаписано на эту тему....
Ё-моё. А всё оказалось достаточно просто.

Несколько строчек кода

string ns = this.GetType().Namespace;
Assembly CurrentAssembly = this.GetType().Assembly;
System.IO.Stream

imgStreamPic = CurrentAssembly.GetManifestResourceStream(ns+"." + "ConfigPicture.bmp"),
imgStreamMask = CurrentAssembly.GetManifestResourceStream(ns+
"." + "ConfigMask.bmp"
);
MyAxHost ax = new MyAxHost
();
stdole.
IPictureDisp
Pic = MyAxHost.IPictureDisp(Image
.FromStream(imgStreamPic)),
Mask =
MyAxHost.IPictureDisp( Image
.FromStream(imgStreamMask));
ConfigureButton.Picture = Pic;
ConfigureButton.Mask = Mask;


И простой класс

public class MyAxHost : System.Windows.Forms .AxHost
{
public MyAxHost() : base( "59EE46BA-677D-4d20-BF10-8D8067CB8B33"
){ }
public static stdole.IPictureDisp IPictureDisp(System.Drawing.Image
Image)
{
return ((stdole.IPictureDisp)(AxHost
.GetIPictureDispFromPicture(Image)));
}
}

И ConfigureButton имеет картинку.

SharePoint continued...

По просьбе - скриншоты:




Настройка поля формы.




Форма с использованием RTF-редактора FCKeditor.




Веб-часть со списком карточек.

среда, июля 13, 2005

Testing BlogJet

I have installed an interesting application - BlogJet. It's a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com/

"Computers are incredibly fast, accurate and stupid; humans are incredibly slow, inaccurate and brilliant; together they are powerful beyond imagination." -- Albert Einstein

������ ��-������ �� �����.

Хренотень - русский текст не постит, картинки не постит.

суббота, июля 09, 2005

Yukon

Поставил бету 3, пришедшую с 2005-й Студией. Нагрузил на него всё - счётчик трафика, SharePoint и проч.
Под SharePoint'ом задолбал вконец - памяти отъедает по 200-300 Мег, задумывается на 100% процессора на минуту-другую при простейших действиях. Мрак...
В итоге перенёс всё на старый добрый SQL 2000 sp3. Причём пришлось именно переносить - базы просто так через detach/attach уже не переставляются. За хрен так сделали, неясно. Как там другая функциональность, даже не пробовал.
Таблицы свои (трафик и др.) перегнал через DTS, а таблицы Sharepoint'а как-то хитро сделаны, что новый DTS обломался - пришлось новые базы заводить. Благо, никакого особого содержимого у меня там не было. Но целый вечер, считай, провозился.

ASP.NET

Пока ковырялся с SharePoint'ом, понял, что из всего .NET самое крутое - ASP.NET .
За всё время не нарисовал ни одной формы в студии или ещё как - всё только на C#.
Html не понадобился совсем (не считая совсем маленьких фрагментиков при рендеринге элементов). Правда, употребил бесплатную разработку, а там много html-ного.

SharePoint

Целый месяц, считай, провозился с этой фиговиной.

Если разобраться и вникнуть, то работать можно.

В итоге соорудил отдельный продукт - hse-списки. Точнее даже, формы, похожие на встроенные, но с расширенной функциональностью:



  • Выборка данных из разных списков, с разных WSS-сайтов на одном сервере.

  • Фильтрование данных для списков выбора по значениям полей формы.

  • Присваивание полям формы данных из полей источника данных.

  • Расширенный html-редактор (пристроил freeware FCKeditor).

  • Комбинирование полей в источнике для выбора (заказчику пока не показываю - много всяких следствий).

суббота, июня 04, 2005

PostgreSQL continued...

Потребовалось перенести имеющуюся базу на другой компьютер. Точнее, на другую ось на этом же компьютере. Оказалось весьма нетривиальной забавой:

1. Установил экземпляр СУБД на новой системе.
2. Придушил сформированный сервис (установить его с подключением к имеющейся базе не удалось) - отключил автозапуск.
3. Сформировал новый сервис с подключением к имеющейся базе.
4. Наставил права для пользователя postgres на все каталоги data имеющейся базы (в т.ч. по связям на другие диски) - практически все права.

В итоге стала работать запись данных tmeter, но пришлось отключить запись hosts - загрузка процессора возрастает со страшной силой. Никаких сообщений по этому поводу не обнаруживается.

Посмотрю ещё, как будет форум работать, а то придётся обратно отползать на MS SQL (благо, есть годовая триалка Yukon'а).

Форум никак не работает - но не из-за PostgreSQL, а из-за .NET b2, похоже.

Так и перелез обратно на Yukon - целый день, блин, провозился. DTS 2005 пока немного освоил - изматерился. Кривая пока штуковина. Зато сам сервер явно лучше стал - и ресурсов жрёт поменьше, и побыстрее работает (строго на глаз).

воскресенье, мая 22, 2005

Список файлов на FTP-сервере при помощи FAR'а

Озаботился задачей получить список файлов на фтп-сервере - чтобы использовать в качестве плей-листа.
Открыл FarNavigator, зашёл на сервер, запустил S&R (в надежде на его плагин) - и обломался.
Пришлось городить скрипт. Тут тоже оказалось не всё просто. Вот лучшее, что удалось поначалу соорудить:
Sub Script_OnOpen(From)
Far.PostKeySequence far.CreateKeySequence("CtrlF CtrlIns Esc Down"),true
Dim fso 'as FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
set list=fso.OpenTextFile("G:\Music\list.txt",8,True,False)
list.WriteLine Far.Clipboard
end sub

Будучи посаженным на клавишу, этот скрипт даёт возможность получить в указанном файле список имён файлов на панели.
Однако Far.Clipboard выдаёт значение, попавшее туда на предыдущем вызове. Поэтому на последнем файле надо вызывать два раза, а потом вычищать руками мусор из начала списка.

После размышлений поменял вызовы местами и получился макрос "CtrlF CtrlIns Esc Down F11 z e", где на "F11 z e" вызывается скрипт без Far.PostKeySequence .
Изврат, конечно, но работает.

Кстати, средства обработать таким образом только помеченные файлы не придумал :-(

И ещё - плагин FTP от Мамаева не годится - на CtrlF выдаёт имена в кавычках.

В конце концов
Макрос стал такой: CtrlF Down F11 z e Esc, а на F11 z e вызывается такой скрипт:
Sub Script_OnOpen(From) 'CtrlF CtrlIns Esc
Dim fso 'as FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
set list=fso.OpenTextFile("G:\Music\My Playlists\list.txt",8,True,False)
ss= trim(getCommandLine)
If ss="" then
Far.Msg "Command line empty :-("
exit sub
End If

'Чистим кавычки
if mid(ss,1,1)="""" then ss=mid(ss,2)
if mid(ss,len(ss)-0,1)="""" then ss=mid(ss,1,len(ss)-1)
list.WriteLine ss
end sub
function getCommandLine() 'Присоветовал А.Гутман
set b = FARAPI.newBlock()
b.allocate 1024
FARAPI.Control Cnst.INVALID_HANDLE_VALUE,Cnst.FCTL_GETCMDLINE,b
getCommandLine = b.asString(0)
end function


При этом можно и с плагином Мамаева работать.
В итоге получается файл со списком полных имён без всяких дурацких кавычек. Этот файл можно использовать как плей-лист, а можно и переименовать в m3u этим вот скриптом:
function Script::OnOpen(){
var ib //: IInputBox
=CreateInputBox();
ib.Title="New file name"
ib.Prompt="Rename '"+Far.Panel.Current.Name+"' to "
var fn //: String
=Far.Panel.Current.Path
var Fso //: FileSystemObject
= new ActiveXObject("Scripting.FileSystemObject")
var text //:TextStream
=Fso.OpenTextFile(fn)
ib.Text=text.ReadLine() + ".m3u"
if(ib.Show()){
text.Close()
Fso.GetFile(fn).Name = ib.Text
}
}

А можно и преобразовать в wml (плейлист для WMP) вот этим скриптом:
function Script::OnOpen(){
var fn //:String
=Far.Panel.Current.Path
var ib //: IInputBox
=CreateInputBox();
ib.Prompt="Play List name"
ib.Title="Create WMP-playlist from ["+fn+"]"
ib.History="wpls"
var Fso //: FileSystemObject
= new ActiveXObject("Scripting.FileSystemObject")
var text //:TextStream
=Fso.OpenTextFile(fn)
var ss //: String
=text.ReadLine()
ib.Text=ss;
if(!ib.Show()) return; //Не желают...
//reopen
text.Close(); text=Fso.OpenTextFile(fn)
var wpl //as DOMDocument
= new ActiveXObject("Msxml2.DOMDocument")
var smil //: IXMLDOMElement
=wpl.documentElement=wpl.createElement("smil")
var head //: IXMLDOMElement
=wpl.createElement("head")
var title //: IXMLDOMElement
=wpl.createElement("title")
var ListName=ib.Text
head.appendChild(title)
smil.appendChild(head)
var body //: IXMLDOMElement
=wpl.createElement("body")
var seq //: IXMLDOMElement
=wpl.createElement("seq")
var media //: IXMLDOMElement
var src //: IXMLDOMAttribute
while (!text.AtEndOfStream){
ss=text.ReadLine()
if(ss!=""){
media=wpl.createElement("media")
src=wpl.createAttribute("src")
src.value=ss
media.attributes.setNamedItem(src)
seq.appendChild(media)
}
}
text.Close()
body.appendChild(seq)
smil.appendChild(body)
title.text=ListName
wpl.save(ListName+".wpl")
}

четверг, мая 19, 2005

cBlog Localization

Ну, мрак.

Собственно, не блог - он то, в итоге, вполне рабочим оказался, а вся система программирования для Sharepoint'а - документация под гордым названием SDK весьма куцая, подробности устанешь искать. Искать, оказалось, лучше всего Googl'ем.
Вплоть до того, что в документации наврано (или перепутано) кое-чего.

Долго говорил всякие непечатности, но что-то соорудил. Спасибо Студии 2005 - хоть и бета, но 2003-ю обгоняет по любым показателям. К сожалению, по потреблению ресурсов тоже обгоняет, и весьма сильно

Отвёз заказчику, тот обещает даже денег заплатить.

Осталась висячей (не работает вовсе) фича RSS - буду разбираться.

Долго вдохновлялся, но разобрался и с этой фигнёй в итоге. Теперь работает и в ИЕ, и в FireFox.
Вот чего получилось:



Щас куда-нить пристрою, может, кому надо будет... Пристроил вот здесь.

четверг, апреля 21, 2005

Веб сервисы на халявном хостинге

Давно собирался организовать перегонку данных диспетчера страничек с снрвера на локальный компьютер.
Сделал веб-сервис, который по запросу выбирает из базы по одной записи и шлёт их запросившему. Клиента сделал в виде консольной программы, которая данные спрашивает, загоняет в базу (конечно, PostgreSQL), посылает запрос на удаление из базы на сервере, отмечает в местной базе, что запись удалена. Вроде бы, работает довольно шустро (примерно 1 запись в секунду). Одна незадача - пока всё это дело сочинял на локале, сочинилось под 2-ю версию .NET - пересылалась DataTable с запрошенным количеством записей. Всё красиво работало (на локале, опять же ;-) ).
При установке на Brinkster выяснилось, что там версия 1.1, а в ней таблицу пересылать низя. Пришлось делать костыли и обмениваться DictionaryEntry[], паковать/распаковывать и урезать пересылку одной записью - ХЗ, как оно двумерные массивы есть будет...

пятница, марта 04, 2005

PostgreSQL

Любопытная системка. Есть, конечно, недоработки, но не смертельные.
OleDB и .NET провайдеры работают нормально. Привинтил базу к счётчику трафика tMeter. Нормально работает, кроме одной таблицы, traffic. Написал разработчику, пускай правит.
Надо бы теперь отчёт соорудить по таблице packets. На досуге для тренировки какой-нить заняться надо.

вторник, января 18, 2005

MS Office 2003 Smart Tags

Давно зрела мысль заняться смарт-тэгами для Офиса 2003. По крайней мере, адаптировать имеющийся "Сумма прописью". Случился облом : управляемые модули требуется регистрировать специальным образом в двух местах - в реестре и в системе обеспечения политики секретности .NET. Мало того - при наличии на компьютере двух версий .net необходимо регистрироваться в обеих. Может, только в последней из них, но проверять этого не хочется. Не совсем ясно при этом, как делать пакет установки: значения в реестр записать можно, а регистрировать в настройках безопасности надо при помощи утилиты caspol.exe, да ещё разбираться с установленными версиями дотнет. Без дополнительного модуля - никак не обойтись. Стоит ли овчинка выделки - ХЕЗ.


For a long time the idea ripened to engage in SmartTags for Office 2003. At least, to adapt available The sum in words. Has happened oblom : manageded modules are required to be registered in the special image in two places - in registry and in security policy of .NET Framework. Whether it is necessary to be soared?


Music and .NET

Сделал отдельную страничку с околомузыкальными примочками, про которые писал отдельно.
Понатыкал описание системы в разные софт-сборники.

Recently I has made a separate page with musical lotions and has placed the description in different soft-collections.



-= In my WMP: I'm Crazy 'Bout My Baby by Louis Armstrong =-

Testing BlogJet

I have installed an interesting application - BlogJet. It's a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com


"Computers are useless. They can only give you answers." -- Pablo Picasso


 


ÕÇ, ïîñòàâèë ÷¸-òî, ïîãëÿäèì.

воскресенье, января 02, 2005

четверг, декабря 02, 2004

Плагин Now playing - 2

Правильно - расширение для MS Internet Explorer.
Оно же утилита ком. строки (хотя и форма на самом деле).
Устанавливается в меню Tools браузера, тут же можно и настроить оперативно. В Maxthon настроил на вызов через "внешние утилиты". В форумах пользоваться довольно удобно - сделал для них шаблон с тегами:

-= Слушаю [I][B]WMP[/B][/I]: [B][COLOR=blue]{0}[/COLOR][/B] от [B]{2}[/B] =-

Выглядит, вроде, ничего.
Описание сунул на ту же страницу, что и предыдущие плагины.

четверг, ноября 25, 2004

Плагин Now playing

Форматирует и вставляет в буфер обмена данные о музыке, проигрываемой в настоящий момент проигрывателем Windows Media Player вер. 9,10.
Сбылась мечта человечества...
Информация считывается из xml-файлов, сформированных вчерашним плагином WmpNow.
Для форматирования информации используется форматная строка, аналогичная форматной строке .Net-ного метода String.Format().

Получается что-то вроде этого:

[WMP 9.0.0.3128]: Here Comes The Sun [The Beatles]

Можно по-разному отформатировать, в рамках строки формата - довольно широкие рамки там.

Используется диспетчер .NET плагинов для MS Office.

Страничка про оба плагина - здесь.

среда, ноября 24, 2004

Плагины для WMP

Покопался в хелпе от WMPSDK и соорудил плагин для Media Player'а (там прилагаются визарды для Студии, городящие программы на C++). Пользы особой от такого плагина не увидел, но подумал о возможности прицепить через него дотнетовскую программку.
Просто сказать, но сделать - мама, не горюй. Кончилось загрузкой в этом плагине СОМ-компонента на C#. Жуть, как люди на этих плюсах чего-то большое пишут? Но получилось ничего так - в дотнетный модуль передаётся объект, который является действующим WMP, в который и загружен плагин. Все характеристики доступны по объектной модели из wmppia.dll, обработчики событий цепляются и вызываются.
Была мысль сделать в этом нетном модуле какой-нить сервер, отдающий информацию из плеера. Оказалось, что Remoting - немного про другое, а городить Web-сервис непонятно пока зачем - не хочется. Остановился на выводе информации в какое-нибудь общедоступное место для последующего считывания теми, кому она нужна.
Таких мест оказалось два - очереди сообщений и файловая система. Реализовал работу с обоими - если нет в системе сервиса "Message Queuing" с локальной очередью "WmpNow", то вываливаем инфу в xml-файлы. Пока реализовал вывод информации о audio-единицах - с прицелом сделать в Outlook вставку о проигрываемой сейчас мелодии. А то в каком-то WinAmp есть, а для WMP - нет.
Положил эту штуковинку на Трипод - wmpnow.zip - там и кратенькое описание есть.

Как это применять, надеюсь, завтра сделаю.

P.S. Сделал и применялку, и страничку с описанием.

понедельник, ноября 08, 2004

Офисные плагины

Доделал новую версию системы .NET-плагинов для MS Office.
Добавил разные феньки, сделанные в плагинах:
- сохранение конфигурации в xml-файлах посредством сериализации
- "красивые" сообщения с помощью баллона ассистента (если есть)
- не помню ещё чего...

Повнимательнее почитал статью про конфигурации плагинов и сделал нечто похожее:



Поподробнее это хозяйство описано здесь и here
Запостил также на gotdotnet.ru и gotdotnet.com.

суббота, октября 30, 2004

Видео-музыкальное

Прикупил тут в Интернет-магазине (оказалось - пираты, даже на каждый диск отмазку записали) всякой кино-музыки (не музыки из кино, а музыка с изображениями - клипы, концерты). За копейки, но качество вполне пристойное.
В частности, на двух дисках концерт в Лужниках "КИНОпробы". Совершенно растрогали ребята из Воплей Видоплясова и Zdob с цыганами.

Который уже час с женой сидим, смотрим и слушаем - даже про клеветанье Латыниной позабыли.

пятница, октября 29, 2004

Локальный поиск - 3

Обнаружился в рассылке ещё один локальный поисковик - COPERNIC DESKTOP SEARCH (http://www.copernic.com/). Обещан поиск в почте и контактах (Outlook и Outlook Express) и в адресной книге Windows. Также обещано индексировать текстовые, музыкальные файлы и картинки.
По методе работы очень похож на остальные - резидент размером ок. 24 Мб дожидается паузы в работе пользователя и остальных сервисов, во время которой и занимается индексированием. Примерно за 3 дня набрался индекс размером около 150 Мб (в настройке были указаны практически все возможные источники информации).
Поиск проводится по ключевым словам, быстро. Ищется в категориях источников (почта, контакты, медиа, видео, pictures и др.) раздельно (в отличие от Гуглёвого поисковика).
Недостаток один, но крутой - почтовые сообщения выводит в неверной кодировке (и никакой настройки этого дела не обнаруживается). Поиск в почте отключил.
Остальные источники выдаются нормально. Из музыкальных файлов выбирает и индексирует названия, артистов, композиторов (лирику не индексирует).
Итог - оставил в списке источников для индексирования музыку, картинки, видео и контакты (с которыми Гуглёвый в нынешнем состоянии не работает). Индекс при этом принял размер ок. 65 Мб.


Теперь живу с двумя поисковиками - Google Desktop Search с индексированием всего, что он может и Copernic Desktop Search с ограниченными настройками источников).

Локальный поиск - 2

Закончил попытку потестировать встроенный в Windows Indexing Service. Какого-то окончательного варианта не дождался: индекс достиг размера 1200 Мб, сервис наковырял более 340 тыс. документов. (Что он под этим разумеет - понять сложно).
Язык запросов весьма причудливый, какие-то доморощенные регэкспы, к которым надо долго пристраиваться. Поиск "интуитивный" (задать интересующие слова, без всяких регэкспов) даёт результаты вовсе непредсказуемые - вываливает документы, этих слов не содержащие, и не даёт документов с поисковыми словами (может, потому, что индекс ещё недостроен).
Нет никаких намёков на индексацию почты.
Итог - тесты закончил, индекс выкинул, сервис остановил. Тем более, Microsoft обещает к концу года представить свой локальный поисковик (на базе LookOut, надо полагать?).

суббота, октября 23, 2004

Сравнительный анализ программ для локального поиска.

После объявления поисковика Google Desktop стало интересным сравнить его с другими подобными. Провёл изучение трёх систем.

1. Google Desktop - http://desktop.google.com
2. LookOut - http://www.lookoutsoft.com/Lookout (куплена нынче Microsoft)
3. Indexing Service - системный поисковик.

Первые два обещают поиск в почте (второй - только в Outlook) и в любых, практически, файлах на диске.
Третий про почту как-то ничего не обещает, что странно.
Все три для быстрого поиска строят индексы.

Google Desktop строил индекс 4 дня, совсем незаметно для производительности. В настройках указаны все возможные источники информации. Получился индекс размером ок.550 Мб. Проиндексировано 81 678 документов (почта - 31 993, Web history - 10 606, файлы - 39 079). Не проиндексировались текстовые файлы, однако при их изменениях (создание, редактирование) они попадают в индекс. Похоже на глюк беты.
Обновление индекса происходит быстро (сразу при появлении "окна" в процессорном ресурсе), как по файлам, так и по почте.
Скорость поиска - "световая" (показывает какие-то цифры типа 0,28 сек, отрисовка страницы в браузере присходит дольше).
Памяти хозяйство (5 процессов) съедает ок. 20 Мб (пополам оперативка и своп).
Для поиска используется форма в браузере (вполне привычная по "большому" Гуглю).

LookOut строит индекс быстро, часа полтора. Сколько проиндексировал документов, не говорит, в процессе наблюдения можно узнать количество обработанных папок - ок. 12 000 (сюда входят папки Outlook и папки файловой системы). Индекс получился размером ок. 210 Мб. Не проиндексировались файлы на диске, ни текстовые, ни офисные (по крайней мере, поиск по словам этих файлов не даёт). Почта проиндексировалась вся, недостатков при поиске в почтовых документах не обнаружено.
Обновление индекса регулируется параметрами (от 10 минут до нескольких месяцев), однако дождаться явления не удалось, запустилось только кнопкой на форме с полной переиндексацией.
Скорость поиска также большая, результаты выдаются практически мгновенно.
Памяти в составе Outlook съело около 100 Мб (оперативной и виртуальной).
Для поиска используется Win-форма (форма как форма, ничего плохого).

Indexing Service на настоящий момент строит индекс третий день, рассказывает о 75000 проиндексированных документах, индекс имеет размер 340 Мб. Можно полагать, что окончательный размер будет меньше, чем у Google Desktop. Что там индексируется, так и не понятно. Пробный поиск даёт совершенно чумовые результаты - выдаются документы, запрошенных слов не содержащие. Запрос выполняется сравнительно быстро (только, что толку-то?) Примеры запросов из хелпа проясняют мало что.
Памяти использует 20-22 Мб (примерно пополам).
Для поиска есть форма в mmc (довольно убогая), результаты запроса выводятся там же. В хелпе помянута возможность запросов через веб-формы.

Промежуточные итоги.
1. LookOut - выкинуть. Пущай MS повозится года два (ну уж, и прикупили чудо).
2. Google Desktop - пускай живёт и развивается. Будет основным инструментом.
3. Indexing Service - пускай закончит постройку своего индекса, в Гугле поискать, как этой фигнёй пользоваться, потом решить, как с ней быть.

вторник, октября 19, 2004

Музыкальное - 3

Пристроил ещё одну страничку с коллекцией вариантов песни Greensleeves. Получилась страница длиннющей, очень популярная мелодия, известная с 1500 какого-то года. Лежит здесь - на страничке Greensleeves

воскресенье, октября 17, 2004

Музыкальное - 2

Пристроил другую страничку с коллекцией вариантов песни El Condor Pasa.
Чаще известна в исполнении Simon & Garfunkel. Оказалась гимном инков.
Накачал отовсюду примеров, картинок, текстов. Лежит здесь - на страничке El Condor Pasa

вторник, октября 12, 2004

Музыкальное

Пристроил страничку с коллекцией вариантов песни My Way. Чаще известна в исполнении Элвиса Пресли или Фрэнка Синатры. Накачал отовсюду примеров, картинок, текстов.
Лежит здесь - My Way.html



OlkForward

Соорудил (в общем, для своих целей) плагинчик для пересылки почты в Outlook'е.
Запускается под диспетчером .NET-плагинов (http://dyakovkm.tripod.com/dnet/offnet.htm)

От встроенной в Outlook пересылки отличается отсутствием всяких добавок в теме и тексте сообщения (всяких там "FW:" и "Исходное сообщение...").
Групповая пересылка выполняется поштучно (а не кучей аттачментов, как в стандартной функциональности).
Разместил описания и архив на своей страничке на Триподе (http://dyakovkm.tripod.com/office/olkfw.htm) и на на GotDotNet (http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=5c2bdb73-4fa8-4ac7-aa4a-754a1f0e2e76 и http://www.gotdotnet.ru/Downloads/Examples/77891.aspx)

В новой версии системы (см. тут) включил в дистрибутив.

суббота, сентября 25, 2004

Облом с Borland Together

Прочитал в журнале рекламу - супер-пупер UML примочка для Студии.NET. Нашёл генератор ключей, скачал ХЕЗ сколько мегабайт, поставил - а не работает :(

вторник, сентября 21, 2004

Проверка плагинов для постинга в блог

Запощено сие с помощью Outlook 2003 и плагинов к нему - NewsGator+Blogger Plug-in v.2.0.1.2.
Формат д.б. "текст", "html" обламывается, "rtf" вовсе отбрасывается сервером.

среда, августа 25, 2004

MS SQL Server 2005

Результаты краткого изучения

Объект:

Дистрибутив en_SQL_2005_DEV_Beta2_852.02, полученный с сайта http://msdn.microsoft.com.
Выполнена полная установка сервера на компьютеры с различными конфигурациями (Celeron 667 MHz/384 Mb и Pentium 4 2.4 GHz/640 Mb) под управлением Windows 2003.
Установка выполнена в режиме Side-by-side с сервером MS SQL Server 2000.

Общие впечатления:

  1. Сервер базы данных нормально функционирует на обеих конфигурациях на отдельских задачах (загрузка данных в хранилище). Быстродействие нуждается в специальном измерении.
  2. Средства управления и разработки на базе Whidbey функционируют также на обеих конфигурациях, однако работа с ними на Celeron 667 практически невозможна из-за низкой скорости.
  3. Базы предыдущей версии СУБД подключаются (attach…) и нормально функционируют под управлением новой версии.

Database Engine

  1. Управление и разработка производится через MS SQL Server Management Studio.
  2. Все программные объекты (триггеры, хранимые процедуры, пользовательские типы) могут быть написаны на .NET языках.
  3. Расширена поддержка XML – введён соответствующий тип данных, документы можно хранить в полях таблиц. Поддерживается язык запросов XQuery.
  4. Объектная модель Distributed Management Objects (DMO) заменяется (постепенно) на System Management Objects (SMO). Чем отличаются, информации пока нет. Можно, в принципе, установить различия рассматриванием библиотек в Студии.
  5. Загрузчик данных (без обработки OLAP-объектов) отрабатывает без ошибок ( в т.ч. блок создания объектов базы через DMO).

DTS

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

Архитектура

  1. Две области data flow и control flow. Хорошо это или плохо – сразу сказать сложно. Непривычно.

Объекты и программирование

  1. Все существовавшие компоненты переписаны на .NET, функциональность часто расширена, иногда заметно изменена. Добавлено много новых.
  2. Каждый из объектов может читать данные из нескольких источников и писать в несколько источников.
  3. Добавлена возможность программировать собственные элементы (провайдеры данных, преобразователи и т.д.). Для написания компонентов используются средства .NET.

Разработка и распространение

  1. Для работы с пакетами (проектирование, модификация и т.п.) используется BI Development Studio – пакет на базе Visual Studio. Разработка идёт в рамках проектов (как и всё в Студии), коллективная работа, контроль версий, отладка и т.д.
  2. Вместо средств WSH (точнее, наряду с ними) можно использовать «макросы» на VB.NET (штатное средство Студии), значительно более мощное средство.
  3. Хранятся пакеты в файлах формата XML и в таблице базы данных на сервере.
  4. Для установки пакетов и изменений к ним генерится специальная утилита (wizard).

OLAP

Движок (Engine)

  1. Добавлены триггеры (синхронное исполнение хранимых процедур для проверок значений и выдачи предупреждений) и трассировщики (trace) для асинхронного измерения производительности и разрешения проблем.
  2. Введена возможность использовать xml-описания объектов базы для их создания, модификации и т.п. (Называется это дело почему-то скриптами).
  3. Можно установить несколько экземпляров на одну машину (как SQL Server).

Средства разработки

  1. Используется BI Development Studio – пакет на базе Visual Studio. Разработка идёт в рамках проектов (как и всё в Студии), коллективная работа, контроль версий, отладка и т.д.
  2. Все визарды и редакторы (кубов, измерений и др.) переработаны, интегрированы в Студию. Все возможности BI accelerator’а для OLAP 2000 входят в стандартные возможности (насколько запомнилось).
  3. Добавлено много шаблонов для различных объектов (cubes, dimensions, key performance indicators (KPIs), calculated members, named sets, calculated cells, actions, and Multidimensional Expressions (MDX) queries). Можно создавать собственные шаблоны и сохранять их в xml-формате.

Программирование

  1. Полная интеграция с .NET (поддержка XML и SOAP, языков .NET в триггерах и хранимых процедурах, управляемый доступ для администрирования и клиентский доступ).
  2. Decision Support Objects (DSO) заменён на Analysis Management Objects (AMO). DSO пока тоже поддерживается.
  3. Введён Object Definition Language (ODL), основанный на xml-синтаксисе, позволяющий описывать объекты и манипулировать ими.

Dimensions

  1. Базируются на атрибутах (соответствуют колонкам таблицы).
  2. Можно иметь множественные иерархии в одной оси (напр.,
    календарное время и фискальное время).
  3. Поддерживаются отношения многие-ко-многим между осями и
    фактами через промежуточную таблицу.