如何在D365FO工作流中使用审核编辑功能

在Dynamics 365 F&O工作流开发过程中,配置采购订单工作流时,有两个审批元素可供使用,一个是“审批采购订单”,另一个是“可编辑的审批采购订单”(下文也将对其进行突出显示)。我的问题是关于第二个元素的开发,即“可编辑的审批采购订单”。根据我的测试,如果在配置过程中将此元素关联起来,系统将允许审批人编辑采购订单,然后在之后进行审批操作。

3515.editable-WF.png

可编辑的审批仅允许审批人编辑所选记录(他们正在审批的)。您可以按照以下步骤实现相同的功能:

  • 复制工作流审批工件并相应地更改其名称(例如,在我的情况下为“CaseDetailBaseApprovalEdit”),并将其与简单审批一起添加到支持的元素中。
  • 在表中创建一个方法(例如,我的情况下的“editAllowed()”)。
public boolean editAllowed()
{
    WorkflowElementTable workflowElementTable;
    WorkflowWorkItemTable workflowWorkItemTable;
 
    select * from workflowWorkItemTable
        where   workflowWorkItemTable.RefRecId      == this.RecId
            &&  workflowWorkItemTable.Status        == WorkflowWorkItemStatus::Pending
            &&  workflowWorkItemTable.UserId        == curUserId()
            &&  workflowWorkItemTable.CompanyId     == this.DataAreaId;
 
    select * from workflowElementTable
        where workflowElementTable.ElementId == workflowWorkItemTable.ElementId;
 
    return workflowElementTable.ElementName == workflowApprovalStr(CaseDetailBaseApprovalEdit)
        ||  this.CaseWFStatus == CaseWFStatus::Draft;
}
  • 覆盖表单数据源的 active() 方法(在我的情况下,我创建了 OOTB 表单数据源的 CoC)。
public int active()
{
   FormRun formRun = this.formRun() as FormRun;
   FormDataSource ds = formRun.dataSource();
   CaseDetailBase table = ds.cursor();
 
   boolean allowEdit = table.editAllowed();
 
   ds.allowEdit(allowEdit);
 
   if(allowEdit)
   {
       formRun.design().viewEditMode(ViewEditMode::Edit);
   }
   else
   {
       formRun.design().viewEditMode(ViewEditMode::View);
   }
 
   return next active();
}