/*检查EBOM派生出来的所有MBOM的最新版本是否已经发布,或者说最新版本是否在流程中或工作中的状态,如果未发布,就提示*/ #pragma warning (disable: 4996) #pragma warning (disable: 4819) #pragma warning (disable: 4995) #include #include "epm_handler_common.h" #include #include #include #include #include #include #include #include "ps/ps.h"; #include "ps/vrule.h" #include "sstream" #include #include "epm/epm.h" #include "sa/sa.h" #include "libxl.h" #include #include "epm/signoff.h" #include #include #include #include #include "ae/dataset.h" #include #include #include #include #include #include #include #include #include int JK_check_workflow(EPM_rule_message_t msg) { EPM_decision_t decision = EPM_go; int ifail = ITK_ok, arg_cnt = 0, i = 0, att_cnt = 0; tag_t task_tag = NULLTAG, rootTask_tag = NULLTAG, *attachments = NULL; char * object_TYPE_1 = NULL; char * object_string1=NULL; string value_type = ""; string value_property=""; string errorMessage="以下EBOM对应的MBOM最新版未发布,禁止升版:\n"; //获取当前触发的任务 task_tag = msg.task; //获取根流程节点 ifail = EPM_ask_root_task(task_tag, &rootTask_tag); //获取目标引用对象 ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments); int reference_count=0;tag_t * reference_attachment=NULLTAG; ifail = EPM_ask_attachments(rootTask_tag, EPM_reference_attachment, &reference_count, &reference_attachment); vector errorVec;//存放的是未发布的MBOMID和EBOM的id加版本 //循环目标对象 for (i = 0; i < att_cnt; i++) { ITKCALL(ifail = AOM_ask_value_string(attachments[i], "object_type", &object_TYPE_1));//对象类型 cout << object_TYPE_1; cout << endl; if(strcmp("JK8MaterialRevision",object_TYPE_1)==0) { int MBOMNums=0; tag_t *MBOMTags=NULLTAG; ITKCALL(ifail=AOM_ask_value_tags(attachments[i],"JK8MBOMRelation",&MBOMNums,&MBOMTags)); for (int j=0;j0) { for (int i=0;i