SharePoint 2013: How to get user owner of a mysite personal site

Recently we stumbled upon a task to set some properties of a personal mysite site collection of a user – we wanted to get precisly the user (owner) whose the site collection is, not the user who is browsing the sitecollection (current user) nor the user who is running a script. We found two ways of doing this.

Czytaj dalej SharePoint 2013: How to get user owner of a mysite personal site

DNS Binding problem with SSL, IIS Express and Cloud Service

The problem

I recently stumbled on a problem which took me about 2 hours to realize but easy to fix.

I created a Cloud Service in Visual Studio 2013 Update 2 with a MVC Role, used ISS Express and full Azure Storage Emulator for my project.

Steps began, when I tried to add Windows Azure Active Directory to authenticate my app through this service. One of this steps was adding https/ssl for my app. After setting “SSL Enabled” value to true in my MVC project, VS generated an SSL URL. I debugged the solution and realised that the URL doesn’t work with a generic error “Cannot display the webpage”.

Czytaj dalej DNS Binding problem with SSL, IIS Express and Cloud Service

SPBG – SharePoint 2013/Online Branding Guide

In this guide I will try to share my experience in branding projects in SharePoint 2013 and SharePoint Online. Basicly I would like to show You, how to start a branding project for the newest versions of Microsoft collaboration  platform. This series will apear every week (or try they will) starting from 12.02.2014.

SharePoint-2013-logo

  1. Where to start? Knowledge, possiblities and DON’Ts.
  2. Project scope. Branding Publishing and teamsites. System masterpage problems…
  3. Design Manager. The new concept of branding.
  4. Everything has a Content Type.
  5. Composed Looks. The client chooses the colors
  6. Creating solution package – sandbox/server when/difference why what
  7. Features and event receivers.
  8. Modules – put files where they belong.
  9. Elements file – proper configuration for project files.
  10. Masterpages. HTML vs master when why how/difference
  11. Masterpages. DOs and DON’Ts.
  12. Layout pages – to lay out content on your site.
  13. Javascript/CSS/Images – the content to make your site alive.
  14. XSL styling. When the standard webpart is not enough.
  15. The tricky part – site collections and relative paths.
  16. Composed Looks Implementation. The client chooses the look.
  17. Deploying the solution, activation, troubleshooting.

Dołączanie SQLite do Aplikacji Windows 8

SQLite

Baza danych w poważniejszych aplikacjach na Windows 8 to podstawa – niezależnie, czy budujemy małą aplikację do zapisywania obrazków czy dużą aplikacje działającą z Windows Azure, gdzie relacje między danymi to podstawa albo potrzebny nam Caching danych.

SQLite

Ponieważ nie ma komponentów baz danych SQL CE, które można by dołączyć do naszych projektów w środowisku Windows Runtime, Microsoft wraz z ludźmi z SQLite przygotował nam alternatywę w postaci tego bardzo ciekawego i szybkiego systemu bazy danych. Napisany jest on w natywnym C++, skompilowany do środowiska WinRT i działa z każdą architekturą na którą programujemy. Ponieważ nie jest to zarządzany kod (Managed Code) to niestety musimy przygotowywać oddzielne paczki aplikacji – x86, x64 oraz ARM – na szczęście na tym nasz udział w kompilowaniu się kończy, ponieważ kompilator sam wybierze automatycznie wymaganą architekturę bazy danych (plik dll w wersjach x86, x64, ARM) i dołączy ją do paczki.

 

 Instalacja paczki SQLite dla Windows Runtime

 

Pierwszą rzeczą, którą należy uczynić jest w ogóle ściągnięcie paczki z bazą danych. Można to zrobić z poziomu Visual Studio (we wszystkich edycjach). Z menu Tools (Narzędzia) wybieramy Extensions and Updates (Rozszerzenia i Aktualizacje), następnie wybieramy sekcję Online (po lewej stronie) i wpisujemy w wyszukiwarce w prawym górnym rogu “sqlite”. Wtedy ukaże się nam paczka: SQLite for Windows Runtime

Extensions and Updates - Wybór paczki SQLite dla WinRT

Klikamy Download (Pobierz) i instalujemy ściągnięty plik. Po zainstalowaniu należy zrestartować Visual Studio o czym poinformuje program.

 

Używanie SQLite w projektach XAML/C# (VB)

 

Kiedy mamy już paczkę SQLite dla Windows Runtime, możemy jej użyć. W aplikacjach C#/VB należy poczynić parę kroków:

  1. Stwórz aplikację (np. pusta Aplikacja)
  2. Wywołaj opcję Add Reference (czyli dodaj referencje)
  3. Dodajemy Rozszerzenie (nie czyste dll) z kategorii Windows/Extensions SQLite for Windows Runtime wraz z C++ Runtime Package

    Dodajemy Paczkę SQLite wraz z C++ do referencji

Ponieważ biblioteka ta jest napisana w języku C++, najwygodniej jest ściągnąć tzw. wrapper, czyli zbiór klas/funkcji pomocniczych, które napisane są w C#/VB a wywołują funkcje C++. Najłatwiejszą biblioteką do wykorzystania w projektach jest sqlite-net jest ona skompilowana w języku C# i dostępna poprzez menager NuGet. Programiści VB niestety muszą sami skompilować tę bibliotekę i dodać ją do referencji projektu.

Aby pobrać do projektu bibliotekę sqlite-net:

  1. Przy włączonym projekcie, włączamy Package Manager Console (konsola menagera projektów) w Visual Studio
  2. Wpisujemy komendę: Install-Package sqlite-net

 Instalacja SQLite-net

 Po tej komendzie automatycznie powinny nam pojawić się 2 pliki: SQLiteAsync.cs oraz SQLite.cs.

Biblioteka ta pozwala na używanie składni jak w LINQ2SQL, gdzie encje w bazie danych można reprezentować za pomocą typów.

[csharp]
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
LoadData();
}

public void LoadData()
{
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, “db.sqlite”);
using (var db = new SQLite.SQLiteConnection(dbPath))
{
db.CreateTable();

db.RunInTransaction(() =>
{
db.Insert(new Person() { FirstName = “Tim”, LastName = “Heuer” });
db.Insert(new Person() { FirstName = “Michał”, LastName = “Walczak” });
});
}
}
}

public class Person
{
[SQLite.AutoIncrement, SQLite.PrimaryKey]
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[/csharp]

Teraz jedynie należy wybrać architekturę aplikacji (x86, x64, ARM) – nie można zostawić AnyCPU. Pamiętajcie, że przygotowując paczkę do certyfikacji zawsze ustawiajcie je na “Release” w przeciwnym wypadku aplikacja nie przejdzie certyfikacji.

 

 Używanie SQLite w projektach XAML/C++

 

Deweloperzy piszący w C++ muszą zainstalować paczkę i dodać ją do referencji. W projektach C++ nie ma czegoś takiego jak menu “Dodaj referencję”  – trzeba manualnie wybrać References (Referencje), wtedy dopiero przycisk Add Reference (Dodaj Referencję) pojawia się. Aby zacząć korzystać z SQLite należy dodać include w pliku gdzie wykorzystujemy bazę: #include <sqlite3.h>

Nie trzeba korzystać z wraperów, ponieważ cała baza napisana jest w C++ i odnosimy się jedynie do czystych funkcji C++.

 

 Używanie SQLite w projektach HTML5/Javascript

 

Aby korzystać z paczki SQLite w projektach Javascript należy podążać takimi samymi krokami jak w przypadku XAML/C#. Należy dodać referencje do rozszerzenia SQLite oraz C++ runtime. Aby korzystać z tej biblioteki należy pobrać odpowiedni wrapper. Zalecanym wrapperem jest SQLite3-WinRT. Wystarczy ściągnąć paczkę i dodać pliki do swojego projektu. Przykład kodu:

[javascript]
var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + ‘\\db.sqlite’;
SQLite3JS.openAsync(dbPath)
.then(function (db) {
return db.runAsync(‘CREATE TABLE Item (name TEXT, price REAL, id INT PRIMARY KEY)’);
})
.then(function (db) {
return db.runAsync(‘INSERT INTO Item (name, price, id) VALUES (?, ?, ?)’, [‘Mango’, 4.6, 123]);
})
.then(function (db) {
return db.eachAsync(‘SELECT * FROM Item’, function (row) {
console.log(‘Get a ‘ + row.name + ‘ for $’ + row.price);
});
})
.then(function (db) {
db.close();
});
[/javascript]

Podsumowanie

 

SQLite to bardzo prosta w obsłudze, lecz zaawansowana baza danych – napisana jest w C++, działa na plikach lokalnych. Mam nadzieję, że artykuł ten przetłumaczony  na język Polski (oryginał Tim Heuer) przybliży wam instalację i używanie bazy. W przyszłości umieszczę przykłady projektów z insertami, deletami, zasileniem źródeł danych. Jeżeli zauważycie jakiś błąd, piszcie w komentarzach 🙂

 

Uwaga! Testowane wersje SQLite (wraz z 3.7.13) posiadają dosyć irytujący błąd. Ponieważ SQLite wykorzystuje do zapisu przestrzeń lokalną (Local Storage), to korzysta ze ścieżki bezpośredniej (C:/Users/…/KatalogZDanymiAplikacji ). Jeżeli wasza nazwa użytkownika zawiera polskie litery lub litery z rozszerzonej tablicy ASCII jest bardzo prawdopodobne, że SQLite nie będzie w stanie stworzyć pliku bazy danych, ponieważ nie obsługuje w ścieżkach takich znaków. Jedynym obejściem tymczasowym jest stworzenie w Windows 8 konta lokalnego nie zawierającego w nazwie polskich znaków

 

Artykuł przetłumaczony według licencji autora.
Źródło: http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx

Hex editor, GIF Frame extractor

Gify są nadal dosyć popularne w sieci, przechodzą wręcz renesans, co innego tyczy się aplikacji z nimi współpracującymi.

Ostatnio próbowałem otworzyć i zmodyfikować jakiegoś animowanego gifa, niestety Photoshop CS 3 nie jest w stanie sobie poradzić z tak arcytrudnym zadaniem. Na sieci znajdują się przykłady wykorzystujące otwieranie gifów poprzez File->Import->VideoFrames to layers, niestety opcja ta wymaga pełnej instalacji pakietu QuickTime, za co dziękuję bardzo.

W poszukiwaniach natrafiłem na stronę dewelopera, który stworzył prosty programik do exportu klatek z gifa do pojedyńczych plików (png lub jpg), dodatkowo na tej samej stronie przyjemny edytor hexowy, oraz parę innych ciekawych aplikacji

http://www.evanolds.com/

GIF Frame Extractor

Hex Editor

 

Data Binding i StringFormat w Windows Phone 7

Tworząc aplikacje często spotykamy się z przypadkiem, kiedy chcemy stworzyć listę obiektów, które pobieramy z bazy danych. Często są to pojedyńcze listy, jak lista zakupów, lista kontaktów, lista państw itp. W WPF, korzystając z XAMLa możemy to zrobić poprzez mechanizm Data Binding, obszerny artykuł znajduje się na MSDNie Data Binding Overview

Co jeśli interesuje nas lista wieloelementowa, która zawierałaby wiele pól danych z jednego wiersza, oraz miała być ładnie sformatowana pod względem ustawienia elementów (coś a’la centrum SMS albo klient email) oraz formatu liczb? Do tego celu możemy użyć również mechanizmu Data Binding w celu połączenia danych, Grid w celu ustawienia danych, oraz StringFormat w celu ładnego przedstawienia.

Korzystamy z bazy danych umieszczonej w artykule Baza Danych w Windows Phone 7

W pliku MainPage.xaml.cs wystarczy, że podłączymy naszą bazę danych do kontekstu strony

[csharp]

public MainPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
this.DataContext = App.ViewModel;

}

[/csharp]

W ten sposób, cała strona podłączona jest już do źródła danych – ma tzw. kontekst, którego będzie mogła korzystać do pobierania, usuwania itp.  danych w bazie.

Teraz przechodzimy do najważniejszego pliku – MainPage.xaml. Tworzymy w tej chwili szablon każdego elementu (każdego wiersza tabeli), który będzie formatowany zawsze w ten sam sposób. Należy go umieścić w specjalnej przestrzeni – phone:PhoneApplicationPage.Resources

[xaml]

<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key=”EntriesListBoxItemTemplate”>
<Border
Background=”{StaticResource TransparentBrush}”
Padding=”20″>
<Grid HorizontalAlignment=”Stretch” Background=”{StaticResource TransparentBrush}”>

<Grid.ColumnDefinitions>
<ColumnDefinition Width=”100″ />
<ColumnDefinition Width=”100″ />
<ColumnDefinition Width=”80″ />
<ColumnDefinition Width=”80″ />
<ColumnDefinition Width=”*” />
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
<RowDefinition Height=”60″ />
<RowDefinition Height=”60″ />
</Grid.RowDefinitions>

<Grid Grid.Column=”0″ Grid.ColumnSpan=”1″ Grid.Row=”0″ Grid.RowSpan=”2″ Background=”{StaticResource PhoneAccentBrush}” Width=”110″ Height=”110″>
<TextBlock
x:Name=”theRectangle”
Text=”{Binding ItemFuelMill, StringFormat=\{0:0.00 \} }”
Foreground=”White”
FontSize=”{StaticResource PhoneFontSizeExtraLarge}”
VerticalAlignment=”Center” HorizontalAlignment=”Right”  Margin=”0,0,0,0″ />
</Grid>

<TextBlock
x:Name=”theTextBlock”
Text=”{Binding ItemDate, StringFormat=\{0: MMMM d\, yyyy\} }”
FontSize=”{StaticResource PhoneFontSizeLarge}”
Grid.Column=”1″ Grid.ColumnSpan=”4″
Grid.Row=”0″ Grid.RowSpan=”1″
VerticalAlignment=”Top” Margin=”0, 12, 0, 0″/>

<TextBlock
Text=”{Binding ItemDist, StringFormat=\{0:0.0 \}km }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”1″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>

<TextBlock
Text=”{Binding ItemRefuel, StringFormat=\{0:0.0 \}l }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”2″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>

<TextBlock
Text=”{Binding ItemFPrice, StringFormat=\{0:0.0 \}PLN }”
FontSize=”{StaticResource PhoneFontSizeSmall}”
Grid.Column=”3″ Grid.ColumnSpan=”1″
Grid.Row=”1″ Grid.RowSpan=”1″
VerticalAlignment=”Top” HorizontalAlignment=”Right” Margin=”0, 0, 0, 0″/>

</Grid>
</Border>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>

[/xaml]

DataTemplate to kontener, który będzie nam przechowywał szablon “jedego wiesza z tabeli”, nazwaliśmy go EntriesListBoxItemTemplate. Kontrolka Grid służy nam do umiejscowienia wszystkich elementów, które mają znaleźć się na liście, textblock to kontrolka, która będzie nam wyświetlać tekst. Cała magia Data Bindingu i StringFormatu odbywa się tutaj:

[xaml]

Text=”{Binding ItemRefuel, StringFormat=\{0:0.0 \}l }”

[/xaml]

Ta linijka oznacza mniej więcej: kiedy będziesz przerabiał każdy wiesz, weź z wiersza wartość elementu ItemRefuel, oraz nadaj mu format {0:0.0}l  – czyli jeśli będziemy mieć element o wartości 7.53, kontrolka wyświetli nam 7.5l (l tutaj po prostu oznaczają litry).

Bardzo ważne w tym przypadku są tzw. escape charactery, które powiedzą mechanizmowi, że nawiasy nie należą do Bindingu, lecz do właściwości StringFormat. Należy zaznaczyć, że operacja ta ma na celu tylko wyświetlać dane, a nie udostępniać do modyfikacji. Z tego powodu działa tu tryb OneWay – czyli “tylko pobieraj, nie wysyłaj do bazy niczego”, toteż możemy sobie pozwolić na takie modyfikacje.

 

Co do StringFormat działającego w trybie TwoWay, istnieje również alternatywa wspomniana w artykule z MSDN – stworzenie własnego konwertera – klasy, która będzie implementowała interfejs “IValueConverter”, przez to funkcję Convert (oraz ConvertBack, kiedy stosujemy Binding z opcją TwoWay). Bardzo dobry i obszerny przykład przedstawiam poniżej:

Data Binding and StringFormat in Silverlight « Matt Duffield.