#include "epm_handler_common.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning(disable : 4996) #include extern "C" int POM_AM__set_application_bypass(logical bypass); using namespace std; int jl_insert_modular(EPM_action_message_t msg) { printf("发送开始"); int ifail = ITK_ok, att_cnt = 0,i=0, item_mast_rev_count = 0,ico_att_count ,*ico_id_count,*ico_values_count; tag_t task_tag = NULLTAG, rootTask_tag = NULLTAG, type_tag = NULLTAG, old_ico_tag = NULLTAG, new_ico_tag = NULLTAG, item_class_tag = NULLTAG, item_class_tag2 = NULLTAG, rev_tag = NULLTAG, classificationObject; tag_t *attachments = NULLTAG, *item_mast_rev = NULLTAG ; logical verdict; char* type_value = NULL, * bom_value = NULL, * orderType_value = NULL, *item_id = NULL,**ico_values,**ico_attribute,***ico_values2, oldClassID[TCTYPE_class_name_size_c + 1], newClassID[TCTYPE_class_name_size_c + 1]; //获取流程 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++) { printf("循环开始"); //得到目标对象的类型 ifail = TCTYPE_ask_object_type(attachments[i], &type_tag); //得到目标对象的最新版本 //ifail = ITEM_ask_item_of_rev(attachments[i],&rev_tag); ifail = ITEM_ask_latest_rev(attachments[i], &rev_tag); //AOM_UIF_ask_value(); //ITEM_ask_type(); //ITEM_ask_rev_master_form_type ifail = AOM_ask_value_string(attachments[i], "object_type", &type_value); //得到item的类型 printf("object_type为:%s\n", type_value); ifail = AOM_ask_value_string(attachments[i], "item_id", &item_id); //得到item的id printf("item_id为:%s\n", item_id); //得到版本下的主表单 AOM_ask_value_tags(rev_tag, "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev); //printf("test为:%s\n", item_mast_rev[0]); AOM_ask_value_string(item_mast_rev[0], "user_data_1", &bom_value);//订单属性“bom状态”的值 AOM_ask_value_string(item_mast_rev[0], "user_data_2", &orderType_value);//订单类型的值 printf("user_data_1为:%s\n", bom_value); printf("user_data_2为:%s\n", orderType_value); //得到分类的id(通过订单类型的值) if (strcmp(orderType_value, "车身") == 0) { strcpy(oldClassID,"jlcs010201"); strcpy(newClassID,"jlcs010101"); printf("分类id为: %s", oldClassID); } else if (strcmp(orderType_value, "配件") == 0) { strcpy(oldClassID, "jlcs010202"); strcpy(newClassID, "jlcs010102"); printf("分类id为: %s", oldClassID); } else if (strcmp(orderType_value, "KD") == 0) { strcpy(oldClassID, "jlcs010203"); strcpy(newClassID, "jlcs010103"); printf("分类id为: %s", oldClassID); } if (strcmp(type_value,"Gd6_Order")!=0) { printf("该对象的类型不是订单 \n"); } else { printf("该对象的类型是订单 \n"); } //ITK_ask_cli_argument(); //ITK__convert_uid_to_tag(); POM_AM__set_application_bypass(true); if (strcmp(bom_value,"下发成功")==0) { //ICS_find_class() //ITK__convert_uid_to_tag printf("分类开始 \n"); //ICS_ask_classification_object(attachments[i],&itemClass_tag); //通过item得到item的分类对象 ICS_is_wsobject_classified(attachments[i],&verdict); //此函数检查给定的工作区对象是否已分类。 /*这将根据对象id、视图/类标记和工作空间对象创建一个新的分类对象。 如果ws_object不是#NULLTAG,ICO将对该对象进行分类。在这种情况下, 对象的id将被忽略,但是ws_对象的id将被用作ICO id。 如果ws_object是#NULLTAG,则将创建一个ICO,其id为object#id。 注意:如果要为支持两个单元系统的类创建ICO,请使用ICS ICO*/ //ICS_create_classification_object(); //函数获取由给定ID字符串标识的组/类的标记。 ICS_find_class(oldClassID, &old_ico_tag); //原本分类的tag id(流程中订单) ICS_find_class(newClassID, &new_ico_tag); //(历史订单中的分类tag id) printf("类的tag: %d\n", old_ico_tag); cout << new_ico_tag << endl; //cout << itemClass_tag << endl; ICS_ask_classification_object(attachments[i],&item_class_tag); //ICS_attribute_convert_attribute_values(); ICS_ico_ask_attributes(item_class_tag,&ico_att_count ,&ico_id_count, &ico_values_count,&ico_values2); cout << ico_att_count << endl; cout << *ico_id_count << endl; cout << *ico_values_count << endl; cout << ico_values2 << endl; //ICS_ask_attributes_of_classification_obj(item_class_tag, &ico_att_count, &ico_attribute,&ico_values); //ICS_attribute_set_property(); //ICS_attribute_ask_id; //ICS_remove_classification() //全部删除(item和分类中的对象) //ICS_delete_reference_to_wsobject ICS_delete_reference_to_ico(item_class_tag); ICS_delete_classification_object(item_class_tag); //char** value = (char**)MEM_alloc(sizeof(char*)); ICS_create_classification_object(attachments[i],item_id, new_ico_tag, &classificationObject); //此函数对给定的工作区对象进行分类,即将工作区对象与使用IMAN_分类关系的给定分类对象。 ICS_classify_wsobject(attachments[i], classificationObject); //ICS_ico_ask_attributes(item_class_tag, &ico_att_count, &ico_id_count, &ico_values_count, &ico_values2); ICS_ask_classification_object(attachments[i],&item_class_tag2); ICS_ico_set_attributes(item_class_tag2, ico_att_count, ico_id_count, ico_values_count,(const char*** )ico_values2); printf("对象移到历史订单成功"); POM_AM__set_application_bypass(false); //MEM_free(oldClassID); //MEM_free(newClassID); } else { printf("对象发送到分类失败"); } } return ifail; } ////获取顶层 REVISION 对应的分类 //ICS_ask_classification_object(top_rev_tag,&top_classificationObject); //if(top_classificationObject == NULL_TAG) //{ //printf("顶层对象没有发送到分类\n"); //return 0; //} //ICS_ask_class_of_classification_obj(top_classificationObject,&top_class_tag); //ICS_ask_id_name(top_class_tag, &top_class_id, &top_class_name); //char *revbuf1[8] = { 0 }; //int num1 = 0; //split(bl_formatted_parent_name, "/", revbuf1, &num1); //ICS_create_classification_object //ICS_is_wsobject_classified( // ICS_classify_wsobject //AOM_UIF_ask_value();