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.

104 lines
3.0 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 "util.h"
bool startsWith(const char* str, const char* prefix) {
return strncmp(str, prefix, strlen(prefix)) == 0;
}
bool endsWith(const char* str, const char* suffix) {
if (!str || !suffix)
return str == suffix;
size_t lenStr = strlen(str);
size_t lenSuffix = strlen(suffix);
if (lenSuffix > lenStr)
return false;
return strncmp(str + lenStr - lenSuffix, suffix, lenSuffix) == 0;
}
bool isJD2_BJRevision(const char* type) {
return startsWith(type, "JD2") && endsWith(type, "BJRevision");
}
/*
* 获取包含中文字符的字符串长度
*/
int getCharLength(char str[])
{
int count = 0;
for (int i = 0; str[i]; i++)
{
if (str[i] < 0) i++;
count++;
}
return count;
}
/*
* 选中对象版本发起任意流程时检查版本表单中的SAP物料描述属性
*/
int jd_check_wlms_length(EPM_rule_message_t msg) {
printf("Sample_confirmation_sheet is begin! \n");
int ifail = ITK_ok,
result_tag = EPM_go;
tag_t rootTask = NULLTAG;
int attachmentCount = 0;
tag_t* attachmentTags = NULL,
attachmentTag = NULLTAG;
char* wlms = NULL,
* type = NULL,
* name = NULL,
* jz = NULL;
int form_cnt = 0;
tag_t* forms = NULL;
ITKCALL(ifail = EPM_ask_root_task(msg.task, &rootTask));
ITKCALL(ifail = EPM_ask_attachments(rootTask, EPM_target_attachment, &attachmentCount, &attachmentTags));
//便利所有的流程目标下的对象
for (int i = 0; i < attachmentCount; i++) {
attachmentTag = attachmentTags[i];//PartRevisionMaster
ITKCALL(ifail = AOM_ask_value_string(attachmentTag, "object_type", &type));
ITKCALL(ifail = AOM_ask_value_string(attachmentTag, "object_name", &name));
printf(">>>当前流程下对象的类型为==[%s]\n", type);
//获取版本对象下的表单
ITKCALL(ifail = AOM_ask_value_tags(attachmentTag, "IMAN_master_form_rev", &form_cnt, &forms));
//=================================下面是检查版本表单中的描述长度================================================================================================
if (form_cnt > 0) {
printf(">>>当前流程下对象存在表单,表单数量=[%d]\n", form_cnt);
//默认取第一个表单
ITKCALL(ifail = AOM_ask_value_string(forms[0], "jd2_wlms", &wlms));
//string wlms_string = wlms;
printf(">>>物料描述为:[%s]\n >>>长度为:[%d]\n", wlms, getCharLength(wlms));
//printf("wlms_string.length() = %d, \n wlms_string.size() = %d, \n strlen(wlms) = %d, count_utf8_characters(wlms_string)=%d \n", wlms_string.length(), wlms_string.size(), strlen(wlms), count_utf8_characters(wlms_string));
if (wlms != NULL && getCharLength(wlms) > 40) {
printf(">>>物料描述超过40个字符不允许发起流程请检查\n");
char* message = "SAP物料描述超过40个字符不允许发起流程请检查";
cout << "Exception:" << message << endl;
EMH_store_error_s1(EMH_severity_error, EMH_IDGENERATION_ERROR_BASE, message);
result_tag = EPM_nogo;
break;
}
else {
printf(">>>物料描述长度小于40验证通过\n");
}
}
else
{
printf(">>>当前流程下对象不存在表单,无法验证表单属性中的“物料描述长度”,跳过验证!\n");
}
}
MEM_free(wlms);
MEM_free(forms);
MEM_free(name);
MEM_free(type);
MEM_free(attachmentTags);
return result_tag;
}