Gandjustas' blog


Видеозаписи докладов с ноябрьской встречи RUSUG

Внезапно у меня оказались записи докладов со встречи, которая проходила 25 ноября 2013 года.

Доклад Михаила Бондаревского.

 

Доклад Сергея Слукина.

читать дальше...
добавлено: 07 авг 16 просмотры: 1341, комментарии: 0



10 вещей, которые надо знать при использовании jQuery в SharePoint

Для чего нужен jQuery в SharePoint? Обычно его используют для четырех целей:

  • Вызывать код JavaScript в момент загрузки страницы с помощью $(document).ready.
  • Использовать Ajax функции для доступа к данным на сервере.
  • Использовать готовые плагины,такие как tooltip или tabs, для того, чтобы расширить функционал сайта.
  • Проводить некоторые манипуляции с объектной модели документа (DOM).

Если Вы собираетесь использовать jQuery на страницах SharePoint, то вам нужно знать следующие вещи:  

 

1. Используйте mQuery и RequestExecutor в простых случаях

Если у вас простой случай, то Вы можете использовать библиотеку mQuery для манипуляции DOM и RequestExecutor для ajax запросов. Кроме того, вместо Ajax запросов гораздо выгоднее использовать JSOM и TypeScript для клиентской разработки. Об этом я писал ранее.

Если Вы, все таки, решили использовать jQuery, то вам нужно помнить следующее:

2. jQuery(document).ready срабатывает не вовремя

Это происходит потому, что $(document).ready взрывается при событии DOMContentLoaded. А это события создано для тех случаев, когда весь контент страницы загружается с сервера. Оно происходит после того как браузер скачал всю страницу, связанные файлы и всё распарсил. SharePoint использует механизмы динамического формирования страницы, когда скрипты в теле страницы запускаются и формируют части страницы. В этом случае использовать DOMContentLoaded, отрабатывает до того как сформирована страница. Гораздо более надежный способ вызова п...

читать дальше...
добавлено: 03 авг 16 просмотры: 1363, комментарии: 0



Я выступаю на DevCon 2014

Немного запоздалый, но все же анонс.

28 и 29 мая я буду выступать на конференции DevCon 2014. В этот раз у меня целых два доклада. Первый (28 мая в 17:10) на тему новых возможностей BI в SharePoint 2013, где я буду рассказывать рол PowerPivot и PowerView. Второй доклад (29 мая в 10.30) про BI в облаках с применением PowerBI и Office 365.

Приходите на доклады, кто будет присутствовать на конференции или смотрите трансляцию.

читать дальше...
добавлено: 02 авг 16 просмотры: 1255, комментарии: 0



Загрузка скриптов в SharePoint

В прошедшем недавно семинаре про клиентской разработке в SharePoint (записи – по ссылке) я показывал как сделать клиентский скрипт, который выполняет некоторый код после окончания загрузки страницы в SharePoint.

Эта, казалось бы, простая задача далеко не тривиально реализуется в SharePoint.

Причины

    1. SharePoint формирует интерфейс динамически. Многие блоки добавляются на страницу по событию body.onload. Это событие возникает позже, чем DOMContentLoaded. Именно это событие перехватывает jQuery.ready. Поэтому использование jQuery часто не приводит к хорошему результату. Подробнее об использовании jQuery в SharePoint.
    2. Minimal Download Strategy (MDS), появившийся в SharePoint 2013, загружает страницу один раз, потом обновляет блоки страницы, поэтому нужно выполнять дополнительные действия, чтобы скрипт выполнился после загрузки страницы под MDS.
    3. Механизм загрузки скриптов, о котором я писал ранее, требует чтобы скрипт самостоятельно оповещал об окончании выполнения.

Для скриптов в виртуальной файловой системе SharePoint

Чаще всего скрипты SharePoint деплоятся как файлы в виртуальной файловой системе. Это прекрасно работает как в on premises, так и в online.

Для размещения скриптов на странице используется контрол ScriptLink, в таком виде:

<SharePoint:ScriptLink Name="autofill.js" runat="server" OnDemand="true" LoadAfterUI="true" Localizable="false" />

или с помощью CustomAction ScriptLink в элементе решения

<CustomAction Location="ScriptLink" ScriptSrc="~site/Extension...
читать дальше...
добавлено: 26 июл 16 просмотры: 1083, комментарии: 0



Записи докладов по Business Intelligence c DevCon 2014

На конференции DevCon, которую ежегодно организует Microsoft, в 2014 году я выступал аж с двумя докладами, оба были на тему Business Intelligence в SharePoint.

Недавно были опубликованы видеозаписи. Выложу их в блоге, чтобы проще было найти.

Первый доклад по Power Pivot в SharePoint 2013 (on-premises), в котором я показываю пример мини-erp решения для управленя отделом, которое можно собрать за несколько часов совершенно без программирования.

Второй доклад посвящен возможностям PowerBI в Office 365. Особое внимание было уделено инструменту Power Query, его использованию в Excel, а также настройке гибридной среды для получения доступа из облака к данным on-premises.

А вы используете в своей работы BI инструменты SharePoint? Напишите в комментах в каких сценариях применяли или почему не применяли.
читать дальше...
добавлено: 19 июл 16 просмотры: 1046, комментарии: 0



Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server с помощью LINQ

Доклад с таким длинным и непонятным названием я читал на SQL Server User Group 10 сентября в Москве. Ниже слайды запись доклада:

К сожалению, как обычно я не показал все что хотел, часть материала не попала на видео запись. Но я восполню этот недостаток.
Как вы думаете, можно ли на Linq делать запросы, которые работают быстрее рукопашных? Оказывается да, и очень просто.
Например надо сделать функцию, которая отбирает заказы по дате отгрузки. Если параметр указал, то выбрать заказы за эту дату. А если не указана дата, то выбрать все заказы, у которых дата отгрузки пустая. Обычный разработчик напишет такую процедуру:

CREATE PROCEDURE [dbo].[GetTransactionsByShipDate]
    @shipDate datetime
AS
    SELECT t.Id, t.ProductId, t.TransactionDate 
       from Transactions t
    where
        (@shipDate is not null 
          and t.ShippedDate = @shipDate) 
     or (@shipDate is null 
          and t.ShippedDate is null)

Эта процедура подвержена parameter sniffing problem. Проблема заключается в том, что план процедуры генерируется один раз при первом вызове с учетом фактических параметров при вызове. Если при первом вызове ShipDate был NULL (низкая селективность), то сгенерируется план с Index Scan. Если же первый вызов был с конкретным значением даты, то получится Index Seek, который будет неэффективно работать для значений с низкой селективностью.
Простой тест:
DBCC FREEPROCCACHE
GO

EXEC    [dbo].[GetTransactionsByShipDate] NULL
GO

declare @shipdate datetime = ge...
читать дальше...
добавлено: 15 июл 16 просмотры: 1722, комментарии: 2



7 способов улучшить поля в формах SharePoint 2013

Кастомизация форм – очень больная тема в SharePoint. InfoPath фактически умер, новые способы кастомизации появятся не раньше следующего релиза (назначенного на конец 2015 года), а для использования SPServices нужен jQuery старой версии, что само по себе несет проблемы, так еще и требует знания отображаемых имен полей, что делает решение ненадежным. Подробнее в моем курсе по клиентской разработке SharePoint.

Создавая TypeScript-определения для клиентской библиотеки SharePoint  сделал несколько примеров полей. Недавно я провел большой рефакторинг и выделил кастомные поля в отдельные, повторно используемые функции.

Все функции содержатся в файле typescripttemplaes.ts. Тем, кто не пользуется TypeScript (зря!), можно скачать .js файл в том же каталоге.

Как пользоваться typescripttemplates:

  1. Скачать файл и добавить .js в проект
  2. Сделать свой файл скрипта для полей, такого вида:
    module _ {
        function init() {
            CSR.override()
                .lookupAddNew("Master", "Add New Master item", true)
                .register();        
        }
    
        SP.SOD.executeOrDelayUntilScriptLoaded(init, "typescripttemplates.ts");
    
        SP.SOD.executeOrDelayUntilScriptLoaded(function () {
            RegisterModuleInit(SPClientTemplates.Utility.ReplaceUrlTokens("~site/YOUR_SCRIPT_PATH.js"), init);
        }, "sp.js");
    } 
  3. Вписать адрес скрипта в ReplaceUrlTokens и вызовы функций между .override() и .register()
  4. В атрибут JSLink поля\формы\типа контента вписать стро...
читать дальше...
добавлено: 13 июл 16 просмотры: 906, комментарии: 0



Подборка материалов о серверной оптимизации ASP.NET

В процессе подготовки семинара по оптимизации, который пройдет 30 октября 2014 года (регистрация тут - http://gandjustas.timepad.ru/event/150915/), я собрал ранее опубликованные материалы по серверной оптимизации ASP.NET приложений.
Серия постов о кешировании на хабре:
Оптимизация работы с данными:
Какие темы вам еще будут интересны?
читать дальше...
добавлено: 13 июл 16 просмотры: 852, комментарии: 0



Итоги 2014 года и планы на будущее

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

После айтеко я еще несколько месяцев работал part-time архитектором, параллельно развивая свой бизнес. С июля я работаю исключительно на себя и безмерно этому рад.

Последние три месяца 2014 года выдались очень “горячими”, было много проектов и все хотелось закрыть до нового года, чтобы в 2015 войти без хвостов и с кучей денег. К счастью мне это удалось, но пришлось отодвинуть на второй план блогинг и другие активности. Зато удалось заработать в два раза больше, чем я зарабатывал, работая в интеграторе.

Рынок в 2014-2015 году

Еще с начала 2014 года была очевидна тенденция снижения размеров проектов. Мало кто заказывал типичные корпоративные порталы с длинными циклами планирования и внедрения, все хотели быстро получить результат . В 2015 году эта тенденция усилится из-за экономического кризиса.

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

читать дальше...
добавлено: 08 июл 16 просмотры: 855, комментарии: 1



Как проектному менеджеру провалить продажу проекта

В статье речь пойдет о типовых ИТшных проектах, которые продают большинство компаний-интераторов\аутсорсеров\разработчиков.

Продажи проектов отличаются от продаж товаров и большинства услуг одним важным свойством – проект нельзя “пощупать” до того, как он реализован в какой-либо мере в силу достаточно большой уникальности. Поэтому большинство тактик, направленных на то, чтобы подсадить покупателя на товар\услугу, а уж потом брать с него деньги, в случае продаж проектов не работают.

Я уже довольно долго занимаюсь продажами ИТ-проектов и часто видел как прекрасно построенные, с точки зрения стратегии, продажи с треском проваливались на пресейле.

Способ №1

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

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

И это при том, что скорость в современном мире – один из важных факторов дифференциации от конкурентов.

Способ №2

Следу...

читать дальше...
добавлено: 04 июл 16 просмотры: 839, комментарии: 0