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)
{
string sql = @" SELECT C.FLIFECIRCLESTAGE,E.FNAME,B.FMAINPRODUCT as FID,A.FDERIVEDPRODUCT as FAID FROM T_PLM_STD_DERIVEDSETENTITY A
LEFT JOIN T_PLM_STD_DERIVEDSET B ON A.FID=B.FID
INNER JOIN T_PLM_PDM_BASE C ON B.FMAINPRODUCT = C.FID
INNER JOIN T_PLM_CFG_STAGE D ON C.FLIFECIRCLESTAGE = D.FVALUE
INNER JOIN T_PLM_CFG_STAGE_L E ON D.FID = E.FID
INNER JOIN TABLE(fn_StrSplit(@FID, ',',1)) C ON(A.FDERIVEDPRODUCT = C.FID)
WHERE E.FLOCALEID = 2052 ";
return PLMDBUtils.Instance.ExecuteDynamicObject(ctx, sql,
PLMDBUtils.Instance.GetAParameter("@FID", KDDbType.udt_inttable, ids.Distinct().ToArray()));
}
}
}
<3>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<4>BOSIDE扩展应收票据,注册表单插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开物料库,选择派生物料启动流程,根据主物料的生命周期筛选流程名称。
【知识点】
【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
【合辑】金蝶云.星空 PLM知识合辑(持续更新) https://vip.kingdee.com/article/329662872047302912?productLineId=1&isKnowledge=2
二次开发扩展程序开发之插件模式 https://vip.kingdee.com/article/83591896433330944?productLineId=1
PLM云 -- 基于BOS平台的二次开发扩展 https://vip.kingdee.com/article/10875?productLineId=1
PLM云 -- 基于配置系统的二次开发扩展(对象属性扩展)https://vip.kingdee.com/article/10887?productLineId=1
PLM云 -- 基于标准业务系统的二次开发扩展 https://vip.kingdee.com/article/10901?productLineId=1
金蝶云星空BOS二次开发指南 https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
金蝶云星空数据字典V7.6 https://open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=102613
PLM启动流程二开·按条件筛选流程名称
本文2024-09-23 03:03:14发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156366.html