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.

122 lines
2.7 KiB

#include "util.h"
int bs_wl_check(EPM_rule_message_t msg)
{
int ifail = EPM_go, att_count, tag_cnt,form_cnt;
tag_t rootTask, *attachments, *tags,*forms;
char *val;
stringstream ss,name_ss;
EPM_ask_root_task(msg.task, &rootTask);
EPM_ask_attachments(rootTask, EPM_target_attachment, &att_count, &attachments);
TC_argument_list_t * arguments = msg.arguments;
int arg_cnt = TC_number_of_arguments(arguments), status = 0;
vector<string> wl_types, judge_types,judge_vec;
string name;
map<string, string> paras,judge_map;
for (auto i = 0; i<arg_cnt; i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(arguments), &temp_key, &temp_val);
paras[temp_key] = temp_val;
}
split(paras["wlType"], ",", &wl_types);
split(paras["judgeType"], ",", &judge_types);
split(paras["judgeProps"], ",", &judge_vec);
for(int i=0;i<judge_vec.size();i++)
{
vector<string> temp;
split(judge_vec[i], "=", &temp);
if(temp.size()==2)
{
judge_map[temp[0]] = temp[1];
}
}
for (int i = 0; i<att_count; i++)
{
bool pass=false;
for(int j=0;j<wl_types.size();j++)
{
if(isTypeOf(attachments[i],wl_types[j].c_str()))
{
pass = true;
printf("wl_type:%s\n", wl_types[j].c_str());
break;
}
}
if (!pass)
{
continue;
}
AOM_ask_value_tags(attachments[i], "IMAN_master_form_rev", &form_cnt, &forms);
pass = false;
for(auto j=judge_map.begin();j!=judge_map.end();j++)
{
AOM_UIF_ask_value(forms[0], j->first.c_str(), &val);
if(j->second!=val)
{
pass = true;
break;
}
}
if(!pass)
{
continue;
}
AOM_ask_value_tags(attachments[i], paras["relation"].c_str(), &tag_cnt, &tags);
printf("relation :%s\n, length:%d\n", paras["relation"].c_str(), tag_cnt);
pass = false;
for(int j=0;j<tag_cnt;j++)
{
for(int k=0;k<judge_types.size();k++)
{
if(isTypeOf(tags[j], judge_types[k].c_str()))
{
printf("judge_type:%s\n", judge_types[k].c_str());
tag_t rev;
ITEM_ask_latest_rev(tags[j], &rev);
if(rev)
{
int rel_cnt;
tag_t *rels;
AOM_ask_value_tags(rev, "release_status_list", &rel_cnt, &rels);
if(rel_cnt==0)
{
AOM_ask_value_string(tags[j], "object_string", &val);
ss << val << ",";
}
}else
{
printf("dont have rev\n");
}
pass = true;
}
}
}
if (!pass)
{
AOM_ask_value_string(attachments[i], "object_string", &val);
name_ss << val<<",";
}
}
if(ss.str().length())
{
ss << "<EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n";
ifail = EPM_nogo;
}
if(name_ss.str().length())
{
ss << name_ss.str() << paras["prompt"];
ifail = EPM_nogo;
}
if (ifail==EPM_nogo) {
EMH_store_error_s1(EMH_severity_user_error, EMH_PROP_error_base, ss.str().c_str());
}
return ifail;
}