問題
- 認証されたユーザーはファイルをアップロードできますが、ゲストはアップロードできません。
- すべての権限はGuestユーザーに提供されます。
- ユーザーがアップロードするファイルを選択すると、すぐにエラーメッセージが表示される:「ファイルのアップロード中に予期せぬエラーが発生しました。
- サーバー管理 > ログに"com.liferay.dynamic.data.mapping.form.web.internal.upload.DDMFormUploadResponseHandler "をDEBUGで追加すると、以下のエラーが表示されます:
DEBUG [http-nio-8080-exec-630][DDMFormUploadResponseHandler:56] null
com.liferay.portal.kernel.exception.NoSuchUserException: No User exists with the key {companyId=20101, screenName=ddm_form_default_user_screen_name}
at com.liferay.portal.service.persistence.impl.UserPersistenceImpl.findByC_SN(UserPersistenceImpl.java:4582) ~[portal-impl.jar:?]
環境
- アップデート31下のLiferay DXP 7.3
- アップデート76下のLiferay DXP 7.4
解像度
- Instance Settings > Users > Fields で "Autogenerate User Screen Names" がチェックされている場合、ddm フォームのデフォルトユーザは"ddm.form.default.user.screen.name" というスクリーンネームで作成されます。
- これは DocumentLibraryDDMFormFieldTemplateContextContributor が期待するスクリーン名 ("ddm_form_default_user_screen_name") とは異なるため、アップロードフィールドを使用するフォームは例外をスローします。
- 7.4用u76と7.3用u31のLPS-133096が修正されました。
追加情報
次の 回避策 が利用できる:
- コントロールパネル > サーバ管理 > スクリプト に移動する。
- 以下のスクリプトを実行する:
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.dynamic.data.mapping.constants.DDMFormConstants;
UserLocalServiceUtil.updateScreenName(userId, DDMFormConstants.DDM_FORM_DEFAULT_USER_SCREEN_NAME);
スクリプトを実行する前に、データベースのバックアップを作成し、必要に応じて復元できるようにしてください。