我正在使用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"
}
]
}
}
答案 0 :(得分:0)
我确实在这里看到了问题......你可以治愈。
首先,我想提醒您注意" Debugging query results"文档中有许多提示可帮助您诊断正在进行的操作。并非所有这些都适用,但它们是有价值的线索。
我很好奇你的EntityManager
是否有任何类型的实体" AttachmentFiles"。我很怀疑它。你可以查一下。
无论如何,有两个观察结果向我发出:
AttachmentFiles
类型没有key属性,该属性唯一标识此类型的实例。每个EntityType
必须至少有一个关键属性。 MetadataHelper
可以按惯例检测某些键,但AttachmentFiles
中没有明显的候选词。如果有(并且我没有看到),您必须指定它。我假设您正在使用Breeze Labs breeze.metadata-helper.js 中定义的
MetadataHelper
来编写元数据而不是原始的Breeze API为了这个目的。看起来你正在这样做......这是一件好事。
Contacts
类型标识了AttachmentFiles
的一对多导航,但未在AttachmentFiles
中指定可链接AttachmentFiles
实例的外键关系}回到Contacts
。因此,即使Breeze从此JSON有效负载创建了AttachmentFiles
个实例,也无法将它们与Contacts
我没有在数据中看到任何支持AttachmentFiles
实际上是实体的概念的内容。它们似乎嵌入在Contact
类型中。
有一种表达方式。但在我走这条路之前,我还想要一些确认。也许你可以在我们提出下一步之前澄清一些我提出的观点。