#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" /** * * @handlerType: ActionHandler * @handlerName: RB_CheckForCompletion * @Description: 1、在设计节点完成时检查 :检查目标下[任务包版本RB3_TaskPackageRevision下的[交付物RB3_TaskDeliverable]关系下内容不允许为空 * 2、检查目标下[任务包版本]下的[项目包关系RB3_XMGX]关系下的[项目包版本RB3_XMKFRevision]下的 [物料关系RB3_WLGX]的内容不允许为空 * 如果[交付物] 、[物料关系] 下任一内容为空,不允许通过弹出报错“[交付物] 或[物料关系] 下内容不允许为空”: 如果都有内容则节点通过 * @author hcj * @date 2024年1月9日 * */ int RB_CheckForCompletion(EPM_action_message_t msg) { int attachments_num = 0; tag_t rootTask = NULLTAG; tag_t *attachments = NULLTAG; char* errorMessage = "“交付物或物料关系下内容不允许为空"; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); printf("开始循环查找目标中的对象\n"); for (int i = 0; i < attachments_num; i++) { char* attType; ITKCALL(AOM_ask_value_string(attachments[i], "object_type", &attType)); printf("获取类型%s是否与RB3_TaskPackageRevision匹配\n", attType); if (strcmp(attType,"RB3_TaskPackageRevision")) { printf("匹配上了\n开始检查目标下RB3_TaskPackageRevision下的RB3_TaskDeliverable关系下内容是否为空\n"); //检查目标下[任务包版本RB3_TaskPackageRevision下的[交付物RB3_TaskDeliverable]关系下内容是否为空 int checkNum = 0; tag_t* checkObj; ITKCALL(AOM_ask_value_tags(attachments[i], "RB3_TaskDeliverable", &checkNum, &checkObj)); if (checkNum == 0) { printf("为空,提示报错,退出流程\n"); EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, errorMessage); return 1; } printf("检查任务包版本下的RB3_XMGX关系下的[RB3_XMKFRevision]下的 [物料关系RB3_WLGX]的内容是否为空\n"); //检查任务包版本下的RB3_XMGX关系下的[RB3_XMKFRevision]下的 [物料关系RB3_WLGX]的内容是否为空 int num = 0; tag_t* obj; ITKCALL(AOM_ask_value_tags(attachments[i], "RB3_XMGX", &num, &obj)); for (int j = 0; j < num; j++) { printf("开始循环获取RB3_XMGX关系下的对象\n"); char* taskPType; ITKCALL(AOM_ask_value_string(obj[j], "object_type", &taskPType)); printf("匹配类型%s是否等于RB3_XMKFRevision\n", taskPType); if (strcmp(taskPType, "RB3_XMKFRevision")) { printf("匹配上了\n"); int checkTaskNum = 0; tag_t* checkTaskObj; ITKCALL(AOM_ask_value_tags(obj[j], "RB3_WLGX", &checkTaskNum, &checkTaskObj)); if (checkTaskNum == 0) { EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, errorMessage); return 1; } } } } } return ITK_ok; }