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.
140 lines
4.0 KiB
140 lines
4.0 KiB
#include "epm_handler_common.h"
|
|
#include <unidefs.h>
|
|
#include <epm\epm.h>
|
|
#include <vector>
|
|
//#include "string_helper.cpp"
|
|
#include <tccore\aom_prop.h>
|
|
#include <tccore\item.h>
|
|
#include <tccore\grm.h>
|
|
#include <stdio.h>
|
|
|
|
using namespace std;
|
|
|
|
#define DOFREE(obj) \
|
|
{ \
|
|
if(obj) \
|
|
{ \
|
|
MEM_free(obj); \
|
|
obj = NULL; \
|
|
} \
|
|
}
|
|
|
|
extern "C" int POM_AM__set_application_bypass(logical bypass);
|
|
int jl_locomotion_item(EPM_action_message_t msg) {
|
|
|
|
|
|
printf("==================将对象移动到指定文件夹下 START =======================\n");
|
|
int ifail = EPM_go, count = 0, arg_cnt = 0;
|
|
|
|
tag_t root_task = NULL_TAG;
|
|
|
|
tag_t* attachments = NULL;
|
|
|
|
|
|
//获取流程任务
|
|
EPM_ask_root_task(msg.task, &root_task);
|
|
//获取流程任务目标文件夹中的对象
|
|
EPM_ask_attachments(root_task, EPM_target_attachment, &count, &attachments);
|
|
//获取参数个数
|
|
arg_cnt = TC_number_of_arguments(msg.arguments);
|
|
|
|
/*
|
|
if (arg_cnt > 0)
|
|
{
|
|
for (int i = 0; i < arg_cnt; i++)
|
|
{
|
|
arg = TC_next_argument(msg.arguments);
|
|
//ITKCALL(ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
|
|
ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
|
|
if (stricmp(argflag, "ItemType") == 0)
|
|
{
|
|
if (argvalue != NULL)
|
|
{
|
|
strcpy(arg1value, argvalue);
|
|
}
|
|
}
|
|
}
|
|
MEM_free(argflag);
|
|
MEM_free(argvalue);
|
|
}
|
|
*/
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
int count1 = 0, count2 = 0, count3 = 0;
|
|
tag_t* target1, * target2, * target3;
|
|
|
|
int itemCount = 0, n_references = 0, items_tagCount = 0, item_mast_rev_count = 0;
|
|
char * type_class = NULL;
|
|
//int * levels = NULL;
|
|
//char **relation_type_name = NULL; * reference_tags = NULL,
|
|
|
|
tag_t spec_relation1 = NULLTAG, spec_relation2 = NULLTAG, spec_relation3 = NULLTAG,spec_relation4 = NULLTAG ;
|
|
tag_t items_tag = NULL_TAG;
|
|
//tag_t spec_relation11 , spec_relation21, spec_relation31;
|
|
tag_t relation1, relation2, relation3;
|
|
|
|
ifail = AOM_ask_value_string(attachments[i], "object_type", &type_class);
|
|
|
|
printf("type_class : %s\n", type_class);
|
|
|
|
//过滤掉非版本对象
|
|
if ((strstr(type_class, "Revision") == NULL) || (strstr(type_class, "Master") != NULL)
|
|
|| (strstr(type_class, "master") != NULL) || (strstr(type_class, "BOM") != NULL) || (strstr(type_class, "bom") != NULL) || (strstr(type_class, "Bom") != NULL))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//获取对象
|
|
|
|
ifail = ITEM_ask_item_of_rev(attachments[i], &items_tag);
|
|
|
|
|
|
GRM_find_relation_type("Gd6_BGLBJ", &spec_relation1); //变更零部件
|
|
GRM_find_relation_type("Gd6_SYXLBJ", &spec_relation2); //受影响零部件
|
|
GRM_find_relation_type("Gd6_XGFJ", &spec_relation3); //相关零部件
|
|
|
|
GRM_find_relation_type("Gd6_GLBGJ", &spec_relation4); //关联变更件(变更相关附件)
|
|
|
|
GRM_list_secondary_objects_only(attachments[i], spec_relation1, &count1, &target1);
|
|
if (count1!=0) {
|
|
printf("开始\n");
|
|
for (int j = 0; j < count1; j++)
|
|
{
|
|
//GRM_find_relation_type("Gd6_GYWJ", &spec_relation11);
|
|
GRM_create_relation(target1[j], items_tag, spec_relation4, NULLTAG, &relation1);
|
|
GRM_save_relation(relation1);
|
|
}
|
|
printf("结束\n");
|
|
}
|
|
GRM_list_secondary_objects_only(attachments[i], spec_relation2, &count2, &target2);
|
|
if (count2 != 0) {
|
|
for (int j = 0; j < count2; j++)
|
|
{
|
|
//GRM_find_relation_type("Gd6_GYWJ", &spec_relation21);
|
|
GRM_create_relation(target2[j], items_tag, spec_relation4, NULLTAG, &relation2);
|
|
GRM_save_relation(relation2);
|
|
}
|
|
}
|
|
GRM_list_secondary_objects_only(attachments[i], spec_relation3, &count3, &target3);
|
|
if (count3 != 0) {
|
|
for (int j = 0; j < count3; j++)
|
|
{
|
|
//GRM_find_relation_type("Gd6_GYWJ", &spec_relation31);
|
|
GRM_create_relation(target3[j], items_tag, spec_relation4, NULLTAG, &relation3);
|
|
GRM_save_relation(relation3);
|
|
}
|
|
}
|
|
DOFREE(target1);
|
|
DOFREE(target2);
|
|
DOFREE(target3);
|
|
DOFREE(type_class);
|
|
|
|
}
|
|
DOFREE(attachments);
|
|
|
|
printf("==================将对象移动到指定文件夹下 END =======================\n");
|
|
return ITK_ok;
|
|
|
|
|
|
} |