Sitecore Mobile SDK を使用してネイティブ IOS アプリを作成しています。これまでのところ、必要なアイテムを読み取ることができますが、Droplink フィールドのリンクされたアイテムからフィールド値を読み取ることに行き詰まりました。
私はこのコードを使用します:
SCApiContext* context = [SCApiContext contextWithHost: @"http://<myhost>/-/item"];
SCItemsReaderRequest* request = [ SCItemsReaderRequest new ];
request.requestType = SCItemReaderRequestQuery;
request.request = @"/sitecore/content/Home/descendant::*[@@templatename='Content item']";
request.flags = SCItemReaderRequestReadFieldsValues;
request.fieldNames = [ NSSet setWithObjects: @"Content title", @"Content author", @"Content introduction", @"Content date", @"Content body" , nil ];
[context itemsReaderWithRequest: request]( ^(id result, NSError* error)
{
NSArray* items = result;
for (SCItem* item in result)
{
// get the author
__block NSString *author = @"empty";
SCField *dropLinkField = [item fieldWithName: @"Content author"];
[dropLinkField fieldValueReader]( ^(id result, NSError *error)
{
if (!error)
{
SCItem *linkedItem = result;
// TODO: author is not yet filled
NSSet *fieldsSet = [NSSet setWithObjects:@"Firstname", nil];
// this method seems to be skipped
[linkedItem fieldsReaderForFieldsNames:fieldsSet]( ^(id result2, NSError *error2)
{
if (!error2)
{
NSDictionary *fields = result2;
SCField *field_ = [fields objectForKey: @"Firstname"];
author = field_.rawValue;
}
});
}
});
}
}
元のアイテムが読み取られ、droplink フィールドのフィールド値を読み取ることができます。また、アイテムパスをログに書き込むことができるため、リンクされたアイテムを読み取ることができるようです。しかし、リンクされたアイテムからフィールドを読み取ろうとすると失敗し、「fieldsReaderForFieldsNames」メソッドがスキップされたようです。
私は明らかにここで何か間違ったことをしていますが、問題を見落としているようです...
編集:
Sitecore 7 を使用していることを忘れていましたが、違いがあるかどうかはわかりません。SCApiContext と SCItemReaderRequest を作成する上記の行を追加しました。
私は匿名アクセスを使用し、「サイト設定」で使用します
itemwebapi.mode="StandardSecurity"
itemwebapi.access="ReadOnly"
itemwebapi.allowanonymousaccess="true"
いくつかのフィールドにフィールド リモート読み取り権限を設定していなかったため、問題が見つかったと思いました。ただし、その権限を設定しても解決されず、フィールド リモート読み取りが設定されていない他のフィールドは API で返されました。