#include"kutil.h" #include int PLM_TO_SAP_NEW(EPM_action_message_t msg) { int ifail = ITK_ok; int attachments_num = 0; int valueNum = 0; tag_t rootTask = NULLTAG; tag_t* attachments = NULLTAG; char* object_type; char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter12 char* parameters = (char*)malloc(1000000 * sizeof(char)); //存放发送到SAP的数据 memset(parameters, 0, sizeof(char)); char** server_address; char* item_rev_value = NULL; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); for (int i = 0; i < attachments_num; i++) { //获取topline ITKCALL(AOM_ask_value_string(attachments[i], "object_type", &object_type)); printf("object_type=%s \n", object_type); //过滤掉非版本的对象 if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } //得到是否已经下发sap,是则不下发 char* if_Send_Sap = NULL; AOM_ask_value_string(attachments[i], "r9_ISTOSAP", &if_Send_Sap); if (strstr(object_type, "是") != NULL) { continue; } ITKCALL(PREF_ask_char_values("RK_SendSapMasterData", &valueNum, &server_address)); //获得首选项 //获取物料的puid char* puid = NULL; ITK__convert_tag_to_uid(attachments[i], &puid); strcat(parameters, "getMasterDataPropertys}}"); strcat(parameters, puid); strcat(parameters, "}}"); char* revbuf[32] = { 0 }; //存放分割后的子字符串 //得到首选项中配置的属性 for (int ii = 0; ii < valueNum; ii++) { int num = 0;//分割后子字符串的个数 //split(server_address[ii], "=", revbuf, &num); strcat(parameters, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "" : revbuf[0]); strcat(parameters, "="); AOM_ask_value_string(attachments[i], revbuf[1], &item_rev_value); strcat(parameters, item_rev_value); strcat(parameters, "¥"); } //特殊属性(不可配置的属性或者定死的属性) strcat(parameters, "BERID=1000_01¥"); strcat(parameters, "@@"); MEM_free(object_type); object_type = NULL; MEM_free(puid); puid = NULL; } //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file, tc_root_file); strcat(data_file, "\\data.txt"); FILE* fptr; fptr = fopen(data_file, "w"); fprintf(fptr, "%s", parameters); fclose(fptr); //cmd指令 string strResult; char cmd[256] = ""; strcpy(cmd, "java -jar \""); //strcat(cmd, jar_file); strcat(cmd, tc_root_file); strcat(cmd, "\\portal\\plugins\\"); strcat(cmd, "callSap.jar"); //传参 strcat(cmd, data_file); printf("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } while (pf != NULL && fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); if (strlen(parameters) == 0) { POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "下发SAP信息失败!没有需要下发的零件"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); } unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); printf("下发失败\n"); printf("返回消息:%s\n", strResult); printf("目标的数量:%d\n", attachments_num); for (int i = 0; i < attachments_num; i++) { //获取object_type AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } char* item_id_value = NULL; //获取item_id AOM_ask_value_string(attachments[i], "item_id", &item_id_value); strcat(item_id_value, ":"); if (strstr(strResult.c_str(), item_id_value) == NULL) { //更改版本表单中是否以下发为“是” POM_AM__set_application_bypass(true); //先lock AOM_lock(attachments[i]); //再set AOM_set_value_string(attachments[i], "r9_ISTOSAP", "是"); //再save AOM_save(attachments[i]); //最后unlock AOM_unlock(attachments[i]); AOM_refresh(attachments[i], FALSE); POM_AM__set_application_bypass(false); } } printf("开始更新流程描述\n"); POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "发送SAP信息失败!具体失败原因请查看更新日志!"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); //EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str()); //ifail = 1; } else { printf("成功下发sap"); for (int i = 0; i < attachments_num; i++) { //获取object_type AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } //更改版本表单中是否以下发为“是” POM_AM__set_application_bypass(true); //先lock AOM_lock(attachments[i]); //再set AOM_set_value_string(attachments[i], "r9_ISTOSAP", "是"); //再save AOM_save(attachments[i]); //最后unlock AOM_unlock(attachments[i]); AOM_refresh(attachments[i], FALSE); POM_AM__set_application_bypass(false); MEM_free(object_type); object_type = NULL; } POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "成功下发!!"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); } //释放内存 tc_root_file = NULL; MEM_free(item_rev_value); item_rev_value = NULL; return ifail; } int PLM_TO_SAP_Revise(EPM_action_message_t msg) { int ifail = ITK_ok; int attachments_num = 0; int valueNum = 0; tag_t rootTask = NULLTAG; tag_t* attachments = NULLTAG; char* object_type; char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter12 char* parameters = (char*)malloc(1000000 * sizeof(char)); //存放更新到SAP的数据 memset(parameters, 0, sizeof(char)); char** server_address; char* item_rev_value = NULL; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); for (int i = 0; i < attachments_num; i++) { //获取topline ITKCALL(AOM_ask_value_string(attachments[i], "object_type", &object_type)); printf("object_type=%s \n", object_type); //过滤掉非版本的对象 if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } //得到是否已经下发sap,是则不更新 char* if_Send_Sap = NULL; AOM_ask_value_string(attachments[i], "", &if_Send_Sap); //得到该对象的版本数量 tag_t item = NULLTAG, * revisions; ITEM_ask_item_of_rev(attachments[i], &item); int rev_count = 0; ITEM_find_revisions(item, "*", &rev_count, &revisions); printf("版本数量为:%d", rev_count); if (strstr(object_type, "是") != NULL || rev_count < 2) { continue; } ITKCALL(PREF_ask_char_values("RK_SendSapMasterData", &valueNum, &server_address)); //获得首选项 //获取物料的puid char* puid = NULL; ITK__convert_tag_to_uid(attachments[i], &puid); strcat(parameters, "getMasterDataPropertys}}"); strcat(parameters, puid); strcat(parameters, "}}"); char* revbuf[32] = { 0 }; //存放分割后的子字符串 //得到首选项中配置的属性 for (int ii = 0; ii < valueNum; ii++) { int num = 0;//分割后子字符串的个数 //split(server_address[ii], "=", revbuf, &num); strcat(parameters, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "" : revbuf[0]); strcat(parameters, "="); AOM_ask_value_string(attachments[i], revbuf[1], &item_rev_value); strcat(parameters, item_rev_value); strcat(parameters, "¥"); } //特殊属性(不可配置的属性或者定死的属性) //strcat(parameters, "BERID=\"\"¥DEL_FLAG=\"\"¥"); strcat(parameters, "@@"); MEM_free(object_type); object_type = NULL; MEM_free(puid); puid = NULL; } //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file, tc_root_file); strcat(data_file, "\\data.txt"); FILE* fptr; fptr = fopen(data_file, "w"); fprintf(fptr, "%s", parameters); fclose(fptr); //cmd指令 string strResult; char cmd[256] = ""; strcpy(cmd, "java -jar \""); //strcat(cmd, jar_file); strcat(cmd, tc_root_file); strcat(cmd, "\\portal\\plugins\\"); strcat(cmd, "callSap.jar"); //传参 strcat(cmd, data_file); printf("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } while (pf != NULL && fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); if (strlen(parameters) == 0) { POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "更新SAP信息失败!没有需要下发的零件"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); } unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); printf("更新失败\n"); printf("返回消息:%s\n", strResult); printf("目标的数量:%d\n", attachments_num); for (int i = 0; i < attachments_num; i++) { //获取object_type AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } char* item_id_value = NULL; //获取item_id AOM_ask_value_string(attachments[i], "item_id", &item_id_value); strcat(item_id_value, ":"); if (strstr(strResult.c_str(), item_id_value) == NULL) { //更改版本表单中是否以下发为“是” POM_AM__set_application_bypass(true); //先lock AOM_lock(attachments[i]); //再set AOM_set_value_string(attachments[i], "r9_ISTOSAP", "是"); //再save AOM_save(attachments[i]); //最后unlock AOM_unlock(attachments[i]); AOM_refresh(attachments[i], FALSE); POM_AM__set_application_bypass(false); } } printf("开始更新流程描述\n"); POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "更新SAP信息失败!具体失败原因请查看更新日志!"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); //EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str()); //ifail = 1; } else { printf("成功更新sap"); for (int i = 0; i < attachments_num; i++) { //获取object_type AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); if ((strstr(object_type, "Revision") == NULL) || (strstr(object_type, "Master") != NULL) || (strstr(object_type, "master") != NULL) || (strstr(object_type, "BOM") != NULL) || (strstr(object_type, "bom") != NULL) || (strstr(object_type, "Bom") != NULL)) { continue; } //更改版本表单中是否以下发为“是” POM_AM__set_application_bypass(true); //先lock AOM_lock(attachments[i]); //再set AOM_set_value_string(attachments[i], "r9_ISTOSAP", "是"); //再save AOM_save(attachments[i]); //最后unlock AOM_unlock(attachments[i]); AOM_refresh(attachments[i], FALSE); POM_AM__set_application_bypass(false); MEM_free(object_type); object_type = NULL; } POM_AM__set_application_bypass(true); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask, &job); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job, "object_desc", "成功更新!!"); //再save AOM_save(job); //最后unlock AOM_unlock(job); AOM_refresh(job, FALSE); //AOM_refresh( rootTask,FALSE ); POM_AM__set_application_bypass(false); } //释放内存 tc_root_file = NULL; MEM_free(item_rev_value); item_rev_value = NULL; return ifail; } int PLM_TO_SAP_Disuse(EPM_action_message_t msg) { int ifail = ITK_ok; return ifail; }