#include "util.h" int bs_sap_material(EPM_action_message_t msg) { printf("start sap material\n"); int ifail = ITK_ok, att_count; tag_t rootTask, *attachments, relation_type; char *obj_type; int pref_cnt; char **pref_vals; EPM_ask_root_task(msg.task, &rootTask); map class_map; 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; POM_AM__set_application_bypass(true); map paras, rel_map; map prop_map; vector rel_vec; 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; } string d0 = "D00", d1 = "D0"; for (int i = 0; i < 70; i++) { if (i > 67) { class_map[1000 + i + 1] = d1 + to_string(i + 1); } else if (i > 8) { class_map[1000 + i] = d1 + to_string(i + 1); } else { class_map[1000 + i] = d0 + to_string(i + 1); } } PREF_ask_char_values("connor_sap", &pref_cnt, &pref_vals); split(pref_vals[4], ",", &rel_vec); for (int i = 0; i < rel_vec.size(); i++) { vector temp_vec; split(rel_vec[i], "=", &temp_vec); if (temp_vec.size() == 2) { rel_map[temp_vec[0]] = temp_vec[1]; } } vector rel_vec2; split(pref_vals[5], ",", &rel_vec2); for (int i = 0; i < rel_vec2.size(); i++) { vector temp_vec; split(rel_vec2[i], "=", &temp_vec); if (temp_vec.size() == 2) { prop_map[temp_vec[0]] = temp_vec[1]; } } GRM_find_relation_type("IMAN_master_form", &relation_type); printf("create class\n"); Testclass ^test = gcnew Testclass(); printf("create success\n"); String^ url = convert_to_cstring(pref_vals[0]); String^ user = convert_to_cstring(pref_vals[2]); String^ password = convert_to_cstring(pref_vals[3]); // prop_map["MTART"] = "jd2_wllx"; // prop_map["MATNR"] = "item_id"; // prop_map["MAKTX"] = "jd2_wlms"; // prop_map["MEINS"] = "jd2_dldw"; // prop_map["MATKL"] = "jd2_wlz"; // prop_map["PRDHA"] = "jd2_cpcc"; // prop_map["EXTWG"] = "jd2_wbwlz"; // prop_map["MSTAE"] = "release_status_list"; // prop_map["VOLUM"] = "jd2_tj"; // prop_map["VOLEH"] = "jd2_tjdw"; // prop_map["BISMT"] = "jd2_jwlh"; // prop_map["ZEINR"] = "jd2_th"; // prop_map["BRGEW"] = "jd2_mz"; // prop_map["NTGEW"] = "jd2_jz"; // prop_map["GEWEI"] = "jd2_zldw"; // prop_map["CLASS"] = "jd2_wllx"; printf("start111\n"); for (int i = 0; i < att_count; i++) { if (isTypeOf(attachments[i], "Form")) { int rel_cnt, *levels; tag_t *rels, rev = NULLTAG, form; char **relations; form = attachments[i]; WSOM_where_referenced2(form, 1, &rel_cnt, &levels, &rels, &relations); for (int j = 0; j < rel_cnt; j++) { if (tc_strcmp(relations[j], "IMAN_master_form") == 0) { rev = rels[j]; } } if (rev == NULLTAG) { printf("revision get error\n"); continue; } char *idddd, *nameeee; AOM_ask_value_string(rev, "item_id", &idddd); AOM_ask_value_string(rev, "object_name", &nameeee); printf("===>id=%s,name=%s\n", idddd, nameeee); char* item_type; AOM_ask_value_string(rev, "object_type", &item_type); int pref_cnt; char** pref_values; PREF_ask_char_values("connor_wl_type", &pref_cnt, &pref_values); bool flag = false; for (int ii = 0; ii < pref_cnt; ii++) { if (tc_strcmp(pref_values[ii], item_type) == 0) { flag = true; } } if (!flag) { printf("revision is not wl\n"); continue; } char *item_id; AOM_ask_value_string(rev, "item_id", &item_id); // GRM_list_secondary_objects_only(attachments[i], relation_type, &rel_cnt, &rels); System::Collections::Generic::Dictionary ^dic = gcnew System::Collections::Generic::Dictionary(); for (auto j = prop_map.begin(); j != prop_map.end(); j++) { char *val = ""; string temp_val; if (j->second == "item_id") { AOM_ask_value_string(rev, j->second.c_str(), &val); temp_val = val; } else if (j->second == "release_status_list") { // int status_cnt; // tag_t *rel_status; // AOM_ask_value_tags(form, j->second.c_str(), &status_cnt, &rel_status); // if (status_cnt) // AOM_UIF_ask_value(rel_status[status_cnt - 1], "object_string", &val); // temp_val = rel_map[val]; temp_val = paras["status"]; } else if (j->second == "jd2_dldw") { AOM_UIF_ask_value(form, j->second.c_str(), &val); temp_val = val; } else { tag_t lov; AOM_ask_lov(form, j->second.c_str(), &lov); if (lov) AOM_ask_value_string(form, j->second.c_str(), &val); else AOM_UIF_ask_value(form, j->second.c_str(), &val); temp_val = val; } dic[convert_to_cstring(j->first.c_str())] = convert_to_cstring(temp_val.c_str()); } tag_t class_obj; ICS_ask_classification_object(rev, &class_obj); if (class_obj) { char ***vals; int cnt, *ids, *val_count; ICS_ico_ask_attributes(class_obj, &cnt, &ids, &val_count, &vals); for (int j = 0; j < cnt; j++) { printf("id:%d\n", ids[j]); if (class_map.find(ids[j]) != class_map.end()) { if (ids[j] == 1069) {//层级下拉框特殊处理 Hierarchical drop-down box special handling char* temp; AOM_ask_value_string(form, "jd2_flbm", &temp); cout << "class prop id 1069, jd2_flbm:" << temp << endl; dic[convert_to_cstring(class_map[ids[j]].c_str())] = convert_to_cstring(temp); printf("--------特殊1069------\n", ids[j]); printf("value1:%s\n", convert_to_cstring(class_map[ids[j]].c_str())); printf("value2:%s\n", convert_to_cstring(temp)); } else { if (val_count[j]) { dic[convert_to_cstring(class_map[ids[j]].c_str())] = convert_to_cstring(vals[j][0]); printf("--------------\n", ids[j]); printf("value1:%s\n", convert_to_cstring(class_map[ids[j]].c_str())); printf("value2:%s\n", convert_to_cstring(vals[j][0])); } } } } } dic["MBRSH"] = "M"; dic["SPART"] = "00"; dic["KLART"] = "001"; string result = ConvertToString(test->send_material(url, user, password, dic)); printf("result:%s\n", result.c_str()); if (result.length() && result[0] == 'E') { char *val; AOM_ask_value_string(rev, "item_id", &val); stringstream err; err << val << " 发送错误:" << result; POM_AM__set_application_bypass(false); EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, err.str().c_str()); return 1; } } } POM_AM__set_application_bypass(false); return 0; } void get_bom(System::Collections::Generic::List^> ^a_list, tag_t line, char *werks, char *stlan, string pid, tag_t relation_type, boolean is_hl, boolean is_judge, vector &bom_ids) { int line_cnt; tag_t *lines; BOM_line_ask_child_lines(line, &line_cnt, &lines); char *id; AOM_UIF_ask_value(line, "bl_item_item_id", &id); if (find(bom_ids.begin(), bom_ids.end(), id) != bom_ids.end()) return; bom_ids.push_back(id); if (a_list->Count == 0) { pid = pid.length() > 0 ? pid : id; int index = pid.find('-'); if (index != -1) pid = pid.substr(0, index); } for (int j = 0; j < line_cnt; j++) { System::Collections::Generic::Dictionary ^dic = gcnew System::Collections::Generic::Dictionary(); dic["MATNR"] = convert_to_cstring(pid.length() > 0 ? pid.c_str() : id); dic["WERKS"] = convert_to_cstring(werks); dic["STLAN"] = convert_to_cstring(stlan); dic["BMENG"] = "1"; dic["STLST"] = "1"; dic["POSTP"] = "L"; char *val; AOM_UIF_ask_value(lines[j], "bl_sequence_no", &val); //if (!is_judge) dic["POSNR"] = convert_to_cstring(val); char *child_id; AOM_UIF_ask_value(lines[j], "bl_child_id", &child_id); dic["IDNRK"] = convert_to_cstring(child_id); AOM_UIF_ask_value(lines[j], "JD2_XNJ", &val); if (tc_strlen(val)) { dic["SPPROCTYPE"] = convert_to_cstring(val); } AOM_UIF_ask_value(lines[j], "bl_uom", &val); dic["MEINS"] = convert_to_cstring(val); dic["STLAL"] = is_hl ? convert_to_cstring("02") : convert_to_cstring("01"); char *val1, *val2, *hl, *sffs; tag_t tag, *rels; int rel_cnt; AOM_ask_value_tag(lines[j], "bl_line_object", &tag); AOM_UIF_ask_value(tag, "jd2_ishl", &hl); boolean child_is_hl = tc_strcmp(hl, "是") ? false : true; GRM_list_secondary_objects_only(tag, relation_type, &rel_cnt, &rels); AOM_ask_value_string(lines[j], "JD2_SFHL", &sffs); printf("JD2_SFHL:%s\n", sffs); string quantity; if (tc_strcmp(sffs, "1") == 0) { AOM_ask_value_string(lines[j], "JD2_sl", &val); quantity = val; int index = quantity.find('.'); if (index != -1 && quantity.length() > (index + 4)) { quantity = quantity.substr(0, index + 4); } } else { AOM_ask_value_string(lines[j], "bl_quantity", &val); quantity = val; } dic["MENGE"] = convert_to_cstring(quantity.c_str()); if (is_judge) { if (rel_cnt) { AOM_ask_value_string(rels[0], "jd2_cglx", &val1); AOM_ask_value_string(rels[0], "jd2_tscg", &val2); } char *obj_str; AOM_ask_value_string(lines[j], "object_string", &obj_str); if (tc_strcmp(val1, "F") == 0 && tc_strcmp(val2, "50") == 0) { printf("has f50:%s\n", obj_str); continue; } if (tc_strcmp(val1, "F") == 0 && tc_strcmp(val2, "10") == 0) { printf("has f10:%s\n", obj_str); a_list->Add(dic); continue; } if (tc_strcmp(val1, "F") == 0 && tc_strlen(val2) == 0) { printf("has fempty:%s\n", obj_str); a_list->Add(dic); continue; } if (tc_strcmp(val1, "E") == 0 && tc_strlen(val2) == 0) { printf("has fempty:%s\n", obj_str); a_list->Add(dic); continue; } if (tc_strcmp(val1, "E") == 0 && tc_strcmp(val2, "50") == 0) { printf("has e50:%s\n", obj_str); if (pid.length() > 0) { printf("obj:%s pid:%s\n", obj_str, pid.c_str()); } else { printf("obj:%s pid:%s\n", obj_str, id); } get_bom(a_list, lines[j], werks, stlan, pid.length() > 0 ? pid : id, relation_type, child_is_hl, is_judge, bom_ids); continue; } // if (tc_strcmp(val1, "F") == 0 && tc_strlen(val2) == 0) // { // a_list->Add(dic); // continue; // } } a_list->Add(dic); get_bom(a_list, lines[j], werks, stlan, "", relation_type, child_is_hl, is_judge, bom_ids); } } int bs_sap_bom(EPM_action_message_t msg) { printf("start sap bom2\n"); int ifail = ITK_ok, att_count; tag_t rootTask, *attachments, relation_type, win; char *obj_type; int pref_cnt; char **pref_vals; 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; POM_AM__set_application_bypass(true); map paras; 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; } PREF_ask_char_values("connor_sap", &pref_cnt, &pref_vals); GRM_find_relation_type("IMAN_master_form", &relation_type); Testclass ^test = gcnew Testclass(); String^ url = convert_to_cstring(pref_vals[1]); String^ user = convert_to_cstring(pref_vals[2]); String^ password = convert_to_cstring(pref_vals[3]); bool has_99 = false; BOM_create_window(&win); for (int i = 0; i < att_count; i++) { if (isTypeOf(attachments[i], "PSBOMViewRevision")) { tag_t top_line, rev; char *id; BOM_set_window_top_line_bvr(win, attachments[i], &top_line); if (top_line == NULLTAG) continue; AOM_ask_value_tag(top_line, "bl_line_object", &rev); if (rev == NULLTAG) continue; AOM_ask_value_string(rev, "item_id", &id); if (id[0] == '9'&&id[1] == '9') { has_99 = true; break; } } } printf("has _99:%d\n", has_99); vector bom_ids; for (int i = 0; i < att_count; i++) { if (isTypeOf(attachments[i], "PSBOMViewRevision")) { printf("execute\n"); int rel_cnt, line_cnt; System::Collections::Generic::List^> ^a_list = gcnew System::Collections::Generic::List^>(); tag_t top_line, *lines, rev, *rels; char *id, *werks, *stlan, *hl; BOM_set_window_top_line_bvr(win, attachments[i], &top_line); if (top_line == NULLTAG) continue; AOM_ask_value_tag(top_line, "bl_line_object", &rev); if (rev == NULLTAG) continue; GRM_list_secondary_objects_only(rev, relation_type, &rel_cnt, &rels); AOM_ask_value_string(rev, "item_id", &id); if (find(bom_ids.begin(), bom_ids.end(), id) != bom_ids.end()) continue; if (has_99) { if (id[0] != '9' || id[1] != '9') { printf("not 99:%s\n", id); continue; } printf(" 99:%s\n", id); } AOM_ask_value_string(rels[0], "jd2_gc", &werks); AOM_ask_value_string(rels[0], "jd2_BOMyt", &stlan); AOM_UIF_ask_value(rev, "jd2_ishl", &hl); boolean is_hl = tc_strcmp(hl, "是") ? false : true; if (tc_strlen(werks) == 0 || tc_strlen(stlan) == 0) continue; boolean is_judege = id[0] == '9'&&id[1] == '9'; get_bom(a_list, top_line, werks, stlan, "", relation_type, is_hl, is_judege, bom_ids); string result = ConvertToString(test->send_bom(url, user, password, a_list)); printf("result:%s\n", result.c_str()); if (result.length() && result[0] == 'E') { BOM_close_window(win); POM_AM__set_application_bypass(false); EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str()); return 1; } } } BOM_close_window(win); POM_AM__set_application_bypass(false); EMH_clear_errors(); return 0; }