我有一个内容项,其中包含一个包含文件库的字段。我创建了一个单独的内容项来存储文件的元数据,其中包括一个名为SortOrder的整数字段,用于控制页面上图像的顺序。
为了在客户端的请求下更快地进行排序,我为管理员创建了一个页面,其中包含一个jQuery可排序的图像网格,可以进行拖放排序。每次拖动图像时更新元数据都可以很好地工作。
问题是每次将新图像拖入库时都不会自动创建元数据条目,因此在这种情况下,没有要更新的元数据。我可以手动创建内容项,但在API中似乎没有办法将其标记为属于特定的库项目。
希望有人可以帮我找到一种方法,使用2SXC WebAPI或c#代码将元数据添加到任何不存在的库项目。我在数据库中看到使用AssignmentObjectTypeID和KeyString字段在ToSIC_EAV_Entities中链接实体,但我宁愿不进行直接的数据库更改。这些更改似乎也需要清除缓存并重新启动应用程序池以反映在UI中。
到目前为止,这实际上是REST API中缺少的细节,但App.Data.Create对此有一个重载。看看https://github.com/2sic/eav-server/blob/master/ToSic.Eav.AppEngine/DataSources/App.cs#L26
所以它并不完美,但你现在应该可以继续工作了。
根据您的指示,我能够使用自定义WebAPI创建解决方案:
var contentTypeName = "PhotoDetails";
var userName = Dnn.User.Username;
var fileId = metadata.FileId.ToString();
MetadataFor target = new MetadataFor()
{
TargetType = 10, // hardcoded based on other content item metadata for no until further understood
KeyString = "file:" + fileId // file number comes from dnn's file table
};
var values = new Dictionary<string, object>()
{
{"Title", metadata.Title},
{"SortOrder", (fileId+99)}, // make new images appear at the end by adding 99 to the fileid so they stay in the upload order
{"IsPrimary", false} // image is not a primary photo by default
};
App.Data.Create(contentTypeName, values, userName, target);
再次感谢你的建议!