1

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 で返されました。

4

1 に答える 1

1

Sitecore iOS SDK 操作 (以下のリストから) は、バックグラウンド操作キューで非同期に実行されます。
* fieldValueReader
* fieldsReaderForFieldsNames

これは、アクセスした時点で作成者データがダウンロードされることを保証するものではありません。

完了コールバック ブロックでダウンロードしたアイテムとフィールドを使用して、それらが iPhone に存在することを確認してください。

[linkedItem fieldsReaderForFieldsNames:fieldsSet]( ^(id result2, NSError *error2)
{
    NSLog(@"Read author field");
    if (!error2)
    {
    NSLog(@"No error");
    NSDictionary *fields = result2;
    SCField *field_ = [fields objectForKey: @"Firstname"];
    author = field_.rawValue;

    // Now all required fields will 
    // definitely be downloaded by the time you create a blog item


    NSLog(@"voornaam: %@", author);

    ParTechBlogItem *blogItem;
    blogItem = [[ParTechBlogItem alloc] initWithTitle:[item fieldValueWithName:@"Content title"] 
                                                 date:[item fieldValueWithName:@"Content date"] 
                                                intro:[item fieldValueWithName:@"Content introduction"] 
                                               author:author 
                                                 text:[item fieldValueWithName:@"Content body" ]];
        [weakSelf addBlogItem:blogItem];
}
于 2013-08-24T06:54:04.493 に答える