有没有办法在 Liferay 中获取工作流提交的表单的字段?

Is there a way to get the fields of a form submitted by workflow in Liferay?

我正在使用 Liferay 7.2。

我正在尝试获取通过工作流通知发送给用户的表单字段,它是由 liferay 创建的表单(内容和数据 -> 表单)。我开发了以下代码:

    import com.liferay.portal.kernel.util.GetterUtil;
    import com.liferay.portal.kernel.workflow.WorkflowConstants;
    import com.liferay.portal.kernel.workflow.WorkflowHandler;
    import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
    import com.liferay.asset.kernel.model.AssetCategory;
    import com.liferay.asset.kernel.model.AssetEntry;
    import com.liferay.asset.kernel.model.AssetRenderer;
    import com.liferay.asset.kernel.model.AssetRendererFactory;
    import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil;
    import com.liferay.dynamic.data.mapping.kernel.DDMForm;

    import java.util.List;

    String className = (String)workflowContext.get(
        WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME);

    WorkflowHandler workflowHandler =
        WorkflowHandlerRegistryUtil.getWorkflowHandler(className);

    AssetRendererFactory assetRendererFactory =
        workflowHandler.getAssetRendererFactory();

    long classPK =
        GetterUtil.getLong((String)workflowContext.get
        (WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));

    AssetRenderer assetRenderer =
        workflowHandler.getAssetRenderer(classPK);

    AssetEntry assetEntry = assetRendererFactory.getAssetEntry(
        assetRendererFactory.getClassName(), assetRenderer.getClassPK());

    List<AssetCategory> assetCategories = assetEntry.getCategories();
    returnValue = "Default Review";
    System.out.println(assetCategories);
    System.out.println(assetEntry);
    System.out.println(assetRenderer.getAssetObject());
    

输出是,但我看不到字段在哪里:

[]

{entryId=56712, groupId=11555, companyId=11552, userId=11561, userName=Test Test, createDate=Tue Dec 15 08:30:19 GMT 2020, modifiedDate=Tue Dec 15 08:30:19 GMT 2020, classNameId=33012, classPK=56708, classUuid=ab012e7a-12387-a7b1-4481-44ab98a6a123, classTypeId=0, listable=true, visible=true, startDate=null, endDate=null, publishDate=null, expirationDate=null, mimeType=text/html, title=Form Record for Form: Send email, description=, summary=, url=, layoutUuid=, height=0, width=0, priority=0.0, viewCount=0}

{mvccVersion=1, uuid=ab012e7a-12387-a7b1-4481-44ab98a6a123, formInstanceRecordId=56708, groupId=11555, companyId=11552, userId=11561, userName=Test Test, versionUserId=11561, versionUserName=Test Test, createDate=Tue Dec 15 08:30:19 GMT 2020, modifiedDate=Tue Dec 15 08:30:19 GMT 2020, formInstanceId=65521, formInstanceVersion=1.46, storageId=40512, version=1.0, lastPublishDate=null}

表格为:

我想我已经接近了,但我仍然无法访问表单域。在这种情况下,我想获得“电子邮件”字段。 你可以帮帮我吗?非常感谢!

不幸的是,您必须更深入地研究 API,但看起来您的方向是正确的:

assetRenderer.getAssetObject() 揭示了一个看起来非常像与表单相关的对象,但它不会是具有您期望的所有 getter 和 setter 的单个 bean:它们在编译时是未知的,因此你必须使用它来查询它的属性。

如果您查看 assetRenderer.getAssetObject().getClass().getName(),您会发现手头的内容,并可以根据其界面(以及表单字段的相关 API 进一步挖掘) .

我没有在代码级别使用过 Forms,因此无法提供完整的解决方案。也许其他人会这样做,但在那之前你有一个寻找方向的方向。