PLM启动流程二开·按条件筛选流程名称

【应用场景】
派生物料启动流程的选择界面自动根据父级物料的生命周期筛选流程
【案例演示】
物料生命周期阶段设置了很多,物料派生管理派生物料,派生物料以后启动流程,启动流程选择界面需要自动根据父级物料判断物料的生命周期筛选流程。
【实现步骤】
如果你刚接触PLM二开,你可能需要参考:
如何编写二开插件配置等请参考:二次开发扩展程序开发之插件模式https://vip.kingdee.com/article/83591896433330944?productLineId=1
其他星空PLM开发指南也可以参考 【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
更多详细的金蝶云星空BOS二次开发指南:https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
<1>编写表单插件,添加引用:

<2>新增自定义类,继承PLM动态表单插件AbstractPLMDynamicFormPlugIn。 重写OnLoad事件,将符合条件的流程筛选出来。代码如下:
namespace ISV.WorkFlowBill.Common.BusinessEntity
{
[Description("派生物料启动流程按照父物料生命周期过滤流程名称")]
public class StartFlowForm : AbstractPLMDynamicFormPlugIn
{
public override void OnLoad(EventArgs e)
{
var fEntity = GridHelper.GetEntityCollection(this.View, "FFlowTemplateEntity");
var fFlowObjectList = (Dictionary<long, long>)this.View.OpenParameter.GetCustomParameter("FFlowObjectList");//启动流程对象
var derivedIds = fFlowObjectList.Keys.ToList();//派生物料Id
var mainMaterials = GetMainMaterialByDerivedId(this.PLMContext, derivedIds);//主物料
if (mainMaterials != null && mainMaterials.Count > 0)
{
var stages = mainMaterials.Select(x => x["FNAME"].ToString()).ToList();//主物料生命周期
for (var i = fEntity.Count - 1; i >= 0; i--)
{
var detail = fEntity[i]["TmpDetailID"].GetAsType<DynamicObject>(null);
if (detail == null) continue;
var flowName = detail["Launchdes"].GetString();//流程名称
bool flag = false;
foreach(var stage in stages)
{
if (flowName.Contains(stage))
{
flag = true;
break;
}
}
if (!flag)
fEntity.RemoveAt(i);
}
}
base.OnLoad(e);
}
/// <summary>
/// 根据派生物料ID获取主物料
/// </summary>
/// <param name="ctx"></param>
/// <param name="ids"></param>
/// <returns></returns>
public DynamicObjectCollection GetMainMaterialByDerivedId(PLMContext ctx, IEnumerable<long> ids)
{
PLM启动流程二开·按条件筛选流程名称
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



