воскресенье, 24 июня 2018 г.

Сертификация. Сдан экзамен 70-486: Developing ASP.NET MVC Web Applications

На днях сдал экзамен 70-486: Developing ASP.NET MVC Web Applications. Вот описание на сайте Microsoft. Это был второй и последний экзамен для сертификации MCSA: Web Applications.


Немного про бэйджи и лого. Microsoft использует сторонний сервис от Arvato по адресу https://www.certmarketplace.com, там можно скачать свои лого, вроде этого:










Теперь они сотрудничают с https://www.youracclaim.com и их лого выглядят существенно интереснее:

Этот же экзамен я сдавал в составе70-492, который, по сути, наполовину состоял из вопросов 70-486. Но есть нюанс, раньше экзамен под этим номером имел в названии точную версию используемого фреймворка и назывался 70-486: Developing ASP.NET MVC 4 Web Applications. Т.е. нужно понимать, что материалы для подготовки для старой версии полностью не покроют вопросы экзамена, вопросы поменялись на 60%-70%. По моей оценке, книга Exam Ref 70-486 Developing ASP.NET MVC 4 Web Applications (MCSD) содержит около 30% от необходимого материала, при этом к прошлой версии экзамена применима цифра в 90%. Эта книга была переиздана. Будет много вопросов по ASP.NET Core, Azure и даже немного по Docker. Исчезло много вопросов по вёрстке, JavaScript и jQuery, но были по SignalR. Обратите внимание на деплой и особенно на конфигурирование самого веб-приложения ASP.NET Core, так как никакого web.config теперь нет (для IIS он еще конечно нужен). Изучите спецификацию OWIN, и утилиту коммандной строки .net core.

Список книг для подготовки:


Developing ASP.Net MVC Web Applications


ASP.NET Core Application Development: Building an application in four sprints
ASP.NET Core. Разработка приложений (Кстати, перевод норм)


ASP.NET Core Succinctly (Это бесплатная книга!)


ASP.NET Core MVC с примерами на C# для профессионалов














Architecting Modern Web Applications with ASP.NET Core and Azure (Бесплатная книга!)


Помимо книг я рекомендую курс PluralSight.com
Так же точно изучите статью с сайта доков Microsoft'а по Azure & Docker.

Теперь остался последний экзамен до Microsoft Certified Solutions Developer: App Builder, особенность в том, что теперь можно выбрать один из 12 экзаменов и это будет 70-532.



понедельник, 25 декабря 2017 г.

Сертификация. Сдан экзамен 70-483: Programming in C#

Сегодня сдал экзамен 70-483: Programming in C#. Вот описание на сайте Microsoft.


Оплатил картой 80$, сдавал в Софт Лайне. У них всегда большой выбор окон и дней для сдачи.
Для подготовки рекомендую:



Книгу от Microsoft можно купить здесь со скидкой в 30% если вы уже MCP.

Результаты надеялся получить получше, как всегда часть вопросов не относилась к моей практике.
Сам экзамен по C# мне не нужен был сертификации (для Web Developer 4), потом я шел по пути обновления. Сдав 
экзамен 70-492:Upgrade your MCPD: Web Developer 4 to MCSD: Web Applications — оставался всего один до MCPD: App Builder. Но Microsoft сменили пути сертификации и теперь всё сдавать снова. У меня был выбор, сдавать по html,css и пр. или по C#, я выбрал последнее.
Кстати, вот самый последний документ с описанием путей сертификации.

воскресенье, 6 августа 2017 г.

SharePoint 2016. Обновление подписок на сайты после обновления.

После апгрейда платформы с 2013 на 2016 версию в подписках на сайты остались ссылки на старый хост с именем portal-web-srv, у нового portal16. Это несмотря на то, что в DNS был создан псевдоним portal.

Вот как это выглядит:


Как видно, отображается ссылка на старый хост, а при переходе будет сообщение об ошибке.
В SharePoint подписки на отслеживаемый контент находится в списке Social (Социальные):


Этот список создается в каждой коллекции личных сайтов, по одному на пользователя.
Чтобы исправить ситуацию — надо изменить поле url для элементов этого списка, для этого воспользуемся powershell скриптом ниже. Он пробежится по всем коллекциям и найдет необходимый список, потом обновит все его элементы:

Add-PSSnapin Microsoft.SharePoint.Powershell

$rootAppUrl = "http://portal16"
$old = "portal-web-srv"
$new = "portal16"

$WebApp =  Get-SPWebApplication -Identity $rootAppUrl

foreach ($site in $WebApp.Sites)
{
    $web = $site.RootWeb

    $list = $web.Lists["Социальные"]

    foreach ($item in $list.Items)
    {
        $sPattern = '*' + $old + '*'
        $url = $item["Url"]
        if ($url -like $sPattern) 
        {  
            $nUrl = $url -replace $old, $new
            $item["Url"] = $nUrl
            $item.Update()
        
        }
    }
    $web.Dispose()
 }


После отработки имеем следующий результат:
 

вторник, 31 мая 2016 г.

SharePoint. Вывод всех полей UPSA используя Powershell

Ниже представлен небольшой скрипт для вывода основных полей из User Profile Service Application. Помимо тривиального перебора свойств Microsoft.Office.Server.UserProfiles.UserProfileManager, стоит отметить наличие столбца, в котором указано привязанное поле в Active Directory и направление синхронизации. Так же есть небольшая особенность вывода значений в файл.

# Почистить вывод
cls
# Получить оснастку
Add-PSSnapin "Microsoft.SharePoint.PowerShell"
# Указываем имя подключения (имя можно посмотреть по адресу:http://CA:port/_layouts/15/mgrdsserver.aspx?ApplicationID={GUID})
$connectionName = "MyConnectionName"
# Адрес коллекции
$siteUrl = "http://server:port"
# Получаем коллекцию
$site = Get-SPSite $mySiteUrl
# Получаем SPServiceContext
$context = Get-SPServiceContext $site
# Получаем все необходимые объекты
$profileConfigManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileConfigManager($context)
$syncConnection = $profileConfigManager.ConnectionManager[$connectionName]
$profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
$propertyList = New-Object System.Collections.Generic.List[System.Object]
# Формируем список
foreach ($p in $profileManager.properties) 
{    
    $propertyObject = New-Object PSObject
    # Системное имя
    $propertyObject | Add-Member Name $p.Name
    # Отображаемое имя
    $propertyObject | Add-Member DisplayName $p.DisplayName
    # Переводы на интересующие языки (Ru)
    $propertyObject | Add-Member LocalRU $p.DisplayNameLocalized[1049]
    # Переводы на интересующие языки (En)
    $propertyObject | Add-Member LocalEN $p.DisplayNameLocalized[1033]
    # Тип  
    $propertyObject | Add-Member Type $p.Type
    # Размер поля
    $propertyObject | Add-Member Length $p.Length
    # Синхронизируемое поле в АД
    $pm = $syncConnection.PropertyMapping[$p.Name]
    $propertyObject | Add-Member PropertyNameAD $pm.DataSourcePropertyName
    # Направление синхронизации   
    $propertyObject | Add-Member IsImportFromAD $pm.IsImport 
    # Обязательность
    $propertyObject | Add-Member IsRequired $p.IsRequired
    # Параметр конфиденциальности 
    $propertyObject | Add-Member DefaultPrivacy $p.DefaultPrivacy
    # Возможность переопределения конфиденциальности
    $propertyObject | Add-Member UserOverridePrivacy $p.UserOverridePrivacy
    # Возможность изменения пользователем
    $propertyObject | Add-Member IsUserEditable $p.IsUserEditable
    # Отображение на странице просмотра
    $propertyObject | Add-Member IsVisibleOnViewer $p.IsVisibleOnViewer
    # Отображение на форме изменения
    $propertyObject | Add-Member IsVisibleOnEditor $p.IsVisibleOnEditor
    # Индексация (в смысле доступен для поиска)
    $propertyObject | Add-Member IsSearchable $p.IsSearchable
    # Добавить в список
    $propertyList.Add($propertyObject)   
}
# Выводим список на экран в отдельном окне в сетке
$propertyList | Out-GridView
# Выводим список в текстовый файл с заголовками 
$propertyList | Format-Table -Property * -AutoSize ` | Out-String -Width 4096 ` | Out-File C:\FileName.txt

Имя соединения можно посмотреть в настройках UPSA, там может быть несколько соединений.



Обратите внимание на кусочек вывода в файл. Необходимо указывать "Out-String" чтобы строки не обрезались.

пятница, 29 апреля 2016 г.

SharePoint. Переводные столбцы списка.

В SharePoint есть возможность задать имя колонки так, чтобы оно меняло своё значение в зависимости от языка. В представлении списка и на форме:


Для того, чтобы столбец стал переводным – необходимо задать его имя выражением:
$Resources:fileWithDict,key;

Где:
$Resourcesпризнак выражения
fileWithDict – файл словаря, должен находиться по адресу C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\Resources” и иметь имя fileWithDict.ru-ru.resx, ru-ru это культура.
key – ключ по которому ищется значение в файле-словаре

Задать переводное имя столбца можно даже при создании через web-интерфейс, вместо имени надо вписать выражение:


На самом деле там не словарь, а xml. Но вы об этом не думайте и воспринимайте как словарь.

Чтобы система показала соответствующий язык – ей надо знать предпочтения пользователя.
Чтобы указать языковые предпочтения перейдите в раздел "Мой язык и регион" как на картинке:

 
Потом выбираем используемые языки. Приоритет важен:


С виду всё, но чтобы работало надо еще и включить дополнительный язык в свойствах узла.
Переходим в настройки узла:



















Выбираем языковые параметры:

















Отмечаем дополнительный язык. Чтобы появился дополнительный язык, которого нет в списке - установите Language Pack.

Кстати, именно таким образом заданы встроенные поля. Проверим это созвав настраиваемый список и выведем все поля в представление:


А теперь поменяем добавим английский язык в список предпочитаемых или повысим его приоритет:


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

Так же можно переводить значения полей, подробнее описано в посте от Виталия Жукова.

SharePoint 2013. Проблема указания дня рождения. Ошибка "Введенная дата имеет недопустимый формат или лежит вне допустимого диапазона"

При попытке изменить дату рождения в службе профилей столкнулся с ошибкой:
"Введенная дата имеет недопустимый формат или лежит вне допустимого диапазона. Введите допустимую дату в формате 29 апреля."


Была попытка ввести дату без года в предложенном формате "29 апреля", но как оказалось, вводить дату надо в формате dd.mm, например так: 29.04

четверг, 31 марта 2016 г.

Ошибка при открытии списка SharePoint 2013

После свежей установки SharePoint Foundation 2013 не работают списки. При попытке открыть представления не удавалось просмотреть элементы, только заголовок:

Вместо элементов текст возникшей ошибки:
TypeError: Cannot read property 'replace' of undefined или TypeError: Не удалось получить свойство "replace" ссылки, значение которой не определено или является NULL.

Для исправления ситуации необходимо отредактировать файл clienttemplates.js по адресу:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\clienttemplates.js

Замените L_ItemOpenMenu на L_OpenMenu. Для принятия изменений выполните команду IISReset в cmd.exe

На данный момент (31.03.2016) можно просто обновиться до более поздней версии, это так же исправит проблему.