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.
ML_ITK/CONNOR_ITK/ML_ChangeFormProperty.cxx

291 lines
7.9 KiB

#define _CRT_SECURE_NO_WARNINGS
#include "epm_handler_common.h"
void setProperty(tag_t formValue, char * propertyName, tag_t toValue, char * toPropertyName);
int ML_ChangeFormProperty(EPM_action_message_t msg)
{
printf("=========================更改表单属性 Start===================\n");
auto startTime = std::chrono::high_resolution_clock::now();
int ifail = ITK_ok;
int attachments_num = 0, targetAttachments_num = 0;
tag_t rootTask = NULLTAG, *attachments = NULLTAG, *targetAttachments = NULLTAG;
//获取任务对象
EPM_ask_root_task(msg.task, &rootTask);
//获取任务目标对象
EPM_ask_attachments(rootTask, EPM_target_attachment, &targetAttachments_num, &targetAttachments);
//获取任务目标对象
EPM_ask_attachments(rootTask, EPM_reference_attachment, &attachments_num, &attachments);
int pref_cnt = 0;
char ** pref_vals = NULL;
//获取首选项的值
PREF_ask_char_values("ML_InputFormProperty_Issue", &pref_cnt, &pref_vals);
map<string, string> typePropertyType;
for (int j = 0; j < pref_cnt; j++)
{
if (strstr(pref_vals[j], "-") != NULL)
{
//按照-进行拆分。拆分条件
int valueCount = 0;
char ** valueChar = new char *[64];
//分割字符串
split(pref_vals[j], "-", valueChar, &valueCount);
typePropertyType[valueChar[0]] = valueChar[1];// .insert(std::pair<char*, char*>(valueChar[0], valueChar[1]));
}
}
for (int i = 0; i < attachments_num; i++)
{
char *itemType = NULL;
AOM_ask_value_string(attachments[i], "object_type", &itemType);
printf("type_class : %s \r\n", itemType);
//过滤掉非时间表的对象
if ((strstr(itemType, "Schedule") == NULL))
{
DOFREE(itemType);
continue;
}
char * customer_name = NULL;
//获取时间表的项目类别属性
AOM_ask_value_string(attachments[i], "customer_name", &customer_name);
tag_t formValue = NULLTAG;
if (targetAttachments_num > 0)
{
formValue = targetAttachments[0];
}
if (formValue == NULLTAG)
{
DOFREE(itemType);
DOFREE(pref_vals);
DOFREE(customer_name);
DOFREE(formValues);
DOFREE(objectType);
continue;
}
POM_AM__set_application_bypass(true);
if (strcmp(customer_name, "产品类") == 0)
{
int tagNum = 0;
tag_t * tagValue = NULLTAG;
AOM_ask_value_tags(attachments[i], "IMAN_reference", &tagNum, &tagValue);
for (int j = 0; j < tagNum; j++)
{
char * objectType = NULL;
AOM_ask_value_string(tagValue[j], "object_type", &objectType);
if ((strstr(objectType, "ML8_ProductQCDForm1") == NULL))
{
DOFREE(objectType);
continue;
}
string propertyNames = typePropertyType[objectType];
if (propertyNames.c_str() != NULL)
{
const char * constName = propertyNames.c_str();
char* name = new char[2048];//足够长
strcpy(name, constName);
if (strstr(name, ",") != NULL)
{
//按照,进行拆分。拆分条件
int valueCount = 0;
char ** valueChar = new char *[64];
//分割字符串
split(name, ",", valueChar, &valueCount);
for (int k = 0; k < valueCount; k++)
{
if (strstr(valueChar[k], "=") != NULL)
{
//按照-进行拆分。拆分条件
int valueNum = 0;
char ** values = new char *[64];
//分割字符串
split(valueChar[k], "=", values, &valueNum);
setProperty(formValue, values[0], tagValue[j], values[1]);
}
}
}
else if (strstr(name, "=") != NULL)
{
//按照-进行拆分。拆分条件
int valueCount = 0;
char ** valueChar = new char *[64];
//分割字符串
split(name, "=", valueChar, &valueCount);
setProperty(formValue, valueChar[0], tagValue[j], valueChar[1]);
DOFREE(propertyValue);
}
DOFREE(constName);
}
DOFREE(objectType);
}
DOFREE(tagValue);
}
else if (strcmp(customer_name, "技术类") == 0)
{
int tagNum = 0;
tag_t * tagValue = NULLTAG;
AOM_ask_value_tags(attachments[i], "IMAN_reference", &tagNum, &tagValue);
for (int j = 0; j < tagNum; j++)
{
char * objectType = NULL;
AOM_ask_value_string(tagValue[j], "object_type", &objectType);
if ((strstr(objectType, "ML8_TechQCDForm1") == NULL))
{
DOFREE(objectType);
continue;
}
string propertyNames = typePropertyType[objectType];
if (propertyNames.c_str() != NULL)
{
const char * constName = propertyNames.c_str();
char* name = new char[2048];//足够长
strcpy(name, constName);
if (strstr(name, ",") != NULL)
{
//按照-进行拆分。拆分条件
int valueCount = 0;
char ** valueChar = new char *[64];
//分割字符串
split(name, ",", valueChar, &valueCount);
for (int k = 0; k < valueCount; k++)
{
if (strstr(valueChar[k], "=") != NULL)
{
//按照-进行拆分。拆分条件
int valueNum = 0;
char ** values = new char *[64];
//分割字符串
split(valueChar[k], "=", values, &valueNum);
setProperty(formValue, values[0], tagValue[j], values[1]);
//char * propertyValue = NULL;
//AOM_ask_value_string(formValue, values[0], &propertyValue);
//if (propertyValue != NULL)
//{
// //先lock
// AOM_lock(tagValue[j]);
// AOM_set_value_string(tagValue[j], values[1], propertyValue);
// //再save
// AOM_save(tagValue[j]);
// //最后unlock
// AOM_unlock(tagValue[j]);
// AOM_refresh(tagValue[j], FALSE);
//}
//DOFREE(propertyValue);
}
}
}
else if (strstr(name, "=") != NULL)
{
//按照-进行拆分。拆分条件
int valueCount = 0;
char ** valueChar = new char *[64];
//分割字符串
split(name, "=", valueChar, &valueCount);
setProperty(formValue, valueChar[0], tagValue[j], valueChar[1]);
}
DOFREE(constName);
}
DOFREE(objectType);
}
DOFREE(tagValue);
}
POM_AM__set_application_bypass(false);
DOFREE(itemType);
DOFREE(pref_vals);
DOFREE(customer_name);
DOFREE(formValues);
DOFREE(objectType);
}
DOFREE(attachments);
auto stopTime = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stopTime - startTime);
//std::cout << "ML_ChangeFormProperty用时:" << duration.count() / 1000 << std::endl;
string usetime = "ML_ChangeFormProperty用时:";
usetime.append(std::to_string(duration.count() / 1000));
WriteLog(true, usetime.c_str());
printf("=========================更改表单属性 End===================\n");
return ifail;
}
void setProperty(tag_t formValue, char * propertyName, tag_t toValue, char * toPropertyName)
{
PROP_value_type_t propertyType;
char * valtype_n = NULL;
//获取属性类型
AOM_ask_value_type(formValue, propertyName, &propertyType, &valtype_n);
switch (propertyType)
{
case PROP_date:
date_t propertyValue;
AOM_ask_value_date(formValue, propertyName, &propertyValue);
//先lock
AOM_lock(toValue);
AOM_set_value_date(toValue, toPropertyName, propertyValue);
//再save
AOM_save(toValue);
//最后unlock
AOM_unlock(toValue);
AOM_refresh(toValue, FALSE);
break;
case PROP_double:
double propertyValue2;
AOM_ask_value_double(formValue, propertyName, &propertyValue2);
//先lock
AOM_lock(toValue);
AOM_set_value_double(toValue, toPropertyName, propertyValue2);
//再save
AOM_save(toValue);
//最后unlock
AOM_unlock(toValue);
AOM_refresh(toValue, FALSE);
break;
case PROP_int:
int propertyValue3;
AOM_ask_value_int(formValue, propertyName, &propertyValue3);
//先lock
AOM_lock(toValue);
AOM_set_value_int(toValue, toPropertyName, propertyValue3);
//再save
AOM_save(toValue);
//最后unlock
AOM_unlock(toValue);
AOM_refresh(toValue, FALSE);
break;
case PROP_string:
char * propertyValue4;
AOM_ask_value_string(formValue, propertyName, &propertyValue4);
//先lock
AOM_lock(toValue);
AOM_set_value_string(toValue, toPropertyName, propertyValue4);
//再save
AOM_save(toValue);
//最后unlock
AOM_unlock(toValue);
AOM_refresh(toValue, FALSE);
DOFREE(propertyValue4);
break;
default:
break;
}
DOFREE(valtype_n);
}