#include"kutil.h" #include #include #include #include #include "libxl.h" #include #include #include #include #include #include #include #include #include #include #include #include "libxl.h" #include #include #include #include #include #include #include #include using namespace libxl; using namespace std::chrono_literals; using namespace std; #define debug true #define ITK_err 919012 int LD_GYLXFrozen(EPM_action_message_t msg) { printf("《《《《《《《《《《《《《《《《《《《开始执行LD_GYLXFrozen处理程序》》》》》》》》》》》》》》》》"); tag_t rootTask_tag = NULLTAG; tag_t task = NULLTAG; char* arg = NULL, * argflag = NULL, * argvalue = NULL; int arg_cnt = TC_number_of_arguments(msg.arguments); //流程参数 char* ZBS = NULL; char* type = NULL; //目标对象参数 int doc_num = 0; tag_t* doc_tags = NULLTAG; task = msg.task; ITKCALL(EPM_ask_root_task(task, &rootTask_tag)); if (arg_cnt > 0) { for (int i = 0; i < arg_cnt; i++) { arg = TC_next_argument(msg.arguments); ITKCALL(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue)); if (strcmp(argflag, "ZBS") == 0) { if (argvalue != NULL) { printf("获取的值%s:\n", argvalue); ZBS = argvalue; } } if (strcmp(argflag, "type") == 0) { if (argvalue != NULL) { printf("获取的值%s:\n", argvalue); type = argvalue; } } } //获取流程目标对象版本 ITKCALL(EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &doc_num, &doc_tags)); auto file = std::make_unique("D:\\TCTOSAP\\jsonStr.txt"); //std::ofstream file("D:\\MESTOTC\\example.txt", std::ios_base::trunc); // 打开文件,并清空内容 file->is_open(); for (int i = 0; i < doc_num;i++) { string jsonStr = ""; string douhao = ","; string ate = "@"; string fenhao = ";"; char* mbtype; ITKCALL(AOM_ask_value_string(doc_tags[i], "object_type", &mbtype)); printf("类型为%s\n",mbtype); if (strstr(type,mbtype)!= nullptr) { printf("匹配到了类型\n"); char* id; ITKCALL(AOM_ask_value_string(doc_tags[i], "item_id", &id)); jsonStr = jsonStr + ZBS + douhao + id + douhao + mbtype + douhao; printf("JSONStr = %s\n",jsonStr.c_str()); printf("开始获取表格属性\n"); printf("获取关系\n"); //关系参数 int gx_num = 0; tag_t* gx_tags = NULLTAG; ITKCALL(AOM_ask_value_tags(doc_tags[i], "LD6_GYLXCompanyFormRelation", &gx_num,&gx_tags)); printf("获取表单\n"); for (int j = 0; j < gx_num;j++) { char* gxtype; ITKCALL(AOM_ask_value_string(gx_tags[j], "object_type", &gxtype)); printf("类型为%s\n", gxtype); if (strcmp(gxtype,"LD6_GYLXCompanyForm") == 0) { printf("匹配到了表单\n"); printf("获取表格属性\n"); //遍历表格 int num;//表格行数 tag_t* rows = NULL;//表格对象 ITKCALL(AOM_ask_table_rows(gx_tags[j], "ld6_GYLXCompanyTable", &num, &rows)); printf("获取表格\n"); for (int a = 0; a < num; a++) { char* WERKS, * MATNR, * PLNNR, * PLNAL; ITKCALL(AOM_ask_value_string(rows[a], "ld6_company", &WERKS)); ITKCALL(AOM_ask_value_string(rows[a], "ld6_partid", &MATNR)); ITKCALL(AOM_ask_value_string(rows[a], "ld6_groupNum", &PLNNR)); ITKCALL(AOM_ask_value_string(rows[a], "ld6_groupCounter", &PLNAL)); if (a == num-1) { jsonStr = jsonStr + WERKS + ate + MATNR + ate + PLNNR + ate + PLNAL; } else { jsonStr = jsonStr + WERKS + ate + MATNR + ate + PLNNR + ate + PLNAL + fenhao; } } printf("jsonStr = %s\n", jsonStr.c_str()); //将数据写入文件 *file << jsonStr.c_str() << std::endl; //退出当前循环 break; } } } } //执行jar包,给SAP发送请求 //获取当前流程uid char* flowId; ITK__convert_tag_to_uid(rootTask_tag, &flowId); //调用cmd执行jar包,将数据传递到MES和SAP中 char cmd[8192] = ""; strcpy(cmd, "java -jar D:\\Siemens\\Teamcenter13\\bin\\sapjco3.jar"); strcat(cmd, " "); strcat(cmd, "SendSAP"); strcat(cmd, " "); strcat(cmd, flowId); system(cmd); //读取本地的result文件(SAP) string fileid = flowId; string SAPfile = "D:\\TCTOSAP\\" + fileid + "result.txt"; std::ifstream file1(SAPfile); if (!file1.is_open()) { std::cerr << "Failed to open file!" << std::endl; char* error = "服务未响应"; EMH_store_error_s2(EMH_severity_error, ITK_err, "提示", error); return 1; } else { std::stringstream buffer1; buffer1 << file1.rdbuf(); std::string resultStr = buffer1.str(); printf("返回的值%s:\n", resultStr.c_str()); if (strcmp(resultStr.c_str(), "成功") == 0) { for (int i = 0; i < doc_num; i++) { char* mbtype; ITKCALL(AOM_ask_value_string(doc_tags[i], "object_type", &mbtype)); if (strcmp(mbtype, argflag) == 0) { //修改属性值 AOM_lock(doc_tags[i]); ITKCALL(AOM_set_value_string(doc_tags[i], "ld6_gylxiffrozentosap", "成功")); AOM_save(doc_tags[i]); AOM_unlock(doc_tags[i]); AOM_refresh(doc_tags[i], true); } } return 0; } else { for (int i = 0; i < doc_num; i++) { char* mbtype; ITKCALL(AOM_ask_value_string(doc_tags[i], "object_type", &mbtype)); if (strcmp(mbtype, argflag) == 0) { //修改属性值 AOM_lock(doc_tags[i]); ITKCALL(AOM_set_value_string(doc_tags[i], "ld6_gylxiffrozentosap", "失败")); AOM_save(doc_tags[i]); AOM_unlock(doc_tags[i]); AOM_refresh(doc_tags[i], true); } } EMH_store_error_s2(EMH_severity_error, ITK_err, "提示", resultStr.c_str()); return 1; } } return 1; } }