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.
244 lines
8.2 KiB
244 lines
8.2 KiB
#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<string, tag_t> 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<tag_t> wl_add;
|
|
map<string, tag_t>::iterator it;
|
|
for (map<string, tag_t>::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<tag_t>::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<tag_t>::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;
|
|
} |