アップロードされたファイルをADAMで2sxcモジュールのエンティティフィールドに正しくバインドするにはどうすればよいですか?
プログラムでエンティティオブジェクトを作成し、データを入力する必要があります。1つのフィールドはファイルタイプである必要があります。そのため、ファイルなしでエンティティを作成し、このコードサンプルを使用してADAMにファイルをアップロードすることができました。ただし、ファイルを手動でアップロードするとバインドされるため、バインドしなかったようです。ファイルをエンティティフィールドに手動でアップロードすると、のようなコンテンツが表示されますfile:421 .../asdf.docx
。ただし、上記のリンクからコードサンプルを繰り返すと、フィールドには選択可能なファイルが含まれており、すでにアップロードされていますが、フィールド値はnullです。メソッドIFile.Url
を介して正しいデータを書き込んでいるようですがApp.Data.Update
、管理パネルにIDが表示されていません。
Dictionary<string, object> fileDict = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase) {
{ "File", file.Url }
}; // file is ToSic.Sxc.Adam.IFile, returned by SaveInAdam
App.Data.Update(entityObj.EntityId, fileDict); // entityObj is ToSic.Eav.Data.IEntity, returned by App.Data.Create
手動アップロードのようなバインディングがない場合、それはいくつかの悪い結果をもたらすのだろうか、そしてそれを正しく行う方法は?
回答
ファイルを追加するには、実際にファイルをフィールドに追加します(これにより、UIは、通常のユーザーによって追加されたかのようにファイルを提供できます)。チェックアウトhttps://docs.2sxc.org/api/dot-net/ToSic.Sxc.Dnn.Web.IDynamicWebApi.html#ToSic_Sxc_Dnn_Web_IDynamicWebApi_SaveInAdam_System_String_System_IO_Stream_System_String_System_String_System_Nullable_System_Guid__System_String_System_String_
ところで:MobiusFormsをチェックして、それがどのように行われるかを確認することをお勧めします。
そして私は言及するのを忘れました:ここにドキュメントがあります https://docs.2sxc.org/web-api/custom-web-api-dotnet-saveinadam.html
さらに説明するには:
- SaveInAdamは、ファイルをアイテムのADAMフォルダーに配置します。多くのファイルが追加される可能性があるため、フィールドがライブラリタイプであると想定しているだけです。これはエンティティに何も格納せず、フィールドに属するフォルダを自動的に検出します。
- ライブラリ機能を使用せず、実際にはリンク付きの単一フィールドのみを使用する場合は、「file:74」などの用語もフィールドの値に保存する必要があります。