Breeze - 使用Expand从列表中获取SharePoint AttachmentFiles?

时间:2015-06-15 11:50:04

标签: sharepoint breeze

我正在使用Breeze和SharePoint Online列表,它支持附件。 Breeze查询,正确调用expand,我可以通过浏览器和Fiddler看到,返回的JSON中包含附件数据。但是,在Breeze JavaScript中创建的实体不包含AttachmentFiles的数据。它始终是空的。这是SP适配器不支持的东西,还是我错误地定义了AttachmentFiles和List实体。我已经尝试了很多方法来定义关系,使用复杂类型和导航,使用自动ID和没有,但我很难过。

Rest请求如下所示:/ _ api / web / lists / getbytitle(' Contacts')/ items?$ expand =作者/ Id,AttachmentFiles& $ select = Id,AuthorId,FirstName,Title,电子邮件,作者,附件文件,作者/用户名

附件是返回的JSON视图,以及当前的Breeze实体映射。

实体代码段

    //attachments
addType({
  name: 'AttachmentFiles',
  dataProperties: {
    ServerRelativeUrl: {
      nullable: false
    },
    FileName: {
      nullable: false
    }

  }
});

// create entity for contacts
addType({
  name: 'Contacts',
  defaultResourceName: 'getbytitle(\'Contacts\')/items',
  dataProperties: {
    Id: {
      type: breeze.DataType.Int32
    },
    AuthorId: {
      type: breeze.DataType.Int32
    },
    FirstName: {
      nullable: false
    },
    Title: {
      nullable: false
    }, // this is actually the last name field in the list
    Email: {
      nullable: false,
      validators: [breeze.Validator.emailAddress()]
    },
    Author: {
      complexTypeName: "Author"
    }
  },
  // Let model.validation add the requireReferenceEntity validators
  navigationProperties: {
    AttachmentFiles: {
      type: 'AttachmentFiles',
      hasMany: true
    }
  }
});

请参阅下面的JSON响应

{
"d": {
    "results": [
        {
            "__metadata": {
                "id": "388762a5-a565-4033-af90-5a2ea4cb1894",
                "uri": "https://foo-616175366e015f.sharepoint.com/sites/DevSIte/BreezeSP2013Sample/_api/Web/Lists(guid'df211835-f6df-4bb0-b7f0-0995c6ff8562')/Items(1)",
                "etag": "\"3\"",
                "type": "SP.Data.ContactsListItem"
            },
            "AttachmentFiles": {
                "results": [
                    {
                        "__metadata": {
                            "id": "https://foo-616175366e015f.sharepoint.com/sites/DevSIte/BreezeSP2013Sample/_api/Web/Lists(guid'df211835-f6df-4bb0-b7f0-0995c6ff8562')/Items(1)/AttachmentFiles('8328787dc792224f625c9645a45d01aa.jpg')",
                            "uri": "https://foo-616175366e015f.sharepoint.com/sites/DevSIte/BreezeSP2013Sample/_api/Web/Lists(guid'df211835-f6df-4bb0-b7f0-0995c6ff8562')/Items(1)/AttachmentFiles('8328787dc792224f625c9645a45d01aa.jpg')",
                            "type": "SP.Attachment"
                        },
                        "FileName": "8328787dc792224f625c9645a45d01aa.jpg",
                        "ServerRelativeUrl": "/sites/DevSIte/BreezeSP2013Sample/Lists/Contacts/Attachments/1/8328787dc792224f625c9645a45d01aa.jpg"
                    },
                    {
                        "__metadata": {
                            "id": "https://foo-616175366e015f.sharepoint.com/sites/DevSIte/BreezeSP2013Sample/_api/Web/Lists(guid'df211835-f6df-4bb0-b7f0-0995c6ff8562')/Items(1)/AttachmentFiles('Screen Shot 2015-04-23 at 10.28.35 AM.png')",
                            "uri": "https://foo-616175366e015f.sharepoint.com/sites/DevSIte/BreezeSP2013Sample/_api/Web/Lists(guid'df211835-f6df-4bb0-b7f0-0995c6ff8562')/Items(1)/AttachmentFiles('Screen%20Shot%202015-04-23%20at%2010.28.35%20AM.png')",
                            "type": "SP.Attachment"
                        },
                        "FileName": "Screen Shot 2015-04-23 at 10.28.35 AM.png",
                        "ServerRelativeUrl": "/sites/DevSIte/BreezeSP2013Sample/Lists/Contacts/Attachments/1/Screen Shot 2015-04-23 at 10.28.35 AM.png"
                    }
                ]
            },
            "Author": {
                "__metadata": {
                    "id": "1fdc1547-d439-42bd-b3aa-b41e92c8ec6f",
                    "type": "SP.Data.UserInfoItem"
                },
                "UserName": "user@contoso.com"
            },
            "Id": 1,
            "ID": 1,
            "Title": "Alanso",
            "AuthorId": 1073741823,
            "FirstName": "Fernando",
            "Email": "fernando.alonso@ferrari.it"
        }
    ]
}

}

1 个答案:

答案 0 :(得分:0)

我确实在这里看到了问题......你可以治愈。

首先,我想提醒您注意" Debugging query results"文档中有许多提示可帮助您诊断正在进行的操作。并非所有这些都适用,但它们是有价值的线索。

我很好奇你的EntityManager是否有任何类型的实体" AttachmentFiles"。我很怀疑它。你可以查一下。

无论如何,有两个观察结果向我发出:

  1. AttachmentFiles类型没有key属性,该属性唯一标识此类型的实例。每个EntityType必须至少有一个关键属性。 MetadataHelper可以按惯例检测某些键,但AttachmentFiles中没有明显的候选词。如果有(并且我没有看到),您必须指定它。
  2.   

    我假设您正在使用Breeze Labs breeze.metadata-helper.js 中定义的MetadataHelper来编写元数据而不是原始的Breeze API为了这个目的。看起来你正在这样做......这是一件好事。

    1. 您的Contacts类型标识了AttachmentFiles的一对多导航,但未在AttachmentFiles中指定可链接AttachmentFiles实例的外键关系}回到Contacts。因此,即使Breeze从此JSON有效负载创建了AttachmentFiles个实例,也无法将它们与Contacts
    2. 的任何实例相关联。

      我没有在数据中看到任何支持AttachmentFiles实际上是实体的概念的内容。它们似乎嵌入在Contact类型中。

      有一种表达方式。但在我走这条路之前,我还想要一些确认。也许你可以在我们提出下一步之前澄清一些我提出的观点。