カテゴリーアーカイブ: MOSS

MOSS の高度な検索のカスタマイズ — XSLT の高度な検索で大文字小文字を区別は

しばしば非常に高度な検索の XSLT を変更しないでください。, たびに小さな丘を登っているようなそうです。.

これは、私の最新のレッスン: ケース列を参照するときの問題します。. 私の高度な検索, これとして定義された列をあります。:

<ルート xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
>
<
名前="GafTrainingInvoiceNumber" />
<
名前="GafTrainingInvoiceLocation" />
<
名前="ワーク Id"/>
<
名前="ランク"/>
<
名前="タイトル"/>
<
名前="著者"/>
<
名前="サイズ"/>
<
名前="パス"/>
<
名前="説明"/>
<
名前="書き込み"/>
<
名前="SiteName"/>
<
名前="CollapsingStatus"/>
<
名前="HitHighlightedSummary"/>
<
名前="HitHighlightedProperties"/>
<
名前="ContentClass"/>
<
名前="IsDocument"/>
<
名前="PictureThumbnailURL"/>
</
>
</
ルート>

請求書番号、請求書の場所を表示します XLST をされていた:

<p>
トレーニング請求書番号: <xsl:値の 選択="GafTrainingInvoiceNumber"/>
<
br></br>
請求書の研修場所: <xsl:値の 選択="GafTrainingInvoiceLocation"/>
</
p>

ただし, 選択はすべて小文字でプロパティを参照するには, ように:

<p>
トレーニング請求書番号: <xsl:値の 選択="gaftraininginvoicenumber"/>
<
br></br>
請求書の研修場所: <xsl:値の 選択="gaftraininginvoicelocation"/>
</
p>


私はそれを修正するまで, 検索結果ラベル (すなわち. 「トレーニング請求書番号」) データがありませんが、.

MOSS / InfoPath フォームのサーバー (InfoPath 2007) ドロップ ダウン リストのパフォーマンス

追加カテゴリ: InfoPath

概要: InfoPath 2007 MOSS のカスタム リストに関連付けられたベンダーのドロップ ダウン リストを提供するフォーム MOSS サーバーに展開するには. 仕入先を選択します。, ルールは、一握りのセールス担当者名などのテキスト フィールドにフィールドの値を割り当てる, アドレス, 都市, 状態, 郵便番号と電話. パフォーマンスは恐ろしいです。. 我々 のパフォーマンスが悪化に気づく (非直線に) それぞれの追加フィールドにこのようにを更新します。. すなわち, 私達はちょうど場合営業担当者名を更新します。, かかる [x] 時間の量. もし我々 は営業担当者を更新, 住所 1, 住所 2, 都市, 状態, zip, かかる 10 長い時間.

ソリューション: Web サービスを作成します。 (サンプル コードを見つけることができます。 ここで) 仕入先の名前、渡され、バック ベンダーの詳細が返されます. [, この方法をフィールドに割り当てる. これはあまりにも思えるが低下します。, 差はなかった discernable のパフォーマンスで我々 が割り当てられたとき 1 対フィールド 8 フィールド. 追加ボーナスとして, ユーザーは、クールな"サーバーに接続を取得します。" サイロン 効果を呼び出すし、サービスの結果を処理するフォームを待っている間.

MOSS: 例外が発生しました. (HRESULT からの例外: 0x 80020009 (DISP_E_EXCEPTION))

更新プログラム: 我々 は再びこの問題とそれは決して表面の根本原因を決定.

我々 開発サイトの実装時に、突然の通知します。, 2 人のユーザーがサイト コレクションにアクセスすることはありません。. それらのアカウントのメインのサイトに認証することができます。, しかし、特定のサイト コレクションにアクセスしようとするとき, 彼らは、空白のスクリーンをちょうど得る. エラー表示なし, ちょうど白い空白のページ.

我々 は、サイト コレクションの管理者としてログインし、それらのユーザーの 1 つは、サイト管理者とこの時間として追加しようとしました。, 「OK」を押す時に, このメッセージを取得します。:

例外が発生しました. (HRESULT からの例外: 0x 80020009 (DISP_E_EXCEPTION))

これを研究に時間を費やして、残念ながら, 何の役に立つが来なかった. 診断ログにいくつかのメッセージがあった。, しかし、正確にこの問題に相関するは難しかった.

最後に, サイト コレクションを削除して、それとは、再作成されますそれを解決.

私は把握する場合この将来の原因は何, 私はこのポストが更新されます。.

MOSS: カスタム リストを反復処理して、InfoPath にフィルター選択されたデータを返す

ビジネス シナリオ:

正確な購買依頼をすばやく入力することができますメソッドを提供します。.

ビジネス上の問題:

クライアントはいくつかの百のベンダーとビジネスを行います.

ベンダーは"の種類" 特定. つまり、コンピューター機器をベンダーに販売 (例えば. Dell) またはオフィス用品 (例えば. ステープルズ).

私たち購入依頼選択有効な仕入先を作成するエンドユーザーを有効にする方法?

ビジネス ソリューション:

「タイプ」を介してシステムのベンダーを区別します。.

"タイプを選択するユーザーを有効にします。" 製品の適切なベンダーのフィルター処理されたセットを提供します。.

技術ソリューション:

InfoPath フォームは、オンラインを入力することができます購買依頼に設計されています.

2 つの InfoPath 選択リスト コントロール ベンダーの選定. 最初, ユーザーが「購入タイプ」を選択します。. これは制限のような購入を販売するベンダーのみを格納する 2 番目の選択リスト. これは古典的なカスケード ドロップダウンです。.

ベンダーは、ベンダーなどの属性の名前のカスタム列と MOSS のカスタム リストに格納されています。, アドレスおよび特に「種類」.

カスタムのベンダー リストを反復処理して、InfoPath クライアントを消費するための web サービスを実装します。, 指定の「タイプ」と一致するベンダーのみを返す.

InfoPath フォームから web サービスを呼び出す.

学んだ教訓:

  • 最初, このルートに行くが必要です。. InfoPath 内で完全にフィルタ リングを行うし、web サービス機能をここで作成する希望があります。. ただし, フォーム サーバーが必要なフィルタ リング機能を提供しません. 上にルールを置くことができます、"の種類" 選択形式のリストで、並べ替えの再クエリを開く、ベンダー, 我々 は正しく働くためにそれを得ることができません。. したがって, web サービスを実装する必要があります。.
  • これは、古典的な"カスケード選択リストです。" 問題は、InfoPath でフォーム サーバー世界とそこには、この問題を解決する方法を説明する多くの良い例があります。.
  • ベンダー リスト内の列の空白の値がこのような参照する場合は、空の文字列を返さない: initItem[「ベンダー名"]. 代わりに, null を返します.

いくつかの他のノート:

  • 配列を返す[] ベンダーの ArrayList を返すいくつかの困難を持っていたので. InfoPath はそれについて不平を言っていたし、私は、時間またはそれ以上の戦いへの傾斜を持っていなかった. これは、, もちろんです, ベンダーの総数に人工の限界を置く. それも私せざるを得ない、トリムを実装() 配列のメソッドを返すのアイデアを嫌いだからバックアップ 100 null ベンダーの. InfoPath は気にしません。, しかし、私に nagged. (もう一度, これは Arraylist に比べて InfoPath に戦ってより簡単だった).
  • GetSpecificVendorByName を実装() 同様の関数, 有益であるかもしれない.

コード:

使用してください。 システム;
使用してください。 System.Web;
使用してください。 System.Web.Services;
使用してください。 System.Web.Services.Protocols;
使用してください。 Microsoft.SharePoint;
使用してください。 System.Configuration;

/// <概要>
///
ベンダー サービス: 関連ベンダーが、今日はフォーム クライアントによって消費されるサービスを提供します。.
///
/// 歴史:
/// ——–
/// 07/24/07: 初期のコーディング, Paul J. Conchango のギャビン.
///
/// </概要>
[Web サービス(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
パブリック クラス VendorService : System.Web.Services.Web サービス
{

/// <概要>
/// MSUSA によって保持されるカスタム sharepoint リストからベンダーを表します.
/// </概要>
パブリック クラス ベンダー
{
パブリック ベンダー() { }

パブリック ベンダー(SPItem initItem)
{
場合 (! (initItem[「ベンダー名"] == null)) VendorName = initItem[「ベンダー名"].ToString();
場合 (! (initItem["住所 1"] == null)) VendorAddress1 = initItem["住所 1"].ToString();
場合 (! (initItem["住所 2"] == null)) VendorAddress2 = initItem["住所 2"].ToString();
場合 (! (initItem[「都市"] == null)) VendorCity = initItem[「都市"].ToString();
場合 (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
場合 (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
場合 (! (initItem["状態"] == null)) VendorState = initItem["状態"].ToString();
場合 (! (initItem[「Zip"] == null)) VendorZip = initItem[「Zip"].ToString();
場合 (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
場合 (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // MOSS を使用して管理の一意の ID.
}

パブリック int VendorItemId;
パブリック 文字列 VendorName;
パブリック 文字列 VendorAddress1;
パブリック 文字列 VendorAddress2;
パブリック 文字列 VendorCity;
パブリック 文字列 VendorState;
パブリック 文字列 VendorZip;
パブリック 文字列 VendorPhone;
パブリック 文字列 VendorType;
パブリック 文字列 VendorSalesRepName;
パブリック 文字列 VendorFax;
}

パブリック VendorService () {

//デザインされたコンポーネントを使用している場合、次の行のコメントを解除します。
//InitializeComponent();
}

プライベート ベンダー[] GenerateTestVendors()
{
ベンダー[] resultList;
resultList = 新機能 ベンダー[100];

ベンダー v;
v = 新機能 ベンダー();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = 」v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";

resultList[0] = v;

v = 新機能 ベンダー();

v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";

resultList[1] = v;

v = 新機能 ベンダー();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";

resultList[2] = v;

戻り値 resultList;

}

[WebMethod]
パブリック ベンダー GetSpecificVendorById(int vendorId)
{
文字列 SpVendorSiteName; // ベンダーのカスタム リストをホストする実際の MOSS サイトの名前.
文字列 SpVendorListName; // ベンダーを含む実際の MOSS リストの名前.

SpVendorSiteName = フレーム.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = フレーム.AppSettings["VendorList"].ToString();

使用してください。 (SPSite サイト = 新機能 SPSite(SpVendorSiteName))
{

使用してください。 (SPWeb web サイトを =。OpenWeb())
{

SPList 現時点 web を =。リスト[SpVendorListName];

SPItem 分野 = currentList.Items[vendorId];

戻り値 新機能 ベンダー(品目);

} // spweb の web を使用して site.openweb を =()
} // spsite のサイトを使用して新しい spsite を =("http://localhost/みずほ」)

}

[WebMethod]
// ベンダー名が一意であると仮定します。, ビジネスの観点から
パブリック ベンダー GetSpecificVendorByVendorName(文字列 する)
{
文字列 SpVendorSiteName; // ベンダーのカスタム リストをホストする実際の MOSS サイトの名前.
文字列 SpVendorListName; // ベンダーを含む実際の MOSS リストの名前.

SpVendorSiteName = フレーム.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = フレーム.AppSettings["VendorList"].ToString();

使用してください。 (SPSite サイト = 新機能 SPSite(SpVendorSiteName))
{
使用してください。 (SPWeb web サイトを =。OpenWeb())
{

SPList 現時点 web を =。リスト[SpVendorListName];

foreach (SPItem vendorItem currentList.Items)
{
場合 (vendorItem[「ベンダー名"] == null) 続行;

場合 (vendorItem[「ベンダー名"].ToString().等しい(する))
戻り値 新機能 ベンダー(vendorItem);
}

ベンダー v = 新機能 ベンダー();
v.VendorPhone = "が見つかりません: " + する;

戻り値 v;

戻り値 null;

} // spweb の web を使用して site.openweb を =()
} // spsite のサイトを使用して新しい spsite を =("http://localhost/みずほ」)

} // メソッド

[WebMethod]
パブリック ベンダー[] GetVendorsOfType (文字列 filterType)
{

文字列 SpVendorSiteName; // T をホストする実際の MOSS サイトの名前
彼のベンダーのカスタム リスト.
文字列 SpVendorListName; // ベンダーを含む実際の MOSS リストの名前.

SpVendorSiteName = フレーム.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = フレーム.AppSettings["VendorList"].ToString();

ベンダー[] resultList;
int vendorIndex = 0;
resultList = 新機能 ベンダー[1000];

// 既定のフレンドリーなメッセージでリストを初期化します。.
ベンダー v = 新機能 ベンダー();
v.VendorName = "このリストにベンダーの種類を選択します。";
resultList[0] = v;

// フィルターを簡単に文字列比較後小文字に変換します。.
filterType = filterType.ToLower();

// フィルターの種類が渡された場合は「テスト」, いくつかの単純なデータを生成します。.
#地域 フィルターの種類 ="テスト"
場合 (Equals filterType。("テスト"))
戻り値 GenerateTestVendors();
#endregion

場合 (true)
{
使用してください。 (SPSite サイト = 新機能 SPSite(SpVendorSiteName))
{
使用してください。 (SPWeb web サイトを =。OpenWeb())
{

v = null;

SPList 現時点 web を =。リスト[SpVendorListName];

// 仕入先一覧のすべての項目を反復処理します。.
foreach (SPItem vendorItem currentList.Items)
{

文字列 lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

場合 (Equals lowerVendorType。(filterType))
{
resultList[vendorIndex ] = 新機能 ベンダー(vendorItem);
}
} // リスト内のすべてのベンダーを通じて反復処理


戻り値 TrimVendorArray(vendorIndex, resultList);
// resultList を返す;

} // spweb の web を使用して site.openweb を =()
} // spsite のサイトを使用して新しい spsite を =("http://localhost/みずほ」)

} // true の場合

戻り値 null;
}

プライベート ベンダー[] TrimVendorArray(int newsize, ベンダー[] originalVendorArray)
{
ベンダー[] trimmedArray;

場合 (newsize = = 0) newsize = 1;
trimmedArray = 新機能 ベンダー[newsize];

int currentCounter = 0;

ため (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

戻り値 trimmedArray;

}
}