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.

1207 lines
33 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#define _CRT_SECURE_NO_WARNINGS
#include "epm_handler_common.h"
#include <tc\preferences.h>
#include <epm\epm.h>
#include <tccore\aom.h>
#include <tccore\aom_prop.h>
#include <tccore\item.h>
#include <map>
#include <vector>
#include<iostream>
#include<stdlib.h>
#pragma warning(disable : 4996)
#include <string>
#include <bom/bom.h>
#include <stdio.h>
#include "common_itk_util.h"
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
//char *bl_indented_title, *bl_formatted_parent_name, *bl_quantity, *bl_uom, *Gd6_gc, *Gd6_bomyt, *Gd6_kxbom, *Gd6_xsdh, *Gd6_ddxmhh, *Gd6_ddsl, *Gd6_bomxmh, *Gd6_xmlb, *Gd6_psgw, *Gd6_scgw;
//函数
void getBomMasterDataPropertys(EPM_action_message_t msg, int valueNum, char **server_address, int bl_item_id_num);
void getBomLineItemPropertys(tag_t top_line,int bl_item_id_num);
int JLCS_05_BOMSendOutSap_MasterData(EPM_action_message_t msg)
{
char* log_file = NULL;
char log_path[128] = "C:\\Temp\\JLCS_05_BOMSendOutSap_MasterData_LOG.txt";
CreateLogFile(log_path, &log_file);
printf("开始执行上传物料主数据到SAP\n");
WriteLog("开始执行上传物料主数据到SAP\n");
//POM_AM__set_application_bypass(true);
int ifail = ITK_ok;
int valueNum;
char **server_address;
//printf("开始获取首选项\n");
int attachments_num=0;
int bvr_count;
tag_t rootTask, *attachments, *bvr_list = NULLTAG;
tag_t bom_window_tag = NULLTAG;
char *object_type;
int count;
tag_t item_rev;
char *item_rev_value = NULL;
char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
char jar_file[SS_MAXPATHLEN] = "";
WriteLog("提示:开始获取流程下的根任务\n");
//获取任务对象
EPM_ask_root_task(msg.task, &rootTask);
//获取任务目标对象
WriteLog("提示:开始获取流程目标下的对象 \n");
EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments);
//char *temp_dir = getenv("temp"); //C:\Windows\temp
char parameters[100000] = "";
char *handler_name;
AOM_ask_value_string(rootTask,"job_name",&handler_name);
WriteLog("当前流程名称handler_name=%s\n", handler_name);
WriteLog("提示:开始获取流程目标下的对象 \n");
for (int i = 0; i < attachments_num; i++)
{
//获取topline
AOM_ask_value_string(attachments[i], "object_type", &object_type);
//printf("object_type=%s \n", object_type);
WriteLog("》》》获取%s流程下的对象类型object_type=%s \n", handler_name,object_type);
if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_VehicleRevision", object_type) == 0
|| strcmp("Gd6_XZMKCRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0
|| strcmp("Gd6_PTJRevision", object_type) == 0) {
WriteLog("提示:当前流程目标下的对象类型 in [Gd6_PartsRevision,Gd6_VehicleRevision,Gd6_XZMKCRevision,Gd6_BZJRevision,Gd6_PTJRevision] \n");
//ITEM_rev_list_bom_view_revs(attachments[i], &bvr_count, &bvr_list);
//printf("视图数量=%d \n", bvr_count);
//if (bvr_count == 0) {
// continue;
//}
//获取BOM topline
//BOM_create_window(&bom_window_tag);
//BOM_set_window_top_line_bvr(bom_window_tag, bvr_list[bvr_count - 1], &top_line);
//BOM_ask_window_top_line(bom_window_tag, &top_line);
//printf("开始获取版本\n");
char * puid = NULL;
//获取PUID
ITK__convert_tag_to_uid(attachments[i], &puid);
WriteLog("获取PUID==%s", puid);
int item_mast_rev_count = 0;
tag_t *item_mast_rev NULLTAG;
//获取版本表单
ITKCALL(AOM_ask_value_tags(attachments[i], "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ));
WriteLog("》》》获取版本表单数量=%d", item_mast_rev_count);
strcat(parameters, "getBomMasterDataPropertys}}");
strcat(parameters, puid);
strcat(parameters, "}}");
//判断是否已导入
//char * isSend = NULL;
//AOM_ask_value_string(item_mast_rev[0],"gd6_sfyxf", &isSend);
//printf("是否已导入:%s\n", isSend);
//if (strcmp("是", isSend) == 0)
//{
// PREF_ask_char_values("JL_BOMUpdateMasterData", &valueNum, &server_address);//获得首选项
// strcpy(parameters,"updateBomMasterDataPropertys}}");
// strcat(parameters, puid);
// strcat(parameters, "}}");
//}
//else
//{
WriteLog("开始获取首选项JL_BOMSendSapMasterData信息\n");
PREF_ask_char_values("JL_BOMSendSapMasterData", &valueNum, &server_address);//获得首选项
//}
//BOM_line_ask_attribute_tag(top_line, bl_item_id_num, &item_rev);//获得版本
//printf("开始遍历首选项\n");
WriteLog("》》》开始遍历首选项:按照要求分割字符串···\n");
char *revbuf[8] = { 0 }; //存放分割后的子字符串
int num = 0;//分割后子字符串的个数
for (int ii = 0; ii < valueNum; ii++) {
//revbuf[8] = { 0 }; //存放分割后的子字符串
num = 0;//分割后子字符串的个数
split(server_address[ii], "/", revbuf, &num);
strcat(parameters, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "": revbuf[0]);
strcat(parameters, "=");
WriteLog("》》》分割server_address[%d]=%s后拼接parameters=%s\n", ii, server_address[ii], parameters);
if(strstr(revbuf[1],"item_id") != NULL || strstr(revbuf[1],"object_name") != NULL)
{
WriteLog("》》》%s的值中包含item_idobject_name\n", revbuf[1]);
AOM_ask_value_string(attachments[i], revbuf[1], &item_rev_value);
}
else
{
WriteLog("》》》%s的值中不包含item_idobject_name\n", revbuf[1]);
AOM_ask_value_string(item_mast_rev[0], revbuf[1], &item_rev_value);
}
strcat(parameters, item_rev_value);
strcat(parameters, "");
}
strcat(parameters, "@@");
WriteLog("》》》拼接parameters=%s\n", parameters);
//printf("parameters=====%s\n", parameters);
//printf("接口返回值:%s\n", strResult.c_str());
//system(cmd);
//getBomLineItemPropertys(top_line, bl_item_id_num);
MEM_free(bvr_list);
bvr_list = NULL;
MEM_free(object_type);
object_type = NULL;
//MEM_free(isSend);
//isSend = NULL;
MEM_free(puid);
puid = NULL;
}
}
strcpy(jar_file, tc_root_file);
strcat(jar_file, "\\portal\\plugins\\");
strcat(jar_file, "JLCS_05.jar");
//把数据用写入文件
WriteLog("》》》拼接的jar_file=%s开始把数据写入文件\n",jar_file);
char data_file[SS_MAXPATHLEN] = "";
strcat(data_file,tc_root_file);
strcat(data_file,"\\data.txt");
WriteLog("》》》拼接data_file=%s\n", data_file);
FILE* fptr;
fptr = fopen(data_file, "w");
fprintf(fptr, "%s", parameters);
fclose(fptr);
WriteLog("》》》数据写入文件完成\n");
string strResult;
//cmd指令
WriteLog("》》》开始组织cmd指令\n");
char cmd[256] = "";
strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
strcat(cmd,tc_root_file);
strcat(cmd,"\\portal\\plugins\\");
strcat(cmd,"JLCS_05.jar");
strcat(cmd, "\" ");
//传参
cout<<data_file<<endl;
strcat(cmd, data_file);
//用来传递本流程的流程名称(@分割)
WriteLog("》》》拼接cmd指令:用来传递本流程的流程名称(@分割)\n");
strcat(cmd,"@");
strcat(cmd,handler_name);
printf("路径:\n%s\n", cmd);
char buf[8000] = { 0 };
FILE *pf = NULL;
WriteLog("》》》执行cmd\n");
if ((pf = _popen(cmd, "r")) == NULL) {
printf("接口返回:\n%s", "1");
}
while (fgets(buf, sizeof buf, pf)) {
strResult += buf;
}
_pclose(pf);
//char *revbuf[512] = { 0 }; //存放分割后的子字符串
//int num = 0;//分割后子字符串的个数
//char parameters3[80000] = "";
//strcat(parameters3,parameters);
//split(parameters, "@@", revbuf, &num);
//printf("分割的字符串长度为:%d\n",num);
//if(num/25>0){
// printf("开始分割\n");
// for(int i=0;i<=num/25;i++){
// printf("一次分割开始\n");
// char parameters2[8000] = "";
// if(i==num/25){
// for(int j = 25*i ; j < 25*i+num%25;j++){
// strcat(parameters2,revbuf[j]);
// strcat(parameters2,"@@");
// }
// }
// else{
// for(int j=25*i;j <= 25*i+24;j++){
// strcat(parameters2,revbuf[j]);
// strcat(parameters2,"@@");
// }
// }
// //cmd指令
// char cmd[8000] = "";
// strcpy(cmd, "java -jar \"");
// //strcpy(jar_file, tc_root_file);
// //strcat(jar_file, "\\portal\\plugins\\");
// //strcat(jar_file, "JLCS_05.jar");
// //strcat(cmd, jar_file);
// strcat(cmd,tc_root_file);
// strcat(cmd,"\\portal\\plugins\\");
// strcat(cmd,"JLCS_05.jar");
// strcat(cmd, "\" ");
// //传参
// cout<<parameters2<<endl;
// strcat(cmd, parameters2);
// printf("路径:\n%s\n", cmd);
// char buf[8000] = { 0 };
// FILE *pf = NULL;
// if ((pf = _popen(cmd, "r")) == NULL) {
// printf("接口返回:\n%s", "1");
// }
//
// while (fgets(buf, sizeof buf, pf)) {
// strResult += buf;
// }
// _pclose(pf);
// printf("一次调用结束\n");
// }
//
//}
//else{
// //cmd指令
// char cmd[8000] = "";
// strcpy(cmd, "java -jar \"");
// //strcat(cmd, jar_file);
// strcat(cmd,tc_root_file);
// strcat(cmd,"\\portal\\plugins\\");
// strcat(cmd,"JLCS_05.jar");
// strcat(cmd, "\" ");
// //传参
// cout<<parameters3<<endl;
// strcat(cmd, parameters3);
// printf("路径:\n%s\n", cmd);
// char buf[8000] = { 0 };
// FILE *pf = NULL;
// if ((pf = _popen(cmd, "r")) == NULL) {
// printf("接口返回:\n%s", "1");
// }
//
// while (fgets(buf, sizeof buf, pf)) {
// strResult += buf;
// }
// _pclose(pf);
//}
if(strlen(parameters) == 0){
WriteLog("》》》下发SAP信息失败没有需要下发的零件\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);
}
WriteLog("》》》返回值strResult:%s\n", strResult.c_str());
cout << strResult <<endl;
unsigned int iSize = strResult.size();
if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0 )
{
WriteLog("》》》下发SAP信息失败\n返回消息strResult%s\n目标的数量attachments_num%d\n", strResult.c_str(), attachments_num);
WriteLog("》》》拼接参数parameters%s\n", parameters);
strResult = strResult.substr(0, iSize - 1);
printf("下发失败\n");
printf("返回消息:%s\n",strResult.c_str());
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);
WriteLog("》》》当前目标对象的object_type=%s \n", object_type);
if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_VehicleRevision", object_type) == 0
|| strcmp("Gd6_XZMKCRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0
|| strcmp("Gd6_PTJRevision", object_type) == 0) {
//printf("111111111");
WriteLog("》》》object_type=%s in [Gd6_PartsRevision,Gd6_VehicleRevision,Gd6_XZMKCRevision,Gd6_BZJRevision,Gd6_PTJRevision]\n", object_type);
char * item_id_value = NULL;
//获取PUID
AOM_ask_value_string(attachments[i], "item_id", &item_id_value);
WriteLog("》》》通过“item_id”属性获取item_id_value=%s\n", item_id_value);
//printf("222\n");
strcat(item_id_value, "");
//printf("%s",item_id_value);
if(strstr(strResult.c_str(),item_id_value) == NULL)
{
WriteLog("》》》strResult中不包含=item_id_value时\n");
//printf("44");
int item_mast_rev_count = 0;
tag_t *item_mast_rev = NULLTAG;
//获取版本表单
ITKCALL(AOM_ask_value_tags(attachments[i], "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ));
WriteLog("》》》开始更改版本表单中是否以下发为“是”\n");
//更改版本表单中是否以下发为“是”
POM_AM__set_application_bypass(true);
//先lock
AOM_lock(item_mast_rev[0]);
//再set
AOM_set_value_string(item_mast_rev[0],"gd6_sfyxf","");
//再save
AOM_save( item_mast_rev[0] ) ;
//最后unlock
AOM_unlock( item_mast_rev[0] ) ;
AOM_refresh( item_mast_rev[0],FALSE );
POM_AM__set_application_bypass(false);
MEM_free(item_mast_rev);
item_mast_rev = NULL;
}
//MEM_free(object_type);
//object_type = NULL;
//MEM_free(item_id_value);
//item_id_value = NULL;
}
}
printf("开始更新流程描述,设置描述属性值\n");
WriteLog("》》》开始更新流程描述,设置描述属性值\n");
POM_AM__set_application_bypass(true);
//获取流程作业
tag_t job = NULLTAG;
EPM_ask_job(rootTask,&job);
//设置描述属性值
//先lock
AOM_lock(job);
//再set
ITKCALL(ifail = 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");
WriteLog("》》》下发sap成功\n");
for (int i = 0; i < attachments_num; i++)
{
//获取object_type
ITKCALL(ifail = AOM_ask_value_string(attachments[i], "object_type", &object_type));
printf("object_type=%s \n", object_type);
WriteLog("提示:流程目标下当前对象的类型=object_type=%s \n", object_type);
if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_VehicleRevision", object_type) == 0
|| strcmp("Gd6_XZMKCRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0
|| strcmp("Gd6_PTJRevision", object_type) == 0) {
WriteLog("》》》object_type=%s in [Gd6_PartsRevision,Gd6_VehicleRevision,Gd6_XZMKCRevision,Gd6_BZJRevision,Gd6_PTJRevision]\n", object_type);
int item_mast_rev_count = 0;
tag_t *item_mast_rev NULLTAG;
//获取版本表单
ITKCALL(AOM_ask_value_tags(attachments[i], "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ));
WriteLog("》》》开始更改版本表单中是否已下发为“是”\n");
//更改版本表单中是否以下发为“是”
POM_AM__set_application_bypass(true);
//先lock
AOM_lock(item_mast_rev[0]);
//再set
AOM_set_value_string(item_mast_rev[0],"gd6_sfyxf","");
//再save
AOM_save( item_mast_rev[0] ) ;
//最后unlock
AOM_unlock( item_mast_rev[0] ) ;
AOM_refresh( item_mast_rev[0],FALSE );
POM_AM__set_application_bypass(false);
MEM_free(item_mast_rev);
item_mast_rev = NULL;
MEM_free(object_type);
object_type = NULL;
}
}
POM_AM__set_application_bypass(true);
//获取流程作业
tag_t job = NULLTAG;
EPM_ask_job(rootTask,&job);
WriteLog("》》》开始设置描述属性值\n");
//设置描述属性值
//先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);
}
//else
//{
// //if (strcmp("是", isSend) != 0)
// //{
// //更改版本表单中是否以下发为“是”
// POM_AM__set_application_bypass(true);
// //设置描述属性值
// //先lock
// AOM_lock(item_mast_rev[0]);
// //再set
// AOM_set_value_string(item_mast_rev[0],"gd6_sfyxf","是");
// //再save
// AOM_save( item_mast_rev[0] ) ;
// //最后unlock
// AOM_unlock( item_mast_rev[0] ) ;
// AOM_refresh( item_mast_rev[0],FALSE );
// POM_AM__set_application_bypass(false);
// //}
//}
//POM_AM__set_application_bypass(true);
//AOM_refresh( rootTask,FALSE );
//POM_AM__set_application_bypass(false);
printf("上传物料主数据到SAP执行结束1\n");
WriteLog("》》》上传物料主数据到SAP执行结束开始释放对象\n");
MEM_free(attachments);
attachments = NULL;
tc_root_file = NULL;
MEM_free(item_rev_value);
item_rev_value = NULL;
server_address = NULL;
MEM_free(handler_name);
handler_name = NULL;
printf("上传物料主数据到SAP执行结束2\n");
WriteLog("》》》上传物料主数据到SAP释放空间结束handler执行完成\n");
CloseLog();
return ifail;
}
void getBomLineItemPropertys(tag_t top_line, int bl_item_id_num) {
//printf("开始执行getBomLineItemPropertys\n");
int count;
tag_t *children_line;
char parameter[100000] = "getBomMasterDataPropertys,";
tag_t item_rev;
char *item_rev_value;
int valueNum;
char **server_address;
char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
char jar_file[SS_MAXPATHLEN] = "";
strcpy(jar_file, tc_root_file);
strcat(jar_file, "\\portal\\plugins\\");
strcat(jar_file, "JLCS_05.jar");
PREF_ask_char_values("JL_BOMSendSapMasterData", &valueNum, &server_address);//获得首选项
BOM_line_ask_all_child_lines(top_line, &count, &children_line);
//printf("子行=%d \n", count);
for (int ii = 0; ii < count; ii++)
{
BOM_line_look_up_attribute("bl_line_object", &bl_item_id_num);
BOM_line_ask_attribute_tag(children_line[ii], bl_item_id_num, &item_rev);//获得版本
//printf("开始遍历首选项valueNum=%d\n", valueNum);
char *revbuf[8] = { 0 }; //存放分割后的子字符串
int num = 0;//分割后子字符串的个数
for (int ij = 0; ij < valueNum; ij++) {
//revbuf[8] = { 0 };
num = 0;
split(server_address[ij], "/", revbuf, &num);
strcat(parameter, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "" : revbuf[0]);
strcat(parameter, "=");
AOM_UIF_ask_value(item_rev, revbuf[1], &item_rev_value);
strcat(parameter, item_rev_value);
strcat(parameter, "");
}
//printf("parameter======:\n%s\n", parameter);
//把数据用写入文件
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", parameter);
fclose(fptr);
//cmd指令
char cmd[256] = "";
strcpy(cmd, "java -jar \"");
strcat(cmd,tc_root_file);
strcat(cmd,"\\portal\\plugins\\");
strcat(cmd,"JLCS_05.jar");
strcat(cmd, "\" ");
//传参
cout<<data_file<<endl;
strcat(cmd, data_file);
//printf("路径:\n%s\n", cmd);
system(cmd);
//char cmd[100000] = "";
//strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
//strcat(cmd, "\" ");
////传参
//strcat(cmd, parameter);
////printf("路径:\n%s\n", cmd);
//system(cmd);
getBomLineItemPropertys(children_line[ii], bl_item_id_num);
}
printf("执行结束 \n");
}
int JLCS_05_BOMDeleteSap_MasterData(EPM_action_message_t msg)
{
printf("开始执行\n");
int ifail = ITK_ok;
//printf("开始获取首选项\n");
int attachments_num;
tag_t rootTask, *attachments;
char *object_type;
char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
char jar_file[SS_MAXPATHLEN] = "";
strcpy(jar_file, tc_root_file);
strcat(jar_file, "\\portal\\plugins\\");
strcat(jar_file, "JLCS_05.jar");
//获取任务对象
EPM_ask_root_task(msg.task, &rootTask);
//获取任务目标对象
EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments);
//char *temp_dir = getenv("temp"); //C:\Windows\temp
char *handler_name;
AOM_ask_value_string(rootTask,"job_name",&handler_name);
char parameters[100000] = "";
for (int i = 0; i < attachments_num; i++)
{
//获取topline
AOM_ask_value_string(attachments[i], "object_type", &object_type);
//printf("object_type=%s \n", object_type);
if (strcmp("Gd6_PartsRevision", object_type) == 0) {
//printf("开始获取版本\n");
char * puid = NULL;
char * itemId = NULL;
//获取PUID
ITK__convert_tag_to_uid(attachments[i], &puid);
//获取ITEM_ID
AOM_ask_value_string(attachments[i], "item_id", &itemId);
strcat(parameters, "deleteBomMasterDataPropertys}}");
strcat(parameters, puid);
strcat(parameters, "}}");
strcat(parameters, itemId);
strcat(parameters, "@@");
//printf("接口返回值:%s\n", strResult.c_str());
//system(cmd);
//getBomLineItemPropertys(top_line, bl_item_id_num);
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);
string strResult;
//cmd指令
char cmd[256] = "";
strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
strcat(cmd,tc_root_file);
strcat(cmd,"\\portal\\plugins\\");
strcat(cmd,"JLCS_05.jar");
strcat(cmd, "\" ");
//传参
cout<<data_file<<endl;
strcat(cmd, data_file);
//用来传递本流程的流程名称(@分割)
strcat(cmd,"@");
strcat(cmd,handler_name);
printf("路径:\n%s\n", cmd);
char buf[8000] = { 0 };
FILE *pf = NULL;
if ((pf = _popen(cmd, "r")) == NULL) {
printf("接口返回:\n%s", "1");
}
while (fgets(buf, sizeof buf, pf)) {
strResult += buf;
}
_pclose(pf);
////cmd指令
//char cmd[100000] = "";
//strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
//strcat(cmd, "\" ");
////传参
//strcat(cmd, parameters);
//printf("路径:\n%s\n", cmd);
//char buf[10240] = { 0 };
//FILE *pf = NULL;
//if ((pf = _popen(cmd, "r")) == NULL) {
// printf("接口返回:\n%s", "1");
//}
//string strResult;
//while (fgets(buf, sizeof buf, pf)) {
// strResult += buf;
//}
//_pclose(pf);
unsigned int iSize = strResult.size();
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);
}
if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0)
{
strResult = strResult.substr(0, iSize - 1);
//获取流程作业
tag_t job = NULLTAG;
EPM_ask_job(rootTask,&job);
POM_AM__set_application_bypass(true);
//设置描述属性值
//先lock
AOM_lock(job);
//再set
AOM_set_value_string(job,"object_desc",strResult.c_str());
//再save
AOM_save( job ) ;
//最后unlock
AOM_unlock( job ) ;
AOM_refresh( job,FALSE );
POM_AM__set_application_bypass(false);
//EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str());
//ifail = 1;
}
MEM_free(attachments);
attachments = NULL;
tc_root_file = NULL;
MEM_free(handler_name);
handler_name = NULL;
printf("执行结束\n");
return ifail;
}
int JLCS_05_BOMUpdateSap_MasterData(EPM_action_message_t msg)
{
printf("开始执行上传物料主数据到SAP\n");
int ifail = ITK_ok;
int valueNum;
char **server_address;
//printf("开始获取首选项\n");
int attachments_num;
int bvr_count;
tag_t rootTask, *attachments, *bvr_list = NULLTAG;
tag_t bom_window_tag = NULLTAG;
char *object_type;
int count;
tag_t item_rev;
char *item_rev_value = NULL;
char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
char jar_file[SS_MAXPATHLEN] = "";
//获取任务对象
EPM_ask_root_task(msg.task, &rootTask);
//获取任务目标对象
EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments);
//char *temp_dir = getenv("temp"); //C:\Windows\temp
char *handler_name;
AOM_ask_value_string(rootTask,"job_name",&handler_name);
char parameters[100000] = "";
for (int i = 0; i < attachments_num; i++)
{
//获取topline
AOM_ask_value_string(attachments[i], "object_type", &object_type);
printf("object_type=%s \n", object_type);
if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_VehicleRevision", object_type) == 0
|| strcmp("Gd6_XZMKCRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0
|| strcmp("Gd6_PTJRevision", object_type) == 0) {
//ITEM_rev_list_bom_view_revs(attachments[i], &bvr_count, &bvr_list);
//printf("视图数量=%d \n", bvr_count);
//if (bvr_count == 0) {
// continue;
//}
//获取BOM topline
//BOM_create_window(&bom_window_tag);
//BOM_set_window_top_line_bvr(bom_window_tag, bvr_list[bvr_count - 1], &top_line);
//BOM_ask_window_top_line(bom_window_tag, &top_line);
//printf("开始获取版本\n");
char * puid = NULL;
//获取PUID
ITK__convert_tag_to_uid(attachments[i], &puid);
int item_mast_rev_count = 0;
tag_t *item_mast_rev NULLTAG;
//获取版本表单
ITKCALL(AOM_ask_value_tags(attachments[i], "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ));
//判断是否已导入
//char * isSend = NULL;
//AOM_ask_value_string(item_mast_rev[0],"gd6_sfyxf", &isSend);
//printf("是否已导入:%s\n", isSend);
//strcat(parameters, puid);
//strcat(parameters, "}}");
//if (strcmp("是", isSend) == 0)
//{
PREF_ask_char_values("JL_BOMUpdateMasterData", &valueNum, &server_address);//获得首选项
strcpy(parameters,"updateBomMasterDataPropertys}}");
strcat(parameters, puid);
strcat(parameters, "}}");
//}
//else
//{
// PREF_ask_char_values("JL_BOMSendSapMasterData", &valueNum, &server_address);//获得首选项
//}
//BOM_line_ask_attribute_tag(top_line, bl_item_id_num, &item_rev);//获得版本
//printf("开始遍历首选项\n");
char *revbuf[8] = { 0 }; //存放分割后的子字符串
int num = 0;//分割后子字符串的个数
for (int ii = 0; ii < valueNum; ii++) {
//revbuf[8] = { 0 }; //存放分割后的子字符串
num = 0;//分割后子字符串的个数
split(server_address[ii], "/", revbuf, &num);
strcat(parameters, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "": revbuf[0]);
strcat(parameters, "=");
if(strstr(revbuf[1],"item_id") != NULL || strstr(revbuf[1],"object_name") != NULL)
{
AOM_ask_value_string(attachments[i], revbuf[1], &item_rev_value);
}
else
{
AOM_ask_value_string(item_mast_rev[0], revbuf[1], &item_rev_value);
}
strcat(parameters, item_rev_value);
strcat(parameters, "");
}
//printf("parameters=====%s\n", parameters);
strcat(parameters, "@@");
//printf("接口返回值:%s\n", strResult.c_str());
//system(cmd);
//getBomLineItemPropertys(top_line, bl_item_id_num);
MEM_free(bvr_list);
bvr_list = NULL;
MEM_free(object_type);
object_type = NULL;
//MEM_free(isSend);
//isSend = NULL;
MEM_free(puid);
puid = NULL;
}
}
strcpy(jar_file, tc_root_file);
strcat(jar_file, "\\portal\\plugins\\");
strcat(jar_file, "JLCS_05.jar");
//把数据用写入文件
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);
string strResult;
//cmd指令
char cmd[256] = "";
strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
strcat(cmd,tc_root_file);
strcat(cmd,"\\portal\\plugins\\");
strcat(cmd,"JLCS_05.jar");
strcat(cmd, "\" ");
//传参
cout<<data_file<<endl;
strcat(cmd, data_file);
//用来传递本流程的流程名称(@分割)
strcat(cmd,"@");
strcat(cmd,handler_name);
printf("路径:\n%s\n", cmd);
char buf[8000] = { 0 };
FILE *pf = NULL;
if ((pf = _popen(cmd, "r")) == NULL) {
printf("接口返回:\n%s", "1");
}
while (fgets(buf, sizeof buf, pf)) {
strResult += buf;
}
_pclose(pf);
////cmd指令
//char cmd[100000] = "";
//strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
//strcat(cmd, "\" ");
////传参
//strcat(cmd, parameters);
//printf("路径:\n%s\n", cmd);
//char buf[10240] = { 0 };
//FILE *pf = NULL;
//if ((pf = _popen(cmd, "r")) == NULL) {
// printf("接口返回:\n%s", "1");
//}
//string strResult;
//while (fgets(buf, sizeof buf, pf)) {
// strResult += buf;
//}
//_pclose(pf);
unsigned int iSize = strResult.size();
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);
}
if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0)
{
strResult = strResult.substr(0, iSize - 1);
//获取流程作业
tag_t job = NULLTAG;
EPM_ask_job(rootTask,&job);
POM_AM__set_application_bypass(true);
//设置描述属性值
//先lock
AOM_lock(job);
//再set
AOM_set_value_string(job,"object_desc",strResult.c_str());
//再save
AOM_save( job ) ;
//最后unlock
AOM_unlock( job ) ;
AOM_refresh( job,FALSE );
POM_AM__set_application_bypass(false);
//EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str());
//ifail = 1;
}
MEM_free(attachments);
attachments = NULL;
tc_root_file = NULL;
MEM_free(item_rev_value);
item_rev_value = NULL;
server_address = NULL;
MEM_free(handler_name);
handler_name = NULL;
printf("上传物料主数据到SAP执行结束\n");
return ifail;
}
//void getBomLineItemPropertys(tag_t top_line, int bl_item_id_num) {
// //printf("开始执行getBomLineItemPropertys\n");
//
// int count;
// tag_t *children_line;
// char parameter[5120] = "getBomMasterDataPropertys,";
//
// tag_t item_rev;
// char *item_rev_value;
// int valueNum;
// char **server_address;
//
// char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
// char jar_file[SS_MAXPATHLEN] = "";
// strcpy(jar_file, tc_root_file);
// strcat(jar_file, "\\portal\\plugins\\");
// strcat(jar_file, "JLCS_05.jar");
//
// PREF_ask_char_values("JL_BOMSendSapMasterData", &valueNum, &server_address);//获得首选项
//
//
// BOM_line_ask_all_child_lines(top_line, &count, &children_line);
// //printf("子行=%d \n", count);
// for (int ii = 0; ii < count; ii++)
// {
// BOM_line_look_up_attribute("bl_line_object", &bl_item_id_num);
// BOM_line_ask_attribute_tag(children_line[ii], bl_item_id_num, &item_rev);//获得版本
//
// //printf("开始遍历首选项valueNum=%d\n", valueNum);
// char *revbuf[8] = { 0 }; //存放分割后的子字符串
// int num = 0;//分割后子字符串的个数
// for (int ij = 0; ij < valueNum; ij++) {
// //revbuf[8] = { 0 };
// num = 0;
// split(server_address[ij], "/", revbuf, &num);
// strcat(parameter, revbuf[0] == NULL || strlen(revbuf[0]) == 0 ? "" : revbuf[0]);
// strcat(parameter, "=");
//
// AOM_UIF_ask_value(item_rev, revbuf[1], &item_rev_value);
//
// strcat(parameter, item_rev_value);
// strcat(parameter, ",");
// }
// //printf("parameter======:\n%s\n", parameter);
//
// char cmd[256] = "";
// strcpy(cmd, "java -jar \"");
// strcat(cmd, jar_file);
// strcat(cmd, "\" ");
// //传参
// strcat(cmd, parameter);
// //printf("路径:\n%s\n", cmd);
// system(cmd);
//
// getBomLineItemPropertys(children_line[ii], bl_item_id_num);
// }
// printf("执行结束 \n");
//
//}
//int JLCS_05_BOMDeleteSap_MasterData(EPM_action_message_t msg)
//{
// printf("开始执行\n");
//
// int ifail = ITK_ok;
// //printf("开始获取首选项\n");
//
// int attachments_num;
// tag_t rootTask, *attachments;
// char *object_type;
//
// char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11
// char jar_file[SS_MAXPATHLEN] = "";
// strcpy(jar_file, tc_root_file);
// strcat(jar_file, "\\portal\\plugins\\");
// strcat(jar_file, "JLCS_05.jar");
//
//
//
// //获取任务对象
// EPM_ask_root_task(msg.task, &rootTask);
// //获取任务目标对象
// EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments);
// //char *temp_dir = getenv("temp"); //C:\Windows\temp
//
//
// for (int i = 0; i < attachments_num; i++)
// {
//
// //获取topline
// AOM_ask_value_string(attachments[i], "object_type", &object_type);
// //printf("object_type=%s \n", object_type);
//
// if (strcmp("Gd6_PartsRevision", object_type) == 0) {
//
// //printf("开始获取版本\n");
// char * puid = NULL;
// char * itemId = NULL;
// //获取PUID
// ITK__convert_tag_to_uid(attachments[i], &puid);
// //获取ITEM_ID
// AOM_ask_value_string(attachments[i], "item_id", &itemId);
//
// char parameters[5120] = "deleteBomMasterDataPropertys}}";
//
// strcat(parameters, puid);
// strcat(parameters, "}}");
// strcat(parameters, itemId);
//
// //cmd指令
// char cmd[256] = "";
// strcpy(cmd, "java -jar \"");
// strcat(cmd, jar_file);
// strcat(cmd, "\" ");
// //传参
// strcat(cmd, parameters);
// printf("路径:\n%s\n", cmd);
// char buf[10240] = { 0 };
// FILE *pf = NULL;
// if ((pf = _popen(cmd, "r")) == NULL) {
// printf("接口返回:\n%s", "1");
// }
// string strResult;
// while (fgets(buf, sizeof buf, pf)) {
// strResult += buf;
// }
// _pclose(pf);
// unsigned int iSize = strResult.size();
// if (iSize > 0 && strResult[iSize - 1] == '\n')
// {
// strResult = strResult.substr(0, iSize - 1);
//
// //获取流程作业
// tag_t job = NULLTAG;
//
// EPM_ask_job(rootTask,&job);
//
// //设置描述属性值
// //先lock
// AOM_lock(job);
// //再set
// AOM_set_value_string(job,"object_desc",strResult.c_str());
// //再save
// AOM_save( job ) ;
// //最后unlock
// AOM_unlock( job ) ;
// AOM_refresh( job,FALSE );
//
// //EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str());
// //ifail = 1;
// }
// //printf("接口返回值:%s\n", strResult.c_str());
// //system(cmd);
// //getBomLineItemPropertys(top_line, bl_item_id_num);
// MEM_free(object_type);
// object_type = NULL;
// MEM_free(puid);
// puid = NULL;
// }
// }
//
// MEM_free(attachments);
// attachments = NULL;
// tc_root_file = NULL;
// printf("执行结束\n");
//
// return ifail;
//}