#include "handler.h" #define ARGS_LENGTH 200 #define MAX_PRINTLINE_LENGTH 2000 #define MAX_PATH_LENGTH 2000 #define MAX_ARGUMENT_LENGTH 400 #define MAX_PARAMNAME_LENGTH 50 #define MAX_FILE_EXT_LENGTH 10 #define TRUE_FLAG 1 #define FALSE_FLAG 0 #define DETAILLOG 1 #define DOFREE(obj) \ { \ if(obj) \ { \ MEM_free(obj); \ obj = NULL; \ } \ } int delete_release_status(EPM_action_message_t msg) { int ifail = ITK_ok, att_cnt = 0, rel_cnt = 0; EPM_target_attachment; tag_t task = NULLTAG, rootTask_tag = NULLTAG, *attchments = NULL, *releases = NULL, release_status = NULL; ITKCALL(EPM_ask_root_task(msg.task, &rootTask_tag)); ITKCALL(EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attchments)); POM_AM__set_application_bypass(true); for (int i = 0; i < att_cnt; i++) { ITKCALL(AOM_ask_value_tags(attchments[i], "release_status_list", &rel_cnt, &releases)); for (int j = rel_cnt - 1; j > -1; j--) { EPM_remove_status_from_targets(releases[j], rootTask_tag); } } POM_AM__set_application_bypass(false); return ifail; } //发布对象 int set_release_status(tag_t item, char release_name[]) { int ifail = ITK_ok; tag_t release_status = NULL; ITKCALL(ifail = RELSTAT_create_release_status(release_name, &release_status)); ITKCALL(ifail = RELSTAT_add_release_status(release_status, 1, &item, TRUE)); return ifail; } int reviseDesignPost(METHOD_message_t* msg, va_list va) { int ifail = ITK_ok, rev_cnt = 0; tag_t new_rev = va_arg(va, tag_t); tag_t item = NULLTAG; tag_t *rev_list; POM_AM__set_application_bypass(true); printf("图纸升版后操作\n"); ITKCALL(ITEM_ask_item_of_rev(new_rev, &item)); ITKCALL(AOM_ask_value_tags(item, "revision_list", &rev_cnt, &rev_list)); if (rev_cnt > 1) { int wl_cnt = 0; tag_t *wl_list; tag_t pre_rev = rev_list[rev_cnt - 2],wlobj,newwlrev; char * revtype,* wltype; int wlcount = 0; tag_t *wltags; ITKCALL(AOM_ask_value_string(pre_rev, "object_type", &revtype)); if (strcmp("LD6_2DdesignRevision", revtype)==0) { printf("2D升版后操\n"); ITKCALL(AOM_ask_value_tags(pre_rev, "LD6_ProductInfo", &wlcount, &wltags)); for (int i = 0; i < wlcount;i++) { ITKCALL(AOM_ask_value_string(wltags[i], "object_type", &wltype)); if (strcmp("LD6_ProductRevision", wltype)==0 || strcmp("LD6_MachinesPRevision", wltype) == 0) { ITKCALL(ITEM_ask_item_of_rev(wltags[i], &wlobj)); if (wlobj!=NULL) { int status = ITEM_ask_latest_rev(wlobj, &newwlrev); if (status == ITK_ok) { printf("start 开始删除关系\n"); tag_t gx_gx_type = NULLTAG; tag_t gx_relation = NULLTAG; ITKCALL(GRM_find_relation_type("LD6_ProductInfo", &gx_gx_type)); GRM_find_relation(new_rev, wltags[i], gx_gx_type, &gx_relation); GRM_delete_relation(gx_relation); printf("end 删除关系完毕\n"); printf("start 开始添加关系\n"); tag_t relation = NULLTAG; ITKCALL(GRM_create_relation(new_rev, newwlrev, gx_gx_type, NULLTAG, &relation)); ITKCALL(GRM_save_relation(relation)); printf("end 添加关系完毕\n"); //ITKCALL(AOM_set_value_tag(new_rev, "LD6_ProductInfo",newwlrev)); } } } } } else if (strcmp("LD6_MEProcessCrRevision", revtype) == 0 || strcmp("LD6_LSMEProcessRevision", revtype) == 0) { printf("工艺路线升版后操\n"); ITKCALL(AOM_ask_value_tags(pre_rev, "IMAN_METarget", &wlcount, &wltags)); for (int i = 0; i < wlcount; i++) { ITKCALL(AOM_ask_value_string(wltags[i], "object_type", &wltype)); if (strcmp("LD6_ProductRevision", wltype) == 0 || strcmp("LD6_MachinesPRevision", wltype) == 0) { ITKCALL(ITEM_ask_item_of_rev(wltags[i], &wlobj)); if (wlobj != NULL) { int status = ITEM_ask_latest_rev(wlobj, &newwlrev); if (status == ITK_ok) { printf("start 开始删除关系\n"); tag_t gx_gx_type = NULLTAG; tag_t gx_relation = NULLTAG; ITKCALL(GRM_find_relation_type("IMAN_METarget", &gx_gx_type)); GRM_find_relation(new_rev, wltags[i], gx_gx_type, &gx_relation); GRM_delete_relation(gx_relation); printf("end 删除关系完毕\n"); printf("start 开始添加关系\n"); tag_t relation = NULLTAG; ITKCALL(GRM_create_relation(new_rev, newwlrev, gx_gx_type, NULLTAG, &relation)); ITKCALL(GRM_save_relation(relation)); printf("end 添加关系完毕\n"); //ITKCALL(AOM_set_value_tag(new_rev, "IMAN_METarget", newwlrev)); } } //修改属性 printf("开始修改属性\n"); char *getnum, *part; ITKCALL(AOM_ask_value_string(newwlrev, "ld6_clientPartNum",&getnum)); ITKCALL(AOM_ask_value_string(newwlrev, "ld6_clientPartRev", &part)); AOM_lock(new_rev); ITKCALL(AOM_set_value_string(new_rev, "ld6_clientPartNum", getnum)); ITKCALL(AOM_set_value_string(new_rev, "ld6_clientPartRev", part)); AOM_save(new_rev); AOM_unlock(new_rev); AOM_refresh(new_rev,true); } } } else if (strcmp("LD6_TecDOCRevision", revtype) == 0) { printf("技术文档\n"); ITKCALL(AOM_ask_value_tags(pre_rev, "LD6_ProductInfo", &wlcount, &wltags)); for (int i = 0; i < wlcount; i++) { ITKCALL(AOM_ask_value_string(wltags[i], "object_type", &wltype)); if (strcmp("LD6_ProductRevision", wltype) == 0 || strcmp("LD6_MachinesPRevision", wltype) == 0) { ITKCALL(ITEM_ask_item_of_rev(wltags[i], &wlobj)); if (wlobj != NULL) { int status = ITEM_ask_latest_rev(wlobj, &newwlrev); if (status == ITK_ok) { printf("start 开始删除关系\n"); tag_t gx_gx_type = NULLTAG; tag_t gx_relation = NULLTAG; ITKCALL(GRM_find_relation_type("LD6_ProductInfo", &gx_gx_type)); GRM_find_relation(new_rev, wltags[i], gx_gx_type, &gx_relation); GRM_delete_relation(gx_relation); printf("end 删除关系完毕\n"); printf("start 开始添加关系\n"); tag_t relation = NULLTAG; ITKCALL(GRM_create_relation(new_rev, newwlrev, gx_gx_type, NULLTAG, &relation)); ITKCALL(GRM_save_relation(relation)); printf("end 添加关系完毕\n"); //ITKCALL(AOM_set_value_tag(new_rev, "LD6_ProductInfo", newwlrev)); } } } } } else if (strcmp("LD6_3DdesignRevision", revtype)==0) { ITKCALL(AOM_ask_value_tags(pre_rev, "representation_for", &wl_cnt, &wl_list)); map wl_map; for (int i = 0; i < wl_cnt; i++) { char *wl_id; ITKCALL(AOM_ask_value_string(wl_list[i], "item_id", &wl_id)); wl_map.find(wl_id); if (wl_map.find(wl_id) == wl_map.end()) { tag_t wl_item; ITKCALL(ITEM_ask_item_of_rev(wl_list[i], &wl_item)); wl_map[wl_id] = wl_item; } } list wl_add; map::iterator it; for (map::iterator it = wl_map.begin(); it != wl_map.end(); it++) { tag_t wl_item = it->second; //int wl_rev_cnt = 0; //tag_t *wl_rev_list; tag_t wl_rev; //ITKCALL(AOM_ask_value_tags(wl_item, "revision_list", &wl_rev_cnt, &wl_rev_list)); int status = ITEM_ask_latest_rev(wl_item, &wl_rev); if (status == ITK_ok) { // 获取最新版本成功,可以使用 revision 变量进行后续操作 wl_add.push_back(wl_rev); } //if (wl_rev_cnt > 0) //{ // wl_add.push_back(wl_rev_list[wl_rev_cnt - 1]); //} } for (list::iterator it = wl_add.begin(); it != wl_add.end(); it++) { char *obj_str; tag_t relation_type = NULLTAG, relation = NULLTAG; ITKCALL(AOM_ask_value_string(*it, "object_string", &obj_str)); printf("object_string = %s\n", obj_str); ITKCALL(AOM_lock(*it)); GRM_find_relation_type("TC_Is_Represented_By", &relation_type); if (relation_type != NULLTAG) { GRM_create_relation(*it, new_rev, relation_type, NULLTAG, &relation); GRM_save_relation(relation); } ITKCALL(AOM_save(*it)); ITKCALL(AOM_unlock(*it)); ITKCALL(AOM_refresh(*it, true)); } /*int n = 0; tag_t *value = (tag_t*)MEM_alloc(sizeof(tag_t)*(wl_add.size())); for (list::iterator it = wl_add.begin(); it != wl_add.end(); it++) { char *obj_str; ITKCALL(AOM_ask_value_string(*it, "object_string", &obj_str)); printf("object_string = %s\n", obj_str); value[n] = *it; n++; } ITKCALL(AOM_set_value_tags(new_rev, "representation_for", wl_add.size(), value));*/ } } POM_AM__set_application_bypass(false); return ifail; }