2SXC Web API - 为 ADAM 资产创建内容项元数据

2SXC Web API - Create Content Item Metadata for ADAM Asset

我有一个内容项,它有一个包含文件库的字段。我创建了一个单独的内容项来存储文件的元数据,其中包括一个名为 SortOrder 的整数字段,用于控制页面上图像的顺序。

为了根据客户的要求加快排序速度,我为管理员创建了一个页面,其中包含 jQuery 可排序的图像网格,支持拖放排序。通过在每次拖动图像时更新元数据,这种方法非常有效。

问题是每次将新图像拖入库时都不会自动创建元数据条目,因此在这种情况下没有要更新的元数据。我可以手动创建内容项目,但 API 中似乎没有办法将其标记为属于特定的图书馆项目。

希望有人可以帮助我找到一种使用 2SXC WebAPI 或 c# 代码将元数据添加到任何不存在的库项目的方法。我在数据库中看到实体在 ToSIC_EAV_Entities 中使用 AssignmentObjectTypeID 和 KeyString 字段链接,但我不想直接更改数据库。这些更改似乎还需要清除缓存并重新启动应用程序池才能反映在 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);

再次感谢您的建议!