You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*检查EBOM派生出来的所有MBOM的最新版本是否已经发布或者说最新版本是否在流程中或工作中的状态如果未发布就提示*/
#pragma warning (disable: 4996)
#pragma warning (disable: 4819)
#pragma warning (disable: 4995)
#include <tc/tc.h>
#include "epm_handler_common.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#include <tccore/item.h>
#include <bom/bom.h>
#include "ps/ps.h";
#include "ps/vrule.h"
#include "sstream"
#include <tccore/grm.h>
#include "epm/epm.h"
#include "sa/sa.h"
#include "libxl.h"
#include <map>
#include "epm/signoff.h"
#include <ctime>
#include <vector>
#include <locale>
#include <codecvt>
#include "ae/dataset.h"
#include <iostream>
#include <stdlib.h>
#include <tccore/aom.h>
#include <tc/emh.h>
#include <ict/ict_userservice.h>
#include <tc/tc.h>
#include <tccore/tctype.h>
#include <sa/tcfile.h>
#include <ss/ss_errors.h>
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<string> 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;j<MBOMNums;j++)
{
ITKCALL(ifail = AOM_ask_value_string(MBOMTags[j], "object_type", &object_TYPE_1));//对象类型
if(strcmp(object_TYPE_1,"JK8Material")==0)
{
tag_t latest_rev;
ITEM_ask_latest_rev(MBOMTags[j],&latest_rev);//获得最新版本
int is_released=0;
EPM_ask_if_released(latest_rev,&is_released);//0未发布1发布
// ITEM_rev_vi_revise_and_update()
if(is_released==0)
{
char *item_id=NULL;
char *item_revision_id=NULL;
char *item_id2=NULL;
string hint="";
AOM_ask_value_string(attachments[i],"item_id",&item_id);
AOM_ask_value_string(attachments[i],"item_revision_id",&item_revision_id);
AOM_ask_value_string(MBOMTags[j],"item_id",&item_id2);
hint=hint.append(item_id).append("/").append(item_revision_id).append("-").append(item_id2).append(" ");
errorVec.push_back(hint);
if(item_id!=NULL)
{
MEM_free(item_id);
item_id=NULL;
}
if(item_revision_id!=NULL)
{
MEM_free(item_revision_id);
item_revision_id=NULL;
}
if(item_id2!=NULL)
{
MEM_free(item_id2);
item_id2=NULL;
}
}
}
}
if(MBOMTags!=NULL)
{
MEM_free(MBOMTags);
MBOMTags=NULL;
}
}
}
if(errorVec.size()>0)
{
for (int i=0;i<errorVec.size();i++)
{
errorMessage=errorMessage+errorVec[i];
}
EMH_store_error_s1(EMH_severity_warning, EMH_AE_error_base, errorMessage.c_str());
return EPM_nogo;
}
return EPM_go;
}