#include"kutil.h" #include "ado.h" #include "Error_Define.h" #define debug true #define ITK_err 919012 //导出数据集文件 int export_dataset_file_to_dir(tag_t dataset, const char *ref_name, const char* temp_path, char *ext, char **filename, char **original_name) { int ifail = ITK_ok; tag_t ref_object = NULLTAG, datasettype = NULLTAG, new_ds = NULLTAG, tool = NULLTAG, folder_tag = NULLTAG, spec_dataset_rev = NULLTAG; AE_reference_type_t reference_type; tag_t new_file_tag = NULLTAG; IMF_file_t file_descriptor; char *target_ds_name = NULL; char *new_file_name; WSOM_ask_name2(dataset, &target_ds_name); WriteLog(debug, "开始从数据集<%s>下载文件", target_ds_name); DOFREE(target_ds_name); *filename = (char *)MEM_alloc(sizeof(char) * 512); *original_name = (char *)MEM_alloc(sizeof(char) * 512); strcpy(*filename, ""); AE_ask_dataset_latest_rev(dataset, &spec_dataset_rev); AE_ask_dataset_named_ref2(dataset, ref_name, &reference_type, &ref_object); if (ref_object == NULLTAG) { WriteLog(debug, "文件引用为空"); return 1; } if (reference_type == AE_PART_OF) { char *pathname2 = NULL; IMF_ask_file_pathname2(ref_object, SS_WNT_MACHINE, &pathname2); DOFREE(pathname2); char *origin_file_name2 = NULL; IMF_ask_original_file_name2(ref_object, &origin_file_name2); strcpy(*original_name, origin_file_name2); DOFREE(origin_file_name2); char new_ds_name[WSO_name_size_c + 1] = ""; char *new_file_name = USER_new_file_name(new_ds_name, ref_name, ext, 0); char temp_file[SS_MAXPATHLEN] = ""; strcpy(temp_file, temp_path); strcat(temp_file, "\\"); strcat(temp_file, new_file_name); WriteLog(debug, "临时文件路径:%s", temp_file); if ((_access(temp_file, 0)) != -1) { if (!remove(temp_file)) { remove(temp_file); } } ITKCALL(ifail = IMF_export_file(ref_object, temp_file)); strcpy(*filename, temp_file); return ifail; } return -1; } int uploadFile(void* returnValue) { int ifail = ITK_ok; char *datasetUid,*refName,*ext, *dataset_file_path, *dataset_file_name; ITKCALL(ifail = USERARG_get_string_argument(&datasetUid)); ITKCALL(ifail = USERARG_get_string_argument(&refName)); ITKCALL(ifail = USERARG_get_string_argument(&ext)); tag_t dataset; ITK__convert_uid_to_tag(datasetUid, &dataset); export_dataset_file_to_dir(debug, dataset, refName, "D:\\Siemens\\IIS\\web\\file", ext, &dataset_file_path, &dataset_file_name); string buff = dataset_file_path; *((char**)returnValue) = (char*)MEM_alloc((strlen(buff.c_str()) + 1) * sizeof(char)); tc_strcpy(*((char**)returnValue), buff.c_str()); return ifail; } //提交流程检查指定审批节点是否都指派审批人员 int EPMC_check_process_member(EPM_action_message_t msg) { int customError = ITK_ok, args_cnt = 0, piStringCount = 0, subtask_count = 0, icnt = 0, step = 0, signoff_count = 0, user_count = 0; char* trans_args_value = NULL, * para_flag = NULL, * para_value = NULL, ** pppStringList = NULL, noassigned_task_name[128 * 5] = "", err_msg[650] = "流程节点‘", * task_name = NULL; tag_t pRoot = NULLTAG, * subtasks = NULL, signoff_task = NULLTAG, * signoffs = NULL, * users = NULL, groupmember = NULLTAG, user_tag = NULLTAG; printf("*******************************************************************************\n"); printf("* EPMC_check_process_member is comming ! *\n"); printf("*******************************************************************************\n"); args_cnt = TC_number_of_arguments(msg.arguments); TC_init_argument_list(msg.arguments); if (args_cnt) { trans_args_value = TC_next_argument(msg.arguments); ITKCALL(ITK_ask_argument_named_value(trans_args_value, ¶_flag, ¶_value)); ITKCALL(EPM__parse_string(para_value, ",", &piStringCount, &pppStringList)); if (para_flag) { MEM_free(para_flag); para_flag = NULL; } if (para_value) { MEM_free(para_value); para_value = NULL; } } ITKCALL(EPM_ask_root_task(msg.task, &pRoot)); if (pRoot) { ITKCALL(EPM_ask_sub_tasks(pRoot, &subtask_count, &subtasks)); for (step = 0; step < subtask_count; step++) { ITKCALL(EPM_ask_name2(subtasks[step], &task_name)); printf("task_name = %s\n", task_name); for (icnt = 0; icnt < piStringCount; icnt++) { if (tc_strcmp(task_name, pppStringList[icnt]) == 0) { //ITKCALL( EPM_ask_sub_task(subtasks[step], "perform-signoffs", &signoff_task) ); ITKCALL(EPM_ask_sub_task(subtasks[step], "select-signoff-team", &signoff_task)); if (signoff_task) { ITKCALL(EPM_ask_task_reviewers_users(signoff_task, &user_count, &users)); printf("user_count = %d\n", user_count); if (!user_count) { tc_strcat(noassigned_task_name, task_name); tc_strcat(noassigned_task_name, ","); } if (users) { MEM_free(users); users = NULL; } if (signoffs) { MEM_free(signoffs); signoffs = NULL; } } } } } if (subtasks) { MEM_free(subtasks); subtasks = NULL; } } if (pppStringList) { MEM_free(pppStringList); pppStringList = NULL; } if (tc_strcmp(noassigned_task_name, "")) { tc_strcat(err_msg, noassigned_task_name); tc_strcat(err_msg, "’未指派,请指派!"); //EMH_store_error_s1(EMH_severity_user_error, ERROR_LOCK_ARGUMENTS, noassigned_task_name); EMH_store_error_s1(EMH_severity_user_error, ERROR_LOCK_ARGUMENTS, err_msg); customError = ERROR_LOCK_ARGUMENTS; memset(noassigned_task_name, '\0', sizeof(noassigned_task_name)); } printf("*******************************************************************************\n"); printf("* EPMC_check_process_member is end ! *\n"); printf("*******************************************************************************\n"); return customError; } int LD_AutoAssign(EPM_action_message_t msg) { int ifail = ITK_ok, arg_cnt = 0, att_cnt = 0, task_count = 0; char* arg = NULL, * argflag = NULL, * argvalue = NULL; tag_t* attachments = NULLTAG, task_tag = NULLTAG, rootTask_tag = NULLTAG, * task_tags = NULLTAG; vector values; set sh_set; getPrefStrings("Connor_PRType_Person_Mapping", TC_preference_site,values); //拿到当前节点 task_tag = msg.task; if (task_tag == NULLTAG) { goto end; } ITKCALL(ifail = EPM_ask_root_task(task_tag, &rootTask_tag)); //获取目标下所有对象 ITKCALL(ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments)); if (att_cnt == 0) { goto end; } for (int i = 0; i < att_cnt; i++) { char* object_type = NULL; AOM_ask_value_string(attachments[i],"object_type",&object_type); if (strcmp("LD6_PRRevision",object_type) == 0) { char* problem_type = NULL; char* company_value = NULL; AOM_ask_value_string(attachments[i], "ld6_company", &company_value); AOM_ask_value_string(attachments[i], "ld6_problemType", &problem_type); /*for each (string problem in values) { vector split; Split(problem.c_str(), "=", split); if (split.size() == 2 && strcmp(split[0].c_str(),problem_type) == 0) { if (sh_set.insert(split[1]).second == false) { continue; } } }*/ for each (string company in values) { vector split; vector split2; Split(company.c_str(), ":", split); if (split[0].empty()) { EMH_store_error_s2(EMH_severity_error, ITK_err, "首选项配置错误", company.c_str()); goto end; } //公司属性相同 if (split.size() == 2 && strcmp(split[0].c_str(), company_value) == 0) { Split(split[1].c_str(), "=", split2); if (split2.size() == 2) { //问题类型为空 if (split2[0].empty()) { if (sh_set.insert(split2[1]).second == false) { continue; } } //问题类型不为空,且相同 else if (strcmp(split2[0].c_str(), problem_type) == 0) { if (sh_set.insert(split2[1]).second == false) { continue; } } } } } } } char* task_type = NULL; WSOM_ask_object_type2(task_tag, &task_type); printf("当前节点的类型为:%s\n", task_type); if (strcmp("EPMReviewTask", task_type) == 0 || strcmp("EPMAcknowledgeTask", task_type) == 0) { char* object_name = NULL; int mem_cnt = 0, signoff_cnt = 0; tag_t user_tag = NULLTAG, login_group = NULLTAG, * members = NULLTAG, * signoffs = NULLTAG, select_signoff_tag = NULLTAG; AOM_ask_value_string(task_tag, "object_name", &object_name);//对象名称 EPM_ask_sub_task(task_tag, "select-signoff-team", &select_signoff_tag); printf("当前节点的名称为:%s\n", object_name); int attachments_num = 0,* attach_type; tag_t* attachmentTags; EPM_ask_all_attachments(select_signoff_tag, &attachments_num, &attachmentTags, &attach_type); if (attachments_num > 0) { goto end; } for (set::iterator it = sh_set.begin(); it != sh_set.end(); it++) { printf("添加:%s\n", it->c_str()); ITKCALL(SA_find_user2(it->c_str(), &user_tag)); ITKCALL(SA_ask_user_login_group(user_tag, &login_group)); ITKCALL(SA_find_groupmembers(user_tag, login_group, &mem_cnt, &members)); ITKCALL(EPM_create_adhoc_signoff(select_signoff_tag, members[0], &signoff_cnt, &signoffs)); } if (sh_set.size() > 0) { ITKCALL(EPM_set_adhoc_signoff_selection_done(select_signoff_tag, true)); } DOFREE(object_name); DOFREE(members); DOFREE(signoffs); } if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMConditionTask", task_type) == 0) { tag_t user_tag = NULLTAG; for (set::iterator it = sh_set.begin(); it != sh_set.end(); it++) { ITKCALL(SA_find_user2(it->c_str(), &user_tag)); ITKCALL(EPM_assign_responsible_party(task_tag, user_tag));//设置编制节点的责任方 } } end: DOFREE(attachments); return ifail; } int ML_ItemRevSave(METHOD_message_t* msg, va_list args) { printf("=========================创建后操作 Start===================\n"); int ifail = ITK_ok; tag_t new_rev = va_arg(args, tag_t); if (isTypeOf(new_rev, "Part Revision")) { printf("类型为Part Revision 检查物料描述\n"); char* ld6_materialDesc, * item_id; AOM_ask_value_string(new_rev, "ld6_materialDesc", &ld6_materialDesc); AOM_ask_value_string(new_rev, "item_id", &item_id); tag_t query; int n_found; ITKCALL(ifail = QRY_find2("6LD_Om_PartRevision", &query)); tag_t* tags; boolean saveFlag = true; char* qry_entries[2] = { "materialDesc" ,"id01" }, * qry_values[2] = { ld6_materialDesc ,item_id }, * errorId = ""; ITKCALL(ifail = QRY_execute(query, 2, qry_entries, qry_values, &n_found, &tags)); if (n_found == 0) { saveFlag = true; } else { for (int i = 0; i < n_found; i++) { char* itemId; AOM_ask_value_string(tags[i], "item_id", &itemId); printf("查询到的itemId==> %s\n", itemId); } ifail = 1; saveFlag = false; EMH_store_error_s2(EMH_severity_error, ITK_err, "提示", "已存在相同物料描述的对象,无需重复创建!"); } } va_end(args); return ifail; } // // //int LD6_CusProdFolderSave(METHOD_message_t* msg, va_list args) //{ // // char* log_file = NULL; // // printf("创建日志文件\n"); // char* TO_SRM = (char*)malloc(sizeof("LD6_CusProdFolderSave")); // strcpy(TO_SRM, "emp_register_handler"); // CreateLogFile(TO_SRM,"", &log_file); // // WriteLog(true, "=========================文件夹后操作 Start===================\n"); // int ifail = ITK_ok; // tag_t folder = va_arg(args, tag_t); // // if (isTypeOf(folder, "LD6_CusProdFolder")) { // //连接数据库保存当前名称到数据库 // char* folder_uid; // ITK__convert_tag_to_uid(folder,&folder_uid);//获取文件夹uid // bool conn = open("infodba", "infodba", "TC13", "10.10.22.39"); // if (conn != NULL && conn) { // WriteLog(true, "=========================连接成功===================\n"); // } // else { // WriteLog(true, "=========================连接失败==================\n"); // } // // // } // // va_end(args); // WriteLog(true, "=========================文件夹后操作 End===================\n"); // CloseLog(); // return ifail; //}