カテゴリーアーカイブ: SharePoint 開発

HTTP 406 SharePoint の残りの部分の端点に対する角度の $http.get を使用するときのエラー

更新プログラム: 情報のこの素晴らしい作品を指摘したマルク広告 ndersson: http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/. たくさん説明します。 :).

それが今まで、最悪、ブログの記事のタイトルがあります。! Anyhoo.

通常 O365 インスタンスに対して私のプロトタイピングの全力します。. 私は他の誰に影響を与える心配する必要はありませんので、私の個人的なインスタンスがある私. 余談として-覚えている我々 がモス – で私たちのラップトップ上の仮想マシンの周り実施呼び出し SQL Server, IIS, ハイパー V 対を決定します。. VMWare? Anyhoo.

角はこの環境を使用してアプリを開発していた, 他のものの間で, この:

$http.get(serverUrl)
.成功(関数(データ, ステータス, ヘッダー, 設定) {

var getLinksResponse = データ;

getLinksResponse.value.forEach(関数(その結果) {

// およびそう泡

これは 2 つの異なる SharePoint オンライン環境でうまく働いていた. ただし, とき私の同僚は Cloudshare インスタンスにそれを移植, 彼が得ていた、 HTTP 406 エラー (私はこれまで 1 つを得たの初めてだった, ... イェーイ, 思います). 我々 は研究のビットを行なったし、「受け入れる」ヘッダーがオフだったことに気づきました. SharePoint のオンラインは完全に満足していた:

受け入れる: アプリケーション/json

Cloudshare のインスタンスが (プレム上 SP であります。, 仮想サーバーでホストされています。) 古典的なしたかった"odata verbose ="同様の追加:

受け入れる: アプリケーション/json;odata = 詳細

それを修正するには, 我々 はそのヘッダーを追加:

var 構成 = {ヘッダー: {
' 受け入れる ': ' アプリケーション/json;odata verbose ='
}
};

$http.get(serverUrl,設定)
.成功(関数(データ, ステータス, ヘッダー, 設定) {

var getLinksResponse = データ;

getLinksResponse.value.forEach(関数(その結果) {

// およびそう泡

処分したこと、 406, しかし、それはまた、応答の形式を変更. 詳細は... 詳細. (ハハ!) 多くの変更が必要であり、ここで最終結果:

var 構成 = {ヘッダー: {
' 受け入れる ': ' アプリケーション/json;odata verbose ='
}
};

$http.get(serverUrl,設定)
.成功(関数(データ, ステータス, ヘッダー, 設定) {

var getLinksResponse = データ;

getLinksResponse.d.results.forEach(関数(その結果) {

// およびそう泡

これだけになって、 30 私たちの分の問題, だから私たちは尽きてください。. うまくいけば、誰かがこの役に立つ見つける.

</終了>

意識の高まり / JavaScript フレームワークの導入

私の同僚, Javed アンサリ (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), 彼は好き嫌いが少なくとも使用されている sharepoint のフレームワーク上の短い概要ブログ記事を書いた: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery は、フィールドの勝利者をされているようです。, いわば, 今年のため, しかし、他の人はより新しいや静止画ようそれを戦って, 角のような. (SPServices, もちろんです, 年の命の恩人をされているし、思うのでしていきます).

どのような人々 を使用しています。? 彼らに焦点を当てた Microsoft のツーリング (CSOM / JSOM) または角に向かってよりを移動, ノックアウト, エンバー, など?

これらマイクロソフト以外のフレームワークに向かって成長しているバイアスをあります。. MSFT ものは使用しにくく、だと思う, ほぼ限りの旧式のサーバー側 dev としての学習曲線を必要とします。.

ここではコメントを投稿または上で ビッグ ・ アップル SharePoint 議論したい場合 (ビッグ ・ アップルの良い議論のより多くの可能性があります。).

</終了>

サイト コレクションの構成から SharePoint タイマー ジョブを回転

私の同僚, Ashish パテル, ブログ記事を書いた 柔軟なタイマー ジョブ アーキテクチャを記述します。 実行時間の長いタスクやレポートをサポートするためにいくつかの素敵な柔軟性を提供します。  彼の言葉で:

1. チェック ファイルを分析し、個人にアラームを送信する場合は、番号の日 (ファイルがチェック アウトされたので) ある特定の限界を超える

2. その他のコンテンツからリンクを削除して、特定のコンテンツが削除またはシステムからアーカイブ

3. ユーザーが彼は、サイト コレクション内のすべての web でサブスクライブしているすべてのアラートを表示するには

4. コンテンツで指定されたレビュー時間と日が近づいているときに内容を確認する作成者に、アラームを送信します。

よく, リスト上で行く.

– 詳細を参照してください。: http://www.bigapplesharepoint.com/ページ/ビュー-、-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

ときこのような何かを持っていることは非常に役に立っている私の過去に時があります。.

</終了>

操作方法: 単体テストおよびテスト カバレッジを QUnit.js と Blanket.js オフィスを構成します。 365 SharePoint アプリ

イントロ

単体テストを模索してきたし、オフィスでオンラインの SharePoint の新しい SharePoint アプリの作業を行う JavaScript のテスト カバレッジ 365 スイートです。  明白な研究のパスに私を導いた Qunit.js 右の後, 宛先 Blanket.js.

QUnit では、単体テストを設定し、モジュールにグループ化しましょう。  モジュールはちょうど関連テストを整理する簡単な方法です。. (私は意図したとおりに使っていますかわからない, しかし、私がこれまでに定義されたテスト一連の小規模でこれまで私の仕事は).

Qunit と Blanket.js の統合し、それ私があった- ともっと重要なは-実際に実行されなかった、テストの実行の過程で JavaScript の実際のラインが表示されます。  これは「カバレッジ」-他はないテストによって実行される行がカバー.

良いテスト _ ケースを設定すると、カバレッジの表示, 我々 は我々 のコードの欠陥を隠しているリスクを減らすことができます。  良い回.

Qunit

セットアップ プロジェクトを Visual Studio があると仮定すると, パッケージの java スクリプトの設定をダウンロードして起動します。 http://qunitjs.com.  JavaScript と対応する CSS をソリューションに追加します。  このような鉱山:

image

図 1

ご覧のとおり, 私が使っていた 1.13.0 このブログを書いた時点で投稿します。. ダウンロードし、CSS ファイルを追加することを忘れないでください。.

その方法のうち, 次のステップは、テスト ハーネスのいくつかの種類を作成し、Qunit ビットを参照します。  "QuizUtil_test.html"のようにと呼ばれる HTML ページを作成するので"QuizUtil.js"と呼ばれるスクリプト ファイルで機能の束をテストしています:

image 図 2

ここでは、コードです。:

<!DOCTYPE html>
<html xmlns「http =://www.w3.org/1999/xhtml">
<ヘッド>
    <タイトル>Qunit と QuizUtil テスト</タイトル>
    <リンク rel="スタイル シート" href="../CSS/qunit-1.13.0.css" />
    <スクリプト タイプ"テキスト/java スクリプトの設定を =" src="QuizUtil.js" データ カバー></スクリプト>
    <スクリプトの型 ="テキスト/javascript" src ="qunit 1.13.0.js"></スクリプト>
    <スクリプトの型 ="テキスト/javascript" src ="blanket.min.js"></スクリプト>

    <スクリプト>
        モジュール("getIDFromLookup");
        テスト("QuizUtil getIDFromLookupField", 関数 () {
            var ストックホルム = "1;#ポール Galvin";

            等しい(getIDFromLookupField(ストックホルム) + 1, 2), "の ID [" + ストックホルム + "] + 1 2 をする必要があります。";
            等しい(getIDFromLookupField(未定義), 未定義, 「未定義の入力引数が未定義結果を返す必要があります。");
            等しい(getIDFromLookupField(""), 未定義, "空の入力引数が未定義の値を返す必要があります。");
            等しい(getIDFromLookupField("gobbledigood3-thq;dkvn アダ;skfja sdjfbvubvqrubqer0873407t534piutheqw;(ヴァイオリン)"), 未定義,「返す必要があります常に結果のコンバーチブルを整数");
            等しい(getIDFromLookupField("2;#いくつか他の人"), "2", "チェック [2;#いくつか他の人].");
            等しい(getIDFromLookupField("9834524;#long 型の値"), "9834524", 「大きな値のテスト。");
            等号否定(getIDFromLookupField("5;#誰もが", 6), 6, "テスト、等号否定 (5 等しくないです。 6 このサンプルについて: [5;#誰もが]");

        });

        モジュール("htmlEscape");
        テスト("QuizUtil htmlEscape()", 関数 () {
            等しい(htmlEscape("<"), "&lt;", "エスケープ演算子よりも少ない ('<')");
            等しい(htmlEscape("<div クラス = "someclass">いくつかのテキスト</div>"), "&lt;div クラス =&quot;someclass&quot;&gt;いくつかのテキスト&lt;/div&gt;", 」より複雑なテスト文字列です。");
        });

        モジュール("getDateAsCaml");
        テスト("QuizUtil getDateAsCaml()", 関数 () {
            等しい(getDateAsCaml(新機能 日付(「2013/12/31")), "2013年 12 31T:00:00:00", 「テストのハード コーディングされた日付: [12/31/2013]");
            等しい(getDateAsCaml(新機能 日付("01/05/2014")), 「2014年-01-05T:00:00:00", 「テストのハード コーディングされた日付: [01/05/2014]");
            等しい(getDateAsCaml(新機能 日付("01/31/2014")), 「2014年 01 31T:00:00:00", 「テストのハード コーディングされた日付: [01/31/2014]");
            等しい(getTodayAsCaml(), getDateAsCaml(新機能 日付()), "getTodayAsCaml() getDateAsCaml を等しく必要があります。(新しい日付())");
            等しい(getDateAsCaml("ナンセンス値"), 未定義, "ナンセンス値の日付を取得しようとしてください。");
            等しい(getDateAsCaml(未定義), 未定義, "の日付を取得しようとすると、 [未定義] 日付。");
        });

        モジュール("getParameterByName");
        テスト("QuizUtil getParameterByName (クエリ文字列から)", 関数 () {
            等しい(getParameterByName(未定義), 未定義, "を取得しようとすると、未定義のパラメーターは未定義を返す必要があります。");
            等しい(getParameterByName("は存在しません"), 未定義, "我々 は知っている、パラメーターが存在しないときにパラメーター値を取得しようとしてください。");

        });

        モジュール("クッキー");
        テスト(「QuizUtil 様々 な cookie 機能。", 関数 () {
            等しい(setCookie("テスト", "1", -1), getCookieValue("テスト"), "Get 設定私はクッキーが動作するはずです。");
            等しい(setCookie("anycookie", "1", -1), true, "有効な調理返す必要があります 'true'。");
            等しい(setCookie("クレイジー クッキー名 !@#$%"%\^&*(()?/><.,", "1", -1), true, ' 悪い cookie 名を設定する必要があります false を返す ''。");
            等しい(setCookie(未定義, "1", -1), 未定義, 渡すことは、クッキー名として定義されていません。");
            等しい(getCookieValue("は存在しません"), "", "クッキーはテストは存在しません。");
        });

    </スクリプト>
</ヘッド>
<>
    <div id"qunit ="></div>
    <div id「qunit フィクスチャを ="></div>

</>
</html>

ここで起こっているいくつかのものがあります。:

  1. 私のコードを参照します。 (QuizUtil.js)
  2. Qunity.js を参照します。
  3. いくつかのモジュールを定義します。 (getIDFromLookup, クッキー, その他)
  4. 配置する、 <div> ID が"qunit".

[, 私はちょうどこのページを引き出すし、このような何かを得る:

image

図 3

場合は、上部に見て, いくつかのオプションがあります。, 2 つは面白い:

  • 非表示のテストに合格しました。: かなり明らか。  ちょうど問題の領域と多くの散乱を見るあなたの目を助けることができます。.
  • モジュール: (ドロップ ・ ダウン): これはちょうどそれらのテストのグループまでテストをフィルター処理します。.

彼ら自身で – いくつかのコメント テストに関して:

  • それが最初の場所でテスト可能なコードを記述する必要があること言うまでもなく行きます。  その規律の強化を助けることができるツールを使用. 例えば, "GetTodayAsCaml と呼ばれる機能を持っていた()”.  入力引数をとらないので、これは非常にテストし、等しいかどうかをテストするには, 我々 は常に現在の日付を反映するようにテスト コードを更新する必要があります。  データの入力パラメーターを追加し、CAML 形式で今日の日付の場合、現在の日付を渡すことによってそれをリファクタリング.
  • Qunit フレームワーク ドキュメント独自にテストし、かなり堅牢なようです。  等価性テストのような単純なものを行うことができ、ajax スタイルの呼び出しをサポートしています (使用してあなたのお気に入りの曲以上の「本物の」またはモック).
  • 「未定義」で何が起こる-エッジ ケースを通して考える強制的プロセスを経てもまたは関数に null が渡されます。  それはうちこれらのシナリオをテストする死者は簡単です。  良いもの.

Blanket.js とカバレッジ

Blanket.js はあなたのテストの実行中に実行されるコードの実際のラインを追跡することによって Qunit を補完します。  それはこれにもかかわらずそれは全体の別々 のアプリ Qunit に権利を統合します。, それは素敵なを果たしている-実際に 1 つのシームレスなアプリケーションのように見えます.

これはアクションで blanket.js:

image 図 4

image

図 5

(実際に上部の「カバレッジを有効にする」チェック ボックスをオンをクリックする必要があります。 [図を参照してください。 3] これをできるようにします。)

図で強調表示された行 5 私のテストのいずれかが実行されていません。, それらを引き起こす完全なカバレッジをする場合に実行するテストを考案する必要がありますので.

次の手順で作業 blanket.js を取得します。:

  1. それをダウンロードします。 http://blanketjs.org/.
  2. プロジェクトに追加します。
  3. テスト ハーネス ページを更新します。 (私の場合 QuizUtil_test.html) 次のように:
    1. 参照コード
    2. 飾るあなた <スクリプト> このような参照します。:
    <スクリプト タイプ"テキスト/java スクリプトの設定を =" src="QuizUtil.js" データ カバー></スクリプト>

Blanket.js は、データ-カバー」属性をピックアップし、その魔法が。  それは Qunit にフックします。, 「カバレッジを有効にする」オプションを追加する UI を更新し、出来上がり!

概要 (TL; 博士)

Qunit を使用して、テスト _ ケースを作成.

  • それをダウンロードします。
  • プロジェクトに追加します。
  • テスト ハーネス ページを書く
  • テストを作成します。
    • いくつかは、テスト コードをリファクタリングします。
    • 創造的であります。!  クレイジーだと思う, 不可能なシナリオとそれらをとにかくテスト.

カバレッジを確保するのに blanket.js を使用します。

  • Qunit が動作を確認してください。
  • Blanket.js をダウンロードし、プロジェクトに追加
  • テスト ハーネス ページを追加します。:
    • Blanket.js への参照を追加します。
    • 「データ カバー」属性を追加して <スクリプト> タグ
  • Qunit テストを実行します。.

私は決してこれを前にいずれかを行なったし、時間のほんの一握りで働いていくつかの初歩的なものを持っていた。 

ハッピー テスト!

</終了>

undefined私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin

Lists.asmx, GetList と「値 null にすることはできません。”

私は今日の発見は、GetList() メソッドで lists.asmx web サービスは、非常に慎重と呼ばれていますをか神秘的な」値は null にすることはできません」例外をスローする傾向があります。 (だとして、さらに悪いことの一般的なエラー メッセージ過去を得ることができます。, "型の例外 ' Microsoft.SharePoint.SoapServer.SoapServerException’ スローされました。")  具体的には, GetList メソッドに任意の種類のプレフィックスを提供できないこと.  次の jQuery のスニペット、ポイントを示しています:

image

する場合, 「値このあたりとしてヌルできませんと「web サービスの応答 fiddler-HTTP コピーを提供:

<?xml のバージョン ="1.0" エンコーディング =「utf-8」?>
  <soap:封筒
     xmlns:soap ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:xsi =」
http://www.w3.org/2001/XMLSchema-instance
     xmlns:xsd ="
http://www.w3.org/2001/XMLSchema">

  <soap:体>
    <soap:障害>
      <faultcode>soap:サーバー</faultcode>
      <違反>
        例外の種類 ' Microsoft.SharePoint.SoapServer.SoapServerException’ スローされました。.
      </違反>
      <詳細>
        <errorstring xmlns ="
http://schemas.microsoft.com/sharepoint/soap/">
値を null にすることはできません。.
        </errorstring>
      </詳細>
    </soap:障害>
  </soap:体>
</soap:封筒>

もちろんです, おそらくその「s0」プレフィックスを独自の追加はないです。, しかし、いくつかのツールはそれをする傾向があります。 (Eclipse のような).

これはすべてより多くの混乱 / イライラするので、プレフィックスの他の方法を容認します。  例えば, 、 GetListCollection メソッドの気にしないそれが付いているかどうか, "xyzzy"のようなナンセンス プレフィックスも:

image

これは、「値は、null にできません」そううまく行けばこれが助ける誰か将来の lists.asmx でかなり一般的なようです。.

</終了>

私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin

無限のネスト <div> タグと jQuery

これは、ようなのような型破りなトピックです。, 私はそれは本当にについてのブログの価値があるか分からない, しかし、決して私の前に停止しています。, だからここに行く スマイル

私はここで私はいくつかのデータの検索から引っ張ってプロジェクトに取り組んでいます。, パッケージ XML メッセージにし、XML は、最終的に XSLT で HTML に変換されます。  たくさんある jQuery の関与, 1 つのビットはいくつかのタブ機能を実装します。  上のタブをクリックすると (本当に, は <div>), jQuery の .hide を呼び出す() .show() さまざまな div に (ポストバックがないのでこの場合、最初のページのロードのすべてのコンテンツをダウンロードします。).

前の束, 動作が不安定にロジックを切り替えタブを開始し、それは私のタブのいずれかを表示されません。  私は最終的には、実際には、インターネット エクスプ ローラーを追跡 (少なくとも) 考え、 <div> これまで入れ子になったタグ, 意図したよりもはるかに深い。[開発者用] ツールバーを表示します。:

-<div id ="Tab1Content">
  -<div>
    -<div>
      -<div id ="Tab2Content">
        -<div>
           …………………………
                   </div>  <— 最後にそれを表示では、ここにすべての方法を閉鎖されました。!

だから, か、 $(「# Tab1Content」).非表示します。(), 私はまた Tab2 を隠すだろうし、私は私がまた Tab1 を示さなかったかどうか Tab2 を見ることが。  コピーし、visual studio と、すべての div の裏地をうまく示したにコードを貼り付け, 同じように彼らのことになっていた, このような:

-<div id ="Tab1Content">
  +<div>
  +<div>
-<div id ="Tab2Content">
  +<div>
  +<div>

私はしばらくの間の壁に対して私の頭を打つし、実際の HTML の多くの空のコードを生成していたことに気づいた <div> タグ, ような:

<体>

  <div id ="Tab1Content">

    <div id」row1」=/>
    <div id」[row2」=/>

  </div>

  <div id ="Tab2Content">

    <div id」row1」=/>
    <div id」[row2」=/>

  </div>

</体>

(上記の単純にしすぎ waaaaaaaaaaaay です。  空の div タグが完全に有効であります。. いくつかの私 <div> タグの内容でした。, しかし、多くはなかった。  私は実現に来た、私 <xsl:それぞれ> ディレクティブは、短い形式が発光された div タグと xsl:各 didn't ' のデータを見つけます。  私は、出力に、HTML コメントを強制, 示すように:

image

 

私はそれをした後, すべての div がきれいに並んで、私のタブの切り替え作業開始.

いつものように, これはピンチで誰かに役立ちます願っています.

</終了>

私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin

1 つの原因「このフォールト作成者理由を指定していないため。”

多くの SharePoint 検索最近、具体的には KeywordQuery クラスの仕事をやっています。, プロパティとメソッド.

結果を通常の容疑者を超える結果を設定する場合 (ここを参照してください。), SelectedProperties コレクションに追加します。, ように:

myKeywordQuery.SelectProperties.Add("xyzzy");

多くの感謝と、帽子の先端 コーリー ・ ロスこの非常に有用なブログ記事 (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

私の場合, "xyzzy"実際には管理プロパティではありません。  とき私はそれ SelectedProperties にとにかく追加, SharePoint を投げた私のお気に入りの 1 つがランタイム例外:

「このフォールト作成者は、理由をは指定しなかった」。

私は理由の「R」資本を特に好きです。  これは私のような音がします。相当の」私の口があります。, 悲鳴を上げる必要があります。.”

</終了>

私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin

便利なリファレンス: デフォルト検索の結果を KeywordQuery

Execute を呼び出すとき() メソッドは、KeywordQuery に, ResultType.RelevantResults に基づく ResultTable を作成することができます。  このコード スニペットは私の意味を示しています。:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

結果のテーブルは次の列の情報があります。: 

ワーク Id
ランク
タイトル
著者
サイズ
パス
説明
書き込み
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

私はこのリストを SharePoint から派生 2010 環境, エンタープライズ ・ エディション。  うまく行けば、将来的に誰かに便利なのでしょう.

</終了>

私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin

1 つの理由: 「ソリューションの cab ファイル抽出に失敗しました。”

Visual studio web パーツでの作業中のプロジェクト今日, 私は、マイナーの再組織の _layouts フォルダーに、展開プロセスの一部として配置するいくつかのファイルでした。. 具体的には, 「先行の .js ファイルを「TypeAhead.js」名前を変更(古い).js」  私はその後継者「TypeAhead.js」が正しい証明とすぐそれを削除します。  このように見えた:

image

これは、プロジェクトを配置しようとするとすぐに、visual studio と原因:

配置手順 'ソリューションの追加' でエラーが発生しました: ソリューションの cab ファイルを抽出できませんでした。.

実は、かっこファイル名に入れてはなりません。  私は削除を括弧とは、問題を解決.

</終了>

私のブログを購読します。.

私は Twitter の上に従ってください。 http://www.twitter.com/pagalvin