#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 extern "C" int POM_AM__set_application_bypass(logical bypass); using namespace std; double stringToNum( string str) { istringstream iss(str); double num; iss >> num; return num; } char * mem_char(char *x) { if(x!=NULL) { MEM_free(x); x=NULL; } return x; } tag_t * mem_tag(tag_t *x) { if(x!=NULL) { MEM_free(x); x=NULL; } return x; } void insertMap(tag_t targetRev,map&targetmap) { targetmap.clear(); int ifail=0; int bom_num=0; tag_t * bom_tags=NULLTAG; ITKCALL(ifail=AOM_ask_value_tags(targetRev,"structure_revisions",&bom_num,&bom_tags)); if(bom_num>0) { tag_t only_bom=bom_tags[0]; tag_t bom_window_tag = NULLTAG,top_bom_line_tag =NULLTAG,rev_tag = NULLTAG,item_tag =NULLTAG; ITKCALL(ifail = BOM_create_window(&bom_window_tag)); ITKCALL(ifail = BOM_set_window_top_line_bvr(bom_window_tag,only_bom,&top_bom_line_tag)); int child_count=0;tag_t *child_tags=NULLTAG; ITKCALL(ifail = BOM_line_ask_all_child_lines(top_bom_line_tag,&child_count,&child_tags)); for(int n=0;n(map_rev,bl_sequence_no)); item_id=mem_char(item_id); bl_sequence_no=mem_char(bl_sequence_no); item_rev_id=mem_char(item_rev_id); } child_tags=mem_tag(child_tags); ITKCALL(ifail = BOM_save_window(bom_window_tag));//要保存,否则修改属性后bom视图不会保存 ITKCALL(ifail = BOM_close_window(bom_window_tag));//有开必有关 } bom_tags=mem_tag(bom_tags); } void setBomlineProperty(tag_t old_line,tag_t new_line,string attribute_name) { int ifail=0; try { cout<<"开始设置属性------------"<"<"< map1;//存放上一个发布EBOM版本的所有一级BOMLine和查找编号 map map2;//存放最新发布MBOM版本的所有一级BOMLine和查找编号 map map3;//存放上一个发布EBOM版本的所有一级BOMLine和最新发布MBOM版本的所有一级BOMLine map map4;//存放最新EBOM版本的所有一级BOMLine和对应的id //获取当前触发的任务 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); //循环目标对象 for (i = 0; i < att_cnt; i++) { ITKCALL(ifail = AOM_ask_value_string(attachments[i], "object_type", &object_TYPE_1));//对象类型 cout << object_TYPE_1<(map2_rev,bl_sequence_no)); map::iterator rev_it; for( rev_it = map1.begin(); rev_it != map1.end(); rev_it++ ) { char *object_string=NULL; tag_t tag1=rev_it->first; string map1_sequence_no=rev_it->second; tag_t tag2=map2_rev; AOM_ask_value_string(tag1,"object_string",&object_string); cout<<"map2键"<(rev_it->first,map2_rev));//存放上一个版本的ebomline对应的版本,mbom关系下的mbomline对应的版本 break; } } item_id=mem_char(item_id); item_rev_id=mem_char(item_rev_id); bl_sequence_no=mem_char(bl_sequence_no); } ITKCALL(ifail = BOM_save_window(bom_window_tag));//要保存,否则修改属性后bom视图不会保存 ITKCALL(ifail = BOM_close_window(bom_window_tag));//有开必有关 //ITEM_rev_delete_bvr() tag_t newRev=NULLTAG; ITKCALL(ifail =ITEM_copy_rev(latest_rev,NULL,&newRev));//升版 //TODO 获取MBOM的所有层级和属性信息,存储起来 //TODO 删除MBOM下的BOM视图,比较EBOM和MBOM后,重新搭起来 // BOM_line_cut(); tag_t win,top_line; BOM_create_window(&win); BOM_set_window_pack_all(win,false); BOM_set_window_top_line(win, NULL, latest_rev, NULL, &top_line); //TODO 删除升版后的bom视图 /* int cnt=0; tag_t *tags=NULLTAG; AOM_ask_value_tags(newRev, "structure_revisions", &cnt, &tags); ITEM_rev_delete_bvr(newRev,tags[0]);*/ tag_t win_new,top_line_new; BOM_create_window(&win_new); BOM_set_window_pack_all(win_new,false); BOM_set_window_top_line(win_new, NULL, newRev, NULL, &top_line_new); int top_line_new_count=0; tag_t *top_line_new_child_tags=NULLTAG; BOM_line_ask_all_child_lines(top_line_new,&top_line_new_count,&top_line_new_child_tags); for (int e=0;e"<::iterator rev_map4; for( rev_map4 = map4.begin(); rev_map4 != map4.end(); rev_map4++ ) { tag_t rev=rev_map4->first; char * newEBOM_id=NULL; if(rev!=NULL) { ITKCALL(ifail = AOM_ask_value_string(rev,"object_string",&newEBOM_id)); cout<<"newEBOM_id-------->"<::iterator rev_map3; int map3_size=0; for( rev_map3 = map3.begin(); rev_map3 != map3.end(); rev_map3++ ) { map3_size++; tag_t ebom_rev=rev_map3->first; char * ebom_id=NULL; char * mbom_id=NULL; tag_t mbom_rev=rev_map3->second; ITKCALL(ifail = AOM_ask_value_string(ebom_rev,"item_id",&ebom_id));//TODO bomline上的属性 ITKCALL(ifail = AOM_ask_value_string(mbom_rev,"item_id",&mbom_id)); cout<<"map3_size------------>"<"<"<"<0) { tag_t only_bom_new=bom_tags[0]; tag_t bom_window_tag_new = NULLTAG,top_bom_line_tag_new =NULLTAG; // rev_tag = NULLTAG,item_tag =NULLTAG; ITKCALL(ifail = BOM_create_window(&bom_window_tag_new)); ITKCALL(ifail = BOM_set_window_top_line_bvr(bom_window_tag_new,only_bom_new,&top_bom_line_tag_new)); int child_count_new=0;tag_t *child_tags_new=NULLTAG; ITKCALL(ifail = BOM_line_ask_all_child_lines(top_bom_line_tag_new,&child_count_new,&child_tags_new)); for(int n1=0;n1rev, NULL, &line); } BOM_save_window(win); BOM_save_window(win_new); cout<<"保存"<