Jak określić ludzi jako zakres wyszukiwania / Źródła zawartości przy użyciu programu SharePoint 2013 REST API

Miałem powód do pracy z programem SharePoint 2013 API wyszukiwania poprzez odpoczynek po raz pierwszy. Ja potrzebował wobec zrewidować pod kątem osób, nie dokumentów. Ten klucz uczenia się że tutaj jest to, że można określić źródła zawartości za pomocą jej identyfikatora GUID (lub przynajmniej w tym przypadku). W poniższym urywku jQuery jak:

    loadExpertsAsync: Funkcja() {

        jQuery.support.cors = PRAWDA;

        $.AJAX({
            adres URL: to.CreateFullApiUrl() +
                "?QueryText = "portale"&element SourceId = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Umiejętności,AboutMe,Interesy,JobTitle,PastProjects,Adres URL zdjęcia,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl "" +
                "&RowLimit = 99",
            Metoda: "Pobierz",
            nagłówki: { "Zaakceptować": "aplikacji/json; odata = verbose" },
            pamięci podręcznej: FAŁSZ,
            sukces: Funkcja (wynik) {

W moim przypadku, Jestem uruchomienie interfejsu API z SharePoint online. Aby uzyskać identyfikator GUID, Ja nast¹pi³ tych kroki:

  1. Dostęp do centrum administracji programu SharePoint
  2. Wybierz opcję "Szukaj" z lewej nawigacji
  3. Wybierz "Zarządzaj źródłami wynik"
  4. Wybierz "Wyniki miejscową ludność"
  5. Spójrz na adres.

Mój adres URL wyglądał::

https://xyzzy-admin.sharepoint.com/_layouts/15/searchadmin/EditResultSource.aspx?level=tenant&sourceid=b09a7990%2D05ea%2D4af9%2D81ef%2Dedfab16c4e31&view=1

Parametr sourceid to, co pracował dla mnie.

(Rozumiem, że element sourceid rzeczywiście może być swego rodzaju stałe rzeczy z SP, but I’ll always check anyway 🙂 ).

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Przykład programu SharePoint reszta rozmowy

Oto zestaw próbki reszta połączeń, które działa na mnie i może Ci pomóc, jak również. Jak z 02/2014, there are two examples 🙂

  1. Odwoływać się kolumna z pomieszczeń w swoim imieniu
  2. Odwołanie kolumna wielokrotnego wyboru
  3. Wyszukiwania ludzi poprzez odpoczynek

 

Dodam do tego w miarę upływu czasu.

Oto kilka przydatnych farb, znalazłem również:

Odwoływać się kolumna z pomieszczeń w swoim imieniu

Utworzyć niestandardową listę z kolumna o nazwie "Autor bloga" (przestrzeń między Blog i autor).

$select aby odwołać kolumna jest:

image

Po prostu zastąpić miejsca z "_x0020_". Widzimy _x0020_ w wielu przykładach całym internets i reszta nie różni.

Jeśli nie zrobisz, Jesteś mogących otrzymać komunikat o błędzie podobny do tego:

Wyrażenie “Autor bloga” nie jest ważne.

Dość łatwe.

Odwołanie kolumna odnośnika wielokrotnego wyboru

Umieszczaæ w górze:

  1. Utworzyć listę niestandardową o nazwie Kategorie.
  2. Dodać niektóre kategorie. Po dodaniu kategorii wygląda następująco:image
  3. Tworzenie innej listy niestandardowej o nazwie MockBlog i dodać kategorie jako kolumna listy wielokrotnego wyboru (lub stronie kolumny, jeśli to, jak się potoczą).

Dodać kilka elementów do listy Mockblog i gotowe.

Połączenie stylu Ajax przy użyciu jQuery będzie wyglądać tak:

serverUrl  = "/_api/web/list/GetByTitle("MockBlog")/elementy" +
             "?$Wybierz = tytuł,Kategorie/tytuł,Blog_x0020_Author/tytuł" + 
             "&$Rozwiń = Blog_x0020_Author,Kategorie";

Mówisz SharePoint "daj mi tytuł dla wszystkich kategorii (Kategorie/tytuł). Rzeczywiste wartości dla Tytuł przez $Rozwińna liście Kategorie ING." (Mój spokojny parafrazując jest chyba dość luźne, ale to jak jestem interpretacji).

Jeśli robisz to za pomocą JavaScript i spojrzeć na dane wyjściowe przy użyciu skrzypek, masz coś takiego w zamian:

 

image

(Powyżej jest obiekt JSON)

Wyszukiwania ludzi poprzez odpoczynek

Mam blogu o tym osobno. Najważniejsze jest, aby określić parametr sourceid, którego wartość jest identyfikatorem GUID mieszkańców źródła zawartości. (Źródeł zawartości można nazwać zakresy i to jest moje oh-my nie tak trudno połączyć wszystko zakres dla mnie!).

Przeczytaj więcej o go tutaj: http://www.mstechblogs.com/paul/?p=10385

 

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Szybkie i łatwe: Tworzenie witryny programu SharePoint przy użyciu reszta

Istnieje wiele zasobów wokół tego pokazu, jak to zrobić, ale nie mogłem znaleźć link kompleksowe go do, Więc tu jesteśmy.

Można utworzyć witryny programu SharePoint przy użyciu interfejsu API REST.  Oto przykład pełni pieczone:

<!--
    SiteRequestForm.html: Zbieranie informacji i tworzenie strony internetowej dla użytkownika.
-->

<centrum>
<Tabela>
    <TR>
        <TD>Nazwa witryny:</TD>
        <TD><dane wejściowe Typ= "tekst" Nazwa= "Nazwa witryny" Identyfikator= "Nazwa witryny" /></TD>
    </TR>
    <TR>
        <TD colspan= "2">
            <dane wejściowe Typ= "submit" Identyfikator= "CreateSiteButton" wartość= "Utwórz witrynę" />
        </TD>
    </TR>
</Tabela>
</centrum>

<skrypt src="../Plugins/jQuery-1.11.0.min.js"></skrypt>

<skrypt>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parametry": {
                __metadata: { "typ": "SP.WebInfoCreationInformation" },
                Adres URL: "Paultest1",
                Tytuł: "Paultest1",
                Opis: "reszta utworzone sieci web przez Paul!",
                Język: 1033,
                Paź: "sts",
                UseUniquePermissions: FAŁSZ
            }
    },

    createSite: Funkcja () {

        jQuery.support.cors = PRAWDA;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").Val();
        
        $.AJAX({
            adres URL: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            Metoda: "POST",

            nagłówki: {
                "Akceptuj": "aplikacja/json; odata = verbose",
                "content-type": "aplikacja/json;odata = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            dane: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            sukces: Funkcja () { alarm("sukces"); },
            błąd: Funkcja () { alarm("błąd"); }

        });
    },

    wireUpForm: Funkcja () {
        $("#CreateSiteButton").Kliknij przycisk(Funkcja () {
            alarm("Się spróbować i tworzenia witryny.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</skrypt>

Po pomyślnym, otrzymasz pakiet JSON w odpowiedzi jak to:

image

Mój klucz myśli i wiedza, ze to między innymi:

  • Ta metoda używa jQuery.  W moim przypadku, moja biblioteka jQuery znajduje się w ".../ plugins. "  Chcesz zmienić, wskaż lokalizację ulubionego JQ.
  • Można skopiować i wkleić cały fragment tego Web Part Edytor zawartości na stronie i powinno działać dobrze.  Będziesz chciał zmienić punkt końcowy połączenia API i upewnij się, że odwołanie JQ poprawnie.
  • Adres URL jest twój API punktu końcowego.  W moim przypadku, to jest tworzenie podstron pod https://bigapplesharepoint.com
  • Trzeba zapewnić elementu content-length. Niektóre wpisy na blogu i MSDN dokumentu oznacza, że można zrobić, ale stało się dla mnie automatycznie, które jest obsługiwane przez wywołanie .ajax $, sam.
  • Ten wiersz jest wymagane w celu uniknięcia odpowiedź "zakazane": "X-RequestDigest": $("#__REQUESTDIGEST").Val().  Istnieją inne sposoby na to, ale to jest bardzo ładne.  Straciłem link do bloga, że ten skrót.  H/T do Ciebie, tajemniczy blogger!

Powodzenia i spodziewać się ten współpracownik ktoś.

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Pokonać przykry Problem z względne adresy URL w SharePoint Quick Launch

Chciałem, aby dodać link do szybkiego uruchamiania nawigacji drugi dzień i powiedział mi, SharePoint:

image

Czysty tekst wersji, że jest:

Zapewnienia, że adres jest prawidłowy i zaczyna się albo prawidłowych znaków (znak numeru (#) lub ukośnika (/)) lub ważnego obsługiwany protokół (na przykład, "http://’, ' https://’, "plik://’, "ftp://’, "mailto:’, "Aktualności:’).

"Blech i ospy!"Powiedziałem.

Pewien workaround wobec to jest znaleźć znane link w ten szybki wprowadzić na rynek i zmienić jego zachowanie za pomocą JavaScript.

Wobec test ten, dodać nowy link do witryny testu dobrze reprezentuje:

image

Używałem jQuery. Aby rozwiązać problem, dostać niektórzy JavaScript i jQuery na stronę za pomocą swojego ulubionego technika i z linii kodu jak to:

 

$(dokument).gotowe( Funkcja () {

    $("a:zawiera("Test wymiany URL")").Kliknij przycisk(Funkcja () { alarm("Kliknij zmienione zachowanie!"); Powrót FAŁSZ;});

});

I twój wujek Bob.

Selektor jQuery znajdzie co <a> znacznik, że ma "Test URL wymiany" w jego imieniu. Może chcesz znaleźć utwór, który w zależności od łącza i takie.

Kliknij(Funkcja() zastępuje cokolwiek SharePoint chcieliby zrobić po kliknięciu przez użytkownika. Upewnij się, że ci "return false" lub inny to zrobi swoje rzeczy i spróbuj coś href zbyt, który jest prawie na pewno nie twój cel.

To zostało zrobione i badania w środowisku SharePoint online ale powinna działać dobrze w 2010 a wcześniej też.

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Szybkie i proste: SharePoint reszta rozmowy tylko zwraca 100 Rekordy

Pracuję na publicznej stronie internetowej stoi na mojej praktyce SharePoint tutaj w Nowy Jork i wykorzystuje wiele wywołań JavaScript i reszta pokazanie zawartości.

Podczas głównego rozwoju, Po prostu stworzyć małe dataset z 10 albo więc wiersze listy niestandardowej i moje reszta rozmowy z tam.  Raz wpadł na liście mają kilka kilkaset wierszy danych do testowania dla przewidywanego wzrostu, Dowiedziałem się, że był już dokładnie 100 wierszy zwracanych z powrotem na moje reszta rozmowy.

Jest to bardzo prosta sprawa, aby adres.  W moim przypadku (i uważam, że w większości przypadków), Domyślnie reszta wymaga programu SharePoint (i ewentualnie jak standardem?) Powrót 100 wiersze.  Zwraca więcej niż domyślny, Użyj parametru $top na Twój telefon, jak w:

Pobierz /Insights Dev/_api/web/lists/GetByTitle("MockBlog")/elementy?$Wybierz = ID,Tytuł,Kategorie/tytuł,Blog_x0020_Author/tytuł,DatePublished,BlogSummary&$Rozwiń = Blog_x0020_Author,Kategorie&$Filtr =&$góry = 9999

Wybrałem 9999 w tym przypadku od tego czasu wiem, że growth-wise, nie będzie więcej niż 200 lub tak wiersze dodane do tej listy w ciągu roku.  Jeśli staje się brzydka, możemy wdrożyć niektóre stronicowania w dół drogi.

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Szybkie i proste: Rozwiązać "parametr adresu URL” problem z UpdateListItems w lists.asmx

Podczas pracy z UpdateListItems przez lists.asmx, to jest łatwe do generowania błędu:

Nieprawidłowy adres URL parametr.

Podany adres URL zawiera nieprawidłowe polecenie lub wartość. Proszę sprawdzić adres URL ponownie.

Można dostać ten błąd, gdy zapomnisz włączenie ID w listy pól, aby zaktualizować.  To, jak dużo tych SP usług sieci web, jest nieco sprzeczne z intuicją, ponieważ trzeba dołączyć identyfikator atrybut ID <Metoda> elementu.  I nie jesteś aktualizacja ID i prawdopodobnie nigdy nie chcesz w pierwszej kolejności.

Działa ta koperta:

<soapenv:Koperta xmlns:soapenv ="http://schemas.xmlsoap.org/SOAP/Envelope/ ">
  <soapenv:Organ>                      
    <UpdateListItems xmlns ="http://schemas.Microsoft.com/SharePoint/SOAP/ ">                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <Aktualizacje>                     
         <Partia OnError ="Nadal">
          <Metoda ID ="1" Cmd ="Aktualizacja">
            <W polu Nazwa ="CooperativeLock">zablokowany!</Pole>
            <W polu Nazwa ="IDENTYFIKATOR">1</Pole>
          </Metoda>
        </Partia>                     
        </Aktualizacje>                
      </UpdateListItems>             
  </soapenv:Organ>         
</soapenv:Koperta>

Jeśli pasek się odwołanie do pola ID następnie otrzymasz irytujący komunikat "Nieprawidłowy URL parametr".

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

 

Biedny człowiek jest buforowanie w JavaScript

[TL;DR wersja: używa plików cookie do przechowywania wyników wywołania asynchroniczne; natychmiast uczynić wyniki ostatnich wywołania asynchroniczne i następnie potwierdzić je po ładowania strony.]

Pracuję w witrynie intranetowej SharePoint dla klienta, że funkcje, między innymi, stylizowane drugorzędowej nawigacji którego opcje menu są zarządzane przez regularne stary listy niestandardowe.  Chodzi o to, że klient dojdzie do sterowania menu "swojej" stronie bez wpływu lub są dotknięte nawigacji globalnej wprowadzone przez to.

(jest coś niezwykle wywrotowych o dodanie CEWP, który wskazuje plik HTML, który ładuje niektóre CSS i JS do fundamentalnie zmienić prawie wszystko o zachowanie strony... ale to na inny post)

Kod ten bardzo prosty:

  • Poczekaj na zakończenie załadunku i zrobić Asynchroniczne wywołanie załadować menu pozycja z listy za pomocą odpoczynku lub lists.asmx lub cokolwiek strony
  • Przy użyciu jQuery, dynamicznie wypełnić kilka, jeśli <Li>jest wewnątrz rodzica <UL> (Zobacz artykuł Christian Pinder tutaj proste wyjaśnienie tego tecnnique)
  • Czy wszystkie formatowania za pomocą CSS
  • Zysk!

Ból miejscu tutaj jest to, że za każdym razem ktoś uderza jednej ze stron witryny, przeglądarki sieci web użytkownika jest dotarcie do uzyskania pozycji z listy.  Po zakończeniu dev i badania okazał się rzeczy, aby być stabilne i kompletny, to wywołanie jest niepotrzebne więcej niż 99% czas od menu zmienia się rzadko.  Ono także ma fatalny wpływ UI, które jest powszechne w tym brave new world hiper ajaxy witryny sieci web-renderuje strony i dopiero wtedy czyni menu.  To jest roztrzęsiony i rozpraszać moim zdaniem.  I zdenerwowanie. Tak, buforowanie. 

I zmodyfikowano logikę wygląda następująco:

  • Poszukaj pliku cookie w przeglądarce, która zawiera menu, jak ostatnio ją przeczytać
    • Jeśli Znalezione, uczynić go natychmiast.  Nie czekaj na zakończenie ładowania strony.  (Musisz upewnić się, że twój HTML jest strategicznie umieszczone tutaj, ale to nie jest trudne do zrobienia).
  • Poczekaj na zakończenie załadunku i zrobić Asynchroniczne wywołanie załadować menu pozycja z listy za pomocą odpoczynku lub lists.asmx lub cokolwiek strony
  • Porównaj, co mam przeciwko cookie
    • Jeśli pasuje, PRZYSTANEK
    • W przeciwnym razie, przy użyciu jQuery, dynamicznie wypełnić kilka, jeśli <Li>jest w <UL>
  • Czy wszystkie formatowania za pomocą CSS
  • Zysk!

Niektórzy z was są gonna powiedzieć, "Hej! tu jest nie prawdziwy buforowania będzie tutaj skoro czytasz menu tak za każdym razem.”  I masz rację-nie jestem dając serwer wszelkiego rodzaju przerwy.  Ale ponieważ połączenie jest asynchroniczne i zdarza się po stronie początkowej ładunku HTML renderuje pełni, to "czuje się" bardziej dostosowane do użytkownika.  Menu renderuje dość podobnie jak strony rysuje.  Jeśli zmiana menu, użytkownik jest poddawane zdenerwowanie narysowany menu, ale tylko ten jeden raz.

Istnieje kilka sposobów, aby zrobić to buforowanie bardziej skuteczne i pomóc serwera w tym samym czasie:

  • Umieścić w regule, że buforze"cookie" jest ważny przez co najmniej 24 godzin lub jakieś inne ramy czasowe. Tak długo, jak jest nie skończony ciasteczka, Użyj pliku cookie menu migawka i nigdy nie uderzył serwer.

... Dobrze, że wszystkich, którzy przychodzą do głowy teraz :). 

Jeśli ktoś ma jakieś mądre pomysły tutaj chciałbym je poznać.

I wreszcie – Technika ta może być używany do innych rzeczy.  Strona to klient ma wiele rzeczy, opartych na danych na różnych stronach, wielu z nich zmienia stosunkowo rzadko (jak raz w tygodniu lub raz w miesiącu).  Jeśli cel określonych obszarów funkcjonalności, może dać bardziej elastyczne UI ciągnąc zawartość z magazynu lokalnego pliku cookie i renderowania natychmiast.  Czuje szybciej do użytkownika, nawet jeśli nie zapisujesz serwer żadnych cykli.  Możesz może Decydując się na pewne warunki i wyzwalaczy unieważnić ten cookie lokalnej pamięci podręcznej, należy zapisać cykli serwera.  To wszystko sytuacyjne i pretensjonalnymi rzeczy i naprawdę najbardziej zabawne :). 

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Jak: Konfigurowanie zakresu badań i testów jednostkowych z QUnit.js i Blanket.js dla biura 365 Aplikacji SharePoint

Intro

Już badają jednostki badań i sprawdzić zasięg JavaScript jak działa na nowych aplikacji SharePoint dla programu SharePoint online w biurze 365 Apartament.  Ścieżki oczywiste badań doprowadziły mnie do Qunit.js i zaraz po tym, do Blanket.js.

QUnit pozwól mi się testy jednostkowe i zgrupuj je do modułów.  Moduł jest tylko prostym sposobem organizowania związanych z testów. (Nie jestem pewien, że używam go zgodnie z przeznaczeniem, ale to działa dla mnie do tej pory z małych zestaw testów, które do tej pory zostały zdefiniowane).

Blanket.js integruje się z Qunit i pokaże mi rzeczywistej linii JavaScript, które były- i co ważniejsze – nie zostały rzeczywiście wykonane podczas uruchamiania testów.  To jest "zasięgu"-linie, które wykonywane są objęte badanie, podczas gdy inni nie są.

Tworzenie dobrych testów i oglądania zasięgu, możemy zmniejszyć ryzyko, że nasz kod ma ukryte wady.  Dobre czasy.

Qunit

Zakładając, że Visual Studio projektu ustawić, Zacznij Pobieranie pakietu z JavaScript http://qunitjs.com.  Dodaj odpowiednie CSS i JavaScript do rozwiązania.  Kopalnia wygląda jak ten:

image

Rysunek 1

Jak widać, Był przy pomocy 1.13.0 w tym czasie napisałem ten post blog. Nie zapomnij, aby pobrać i dodać plik CSS.

Że z drogi, następnym krokiem jest stworzenie pewnego rodzaju badania przewodów i odwołać Qunit bitów.  Jestem testowania kilka funkcji w pliku skryptu o nazwie "QuizUtil.js", więc stworzyłem stronę HTML o nazwie "QuizUtil_test.html", jak pokazano:

image Rysunek 2

Oto kod:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<głowa>
    <Tytuł>QuizUtil test z Qunit</Tytuł>
    <link rel= "arkusz stylów" href="../CSS/qunit-1.13.0.css" />
    <skrypt Typ= text/javascript"" src="QuizUtil.js" danych okładka></skrypt>
    <skrypt typ ="text/javascript" src ="qunit-1.13.0.js"></skrypt>
    <skrypt typ ="text/javascript" src ="blanket.min.js"></skrypt>

    <skrypt>
        moduł("getIDFromLookup");
        badania("QuizUtil getIDFromLookupField", Funkcja () {
            var goodValue = "1;#Paul Galvin";

            równe(getIDFromLookupField(goodValue) + 1, 2), "Identyfikator [" + goodValue + "] + 1 powinno być 2";
            równe(getIDFromLookupField(niezdefiniowana), niezdefiniowana, "Niezdefiniowany argumentów wejściowych powinien zwracać wynik niezdefiniowany.");
            równe(getIDFromLookupField(""), niezdefiniowana, "Pustych argumentów wejściowych powinien zwracać wartość undefined.");
            równe(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), niezdefiniowana,"Należy zawsze zwraca wynik kabriolet całkowitą");
            równe(getIDFromLookupField("2;#Niektóre inne osoby"), "2", "Sprawdzanie [2;#Niektóre inne osoby].");
            równe(getIDFromLookupField("9834524;#długa wartość"), "9834524", "Dużą wartość badania.");
            notEqual(getIDFromLookupField("5;#ktoś", 6), 6, "Badania notEqual (5 nie jest równa 6 Ten przykładowy: [5;#ktoś]");

        });

        moduł("htmlEscape");
        badania("QuizUtil htmlEscape()", Funkcja () {
            równe(htmlEscape("<"), "&lt;", "Ucieczki mniej niż operator ('<')");
            równe(htmlEscape("<DIV class =  "someclass">Jakiś tekst</DIV>"), "&lt;DIV class =&quot;someclass&quot;&gt;Jakiś tekst&lt;/DIV&gt;", "Bardziej złożonych testów ciąg.");
        });

        moduł("getDateAsCaml");
        badania("QuizUtil getDateAsCaml()", Funkcja () {
            równe(getDateAsCaml(Nowy Data("12/31/2013")), "2013-12-31T:00:00:00", "Zakodowanego Data badania: [12/31/2013]");
            równe(getDateAsCaml(Nowy Data("01/05/2014")), "2014-01-05T:00:00:00", "Zakodowanego Data badania: [01/05/2014]");
            równe(getDateAsCaml(Nowy Data("01/31/2014")), "2014-01-31T:00:00:00", "Zakodowanego Data badania: [01/31/2014]");
            równe(getTodayAsCaml(), getDateAsCaml(Nowy Data()), "getTodayAsCaml() powinna być równa getDateAsCaml(nowy termin())");
            równe(getDateAsCaml("wartość bzdury"), niezdefiniowana, "Postarać się daty wartość bzdury.");
            równe(getDateAsCaml(niezdefiniowana), niezdefiniowana, "Staramy się od dnia [niezdefiniowana] Data.");
        });

        moduł("getParameterByName");
        badania("QuizUtil getParameterByName (ciąg kwerendy)", Funkcja () {
            równe(getParameterByName(niezdefiniowana), niezdefiniowana, "Staramy się niezdefiniowanych parametrów należy powrót niezdefiniowany.");
            równe(getParameterByName("nie istnieje"), niezdefiniowana, "Postarać się wartość parametru, gdy wiemy, że parametr nie istnieje.");

        });

        moduł("Ciasteczka");
        badania("QuizUtil różne funkcje plików cookie.", Funkcja () {
            równe(setCookie("badanie", "1", -1), getCookieValue("badanie"), "Pobierz plik cookie, ustawiłem powinno działać.");
            równe(setCookie("anycookie", "1", -1), PRAWDA, "Ustawienie prawidłowe gotowanie powinno zwraca 'true'.");
            równe(setCookie('Nazwa ciasteczka szalony !@#$%"%\^&*(()?/><.,", "1", -1), PRAWDA, "Ustawienia nazwy zły cookie należy zwrócić 'false'.");
            równe(setCookie(niezdefiniowana, "1", -1), niezdefiniowana, "Przekazywanie niezdefiniowane jako Nazwa ciasteczka.");
            równe(getCookieValue("nie istnieje"), "", "Cookie nie istnieją badania.");
        });

    </skrypt>
</głowa>
<organ>
    <DIV Identyfikator= "qunit"></DIV>
    <DIV Identyfikator= "qunit uchwyt"></DIV>

</organ>
</HTML>

Tu są osobisty rzeczy dzieje się tutaj:

  1. Odwoływanie się do mojego kodu (QuizUtil.js)
  2. Odwoływanie się do Qunity.js
  3. Określanie niektórych modułów (getIDFromLookup, Ciasteczka, i inni)
  4. Wprowadzenie do <DIV> których identyfikator jest "qunit".

Następnie, Tylko podciągnąć tej strony i masz cos takiego:

image

Rysunek 3

Jeśli spojrzeć na górze, masz kilka możliwości, dwa z nich są ciekawe:

  • Ukryj przeszedł testy: Dość oczywiste.  Pomoże Ci się w oczy po prostu zobacz obszary problemowe i nie dużo bałaganu.
  • Moduł: (spadek w dół): Będzie to filtr testy do tylko tych grup testów, które chcesz.

Co do testów, siebie-kilka uwag:

  • Jest rzeczą oczywistą, że należy napisać kod, tak, że jest to sprawdzalne w pierwszej kolejności.  Za pomocą narzędzia mogą pomóc egzekwowania tej dyscypliny. Na przykład, Miał funkcję o nazwie "getTodayAsCaml()”.  To nie jest bardzo testować, ponieważ zajmuje żadnego argumentu wejściowego i przetestować go na rzecz równości, musimy stale aktualizować kod testu w celu odzwierciedlenia bieżącej daty.  Mi przepisano go przez dodanie danych parametru wejściowego, a następnie przekazywanie bieżącej daty, kiedy chcę daty w formacie CAML.
  • Ramach Qunit dokumenty własne testy i wydaje się dość solidne.  To można zrobić proste rzeczy, jak badania na rzecz równości i posiada również wsparcie dla połączenia stylu ajax (zarówno "prawdziwe" lub wyśmiewali, przy pomocy twój ulubieniec mocker).
  • Przechodzi proces również zmusza do myślenia poprzez krawędzi przypadkach – co się dzieje z "nieokreślone" lub wartość null jest przekazywana do funkcja.  To sprawia, że martwe proste do testowania tych scenariuszy się.  Dobre rzeczy.

Relacje z Blanket.js

Blanket.js uzupełnia Qunit przez śledzenie rzeczywistej linii kodu, które są wykonać w trakcie prowadzenia testów.  Integruje prawo do Qunit więc choć to zupełnie oddzielny aplikacja, ładnie gra – to naprawdę wygląda to jeden app bez szwu.

To jest blanket.js w akcji:

image Rysunek 4

image

Rysunek 5

(Rzeczywiście trzeba kliknąć na pole "Włącz zasięgu" u góry [patrz rysunek 3] Aby to umożliwić.)

Wyróżnione wiersze na rysunku 5 nie zostały wykonane przez jednego z moich testów, więc trzeba opracować test, który powoduje je wykonać, jeśli chcę pełne pokrycie.

Dostać blanket.js pracy przez następujące kroki:

  1. Pobierz za darmo z http://blanketjs.org/.
  2. Dodaj to do swojego projektu
  3. Aktualizacja strony wykorzystać badania (QuizUtil_test.html w moim przypadku) w następujący sposób:
    1. Kod referencyjny
    2. Udekoruj swój <skrypt> odwołanie takiego:
    <skrypt Typ= text/javascript"" src="QuizUtil.js" danych okładka></skrypt>

Blanket.js wybiera się atrybut "dane okładka" i ma swoją magię.  Haki do Qunit, aktualizacje interfejsu dodać opcję "Włącz zasięgu" i voila!

Podsumowanie (TL; DR)

Użyj Qunit do napisania swojej sprawy.

  • Pobierz za darmo to
  • Dodaj to do swojego projektu
  • Napisz stronę testową uprząż
  • Tworzenie testów
    • Refaktoringu część kodu należy testować
    • Bądź kreatywny!  Myślę, że Crazy, możliwe scenariusze i tak je przetestować.

Użyj blanket.js do zapewnienia pokrycia

  • Upewnij się, że działa Qunit
  • Pobierz za darmo blanket.js i dodać go do projektu
  • Dodać go do uprzęży Strona testowa:
    • Dodaj odwołanie do blanket.js
    • Dodaj atrybut "dane okładka" do swojej <skrypt> Tag
  • Uruchomienia testów Qunit.

Nigdy nie zrobił to przed i miał pewne elementarne rzeczy działa w kilka godzin. 

Szczęśliwy badania!

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Ostatnio garnitur, jakie kiedykolwiek będziesz nosić?

[Szybka uwaga-jest to dość długi post na zadanie otwarcie dla mojej grupy tutaj w Nowym Jorku i trzeba żyć w tri-Państwa, jeśli jesteś zainteresowany.]

Dołączyłem do slalomu konsultacji nad 18 miesięcy temu i to sprawia, że to moja praca najdłużej trwającym od 2007. Nie planuję go w ten sposób. Przed ciąg pracy hopping, który rozpoczął się mój skok na świat programu SharePoint, Byłem w jednym miejscu przez jedenaście lat. Wreszcie znalazłem nowy, trwałe miejsce do pracy na dłuższą metę tutaj w slalomie.

To miejsce rośnie i potrzebuje pomocy, aby kontrolować, które. Tego rodzaju pomoc, potrzebne mi jest często nazywana "Architekt rozwiązań SharePoint", chociaż znalazłem słowo architekt być ponad lub nieprawidłowo używane w przestrzeni programu SharePoint na dłuższą chwilę teraz. Byłem zmaga się w jaki sposób o tym blogu. Nie chce po prostu lista na zewnątrz kilka punktach w stylu kości/potwora. Moje doskonałe rówieśników rekrutacji robili to już :). Tak, Postanowiłem wziąć podejście "dzień z życia". Czytać i rozważać:

1) Jeśli to się odwołań i

2) Czy wiesz w kości, że można to zrobić.

Jeśli tak, Skontaktuj się ze mną (Paul.Galvin@slalom.com) i porozmawiajmy.

To, co można oczekiwać, aby zrobić w typowym miesiąc jako architekt rozwiązań na mój zespół:

  • Wykonywania projektów, często więcej niż jeden naraz. Niektóre projekty są duże i tak masz że jeden projekt. "Running" projektu oznacza, że masz, nadzór i odpowiedzialność za ogólną jakość dostawy. W prawie każdym przypadku musisz PM i naprawdę silny zespół deweloperów, SAMOCHÓD, UX ludzi, itp., wsparcie. Ale musisz być głównym twarzy, co klient widzi, zaufania, itp. Tu jest nie ukrywał się w cieniu w tej roli :). Będziesz rachunek ten czas i celem jest, aby utrzymać się wystarczająco zajęty, aby to zrobić 80 procent czasu.
  • Pomoc z dokumentacji – Loch, RFP, pokłady – wszystko, co dobre rzeczy. Myślę, że mamy nasz proces SIAĆ dość mocno i stałe, więc jest to dość stereotypowe. Jeśli jesteś przyzwyczajony do pisania macior dzisiaj, nasz proces nie będzie dla Ciebie wyzwaniem. RFP-są nieco trudniejsze. Oni wydają się być na zamówienie w przyrodzie zacząć i ulepszyli zazwyczaj ciągnąć w wielu różnych autorów. Jest to zarówno dobre i złe, ale przede wszystkim dobry. To może się scrambly, kiedy musimy pogodzić potrzebę doskonałą obsługę klienta a także stara się zyskać nowych prac. Zapewne nie posiadasz RFP, ale pytałeś się sekcje.
  • Sprzedaż zaproszeń, ale nie bliżej. W trakcie miesiąca, można oczekiwać, aby przejść na kilka rozmów z naszym działem sprzedaży. Będziesz MŚP w pokoju, notatek i kształtowaniu rozwiązanie. Jednakże, nie zapytał czy oczekuje do obsługi sprzedaży cykl od początku do końca. Nie musisz się "sprzedać,"po prostu trzeba być spokojny głos ekspertów powód w pokoju. To buduje zaufanie i dlatego masz tam. Oczywiście, Jeśli podoba Ci się sprzedaży, wtedy ma pokoju dla Ciebie rosną tu też.
  • Pomoc przy rekrutacji. Mamy jakiś program skierowania, więc jeśli wiesz naprawdę silnych ludzi we Wspólnocie, że uważasz, że powinny być częścią Slalom, mogą Państwo w ten sposób. Mamy dedykowany rekrutacji (Kim są doskonałe) robić lwią część tego rodzaju pracy. Prawdziwą pomoc rekrutacji kandydatów-są one dobrze dopasowane kulturowo? Oni wiedzą swoje rzeczy? Mogą oni * mój * życie łatwiejsze? 🙂 This comes in spurts, kilka razy w miesiącu, Chociaż w niektórych miesiącach nie należy robić to w ogóle.
  • Pomóc w zdefiniowaniu najlepszych praktyk, budować nasze IP i czyni nas bardziej konkurencyjne na rynku. Jesteś doświadczony facet/gal. Już wokół bloku – nie tylko w programie SharePoint, ale masz doświadczenia w innych technologiach i mieszkał przez dobre i złe (nawet straszne) projekty na. W rezultacie, wiesz, co działa a co nie. Będziesz chcemy, aby podzielić się to doświadczenie z nas na co dzień w zmysłu taktycznego (tj.. uruchomić swoje projekty bardzo dobrze) ale także strategicznym.. "Najlepszych praktyk" jest nieco nadużywany jako termin i zawaha się użyć. Podstawowym założeniem jest, że idziesz jako doświadczonej osoby z głębokim i odpowiednie doświadczenie i chcemy zintegrować najlepsze twój wiedza jak angażujemy się z klientami na dzień.
  • Baw się dobrze -Jesteśmy bardzo zintegrowane kilka. Chcę, aby uniknąć kolejny banał, ale to jest naprawdę zdolny w tym przypadku-ciężko pracować (sortowane) i możemy grać jeszcze trudniej :). Istnieje rodzaj Aaron Sorkin przekomarzanie się tutaj, Pokój jest zawsze pełna ludzi, mądry, lubimy nasz napój i organizujemy sporo zabawy imprezy-wieczór filmowy, Baseball wycieczki (nawet jeśli są one straszne, praktycznie złe zespoły).

Jeśli może suma ono wszystko w jednym słowem, Użyłbym słowa "przywództwo." Prowadzić projekty, przyjąć wiodącą rolę w tworzeniu praktyki (IP, budowanie zespołu), itp.

Ale czekaj! Tam jest więcej! Dlaczego jeszcze pracować w slalomie?

  • Niezwykłą jedność woli – każdy chce się rozwijać to coś się. "To coś" jest biuro w Nowym Jorku. Każdy jest na pokładzie w tym.
  • Wiatr w żagle – siostra biura, siostra praktyki – Slalom jest "full service" doradztwo organizacja. Prowadzę praktyki programu SharePoint ("praktyka obszar prowadzić" w slangu Slalom). Mam siostrę praktyk w 11 inne biura Slalom. Więc mimo, że jestem królem ile SharePoint jest rozpatrywany w slalomie New York, Mam peer praktyk w Chicago, Seattle, Dallas, Atlanta, Boston, itp. z którego można wyciągnąć na wsparcie. To naprawdę najlepsze z obu światów-znaczną niezależność tutaj w Nowym Jorku, ale dostęp do ton talent całej organizacji.
  • Wiatr w sprzedaży (2) -Możemy zrobić więcej niż SharePoint – znacznie bardziej. Robimy BI, CRM, UX, doradztwo biznesowe, Mobile, rozwój własnych i innych. Są dobre na krzyż sprzedaży wśród nas i jesteśmy dobrzy, obraz – i co ważniejsze, realizacja na – "pełny serwis" obraz dla naszych klientów. To jest szczególnie atrakcyjne dla mnie. Byłem w wielu mniejszych orgs pracy na koncerty programu SharePoint i sfrustrowany w kółko, ponieważ byliśmy gołębi otworami jako "SharePoint ludzi." Że się nie stanie z Slalom i uda nam się zrobić bardziej ciekawą pracę w wyniku.
  • Modelu lokalnego – nie ma dojazdu.
  • Długoterminowego wzrostu – Slalom działo gangbusters. Mnóstwo stabilności i wzrostu. Wzrost oznacza również, że musimy zatrudnić liderów dziś na czele nowych zespołów, jak dodamy więcej klientów i pracowników do obsługi tych klientów.

Mogłem iść, ale już chyba już poszedł zbyt długo. Myślę, że już pojmany istoty tutaj. Jeśli myślisz o zmianie miejsc pracy i to wygląda dobrze do Ciebie, Porozmawiajmy.

Jeśli jesteś szczęśliwy w obecnej pracy – Porozmawiajmy tak :). Byłem w wielu miejscach i był bardzo "szczęśliwy" w czasie. Slalom jest inny i chciałbym powitać szansę przekonać się, że.

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Szybkie i łatwe: Ustaw wielkość elementów w polu listy w App Windows Store

W Windows Store App tworzę, Chcę pokazać użytkownikowi różne komunikaty informacyjne.  Wybrałem ListBox jako narzędzie, aby pokazać je tak, że mogą one przewijać je i wszystko, co dobre rzeczy. 

Wiadomości mają wyłącznie charakter informacyjny, tak jest nie ma potrzeby, aby zapewnić wszystkich, że dodatkowe spacje wokół nich, ponieważ użytkownik nigdy nie może wybrać im do niczego.  Domyślne zachowanie elementu ListBox stanowi znaczną część dopełnienie i chciałem się go pozbyć.  Dobrze.... bezpośrednio nie można zrobić tego rodzaju rzeczy na ListBox.  JEDNAK, można to zrobić do elementów, które można dodać:

        prywatne nieważne AddGameStateLogMessage(ciąg Wiadomości)
        {
            Pole tekstowe t = Nowy Pole tekstowe();
            t.Text = GameStateCounter    + ": " + Wiadomości;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Grubość thisPadding = Nowy Grubość(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = Nowy ListBoxItem();
            li.Treść = t;
            li.MaxHeight = 25;
            thisPadding = Nowy Grubość(5, 0, 5, 0);
            li.Uzupełnienie = thisPadding;

            GameStateLog.Items.Insert(0,Li);
        }

w powyższym, Jestem utworzenie pola tekstowego i ustawienie jej czcionki, jego dopełnienie, itp.

Następny, Tworzenie ListBoxItem i ustawić jego zawartości do pola tekstowego sformatowanego.

Wreszcie, Wstawić ListBoxItem do listy.  (Chcę pokazać najnowsze wiadomości w górnej części listy, stąd Insert(0,Li) a nie proste Dodawanie() wywołania.).

I będzie się szczypanie to nieco wcześniej, jestem naprawdę zadowolony z zachowaniem ListBox, ale wzór pokazany powyżej była bardzo owocna.  Mam nadzieję, że ktoś znajdzie to pomocne.

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin