|
|
#include "Supor_register.h"
|
|
|
#include "ado.h"
|
|
|
using namespace std;
|
|
|
extern "C" int POM_AM__set_application_bypass(logical bypass);
|
|
|
|
|
|
|
|
|
|
|
|
int Connor_ChangeTask_SetValue(EPM_action_message_t msg) {
|
|
|
int ifail = ITK_ok;
|
|
|
char* log_file = NULL;
|
|
|
|
|
|
printf("*************************************************************\n");
|
|
|
printf("* Connor_ChangeTask_SetValue is strat ! *\n");
|
|
|
printf("*************************************************************\n");
|
|
|
|
|
|
|
|
|
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
|
|
|
|
|
|
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, root_job = NULLTAG;
|
|
|
arg_cnt = TC_number_of_arguments(msg.arguments);
|
|
|
|
|
|
EPM_ask_root_task(msg.task, &root_task);
|
|
|
EPM_ask_job(root_task, &root_job);
|
|
|
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
|
|
|
POM_AM__set_application_bypass(true);
|
|
|
char* taskUid;
|
|
|
ITK__convert_tag_to_uid(root_job, &taskUid);
|
|
|
|
|
|
char* argflag = NULL, * argvalue = NULL, * arg = NULL;
|
|
|
char* uid;
|
|
|
char* endResult;
|
|
|
char* objecttype = NULL;
|
|
|
char* setvaluename = NULL;
|
|
|
char* setvalue = NULL;
|
|
|
|
|
|
printf("参数个数为:%d\n", arg_cnt);
|
|
|
if (arg_cnt > 0)
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < arg_cnt; i++)
|
|
|
{
|
|
|
//获取下一个参数(从0开始)
|
|
|
arg = TC_next_argument(msg.arguments);
|
|
|
//获取参数的名称和值
|
|
|
ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
|
|
|
if (stricmp(argflag, "objecttype") == 0)
|
|
|
{
|
|
|
if (argvalue != NULL)
|
|
|
{
|
|
|
objecttype = argvalue;
|
|
|
printf("获取的值%s\n", objecttype);
|
|
|
}
|
|
|
}
|
|
|
else if (stricmp(argflag, "setvaluename") == 0)
|
|
|
{
|
|
|
if (argvalue != NULL)
|
|
|
{
|
|
|
setvaluename = argvalue;
|
|
|
printf("获取的值%s\n", setvaluename);
|
|
|
}
|
|
|
}
|
|
|
else if (stricmp(argflag, "setvalue") == 0)
|
|
|
{
|
|
|
if (argvalue != NULL)
|
|
|
{
|
|
|
setvalue = argvalue;
|
|
|
printf("获取的值%s\n", setvalue);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (objecttype == NULL || setvaluename == NULL || setvalue == NULL) {
|
|
|
EMH_store_error_s1(EMH_severity_error,
|
|
|
919012,
|
|
|
"请配置参数!");
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
char* task_type = NULL;
|
|
|
char* userName = NULL;
|
|
|
char* user_id = NULL;
|
|
|
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
|
|
|
SIGNOFF_TYPE_t memberType;
|
|
|
tag_t memberTag = NULLTAG;
|
|
|
WSOM_ask_object_type2(msg.task, &task_type);
|
|
|
|
|
|
EPM_signoff_decision_t dec;
|
|
|
|
|
|
if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMOrTask", task_type) == 0 || strcmp("EPMConditionTask", task_type) == 0) {
|
|
|
EPM_ask_responsible_party(msg.task, &responsibleParty);
|
|
|
POM_get_user(&userName, &aUserTag);
|
|
|
AOM_ask_value_string(aUserTag, "object_string", &user_id);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
EPM_ask_sub_task(msg.task, "perform-signoffs", &cur_perform_task);
|
|
|
EPM_ask_all_attachments(cur_perform_task, &attachments, &attachmentTags, &attach_type);
|
|
|
printf("数量:%d\n", attachments);
|
|
|
if (attachments > 0) {
|
|
|
int start = 0;
|
|
|
for (int j = 0; j < attachments; j++) {
|
|
|
char* comment = NULL;
|
|
|
date_t decision_date_temp;
|
|
|
ITKCALL(EPM_ask_signoff_decision(attachmentTags[j], &dec, &comment, &decision_date_temp));
|
|
|
ITKCALL(EPM_ask_signoff_member(attachmentTags[j], &memberTag, &memberType));
|
|
|
if (memberType == SIGNOFF_GROUPMEMBER && dec == EPM_approve_decision) {
|
|
|
ITKCALL(SA_ask_groupmember_user(memberTag, &aUserTag));
|
|
|
ITKCALL(AOM_ask_value_string(aUserTag, "object_string", &user_id));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
printf("user_id========%s\n", user_id);
|
|
|
time_t now;
|
|
|
struct tm* p;
|
|
|
time(&now);//获取当前时间
|
|
|
p = localtime(&now);//本地化时间,可以细分为年月日时分秒等
|
|
|
int year = 1900 + p->tm_year;
|
|
|
int month = p->tm_mon;
|
|
|
int day = p->tm_mday;
|
|
|
int hour = p->tm_hour;
|
|
|
int min = p->tm_min;
|
|
|
int second = p->tm_sec;
|
|
|
date_t timesss;
|
|
|
char date_str_act[30] = "\0";
|
|
|
sprintf(date_str_act, "%d-%d-%d", year, month + 1, day);
|
|
|
printf("当前时间:%s\n", date_str_act);
|
|
|
|
|
|
|
|
|
vector<string> fieldNmae;
|
|
|
Split(setvaluename, ";", fieldNmae);
|
|
|
|
|
|
vector<string> fieldValue;
|
|
|
Split(setvalue, ";", fieldValue);
|
|
|
|
|
|
string sets;
|
|
|
for (int i = 0; i < fieldNmae.size(); i++) {
|
|
|
|
|
|
if (strcmp(fieldValue[i].c_str(),"sysdate") == 0) {
|
|
|
sets.append(fieldNmae[i]);
|
|
|
sets.append("=");
|
|
|
sets.append("'");
|
|
|
sets.append(date_str_act);
|
|
|
sets.append("',");
|
|
|
}
|
|
|
|
|
|
if (strcmp(fieldValue[i].c_str(), "nodeuser") == 0) {
|
|
|
sets.append(fieldNmae[i]);
|
|
|
sets.append("=");
|
|
|
sets.append("'");
|
|
|
sets.append(user_id);
|
|
|
sets.append("',");
|
|
|
}
|
|
|
}
|
|
|
if (!sets.empty()) { // 确保字符串不为空
|
|
|
sets.erase(sets.size() - 1); // 移除最后一个字符
|
|
|
}
|
|
|
printf("sets=========%s\n", sets.c_str());
|
|
|
vector<string> dbPrefs;
|
|
|
getPrefStrings("LD_dbinfo", dbPrefs);
|
|
|
if (dbPrefs.size() != 4)
|
|
|
{
|
|
|
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
|
|
|
}
|
|
|
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
|
|
|
{
|
|
|
printf("数据库连接失败:用户名:%s,密码:%s,数据库:%s,ip:%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
|
|
|
EMH_store_error_s1(EMH_severity_error,
|
|
|
919012,
|
|
|
"数据库连接失败");
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
printf("数据库连接成功\n");
|
|
|
|
|
|
|
|
|
|
|
|
for (int count = 0; count < occur_of_counts; count++) {
|
|
|
char* id = NULL;//用户id
|
|
|
char* object_type = NULL;//用户id
|
|
|
|
|
|
ITKCALL(AOM_ask_value_string(taskAttches[count], "object_type", &object_type));
|
|
|
|
|
|
printf("object_type=========%s\n", object_type);
|
|
|
|
|
|
if (strstr(objecttype, object_type)) {
|
|
|
ITKCALL(AOM_ask_value_string(taskAttches[count], "item_id", &id));
|
|
|
printf("id=========%s\n", id);
|
|
|
//因为后操走两次 先查一下数据库中是否有相同id的数据
|
|
|
char updateSql[1024] = "";
|
|
|
vector<string> result;
|
|
|
sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s where ID='%s' and WFUID='%s'",sets.c_str(), id, taskUid);
|
|
|
//sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s where ID='%s' and WFUID='%s'", sets.c_str(), id, "R9LAAiNz51TfkD");
|
|
|
if (ExecuteSQLNoInputParam(updateSql) == -1)
|
|
|
{
|
|
|
printf("保存数据失败\n");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//ExecuteSQLNoInputParam("commit");
|
|
|
printf("保存数据成功\n");
|
|
|
}
|
|
|
printf("updateSql====%s\n", updateSql);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
POM_AM__set_application_bypass(false);
|
|
|
printf("*************************************************************\n");
|
|
|
printf("* Connor_ChangeTask_SetValue is end ! *\n");
|
|
|
printf("*************************************************************\n");
|
|
|
return ifail;
|
|
|
}
|
|
|
|