2012-01-12 22 views
2

EPiServerのみ:プロパティ内の任意の値を持つページを検索する

特定のプロパティの任意の値を持つページを検索するにはどうすればよいですか?私はプロパティの特定の値を持つページの検索を行うことができますが、私は "空ではない"を検索する方法を見つけることができません。

例えば、これは動作しません:

は、例外がスローされ
var criterias = newPropertyCriteriaCollection 
{ 
    new PropertyCriteria() 
    { 
    Condition = CompareCondition.NotEqual, 
    Name = "MyProperty", 
    IsNull = false, 
    Type = PropertyDataType.String, 
    Value = "" 
    } 
}; 

var pages = DataFactory.Instance.FindPagesWithCriteria(PageReference.StartPage, criterias); 

、「crieria値がnullまたは空にすることはできませんnullを検索するためには、IsNullプロパティを設定します。。」

アイデア?

答えて

-2

空の値を見つけるには、PropertyCriteriaにIsNullプロパティを指定し、等しい比較条件を使用する必要があります。

例えば

var criterias = newPropertyCriteriaCollection 
{ 
    new PropertyCriteria() 
    { 
    Condition = CompareCondition.NotEqual, 
    Name = "MyProperty", 
    IsNull = true, 
    Type = PropertyDataType.String 
    } 
}; 
+0

私はNON-empty値が必要です。あなたが提案したPropertyCriteriaは、プロパティセットを持たないすべてのページのコレクションを私に提供します。値セットを持つものが必要です。 –

+0

私はタイプミスをしました、CompareConditionはNotEqualであったはずです。私はそれを修正しました。 更新 - それでも動作しません。うーん。 – tompipe

1

私はトリックが欠落していない限り、これはEPiServer PropertyCriteriaCollectionを使用可能であることが表示されません。

私はリフレクターを掘り起こしました。ここに私の発見があります。 FPWCメソッドは、最終的にEPiServer.DataAccess.PropertySearchDB.FastFindPagesWithCriteria()を呼び出します。このメソッド内

は以下の通りです:

foreach (PropertyCriteria criteria in criterias) 
    { 
     if (criteria.IsNull) 
     { 
     criteria.Value = null; 
     } 
     else if (string.IsNullOrEmpty(criteria.Value)) 
     { 
     throw new EPiServerException("The crieria value cannot be null or empty. Set the IsNull property to search for null."); 
     } 
     ... 
    } 

だから、その真には、IsNullを設定せずに、空の文字列値を検索することができません。これは、EPiServer.DataAccess.PropertySearchDB.ExecuteCriteriaメソッドにフィードダウンされます。このメソッドは、DBコマンドを構成し、フォーマットします。 IsNullがtrueであるため、netPropertySearchNullストアドプロシージャが使用されます。文字列を検索するには、netPropertySearchStringストアドプロシージャを使用する必要があります。

私の提案は、linqを使用してページの全リストとフィルタをロードすることです。代わりに、APIをバイパスして直接DBクエリを実装するか、低レベルのEPiServerデータアクセスメソッドを使用することもできます(推奨しません)

私の最初の回答のお詫び - 私は実際に投稿する前にコードをテストする必要があります:)

0

私は、ページにa baプロパティが隠されているのを見ました。「プロパティXは値を含んでいます」は、Savingイベントで設定されています。ブールプロパティがPropertyCriteriaの代わりに、あなたが本当に興味を持っている一つとして使用されていることを次に

1

うん、これは混乱しています。他の誰かがこの問題を抱えている場合、特定のPageReferenceプロパティを何かに設定したページを検索するには、次のようにします:

new PropertyCriteria() 
{ 
    createdCriteria.Name = "MyProperty"; 
    createdCriteria.Type = PropertyDataType.PageReference; 
    createdCriteria.Condition = EPiServer.Filters.CompareCondition.NotEqual; 
    createdCriteria.Value = "0"; 
    createdCriteria.IsNull = false; 
} 
関連する問題