2013-08-20 37 views
1

我正在使用Sitecore Mobile SDK創建本機IOS應用程序。到目前爲止,我可以閱讀我需要的項目,但是我在閱讀Droplink字段中鏈接項目的字段值時遇到困難。Sitecore Mobile SDK:如何讀取DropLink中linkedItem的值

我用這個代碼:

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字段的字段值。我似乎也可以閱讀鏈接的項目,因爲我可以將它寫入日誌中的itempath。但是,當我嘗試從鏈接項中讀取一個字段時,它會失敗,並且「fieldsReaderForFieldsNames」方法似乎被跳過。

我明明在這裏做得不對,但似乎忽視了這個問題...

編輯:

我忘了提,我使用Sitecore的7,如果它的確與衆不同不能確定。 我添加了上面創建SCApiContext和SCItemReaderRequest的行。

我使用匿名訪問,並在「網站設置」我用

itemwebapi.mode="StandardSecurity" 
itemwebapi.access="ReadOnly" 
itemwebapi.allowanonymousaccess="true" 

我只是覺得,我發現這個問題,因爲我沒有設置場對多個領域的遠程讀取權限。但是,設置該權限並未解決此問題,而沒有遠程讀取字段的其他字段在API中返回。

+1

1.您使用的是匿名上下文嗎?您是否認證爲「sitecore」或「extranet」用戶? 2.你可以附上創建SCApiContext和SCItemsReaderRequest的代碼嗎? 3.什麼是ItemWebAPI.config的「網站」設置?通常情況下,它位於「C:\ inetpub \ wwwroot \ _Your_Site_ \ Website \ App_Config \ Include」4.請確保您具有讀取,FieldRead和RemoteFieldRead權限授予您試圖訪問的項目。請使用Access Viewer來檢查。 Sitecore iOS SDK將所有項目Web API HTTP請求寫入日誌。你能否附上這些? –

回答

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]; 
}