#include"kutil.h" #include "ado.h" #define debug true #define ITK_err 919012 int LY_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("LY_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("LY6_JHPRRevision", object_type) == 0 || strcmp("LY6_LYPRRevision", object_type) == 0) { char* problem_type = NULL; char* company_value = NULL; AOM_ask_value_string(attachments[i], "ly6_company", &company_value); AOM_ask_value_string(attachments[i], "ly6_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; }