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.

483 lines
14 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.

#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;
}