|
|
|
|
|
#include"kutil.h"
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
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;
|
|
|
}
|