有没有办法在 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,因此无法提供完整的解决方案。也许其他人会这样做,但在那之前你有一个寻找方向的方向。
我正在使用 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,因此无法提供完整的解决方案。也许其他人会这样做,但在那之前你有一个寻找方向的方向。