docs: @Nonnull
    @OverrideOnDemand
    @OverridingMethodsMustInvokeSuper
    protected EContinue beforeProcessing (@Nonnull final WPECTYPE aWPEC,
                                          @Nullable final DATATYPE aSelectedObject,
                                          @Nonnull final EWebPageFormAction eFormAction)
    {
      if (isObjectLockingEnabled ())
      {
        final ILockManager <String> aOLM = PhotonSecurityManager.getLockMgr ();
        if (aSelectedObject != null && performLocking (aWPEC, aSelectedObject, eFormAction))
        {
          // Try to lock object
          final String sObjectID = aSelectedObject.getID ();
          final LockResult <String> aLockResult = aOLM.lockObjectAndUnlockAllOthers (sObjectID);
          if (aLockResult.isNotLocked ())
          {
            // Failed to lock object
            final Locale aDisplayLocale = aWPEC.getDisplayLocale ();
            final HCNodeList aNodeList = aWPEC.getNodeList ();
  
            final String sLockUserID = aOLM.getLockUserID (sObjectID);
            final IUser aLockUser = PhotonSecurityManager.getUserMgr ().getUserOfID (sLockUserID);
            final String sObjectName = getObjectDisplayName (aWPEC, aSelectedObject);
            final String sDisplayObjectName = StringHelper.hasText (sObjectName) ? " '" + sObjectName + "'" : "";
            final String sDisplayUserName = aLockUser != null ? "'" + aLockUser.getDisplayName () + "'"
                                                              : EWebPageText.LOCKING_OTHER_USER.getDisplayText (aDisplayLocale);
            aNodeList.addChild (getUIHandler ().createErrorBox (aWPEC,
                                                                EWebPageText.LOCKING_FAILED.getDisplayTextWithArgs (aDisplayLocale,
                                                                                                                    sDisplayObjectName,
                                                                                                                    sDisplayUserName)));
            return EContinue.BREAK;
          }
        }
        else
        {
          // No lock action required - unlock all
          aOLM.unlockAllObjectsOfCurrentUser ();
        }
      }
      return EContinue.CONTINUE;
    }