2016-04-05 13 views
1

FakeDBでは、DbLinkFieldでTargetItemの値を設定するにはどうすればよいですか?SitecoreとFakeDBでは、どのようにLookupField TargetItemを設定できますか?

セットアップ: 私は他のアイテムのリストを指すドロップリストを持つデータテンプレートを持っています。

public static Item Lookup(this Item item, string fieldName) 
{ 
    if (item == null) throw new ArgumentNullException("item"); 
    LookupField field = item.Fields[fieldName]; 
    if (field == null) return null; 
    return field.TargetItem; 
} 

ユニットテストと結果:

私は、サイトコアアイテム拡張メソッド持って、私は自分のコードに対して、以下の簡単なテストを実行すると LookupItemがフィールドとして発見されたのが、結果LookupItemがありnullのTargetItem何とかFakeDBを使って模擬することは可能ですか? targetitemで

[Test] 
public void TestLookupItemExtension() 
{ 
    ID templateId = ID.NewID; 
    ID refItemId = ID.NewID; 

    using (var db = new Db() 
    { 
     new DbTemplate("ItemTpl", templateId) { "Foo" }, 
     new DbItem("RefItem", refItemId), 
     new DbItem("ItemComponent", ID.NewID, templateId) 
     { 
      new DbLinkField("Foo") { TargetID = refItemId } 
     } 
    }) 
    { 
     var item = db.GetItem("/sitecore/content/itemcomponent"); 
     var lookupItem = item.Lookup("Foo"); 
     lookupItem.Should().NotBeNull(); 
    } 
} 

フィールドの結果は次のようになります。

field {Sitecore.Data.Fields.LookupField} Sitecore.Data.Fields.LookupField 
+  InnerField "Foo"-{{C906FD3D-C5DA-4191-8F0A-F15603FB897E}} Sitecore.Data.Fields.Field 
+  TargetID {{00000000-0000-0000-0000-000000000000}} Sitecore.Data.ID 
+  TargetItem null Sitecore.Data.Items.Item 
     Value "<link />" string 
+  _innerField "Foo"-{{C906FD3D-C5DA-4191-8F0A-F15603FB897E}} Sitecore.Data.Fields.Field 

だから私はLookupFieldが正しい取得していますが、それは実際に結果LookupFieldモックオブジェクトにターゲットIDまたはTargetItemを入れたことがないです。

すべてのアイデアをいただければ幸いです。

答えて

2

私は、LinkFieldとLookupFieldを混在させているというのが問題だと思います。 テストでは、 "Foo"をLookupFieldとして定義する必要があります。このようなもの:

タイプが必要なのかどうかはわかりませんが、これは私にとっては効果的です。

+0

Fantastic - 期待通りに動作します。ありがとうございます。 – rcurts

0

(item == null)新しい引数をスローします。

試しましたか?

(!空($アイテム)){}

たぶん、ルックアップフィールドに入る前に、一緒にプレイするシンプルな変数にあなたの長いIFSを変更した場合。

ここでjsを使用して非同期ファイル呼び出しを行うことはできますか?そしてそれはjsonのデータから来たのですか?

+0

ありがとうございました。私は、FakeDBを使ってTargetItemを設定する方法をもっと詳しく説明していると思います。このアイテムは入ってくると有効です。LookupFieldが見つかります。 LookupField.TargetItemはnullになります:( – rcurts

関連する問題