initial commit

master
李岩峰 5 years ago
parent eebeccd241
commit 854559113f

@ -0,0 +1,26 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HEZON_ITK", "HEZON_ITK\HEZON_ITK.vcxproj", "{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Debug|Win32.ActiveCfg = Debug|Win32
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Debug|Win32.Build.0 = Debug|Win32
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Debug|x64.ActiveCfg = Debug|x64
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Debug|x64.Build.0 = Debug|x64
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Release|Win32.ActiveCfg = Release|Win32
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Release|Win32.Build.0 = Release|Win32
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Release|x64.ActiveCfg = Release|x64
{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

@ -0,0 +1,11 @@
// HEZON_ITK.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8E665218-4AC2-4DDD-A50E-4245BA64C3C3}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>HEZON_ITK</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v110</PlatformToolset>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Java\jdk1.8.0_191\include\win32;C:\Java\jdk1.8.0_191\include;D:\Siemens\Teamcenter11\include;D:\Siemens\Teamcenter11\include_cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CallingConvention>Cdecl</CallingConvention>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<AdditionalDependencies>D:\Siemens\Teamcenter11\lib\*.lib;C:\Java\jdk1.8.0_191\lib\*.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<OutputFile>$(OutDir)\bs.dll</OutputFile>
<AdditionalOptions>/force %(AdditionalOptions)</AdditionalOptions>
</Link>
<ProjectReference>
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="..\..\..\..\..\..\Program Files\Common Files\System\ado\msado15.dll" />
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="bs_bypass.cpp" />
<ClCompile Include="epm_register_handler.cxx" />
<ClCompile Include="bs_custom_main.cxx" />
<ClCompile Include="kl_erp_bom.cpp" />
<ClCompile Include="kl_erp_save.cpp" />
<ClCompile Include="kl_erp_update.cpp" />
<ClCompile Include="test.cpp" />
<ClCompile Include="util.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="epm_handler_common.h" />
<ClInclude Include="epm_register_handler.h" />
<ClInclude Include="test.h" />
<ClInclude Include="util.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="common">
<UniqueIdentifier>{d25e0aa0-8791-4277-b392-abc3943f925c}</UniqueIdentifier>
</Filter>
<Filter Include="epm-handler">
<UniqueIdentifier>{f8d4fa90-4363-4e0f-8f44-a2e02a224ad9}</UniqueIdentifier>
</Filter>
<Filter Include="userservice">
<UniqueIdentifier>{5f8496b0-ad7e-4c6c-b832-59575601b9f1}</UniqueIdentifier>
</Filter>
<Filter Include="bmf">
<UniqueIdentifier>{aa5fbb6b-b5ee-4f80-8b16-de99d912a542}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="ReadMe.txt" />
<None Include="..\..\..\..\..\..\Program Files\Common Files\System\ado\msado15.dll" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="epm_register_handler.cxx">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="bs_custom_main.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="bs_bypass.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="kl_erp_bom.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="kl_erp_save.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="kl_erp_update.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="util.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
<ClCompile Include="test.cpp">
<Filter>epm-handler</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="epm_register_handler.h">
<Filter>epm-handler</Filter>
</ClInclude>
<ClInclude Include="epm_handler_common.h">
<Filter>epm-handler</Filter>
</ClInclude>
<ClInclude Include="util.h">
<Filter>epm-handler</Filter>
</ClInclude>
<ClInclude Include="test.h">
<Filter>epm-handler</Filter>
</ClInclude>
</ItemGroup>
</Project>

@ -0,0 +1,36 @@
========================================================================
控制台应用程序HEZON_ITK 项目概述
========================================================================
应用程序向导已为您创建了此 HEZON_ITK 应用程序。
本文件概要介绍组成 HEZON_ITK 应用程序的每个文件的内容。
HEZON_ITK.vcxproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,
其中包含生成该文件的 Visual C++
的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
HEZON_ITK.vcxproj.filters
这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。
它包含有关项目文件与筛选器之间的关联信息。 在 IDE
中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。
例如,“.cpp”文件与“源文件”筛选器关联。
HEZON_ITK.cpp
这是主应用程序源文件。
/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.hStdAfx.cpp
这些文件用于生成名为 HEZON_ITK.pch 的预编译头 (PCH) 文件和
名为 StdAfx.obj 的预编译类型文件。
/////////////////////////////////////////////////////////////////////////////
其他注释:
应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。
/////////////////////////////////////////////////////////////////////////////

@ -0,0 +1,44 @@
/*=============================================================================
Copyright (c) 2003-2005 UGS Corporation
Unpublished - All Rights Reserved
File :qtmc_by_pass.cpp
Module : user_exits
============================================================================================================
DATE Name Description of Change
30_OTC_2014 mengyawei creation
$HISTORY$
============================================================================================================*/
#include <tc/tc.h>
#include "epm_handler_common.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#ifdef __cplusplus
extern "C" {
#endif
extern "C" int POM_AM__set_application_bypass(logical bypass);
int bs_bypass(void *retValType)
{
int ifail = ITK_ok;
logical bypass=true;
USERARG_get_logical_argument(&bypass);
POM_AM__set_application_bypass( bypass );
return ifail;
}
#ifdef __cplusplus
}
#endif

@ -0,0 +1,68 @@
/**
* @defgroup common
* @defgroup workflow
* @defgroup bmf
* @defgroup service
*/
/**
* @addtogroup common
* @{
*/
/**
* @file
* @brief
* @date 2014/4/21
* @author mengyawei
*/
#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <tc/tc.h>
#include <tccore/custom.h>
#include <server_exits/user_server_exits.h>
#include "epm_register_handler.h"
#include "epm_handler_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @fn extern "C" DLLAPI int liborigin_register_callbacks
* @return usually return ITK_ok
* @brief liborigin customization entry
*/
DLLAPI int bs_register_callbacks()
{
int ifail = ITK_ok;
ifail = CUSTOM_register_exit(
"bs",
"USERSERVICE_register_methods",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_methods) ;
ifail = CUSTOM_register_exit(
"bs",
"USER_gs_shell_init_module",
(CUSTOM_EXIT_ftn_t)CUST_init_module);
return ifail;
}
#ifdef __cplusplus
}
#endif
/**
* @}
*/

@ -0,0 +1,273 @@
/**
* @file common_itk_util.cpp
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 18-July-2008 James
*/
#pragma warning (disable: 4996)
#pragma warning (disable: 4819)
#include <epm/epm.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <ict/ict_userservice.h>
#include <tccore/item.h>
#include <ae/ae.h>
#include <tc/folder.h>
#include <tccore/aom.h>
#include <sa/sa.h>
#include <tccore/aom_prop.h>
#include <property/prop_errors.h>
#include <tccore/workspaceobject.h>
#include <tc/preferences.h>
#include <tccore/imantype.h>
#include <tccore//grm.h>
#include <tccore/grmtype.h>
#include <sa/am.h>
#include <cfm/cfm.h>
#include <bom/bom.h>
#include <tccore/uom.h>
#include <ps/ps.h>
#include <epm/signoff.h>
#include <fclasses/tc_date.h>
//#include <tccore/imantype.h>
//#include <textsrv/textserver.h>
//#include <user_exits/epm_toolkit_utils.h>
//#include <ss/ss_errors.h>
#include <stdlib.h>
//#include <io.h>
#include <stdio.h>
#include <time.h>
//#include <direct.h>
//#include <unistd.h>
#include "error_handling.h"
#include "common_itk_util.h"
#ifdef WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif
#define ARGS_LENGTH 200
#define ARGS_NAME_DEBUG "-debug"
#define DEBUG "-debug="
#define MAX_PRINTLINE_LENGTH 2000
#define MAX_PATH_LENGTH 2000
#define MAX_ARGUMENT_LENGTH 400
#define MAX_PARAMNAME_LENGTH 50
#define MAX_FILE_EXT_LENGTH 10
#define TRUE_FLAG 1
#define FALSE_FLAG 0
#define DETAILLOG 1
FILE* logFile = NULL;
void set_bypass(logical bypass)
{
AM__set_application_bypass(bypass);
}
/*=============================================================================*
* FUNCTION: current_time
* PURPOSE : get the current datetime
* INPUT:
* date_t* date_tag // current date time tag
*
* RETURN:
* void
*============================================================================*/
void current_time( date_t * date_tag )
{
time_t ltime;
struct tm *today ;
// Set time zone from TZ environment variable. If TZ is not set,
// the operating system is queried to obtain the default value
// for the variable.
//
//_tzset();
// Get UNIX-style time and display as number and string.
time( &ltime );
today = localtime( &ltime );
date_tag->year = today->tm_year + 1900 ;
date_tag->month = today->tm_mon ;
date_tag->day = today->tm_mday ;
date_tag->hour = today->tm_hour ;
date_tag->minute = today->tm_min ;
date_tag->second = today->tm_sec ;
}
/*=============================================================================*
* FUNCTION: CreateLogFile
* PURPOSE : create log file
* INPUT:
* char* FunctionName // the funtion which need to create log file
* FILE** logFile // out: the log file pointer
*
* RETURN:
* void
*============================================================================*/
void CreateLogFile(char* FunctionName, char **fullname)
{
int i=0, ifail = ITK_ok;
//date_t status_now;
//char* date_string = NULL;
char date_string[MAX_PATH_LENGTH];
char logFileDir[MAX_PATH_LENGTH];
char logFileName[MAX_PATH_LENGTH];
char* session_uid = NULL;
tag_t session_tag = NULLTAG;
time_t now;
struct tm *p;
time(&now);
logFile = NULL;
//current_time(&status_now);
p=localtime(&now);
memset(date_string, 0, sizeof(date_string));
sprintf(date_string,"%4d%02d%02d%02d%02d%02d",1900+p->tm_year,p->tm_mon+1 ,p->tm_mday ,p->tm_hour,p->tm_min ,p->tm_sec );
//if( DATE_date_to_string( status_now, "%Y%m%d%H%M%S", &date_string) != ITK_ok )
//ifail = ITK_date_to_string (status_now, &date_string );
//if (ifail)
//{
// printf("!*ERROR*!: Failed to get current date time\n");
// goto CLEANUP;
//}
memset(logFileDir, 0, sizeof(logFileDir));
memset(logFileName, 0, sizeof(logFileName));
//get log dir
sprintf(logFileDir, "%s", getenv("TEMP"));
printf("\n log file dir: %s\n", logFileDir);
//try to change dir to TC_USER_LOG_DIR
if(chdir(logFileDir)!=ITK_ok)
{
//not set TC_USER_LOG_DIR
//log in to default TC_LOG
memset(logFileDir, 0, sizeof(logFileDir));
sprintf(logFileDir, "%s", getenv("TC_LOG"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", logFileDir);
if(chdir(logFileDir)!=ITK_ok)
{
//still can not change to log dir
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
goto CLEANUP;
}
}
//get session_uid to make sure the log file name unique
POM_ask_session(&session_tag);
ITK__convert_tag_to_uid(session_tag, &session_uid);
//get logFileName
sprintf(logFileName, "%s_%s_%s.log", FunctionName, session_uid, date_string);
printf("log file name: %s\n", logFileName);
*fullname = (char *)MEM_alloc(sizeof(char)*512);
sprintf(*fullname,"%s\\%s",logFileDir,logFileName);
//for(i = 0; _access((char *)logFileName, 4) == 0; i++)
/*{
memset(logFileName, 0, sizeof(logFileName));
sprintf(logFileName, "%s_%s_%s_%d.log", FunctionName, session_uid, date_string, i);
}
printf("final log file name: %s\n", logFileName);*/
//create log file
logFile = fopen(logFileName, "w");
CLEANUP:
//DOFREE(date_string);
DOFREE(session_uid);
}
/*=============================================================================*
* FUNCTION: WriteLog
* PURPOSE : write log, if debug log File not null, write log message to log File
* INPUT:
* const char* format // debug message string
*
* RETURN:
* void
*============================================================================*/
void WriteLog(const char* format, ...)
{
va_list arg;
char tmp[MAX_PRINTLINE_LENGTH];
if(logFile)
{
//get the message
memset(tmp, 0, sizeof(tmp));
va_start(arg, format);
vsprintf(tmp, format, arg);
va_end(arg);
//----------print to command window for trace--------//
printf("%s\n", tmp);
//print message to log file
fprintf(logFile, "%s\n", tmp);
fflush(logFile);
}
else
{
printf("*!Error!*: Log File Not Exist\n");
}
}
void CloseLog(void)
{
if(logFile)
{
fclose(logFile);
logFile = NULL;
}
}
//void getTypeinfo(char *type)
//{
// int ulen = 0,i=0,tempcount=0,asd=0;
//
// char temp[128]="";
// ulen = strlen(type);
// asd = ulen-1;
// for(i=0;i < ulen;i++)
// {
// if(type[i] == ';')
// {
// temp[tempcount] = '\0';
// strcpy(excludetypes[typecount].type,temp);
// strcpy(temp,"");
// tempcount = 0;
// typecount = typecount + 1;
// }
// else
// {
//
// temp[tempcount] = type[i];
// tempcount = tempcount + 1;
// if(i==asd)
// {
// temp[tempcount] = '\0';
// strcpy(excludetypes[typecount].type,temp);
// typecount = typecount + 1;
// }
//
// }
//
// }
//}

@ -0,0 +1,31 @@
/**
* @file common_itk_util.h
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
*/
#ifndef COMMON_ITK_UTIL
#define COMMON_ITK_UTIL
#ifdef __cplusplus
extern "C" {
#endif
void CreateLogFile(char* FunctionName, char **fullname);
void WriteLog(const char* format, ...);
void CloseLog(void);
void set_bypass(logical bypass);
//int FindDatasetReferenceExt( tag_t datasettype, const char *datasettype_ref, char ext[10] );
//int CompareDate( date_t date1, date_t date2 );
//int GetRandomTempFile( char tempFile[256] );
//logical IsItemRevisionType( char object_type[WSO_name_size_c + 1] );
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,60 @@
/**
* @addtogroup handler
* @{
*/
/**
* @file epm_handler_common.h
* @brief handler functions declation
* @date 2011/4/12
* @author Ray
* @history
* ===================================================================================
* Date Name Description
* 12-Apr-2011 Ray created
*/
#ifndef EPM_HANDLER_COMMON
#define EPM_HANDLER_COMMON
#include <epm/epm.h>
#include <string>
#ifdef __cplusplus
extern "C" {
#endif
using namespace std;
#define TC_specification "IMAN_specification"
//#define NX_3W_DATASET_TYPE "UGMASTER"
//#define NX_2W_DATASET_TYPE "UGPART"
//#define DATASET_REF_TYPE "UGPART"
////将流程信息签入版本属性上去
//int qtmc_sign_ir(EPM_action_message_t msg);
int kl_erp_save(EPM_action_message_t msg);
int kl_erp_update(EPM_action_message_t msg);
int kl_erp_bom(EPM_action_message_t msg);
int sap(EPM_action_message_t msg);
//user service end
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/

@ -0,0 +1,265 @@
/*===================================================================================================
Copyright(c) 2011 Siemens PLM Software Corp. All rights reserved.
Unpublished - All rights reserved
====================================================================================================
File description:
Filename : epm_register_handler.c
This file registers functions which are called when Teamcenter is being initialized
====================================================================================================
Date Name Description of Change
2011-8-21 Ray wei creation
$HISTORY$
==================================================================================================*/
#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <server_exits/user_server_exits.h>
#include <tccore/custom.h>
#include <epm/epm.h>
/**
* @headerfile standard c & cpp header files
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
/**
* @headerfile user's header files
*/
#include "epm_register_handler.h"
#include "epm_handler_common.h"
// Method and Workflow Handler
extern DLLAPI int CUST_init_module(int *decision, va_list args)
{
int ifail = ITK_ok, n=0;
char date_buf[80],*expire_date;
time_t now;
struct tm *p;
*decision = ALL_CUSTOMIZATIONS;
//ifail = EPM_register_action_handler("qtmc-sign-ir", "qtmc-sign-ir",
//(EPM_action_handler_t)qtmc_sign_ir);
//if(ifail == ITK_ok)
//{
// fprintf(stdout,"Registering action handler qtmc-sign-ir completed!\n");
//}
//else
//{
// fprintf(stdout , "Registering action handler qtmc-sign-ir failed %d!\n",ifail);
//}
ifail=EPM_register_action_handler("kl_erp_save", "kl_erp_save", kl_erp_save);
if(ifail)
{
printf("register save error");
}else
{
printf("register save ok");
}
ifail = EPM_register_action_handler("kl_erp_bom", "kl_erp_bom", kl_erp_bom);
if (ifail)
{
printf("register bom error");
}
else
{
printf("register bom ok");
}
// ifail=EPM_register_action_handler("kl_erp_update", "kl_erp_update", kl_erp_update);
// if (ifail)
// {
// printf("register update error");
// }
// else
// {
// printf("register update ok");
//
// }
return ifail;
}
//
////register service method
extern DLLAPI int USERSERVICE_custom_register_methods()
{
////2.7 SP-CUS-007 由DBOM复制生成EBOM
//numberOfArguments = 1;
//functionPtr = Q7_ebom_to_pbom;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE;
////argumentList[1] = USERARG_STRING_TYPE + USERARG_ARRAY_TYPE;
//returnValueType = USERARG_STRING_TYPE;
//ITKCALL(status = USERSERVICE_register_method("Q7_ebom_to_pbom", functionPtr, numberOfArguments,
// argumentList, returnValueType ));
//MEM_free(argumentList);
//if(status == ITK_ok)
//{
// fprintf( stdout, "\n Registering Q7_ebom_to_pbom finished\n" );
//}
//else
//{
// fprintf( stdout, "\n Registering Q7_ebom_to_pbom failed %d\n" , status );
//}
////QTM_ebom_to_pbom
//numberOfArguments = 1;
//functionPtr = QTM_ebom_to_pbom;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE;
////argumentList[1] = USERARG_STRING_TYPE + USERARG_ARRAY_TYPE;
//returnValueType = USERARG_STRING_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTM_ebom_to_pbom", functionPtr, numberOfArguments,
// argumentList, returnValueType ));
//MEM_free(argumentList);
//if(status == ITK_ok)
//{
// fprintf( stdout, "\n Registering QTM_ebom_to_pbom finished\n" );
//}
//else
//{
// fprintf( stdout, "\n Registering QTM_ebom_to_pbom failed %d\n" , status );
//}
////QTM_ebom_to_mbom
//numberOfArguments = 1;
//functionPtr = QTM_ebom_to_mbom;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE;
////argumentList[1] = USERARG_STRING_TYPE + USERARG_ARRAY_TYPE;
//returnValueType = USERARG_STRING_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTM_ebom_to_mbom", functionPtr, numberOfArguments,
// argumentList, returnValueType ));
//MEM_free(argumentList);
//if(status == ITK_ok)
//{
// fprintf( stdout, "\n Registering QTM_ebom_to_mbom finished\n" );
//}
//else
//{
// fprintf( stdout, "\n Registering QTM_ebom_to_mbom failed %d\n" , status );
//}
////2.6 SP-CUS-006将中德对照excel信息导入属性
//numberOfArguments = 3;
//functionPtr = qtmc_update_revision_prop;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE+USERARG_ARRAY_TYPE;
//argumentList[1] = USERARG_TAG_TYPE;
//argumentList[2] = USERARG_STRING_TYPE;
//returnValueType = USERARG_VOID_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC_update_revision_prop",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC_update_revision_prop successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC_update_revision_prop failed %d\n",status);
//}
//
////SP-CUS-017SolidWorks模型另存到TC
//numberOfArguments = 7;
//functionPtr = qtmc_import_solidworks_to_tc;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_STRING_TYPE;
//argumentList[1] = USERARG_STRING_TYPE;
//argumentList[2] = USERARG_STRING_TYPE;
//argumentList[3] = USERARG_TAG_TYPE;
//argumentList[4] = USERARG_LOGICAL_TYPE;
//argumentList[5] = USERARG_LOGICAL_TYPE;
//argumentList[6] = USERARG_LOGICAL_TYPE;
//returnValueType = USERARG_LOGICAL_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC_import_solidworks",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC_import_solidworks successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC_import_solidworks failed %d\n",status);
//}
////3.8 SP-CUS-020更新系列件新增
//numberOfArguments = 3;
//functionPtr = qtmc_update_series_parts;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE;
//argumentList[1] = USERARG_STRING_TYPE;
//argumentList[2] = USERARG_STRING_TYPE;
//returnValueType = USERARG_TAG_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC_update_series_parts",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC_update_series_parts successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC_update_series_parts failed %d\n",status);
//}
//numberOfArguments = 1;
//functionPtr = qtmc_by_pass;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_LOGICAL_TYPE;
//returnValueType = USERARG_VOID_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC-bypass",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC-bypass successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC-bypass failed %d\n",status);
//}
//numberOfArguments = 3;
//functionPtr = qtmc_qry_service;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_STRING_TYPE;
//argumentList[1] = USERARG_STRING_TYPE+USERARG_ARRAY_TYPE;
//argumentList[2] = USERARG_STRING_TYPE+USERARG_ARRAY_TYPE;
//returnValueType = USERARG_TAG_TYPE+USERARG_ARRAY_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC_Search",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC_Search successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC_Search failed %d\n",status);
//}
//
////7.3 翻译HBOM数据的德文名称
//numberOfArguments = 4;
//functionPtr = qtmc_update_hbom_bomline_prop;
//argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
//argumentList[0] = USERARG_TAG_TYPE;
//argumentList[1] = USERARG_TAG_TYPE;
//argumentList[2] = USERARG_STRING_TYPE;
//argumentList[3] = USERARG_STRING_TYPE;
//returnValueType = USERARG_VOID_TYPE;
//ITKCALL(status = USERSERVICE_register_method("QTMC_update_bomline",functionPtr,numberOfArguments,argumentList,returnValueType));
//if(status == ITK_ok)
//{
// fprintf(stdout,"Registering user service QTMC_update_bomline successful !\n");
//}else{
// fprintf(stdout,"Registering user service QTMC_update_bomline failed %d\n",status);
//}
return 0;
}

@ -0,0 +1,36 @@
/*=================================================================================
* @file epm_register_handler.h
* @brief itk user exits function declation, to register custom handlers
* @date 2009/2/13
* @author Ray Li
* @history
* ===================================================================================
* Date Name Description
* 13-Feb-2009 Ray created
*===================================================================================*/
#ifndef EPM_REGISTER_HANDLER_CUSTOM
#define EPM_REGISTER_HANDLER_CUSTOM
#include <epm/epm.h>
#ifdef __cplusplus
extern "C" {
#endif
extern DLLAPI int CUST_init_module(int *, va_list);
extern DLLAPI int USERSERVICE_custom_register_methods();
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/

@ -0,0 +1,46 @@
/*=============================================================================
Copyright (c) 2003-2005 UGS Corporation
Unpublished - All Rights Reserved
File :qtmc_by_pass.cpp
Module : user_exits
============================================================================================================
DATE Name Description of Change
30_OTC_2014 mengyawei creation
$HISTORY$
============================================================================================================*/
#include <tc/tc.h>
#include "epm_handler_common.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#ifdef __cplusplus
extern "C" {
#endif
extern "C" int POM_AM__set_application_bypass(logical bypass);
int qtmc_by_pass(void *retValType)
{
int ifail = ITK_ok;
logical bypass = FALSE;
USERARG_get_logical_argument( &bypass );
POM_AM__set_application_bypass( bypass );
return ifail;
}
#ifdef __cplusplus
}
#endif

@ -0,0 +1,468 @@
#include "util.h"
string getTime2()
{
stringstream ss;
time_t t = time(0);
tm* local = localtime(&t);
ss << local->tm_year + 1900 << '/';
ss << local->tm_mon + 1 << '/';
ss << local->tm_mday << ' ';
return ss.str();
}
const char* newGUID()
{
static char buf[64] = { 0 };
GUID guid;
if (S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf, sizeof(buf)
, "%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1]
, guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
return (const char*)buf;
}
int send_erp(tag_t top_line,int type,string &now,char **pref_vals, Testclass ^class1, System::String ^save_url, System::String ^check_url, vector<map<string,string>> &configs,map<string,map<string,map<string,string>>> &zl_map, System::String ^key,string creation_date)
{
printf("send_erp\n");
int line_cnt,rel_cnt;
tag_t rev, *lines,form,relation_type,*rels;
AOM_ask_value_tag(top_line, "bl_line_object", &rev);
GRM_find_relation_type(IMAN_master_form_rtype, &relation_type);
GRM_list_secondary_objects_only(rev, relation_type, &rel_cnt, &rels);
form = rels[0];
BOM_line_ask_child_lines(top_line, &line_cnt, &lines);
string item_id = get_val(top_line, "bl_item_item_id");
string rev_id = get_val(top_line, "bl_rev_item_revision_id");
string tc = get_val(top_line, "KL3_tc");
Document doc;
Document doc2;
doc2.SetObject();
doc.SetObject();
Document::AllocatorType &al = doc.GetAllocator();
Document::AllocatorType &al2 = doc2.GetAllocator();
Value data(kObjectType);
Value data2(kObjectType);
Value data_page1(kArrayType);
Value page1(kObjectType);
Value data_page2(kArrayType);
Value parent_val(kObjectType);
Value empty(kObjectType);
empty.AddMember("FNumber", "", al);
empty.AddMember("FName", "", al);
parent_val.AddMember("FNumber", "KL", al);
parent_val.AddMember("FName", "BOM", al);
string bill_no=item_id + rev_id;
page1.AddMember("FParentID", parent_val, al);
data2.AddMember("FBillNo", Value().SetString(bill_no.c_str(), al2), al2);
page1.AddMember("FBOMNumber", Value().SetString(bill_no.c_str(), al), al);
page1.AddMember("FVersion", Value().SetString(rev_id.c_str(), al), al);
page1.AddMember("FPercentErpClsID", Value().SetString(get_val(form, "kl3_item_wlsx"), al), al);
page1.AddMember("FAudDate", Value().SetString(now.c_str(), al), al);
page1.AddMember("FCheckDate", Value().SetString(creation_date.c_str(), al), al);
page1.AddMember("FEntertime", Value().SetString(now.c_str(), al), al);
Value manager(kObjectType);
manager.AddMember("FName", Value().SetString(pref_vals[4], al), al);
manager.AddMember("FNumber", Value().SetString(pref_vals[5], al), al);
page1.AddMember("FCheckerID", manager, al);
Value manager2(kObjectType);
manager2.AddMember("FName", Value().SetString(pref_vals[6], al), al);
manager2.AddMember("FNumber", Value().SetString(pref_vals[7], al), al);
page1.AddMember("FCheckID", manager2, al);
page1.AddMember("FStatus", 1, al);
Value status_val(kObjectType);
status_val.AddMember("FNumber", "ZT02", al);
status_val.AddMember("FName", "未使用", al);
page1.AddMember("FBOMUseStatus", status_val, al);
Value percent_id_val(kObjectType);
percent_id_val.AddMember("FNumber", Value().SetString(item_id.c_str(), al), al);
percent_id_val.AddMember("FName", Value().SetString(get_val(top_line, "bl_item_object_name"), al), al);
page1.AddMember("FPercentItemID", percent_id_val, al);
page1.AddMember("FNote",Value().SetString(get_val(form,"kl3_item_ylxx"),al),al);
page1.AddMember("FPercentItemName", Value().SetString(get_val(top_line, "bl_item_object_name"), al), al);
string jldwz = get_val(form, "kl3_jldwz");
int jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
if (zl_map.find(jldwz)!=zl_map.end())
{
Value jldw_val(kObjectType);
string temp_val = get_val(form, "kl3_item_scjldw");
jldw_val.AddMember("FName", Value().SetString(temp_val.c_str(), al), al);
jldw_val.AddMember("FNumber", Value().SetString(zl_map[jldwz][temp_val]["id"].c_str(), al), al);
page1.AddMember("FPercentUnitID", jldw_val, al);
//page1.AddMember("FPercentUnitID", get_jldw(get_val(form, "kl3_item_scjldw"), al, jldw_val), al);
}
page1.AddMember("FPercentItemModel", Value().SetString(get_val(form, "kl3_item_ggxh"), al), al);
string gylx = get_val(top_line, "bl_ItemRevision Master_kl3_item_gylxmc");
page1.AddMember("FRoutingName", Value().SetString(gylx.c_str(), al), al);
Value routing_val(kObjectType);
routing_val.AddMember("FName", Value().SetString(gylx.c_str(), al), al);
routing_val.AddMember("FNumber", Value().SetString(configs[2][gylx].c_str(), al), al);
//routing_val.AddMember("FNumber", (*configs[6])[gylx.c_str()].IsNull()?Value().SetString("",al): (*configs[6])[gylx.c_str()], al);
page1.AddMember("FRoutingID", routing_val, al);
Value skip_val(kObjectType);
if(item_id[0] == 'B' || item_id[0] == 'C')
{
skip_val.AddMember("FNumber", "N", al);
skip_val.AddMember("FName", "", al);
}else
{
skip_val.AddMember("FNumber", "Y", al);
skip_val.AddMember("FName", "", al);
}
page1.AddMember("FBOMSkip", skip_val, al);
page1.AddMember("FPercentQty", "1", al);
page1.AddMember("FAuxQty", "1", al);
page1.AddMember("FPercentAuxPropID", empty, al);
page1.AddMember("FNote", "", al);
page1.AddMember("FYield", 100, al);
page1.AddMember("FIsCharSourceItem", "", al);
page1.AddMember("FTranType", 50, al);
page1.AddMember("FInterID", 6297, al);
page1.AddMember("FMultiCheckStatus", 2, al);
data_page1.PushBack(page1,al);
printf("end page1\n");
for (auto j = 0; j<line_cnt; j++)
{
Value page2(kObjectType);
page2.AddMember("FEntryID", j + 1, al);
AOM_ask_value_tag(lines[j], "bl_line_object", &rev);
GRM_list_secondary_objects_only(rev, relation_type, &rel_cnt, &rels);
form = rels[0];
string item_id2 = get_val(lines[j], "bl_item_item_id");
Value item_id_val(kObjectType);
item_id_val.AddMember("FNumber", Value().SetString(item_id2.c_str(), al), al);
item_id_val.AddMember("FName", Value().SetString(get_val(lines[j], "bl_item_object_name"), al), al);
page2.AddMember("FItemID", item_id_val, al);
page2.AddMember("FItemName", Value().SetString(get_val(lines[j], "bl_item_object_name"), al), al);
Value material_val(kObjectType);
material_val.AddMember("FNumber", "COM", al);
material_val.AddMember("FName", "普通件", al);
page2.AddMember("FMaterielType", material_val, al);
string gx = get_val(lines[j], "KL3_gx");
Value oper_val(kObjectType);
// oper_val.AddMember("FNumber", "ZJ", al);
// oper_val.AddMember("FName", "注塑制造部终检工序", al);
oper_val.AddMember("FNumber", Value().SetString(configs[3][gx].c_str(), al), al);
// oper_val.AddMember("FNumber", (*configs[7])[gx.c_str()], al);
oper_val.AddMember("FName", Value().SetString(gx.c_str(), al), al);
page2.AddMember("FOperID", oper_val, al);
page2.AddMember("FOperSN", 10, al);
page2.AddMember("FAuxQtyScrap", Value().SetString(get_val(lines[j], "KL3_yl"), al), al);
Value stock_val(kObjectType);
string stock = get_val(lines[j], "KL3_flck");
printf("stock:%s\n", stock.c_str());
if(stock=="注塑车间现场仓"||stock=="zscjxcc")
{
stock_val.AddMember("FNumber", "38", al);
stock_val.AddMember("FName", "注塑车间现场仓", al);
}else if (stock == "胶条车间现场仓" || stock == "jtcjxcc")
{
stock_val.AddMember("FNumber", "39", al);
stock_val.AddMember("FName", "胶条车间现场仓", al);
}else
{
stock_val.AddMember("FNumber", "", al);
stock_val.AddMember("FName", "", al);
}
// stock_val.AddMember("FNumber", (*configs[1])[stock.c_str()], al);
// stock_val.AddMember("FName", Value().SetString(stock.c_str(), al), al);
page2.AddMember("FStockID", stock_val, al);
page2.AddMember("FUseStatus", "使用", al);
page2.AddMember("FBeginDay", "1900-1-1", al);
page2.AddMember("FEndDay", "2100-1-1", al);
page2.AddMember("FItemModel", Value().SetString(get_val(lines[j], "kl3_item_ggxh"), al), al);
page2.AddMember("FErpClsID", Value().SetString(get_val(form, "kl3_item_wlsx"), al), al);
//page2.AddMember("FErpClsID", get_wlsx(get_val(rev, "kl3_item_wlsx"), al,* configs[5]), al);
jldwz = get_val(form, "kl3_jldwz");
jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
printf("jldw:%s\n", jldwz.c_str());
if (zl_map.find(jldwz)!=zl_map.end())
{
printf("find\n");
string sc_val = get_val(form, "kl3_item_scjldw");
string jb_val= get_val(form, "kl3_jbjldw");
page2.AddMember("FBaseUnit", Value().SetString(jb_val.c_str(),al), al);
Value jldw_val(kObjectType);
jldw_val.AddMember("FName", Value().SetString(sc_val.c_str(), al), al);
jldw_val.AddMember("FNumber", Value().SetString(zl_map[jldwz][sc_val]["id"].c_str(), al), al);
printf("end 111\n");
page2.AddMember("FUnitID", jldw_val, al);
double co = 1;
double yl = atof(get_val(lines[j], "KL3_yl"));
if(sc_val!=jb_val)
{
double jb_co = atof(zl_map[jldwz][jb_val]["coefficient"].c_str());
double sc_co = atof(zl_map[jldwz][sc_val]["coefficient"].c_str());
printf("yl:%f jb_co:%f sc_co:%f\n", yl,jb_co,sc_co);
co = sc_co / jb_co;
}
yl *= co;
page2.AddMember("FQty", yl, al);
}
printf("end jldw\n");
page2.AddMember("FIsPrimary", "", al);
page2.AddMember("FForbitUse", "", al);
page2.AddMember("FSubItemType", 1, al);
page2.AddMember("FOffSetDay", 0, al);
page2.AddMember("FPercent", 100, al);
page2.AddMember("FHasChar", 0, al);
page2.AddMember("FCostPercentage", 0, al);
page2.AddMember("FScrap", 0, al);
page2.AddMember("FEntryKey", 69777, al);
page2.AddMember("FMachinePos", "", al);
page2.AddMember("FPositionNo", "", al);
page2.AddMember("FNote0", "", al);
page2.AddMember("FNote1", "", al);
page2.AddMember("FNote2", "", al);
page2.AddMember("FNote3", "", al);
page2.AddMember("FItemSize", "", al);
page2.AddMember("FItemSuite", "", al);
page2.AddMember("FAuxClassID", "", al);
page2.AddMember("FPDMImportDate", Value().SetNull(), al);
page2.AddMember("FDetailID", Value().SetString(newGUID(),al), al);
Value empty2(kObjectType);
empty2.AddMember("FNumber", "", al);
empty2.AddMember("FName", "", al);
page2.AddMember("FAuxPropID", empty2, al);
Value empty3(kObjectType);
empty3.AddMember("FNumber", "", al);
empty3.AddMember("FName", "", al);
page2.AddMember("FSPID", empty3, al);
string back = get_val(lines[j], "KL3_sfdc");
Value back_val(kObjectType);
if(back=="")
{
back_val.AddMember("FNumber", "N", al);
back_val.AddMember("FName", "", al);
}else
{
back_val.AddMember("FNumber", "Y", al);
back_val.AddMember("FName", "", al);
}
page2.AddMember("FBackFlush", back_val, al);
Value ty_val(kObjectType);
ty_val.AddMember("FNumber", "COM", al);
ty_val.AddMember("FName", "通用", al);
page2.AddMember("FMarshalType", ty_val, al);
data_page2.PushBack(page2, al);
printf("end page2");
// if (type)
// continue;
// if (item_id2[0] == 'B'|| item_id2[0] == 'X')
// {
// send_erp(lines[j], 1, now, pref_vals, class1, save_url,check_url,configs,zl_map,key,creation_date);
// }
}
data.AddMember("Page1", data_page1, al);
data.AddMember("Page2", data_page2, al);
doc.AddMember("Data", data, al);
StringBuffer sb;
Writer<StringBuffer> writer(sb);
doc.Accept(writer);
printf("data:%s\n", sb.GetString());
string result = ConvertToString(class1->Send(save_url, convert_to_cstring(sb.GetString()),key));
printf("result:%s\n", result.c_str());
if(result[0]=='s')
{
LOG(INFO) << result;
data2.AddMember("FUserName", "administrator", al2);
data2.AddMember("FUseDirection", "1", al2);
doc2.AddMember("Data", data2, al2);
StringBuffer sb2;
Writer<StringBuffer> writer2(sb2);
doc2.Accept(writer2);
printf("data2:%s\n", sb2.GetString());
result = ConvertToString(class1->Send(check_url, convert_to_cstring(sb2.GetString()),key));
printf("result2:%s\n", result.c_str());
if(result[0]=='s')
{
LOG(INFO) << result;
}else
{
LOG(ERROR) << result;
EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str());
return 1;
}
}else
{
LOG(ERROR) << result;
EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str());
return 1;
}
return 0;
}
int erp_bom(tag_t task, string key_str, string pref1, string pref2)
{
printf("erp_bom start\n");
tag_t root_task, *atts, win;
int att_cnt;
EPM_ask_root_task(task, &root_task);
EPM_ask_attachments(root_task, EPM_target_attachment, &att_cnt, &atts);
int pref_cnt, pref_cnt2;
char **pref_vals, **pref_vals2;
PREF_ask_char_values(pref1.c_str(), &pref_cnt, &pref_vals);
PREF_ask_char_values(pref2.c_str(), &pref_cnt2, &pref_vals2);
vector<map<string,string>> configs;
Document doc;
doc.SetObject();
Document::AllocatorType &al = doc.GetAllocator();
map<string, map<string, map<string,string>>> zl_map;
string creation_date = getTime2();
for (auto i = 0; i<pref_cnt2; i++)
{
if(i==4)
{
Document temp_doc;
temp_doc.Parse(pref_vals2[i]);
for(auto j=temp_doc.MemberBegin();j!=temp_doc.MemberEnd();j++)
{
map<string, map<string,string>> temp_map;
for(auto k=j->value.MemberBegin();k!=j->value.MemberEnd();k++)
{
string name = k->name.GetString();
map<string, string> temp_map2;
if(name=="id")
{
temp_map2["id"] = k->value.GetString();
}else
{
for(auto l=k->value.MemberBegin();l!=k->value.MemberEnd();l++)
{
temp_map2[l->name.GetString()] = l->value.GetString();
}
}
temp_map[name] = temp_map2;
}
zl_map[j->name.GetString()] = temp_map;
}
}
if(i==1||i>4)
{
Document temp_doc;
temp_doc.Parse(pref_vals2[i]);
map<string, string> temp_map;
for(auto j=temp_doc.MemberBegin();j!=temp_doc.MemberEnd();j++)
{
temp_map[j->name.GetString()] = j->value.GetString();
}
configs.push_back(temp_map);
}
}
printf("pref_cnt:%d\n", pref_cnt);
string ip = pref_vals[0];
string token_url = ip + "/K3API/Token/Create?authorityCode=" + pref_vals[1];
Testclass ^class1 = gcnew Testclass();
System::String ^key = convert_to_cstring(key_str.c_str());
string token = ConvertToString(class1->GetToken(convert_to_cstring(token_url.c_str()),key));
printf("token:%s\n", token.c_str());
string s_url = ip + "/K3API/BOM/Save?token=" + token;
string c_url = ip + "/K3API/BOM/CheckUse?token=" + token;
System::String ^save_url = convert_to_cstring(s_url.c_str());
System::String ^check_url = convert_to_cstring(c_url.c_str());
BOM_create_window(&win);
string now = getTime();
for (auto i = 0; i<att_cnt; i++)
{
if (isTypeOf(atts[i], "PSBOMViewRevision"))
{
int rel_cnt, line_cnt;
tag_t *rels, top_line, *lines, rev;
char *id;
AOM_ask_value_tags(atts[i], "release_status_list", &rel_cnt, &rels);
if (rel_cnt)
continue;
BOM_set_window_top_line_bvr(win, atts[i], &top_line);
AOM_ask_value_string(top_line, "bl_item_item_id", &id);
// if (id[0] != 'C')
// continue;
int result=send_erp(top_line, 0, now, pref_vals, class1, save_url, check_url,configs,zl_map,key,creation_date);
if (result)
return result;
}
}
BOM_close_window(win);
return 0;
}
int kl_erp_bom(EPM_action_message_t msg)
{
int arg_cnt = TC_number_of_arguments(msg.arguments);
string key, pref1, pref2;
for (auto i = 0; i<arg_cnt; i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(msg.arguments), &temp_key, &temp_val);
if (tc_strcmp(temp_key, "key")==0)
{
key = temp_val;
}
else if (tc_strcmp(temp_key, "pref1")==0)
{
pref1 = temp_val;
}
else if (tc_strcmp(temp_key, "pref2")==0)
{
pref2 = temp_val;
}
}
printf("key:%s\n", key.c_str());
printf("pref1:%s\n", pref1.c_str());
printf("pref2:%s\n", pref2.c_str());
return erp_bom(msg.task, key, pref1, pref2);
}

@ -0,0 +1,599 @@
#include "util.h"
int erp_save(tag_t task,string key_str,string pref1,string pref2)
{
printf("start kl_erp_save\n");
tag_t *atts, root_task;
int att_cnt;
EPM_ask_root_task(task, &root_task);
EPM_ask_attachments(root_task, EPM_target_attachment, &att_cnt, &atts);
int pref_cnt, pref_cnt2;
char **pref_vals, **pref_vals2;
PREF_ask_char_values(pref1.c_str(), &pref_cnt, &pref_vals);
PREF_ask_char_values(pref2.c_str(), &pref_cnt2, &pref_vals2);
vector<Value*> configs;
Document doc0, doc1, doc2, doc3, doc4, doc5,doc6,doc7;
vector<Document*> vec;
vec.push_back(&doc0);
vec.push_back(&doc1);
vec.push_back(&doc2);
vec.push_back(&doc3);
vec.push_back(&doc4);
vec.push_back(&doc5);
vec.push_back(&doc6);
vec.push_back(&doc7);
for (auto i = 0; i<pref_cnt2; i++)
{
vec[i]->Parse(pref_vals2[i]);
configs.push_back(vec[i]);
}
string ip = pref_vals[0];
string token_url = ip + "/K3API/Token/Create?authorityCode=" + pref_vals[1];
Testclass ^class1 = gcnew Testclass();
System::String ^key = convert_to_cstring(key_str.c_str());
string token = ConvertToString(class1->GetToken(convert_to_cstring(token_url.c_str()),key));
printf("token:%s\n", token.c_str());
string s_url = ip + "/K3API/Material/Save?token=" + token;
string c_url = ip + "/K3API/Material/GetDetail?token=" + token;
System::String ^save_url = convert_to_cstring(s_url.c_str());
System::String ^check_url = convert_to_cstring(c_url.c_str());
string u_url = ip + "/K3API/Material/Update?token=" + token;
System::String ^update_url = convert_to_cstring(u_url.c_str());
POM_AM__set_application_bypass(true);
printf("att_cnt:%d\n", att_cnt);
for (auto i = 0; i<att_cnt; i++)
{
int type = -1;
if (isTypeOf(atts[i], "KL3_MaterialRevisionMaster"))
{
type = 0;
}
else if (isTypeOf(atts[i], "KL3_SemiProductRevisionMaster"))
{
type = 1;
}
else if (isTypeOf(atts[i], "KL3_ProductRevisionMaster"))
{
type = 2;
}
else if (isTypeOf(atts[i], "KL3_MouldRevisionMaster"))
{
type = 3;
}
else if (isTypeOf(atts[i], "KL3_MMaterialRevisionMaster"))
{
type = 4;
}
else if (isTypeOf(atts[i], "KL3_GJLRevisionMaster"))
{
type = 5;
}
else if (isTypeOf(atts[i], "KL3_VirtualRevisionMaster"))
{
type = 6;
}
printf("type:%d\n", type);
if (type == -1)
continue;
int ref_cnt, *levels;
tag_t *refs, rev = NULLTAG;
char **relations;
WSOM_where_referenced(atts[i], 1, &ref_cnt, &levels, &refs, &relations);
for (auto j = 0; j<ref_cnt; j++)
{
if (isTypeOf(refs[j], "ItemRevision"))
{
rev = refs[j];
break;
}
}
Document doc,check_doc;
check_doc.SetObject();
Document::AllocatorType &check_al = check_doc.GetAllocator();
Value check_data(kObjectType);
check_data.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), check_al), check_al);
check_doc.AddMember("Data", check_data, check_al);
check_doc.AddMember("GetProperty", false, check_al);
StringBuffer check_sb;
Writer<StringBuffer> check_writer(check_sb);
bool is_update = true;
check_doc.Accept(check_writer);
string check_result = ConvertToString(class1->Send(check_url, convert_to_cstring(check_sb.GetString()), key));
printf("check_result:%s\n", check_result.c_str());
if(check_result[0]!='s')
{
LERROR << "check error:" << check_result;
printf("check error\n");
break;
}
if(check_result.find("不存在或是没有访问权限")!=-1)
{
is_update = false;
}
doc.SetObject();
Document::AllocatorType &al = doc.GetAllocator();
Value data(kObjectType);
printf("is_update:%d\n", is_update);
if(is_update)
{
string syzt = get_val(atts[i], "kl3_syzt");
if (syzt == "禁用")
continue;
if (type != 1 && type != 2 && type != 6)
{
data.AddMember("Fmaund", 0, al);
}
else
{
Value maund(kObjectType);
string zldw = get_val(atts[i], "kl3_zldw");
maund.AddMember("FNumber", (*configs[3])[zldw.c_str()], al);
maund.AddMember("FName", Value().SetString(zldw.c_str(), al), al);
data.AddMember("Fmaund", maund, al);
}
printf("111\n");
Value manager(kObjectType);
manager.AddMember("FName", Value().SetString(pref_vals[2], al), al);
manager.AddMember("FNumber", Value().SetString(pref_vals[3], al), al);
data.AddMember("FDSManagerID", manager, al);
data.AddMember("FName", Value().SetString(get_val(rev, "object_name"), al), al);
data.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), al), al);
data.AddMember("FModel", Value().SetString(get_val(atts[i], "kl3_item_ggxh"), al), al);
// if(type<3||type>5)
// {
// data.AddMember("FKFPeriod", Value().SetString(get_val(atts[i], "kl3_bzqt"), al), al);
// }
// data.AddMember("FISKFPeriod", true, al);
data.AddMember("FFixLeadTime", (type != 1 && type != 2 && type != 6) ? (Value().SetString(get_val(atts[i], "kl3_gdtql"), al)) : Value().SetString("", al), al);
data.AddMember("F_132", (type<3 || type == 6) ? (Value().SetString(get_val(atts[i], "kl3_color"), al)) : Value().SetString("", al), al);
data.AddMember("FErpClsID", get_wlsx(get_val(atts[i], "kl3_item_wlsx"), al, *configs[5]), al);
string jldwz = get_val(atts[i], "kl3_jldwz");
int jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
Value &jldw_val = (*configs[4])[jldwz.c_str()];
if (!jldw_val.IsNull())
{
Value jldw(kObjectType);
jldw.AddMember("FName", Value().SetString(jldwz.c_str(), al), al);
jldw.AddMember("FNumber", Value().SetString(jldw_val["id"].GetString(), al), al);
data.AddMember("FUnitGroupID", jldw, al);
data.AddMember("FUnitID", get_jldw(get_val(atts[i], "kl3_jbjldw"), al, jldw_val), al);
data.AddMember("FOrderUnitID", get_jldw(get_val(atts[i], "kl3_cgjldw"), al, jldw_val), al);
data.AddMember("FSaleUnitID", get_jldw(get_val(atts[i], "kl3_xsjldw"), al, jldw_val), al);
data.AddMember("FProductUnitID", get_jldw(get_val(atts[i], "kl3_item_scjldw"), al, jldw_val), al);
data.AddMember("FStoreUnitID", get_jldw(get_val(atts[i], "kl3_kcjldw"), al, jldw_val), al);
}
printf("222\n");
if(type!=2){
data.AddMember("FLength", 0, al);
data.AddMember("FWidth", 0, al);
data.AddMember("FHeight", 0, al);
data.AddMember("FSize", 0, al);
}else{
int int_val;
double db_val;
char *ch_val;
AOM_ask_value_int(atts[i],"kl3_chang",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FLength", db_val, al);
AOM_ask_value_int(atts[i],"kl3_kuan",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FWidth", db_val, al);
AOM_ask_value_int(atts[i],"kl3_gao",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FHeight", db_val, al);
AOM_ask_value_string(atts[i],"kl3_dxtj",&ch_val);
db_val=atof(ch_val);
data.AddMember("FSize", db_val, al);
}
switch (type)
{
case 0:
// data.AddMember("FDefaultLoc", 651, al);
// break;
case 1:
case 2:
data.AddMember("FDefaultLoc", (*configs[1])[get_val(atts[i], "kl3_mrck")], al);
break;
case 3:
case 5:
data.AddMember("FDefaultLoc", 666, al);
break;
case 4:
data.AddMember("FDefaultLoc", 667, al);
break;
default:
break;
}
if (type == 0)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkcsl"), al), al);
data.AddMember("FQtyMin", Value().SetString(get_val(atts[i], "kl3_zxdhl"), al), al);
data.AddMember("FBatchAppendQty", Value().SetString(get_val(atts[i], "kl3_plzl"), al), al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_131", Value().SetString(get_val(atts[i], "kl3_clfl"), al), al);
}
if (type == 0)
{
string inspect = get_val(atts[i], "kl3_cgjyfs");
int inspect_val = 353;
if (inspect == "全检")
{
inspect_val = 351;
}
else if (inspect == "免检")
{
inspect_val = 352;
}else if (inspect == "抽检")
{
inspect_val = 353;
}
data.AddMember("FInspectionLevel", inspect_val, al);
}
if(type==1||type==2||type==6)
{
string ly_val = get_val(atts[i], "kl3_ly");
Value source_val(kObjectType);
if(ly_val=="注塑制造部")
{
source_val.AddMember("FName", "注塑制造部", al);
source_val.AddMember("FNumber", "13", al);
}else if(ly_val=="胶条制造部")
{
source_val.AddMember("FName", "胶条制造部", al);
source_val.AddMember("FNumber", "14", al);
}else
{
source_val.AddMember("FName", "", al);
source_val.AddMember("FNumber", "", al);
}
data.AddMember("FSource", source_val, al);
}
if (type == 2)
{
Value type_id(kObjectType);
string wlfl = get_val(atts[i], "kl3_wlfl");
type_id.AddMember("FID", (*configs[0])[wlfl.c_str()], al);
type_id.AddMember("FName", Value().SetString(wlfl.c_str(), al), al);
data.AddMember("FTypeID", type_id, al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_109", Value().SetString(get_val(atts[i], "kl3_bzsj"), al), al);
data.AddMember("F_118", Value().SetString(get_val(atts[i], "kl3_bzyf"), al), al);
data.AddMember("F_113", Value().SetString(get_val(atts[i], "kl3_cx"), al), al);
data.AddMember("F_114", Value().SetString(get_val(atts[i], "kl3_lcrq"), al), al);
data.AddMember("F_104", Value().SetString(get_val(atts[i], "kl3_ncl"), al), al);
data.AddMember("F_105", Value().SetString(get_val(atts[i], "kl3_yl"), al), al);
data.AddMember("F_119", Value().SetString(get_val(atts[i], "kl3_sm"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_133", Value().SetString(get_val(atts[i], "kl3_OTSdhrq"), al), al);
data.AddMember("F_134", Value().SetString(get_val(atts[i], "kl3_zjcmc"), al), al);
data.AddMember("F_135", Value().SetString(get_val(atts[i], "kl3_lccxmc"), al), al);
string s = "";
data.AddMember("F_136", s== get_val(atts[i], "kl3_sfyz")?1:0, al);
data.AddMember("F_138", s == get_val(atts[i], "kl3_sfsbz") ? 1 : 0, al);
data.AddMember("F_139", Value().SetString(get_val(atts[i], "kl3_cpzt"), al), al);
data.AddMember("F_142", Value().SetString(get_val(atts[i], "kl3_MOQ"), al), al);
data.AddMember("F_143", Value().SetString(get_val(atts[i], "kl3_ydcgzq"), al), al);
}
if (type == 4)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkc"), al), al);
data.AddMember("FLowLimit", Value().SetString(get_val(atts[i], "kl3_zdkc"), al), al);
data.AddMember("FHighLimit", Value().SetString(get_val(atts[i], "kl3_zgkc"), al), al);
}
Value data2(kObjectType);
data2.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), al), al);
data2.AddMember("Data", data, al);
doc.AddMember("Data", data2, al);
}else
{
data.AddMember("Fdeleted", 0, al);
data.AddMember("FTrack", 76, al);
data.AddMember("FDefaultReadyLoc", 664, al);
data.AddMember("FCostProject", 57, al);
data.AddMember("FPlanMode", 14036, al);
data.AddMember("FOrderTrategy", 331, al);
data.AddMember("FCtrlType", 14039, al);
data.AddMember("FBeforeExpire", 0, al);
data.AddMember("FSOChkMde", 352, al);
data.AddMember("FWthDrwChkMde", 352, al);
data.AddMember("FOtherChkMde", 352, al);
data.AddMember("FQtyDecimal", 8, al);
data.AddMember("FUseState", 341, al);
data.AddMember("FGrossWeight", 0, al);
data.AddMember("FNetWeight", 0, al);
if(type==1)
{
data.AddMember("FPriceDecimal", 10, al);
}else if(type==2)
{
data.AddMember("FPriceDecimal", 6, al);
}else
{
data.AddMember("FPriceDecimal", 4, al);
}
if(type==1||type==2||type==6)
{
string ly_val = get_val(atts[i], "kl3_ly");
Value source_val(kObjectType);
if(ly_val=="注塑制造部")
{
source_val.AddMember("FName", "注塑制造部", al);
source_val.AddMember("FNumber", "13", al);
}else if(ly_val=="胶条制造部")
{
source_val.AddMember("FName", "胶条制造部", al);
source_val.AddMember("FNumber", "14", al);
}else
{
source_val.AddMember("FName", "", al);
source_val.AddMember("FNumber", "", al);
}
data.AddMember("FSource", source_val, al);
}
printf("111\n");
if (type != 1 && type != 2 && type != 6)
{
data.AddMember("Fmaund", 0, al);
}
else
{
Value maund(kObjectType);
string zldw = get_val(atts[i], "kl3_zldw");
maund.AddMember("FNumber", (*configs[3])[zldw.c_str()], al);
maund.AddMember("FName", Value().SetString(zldw.c_str(), al), al);
data.AddMember("Fmaund", maund, al);
}
if(type!=2){
data.AddMember("FLength", 0, al);
data.AddMember("FWidth", 0, al);
data.AddMember("FHeight", 0, al);
data.AddMember("FSize", 0, al);
}else{
int int_val;
double db_val;
char *ch_val;
AOM_ask_value_int(atts[i],"kl3_chang",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FLength", db_val, al);
AOM_ask_value_int(atts[i],"kl3_kuan",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FWidth", db_val, al);
AOM_ask_value_int(atts[i],"kl3_gao",&int_val);
db_val=(double)int_val/1000;
data.AddMember("FHeight", db_val, al);
AOM_ask_value_string(atts[i],"kl3_dxtj",&ch_val);
db_val=atof(ch_val);
data.AddMember("FSize", db_val, al);
}
data.AddMember("FLenDecimal", 0, al);
data.AddMember("FCubageDecimal", 0, al);
data.AddMember("FWeightDecimal", 0, al);
Value manager(kObjectType);
manager.AddMember("FName", Value().SetString(pref_vals[2], al), al);
manager.AddMember("FNumber", Value().SetString(pref_vals[3], al), al);
data.AddMember("FDSManagerID", manager, al);
data.AddMember("FName", Value().SetString(get_val(rev, "object_name"), al), al);
data.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), al), al);
data.AddMember("FModel", Value().SetString(get_val(atts[i], "kl3_item_ggxh"), al), al);
data.AddMember("FPlanTrategy", type<3 ? 321 : 324, al);
if (type == 0)
{
string inspect = get_val(atts[i], "kl3_cgjyfs");
int inspect_val = 353;
if (inspect == "全检")
{
inspect_val = 351;
}
else if (inspect == "免检")
{
inspect_val = 352;
}else if (inspect == "抽检")
{
inspect_val = 353;
}
data.AddMember("FInspectionLevel", inspect_val, al);
}
else
{
data.AddMember("FInspectionLevel", type<2 ? 353 : 352, al);
}
data.AddMember("FProChkMde", type<1 ? 353 : 352, al);
data.AddMember("FWWChkMde", type<1 ? 353 : 352, al);
data.AddMember("FStkChkMde", type<5 ? 353 : 352, al);
data.AddMember("FBatchManager", type<3 ? 1 : 0, al);
data.AddMember("FISKFPeriod", (type<3 || type>5) ? 1 : 0, al);
data.AddMember("FKFPeriod", (type<3 || type>5) ? (Value().SetString(get_val(atts[i], "kl3_bzqt"), al)) : Value().SetString("", al), al);
data.AddMember("FFixLeadTime", (type != 1 && type != 2 && type != 6) ? (Value().SetString(get_val(atts[i], "kl3_gdtql"), al)) : Value().SetString("", al), al);
data.AddMember("F_132", (type<3 || type == 6) ? (Value().SetString(get_val(atts[i], "kl3_color"), al)) : Value().SetString("", al), al);
data.AddMember("FErpClsID", get_wlsx(get_val(atts[i], "kl3_item_wlsx"), al, *configs[5]), al);
printf("222\n");
string jldwz = get_val(atts[i], "kl3_jldwz");
int jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
Value &jldw_val = (*configs[4])[jldwz.c_str()];
if (!jldw_val.IsNull())
{
Value jldw(kObjectType);
jldw.AddMember("FName", Value().SetString(jldwz.c_str(), al), al);
jldw.AddMember("FNumber", Value().SetString(jldw_val["id"].GetString(), al), al);
data.AddMember("FUnitGroupID", jldw, al);
data.AddMember("FUnitID", get_jldw(get_val(atts[i], "kl3_jbjldw"), al, jldw_val), al);
data.AddMember("FOrderUnitID", get_jldw(get_val(atts[i], "kl3_cgjldw"), al, jldw_val), al);
data.AddMember("FSaleUnitID", get_jldw(get_val(atts[i], "kl3_xsjldw"), al, jldw_val), al);
data.AddMember("FProductUnitID", get_jldw(get_val(atts[i], "kl3_item_scjldw"), al, jldw_val), al);
data.AddMember("FStoreUnitID", get_jldw(get_val(atts[i], "kl3_kcjldw"), al, jldw_val), al);
}
string item_id = get_val(rev, "item_id");
item_id = item_id.substr(0, 3);
data.AddMember("FAcctID", get_acct(item_id, al, 0, *configs[2]), al);
data.AddMember("FSaleAcctID", get_acct(item_id, al, 1, *configs[2]), al);
data.AddMember("FCostAcctID", get_acct(item_id, al, 2, *configs[2]), al);
printf("333\n");
switch (type)
{
case 0:
// data.AddMember("FDefaultLoc", 651, al);
// break;
case 1:
case 2:
data.AddMember("FDefaultLoc", (*configs[1])[get_val(atts[i], "kl3_mrck")], al);
break;
case 3:
case 5:
data.AddMember("FDefaultLoc", 666, al);
break;
case 4:
data.AddMember("FDefaultLoc", 667, al);
break;
default:
break;
}
if (type == 0)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkcsl"), al), al);
data.AddMember("FQtyMin", Value().SetString(get_val(atts[i], "kl3_zxdhl"), al), al);
data.AddMember("FBatchAppendQty", Value().SetString(get_val(atts[i], "kl3_plzl"), al), al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_131", Value().SetString(get_val(atts[i], "kl3_clfl"), al), al);
data.AddMember("FStockTime", 1, al);
}
if (type == 2)
{
Value type_id(kObjectType);
string wlfl = get_val(atts[i], "kl3_wlfl");
type_id.AddMember("FID", (*configs[0])[wlfl.c_str()], al);
type_id.AddMember("FName", Value().SetString(wlfl.c_str(), al), al);
data.AddMember("FTypeID", type_id, al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_109", Value().SetString(get_val(atts[i], "kl3_bzsj"), al), al);
data.AddMember("F_118", Value().SetString(get_val(atts[i], "kl3_bzyf"), al), al);
data.AddMember("F_113", Value().SetString(get_val(atts[i], "kl3_cx"), al), al);
data.AddMember("F_114", Value().SetString(get_val(atts[i], "kl3_lcrq"), al), al);
data.AddMember("F_104", Value().SetString(get_val(atts[i], "kl3_ncl"), al), al);
data.AddMember("F_105", Value().SetString(get_val(atts[i], "kl3_yl"), al), al);
data.AddMember("F_119", Value().SetString(get_val(atts[i], "kl3_sm"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_133", Value().SetString(get_val(atts[i], "kl3_OTSdhrq"), al), al);
data.AddMember("F_134", Value().SetString(get_val(atts[i], "kl3_zjcmc"), al), al);
data.AddMember("F_135", Value().SetString(get_val(atts[i], "kl3_lccxmc"), al), al);
string s="";
data.AddMember("F_136", s== get_val(atts[i], "kl3_sfyz")?1:0, al);
data.AddMember("F_138", s == get_val(atts[i], "kl3_sfsbz") ? 1 : 0, al);
//data.AddMember("F_136", 0, al);
//data.AddMember("F_138", 0, al);
data.AddMember("F_139", Value().SetString(get_val(atts[i], "kl3_cpzt"), al), al);
data.AddMember("F_142", Value().SetString(get_val(atts[i], "kl3_MOQ"), al), al);
data.AddMember("F_143", Value().SetString(get_val(atts[i], "kl3_ydcgzq"), al), al);
}
if (type == 4)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkc"), al), al);
data.AddMember("FLowLimit", Value().SetString(get_val(atts[i], "kl3_zdkc"), al), al);
data.AddMember("FHighLimit", Value().SetString(get_val(atts[i], "kl3_zgkc"), al), al);
}
doc.AddMember("Data", data, al);
}
StringBuffer sb;
Writer<StringBuffer> writer(sb);
doc.Accept(writer);
printf("data:%s\n", sb.GetString());
string result = ConvertToString(class1->Send(is_update?update_url:save_url, convert_to_cstring(sb.GetString()),key));
if(result[0]=='s')
{
LOG(INFO) << result;
}else
{
POM_AM__set_application_bypass(false);
LOG(ERROR) << result;
EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str());
return 1;
}
printf("result:%s\n", result.c_str());
}
POM_AM__set_application_bypass(false);
return 0;
}
int kl_erp_save(EPM_action_message_t msg)
{
int arg_cnt = TC_number_of_arguments(msg.arguments);
string key, pref1, pref2;
for(auto i=0;i<arg_cnt;i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(msg.arguments), &temp_key, &temp_val);
printf("temp_key:%s\n", temp_key);
if(tc_strcmp(temp_key,"key")==0)
{
key = temp_val;
}else if(tc_strcmp(temp_key,"pref1")==0)
{
pref1 = temp_val;
}else if (tc_strcmp(temp_key, "pref2")==0)
{
pref2 = temp_val;
}
}
printf("key:%s\n", key.c_str());
printf("pref1:%s\n", pref1.c_str());
printf("pref2:%s\n", pref2.c_str());
return erp_save(msg.task,key,pref1,pref2);
}

@ -0,0 +1,256 @@
#include "util.h"
int erp_update(tag_t task, string key_str, string pref1, string pref2)
{
printf("start kl_erp_update\n");
tag_t *atts, root_task;
int att_cnt;
EPM_ask_root_task(task, &root_task);
EPM_ask_attachments(root_task, EPM_target_attachment, &att_cnt, &atts);
int pref_cnt, pref_cnt2;
char **pref_vals, **pref_vals2;
PREF_ask_char_values(pref1.c_str(), &pref_cnt, &pref_vals);
PREF_ask_char_values(pref2.c_str(), &pref_cnt2, &pref_vals2);
vector<Value*> configs;
Document doc0, doc1, doc2, doc3, doc4, doc5, doc6, doc7;
vector<Document*> vec;
vec.push_back(&doc0);
vec.push_back(&doc1);
vec.push_back(&doc2);
vec.push_back(&doc3);
vec.push_back(&doc4);
vec.push_back(&doc5);
vec.push_back(&doc6);
vec.push_back(&doc7);
for (auto i = 0; i<pref_cnt2; i++)
{
vec[i]->Parse(pref_vals2[i]);
configs.push_back(vec[i]);
}
string ip = pref_vals[0];
string token_url = ip + "/K3API/Token/Create?authorityCode=" + pref_vals[1];
POM_AM__set_application_bypass(true);
System::String ^key = convert_to_cstring(key_str.c_str());
Testclass ^class1 = gcnew Testclass();
string token = ConvertToString(class1->GetToken(convert_to_cstring(token_url.c_str()),key));
printf("token:%s\n", token.c_str());
string s_url = ip + "/K3API/Material/Update?token=" + token;
System::String ^save_url = convert_to_cstring(s_url.c_str());
for (auto i = 0; i<att_cnt; i++)
{
int type = -1;
if (isTypeOf(atts[i], "KL3_MaterialRevisionMaster"))
{
type = 0;
}
else if (isTypeOf(atts[i], "KL3_SemiProductRevisionMaster"))
{
type = 1;
}
else if (isTypeOf(atts[i], "KL3_ProductRevisionMaster"))
{
type = 2;
}
else if (isTypeOf(atts[i], "KL3_MouldRevisionMaster"))
{
type = 3;
}
else if (isTypeOf(atts[i], "KL3_MMaterialRevisionMaster"))
{
type = 4;
}
else if (isTypeOf(atts[i], "KL3_GJLRevisionMaster"))
{
type = 5;
}
else if (isTypeOf(atts[i], "KL3_VirtualRevisionMaster"))
{
type = 6;
}
printf("type:%d\n", type);
if (type == -1)
continue;
string syzt = get_val(atts[i], "kl3_syzt");
if (syzt == "½ûÓÃ")
continue;
int ref_cnt, *levels;
tag_t *refs, rev = NULLTAG;
char **relations;
WSOM_where_referenced(atts[i], 1, &ref_cnt, &levels, &refs, &relations);
for (auto j = 0; j<ref_cnt; j++)
{
if (isTypeOf(refs[j], "ItemRevision"))
{
rev = refs[j];
break;
}
}
printf("handle:%s\n", get_val(rev, "object_name"));
Document doc;
doc.SetObject();
Document::AllocatorType &al = doc.GetAllocator();
Value data(kObjectType);
if (type != 1 && type != 2 && type != 6)
{
data.AddMember("Fmaund", 0, al);
}
else
{
Value maund(kObjectType);
string zldw = get_val(atts[i], "kl3_zldw");
maund.AddMember("FNumber", (*configs[3])[zldw.c_str()], al);
maund.AddMember("FName", Value().SetString(zldw.c_str(), al), al);
data.AddMember("Fmaund", maund, al);
}
printf("111\n");
Value manager(kObjectType);
manager.AddMember("FName", Value().SetString(pref_vals[2], al), al);
manager.AddMember("FNumber", Value().SetString(pref_vals[3], al), al);
data.AddMember("FDSManagerID", manager, al);
data.AddMember("FName", Value().SetString(get_val(rev, "object_name"), al), al);
data.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), al), al);
data.AddMember("FModel", Value().SetString(get_val(atts[i], "kl3_item_ggxh"), al), al);
data.AddMember("FKFPeriod", (type<3 || type>5) ? (Value().SetString(get_val(atts[i], "kl3_bzqt"), al)) : Value().SetString("", al), al);
data.AddMember("FISKFPeriod", true, al);
data.AddMember("FFixLeadTime", (type != 1 && type != 2 && type != 6) ? (Value().SetString(get_val(atts[i], "kl3_gdtql"), al)) : Value().SetString("", al), al);
data.AddMember("F_132", (type<3 || type == 6) ? (Value().SetString(get_val(atts[i], "kl3_color"), al)) : Value().SetString("", al), al);
data.AddMember("FErpClsID", get_wlsx(get_val(atts[i], "kl3_item_wlsx"), al, *configs[5]), al);
string jldwz = get_val(atts[i], "kl3_jldwz");
int jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
Value &jldw_val = (*configs[4])[jldwz.c_str()];
if (!jldw_val.IsNull())
{
// Value jldw(kObjectType);
// jldw.AddMember("FName", Value().SetString(jldwz.c_str(), al), al);
// jldw.AddMember("FNumber", Value().SetString(jldw_val["id"].GetString(), al), al);
// data.AddMember("FUnitGroupID", jldw, al);
data.AddMember("FUnitID", get_jldw(get_val(atts[i], "kl3_jbjldw"), al, jldw_val), al);
data.AddMember("FOrderUnitID", get_jldw(get_val(atts[i], "kl3_cgjldw"), al, jldw_val), al);
data.AddMember("FSaleUnitID", get_jldw(get_val(atts[i], "kl3_xsjldw"), al, jldw_val), al);
data.AddMember("FProductUnitID", get_jldw(get_val(atts[i], "kl3_item_scjldw"), al, jldw_val), al);
data.AddMember("FStoreUnitID", get_jldw(get_val(atts[i], "kl3_kcjldw"), al, jldw_val), al);
}
printf("222\n");
switch (type)
{
case 0:
data.AddMember("FDefaultLoc", 651, al);
break;
case 1:
case 2:
data.AddMember("FDefaultLoc", (*configs[1])[get_val(atts[i], "kl3_mrck")], al);
break;
case 3:
case 5:
data.AddMember("FDefaultLoc", 666, al);
break;
case 4:
data.AddMember("FDefaultLoc", 667, al);
break;
default:
break;
}
if (type == 0)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkcsl"), al), al);
data.AddMember("FQtyMin", Value().SetString(get_val(atts[i], "kl3_zxdhl"), al), al);
data.AddMember("FBatchAppendQty", Value().SetString(get_val(atts[i], "kl3_plzl"), al), al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_131", Value().SetString(get_val(atts[i], "kl3_clfl"), al), al);
}
if (type == 2)
{
Value type_id(kObjectType);
string wlfl = get_val(atts[i], "kl3_wlfl");
type_id.AddMember("FID", (*configs[0])[wlfl.c_str()], al);
type_id.AddMember("FName", Value().SetString(wlfl.c_str(), al), al);
data.AddMember("FTypeID", type_id, al);
data.AddMember("F_112", Value().SetString(get_val(atts[i], "kl3_brand"), al), al);
data.AddMember("F_109", Value().SetString(get_val(atts[i], "kl3_bzsj"), al), al);
data.AddMember("F_118", Value().SetString(get_val(atts[i], "kl3_bzyf"), al), al);
data.AddMember("F_124", Value().SetString(get_val(atts[i], "kl3_cx"), al), al);
data.AddMember("F_114", Value().SetString(get_val(atts[i], "kl3_lcrq"), al), al);
data.AddMember("F_104", Value().SetString(get_val(atts[i], "kl3_ncl"), al), al);
data.AddMember("F_105", Value().SetString(get_val(atts[i], "kl3_yl"), al), al);
data.AddMember("F_119", Value().SetString(get_val(atts[i], "kl3_sm"), al), al);
data.AddMember("F_106", Value().SetString(get_val(atts[i], "kl3_dxsl"), al), al);
data.AddMember("F_133", Value().SetString(get_val(atts[i], "kl3_OTSdhrq"), al), al);
data.AddMember("F_134", Value().SetString(get_val(atts[i], "kl3_zjcmc"), al), al);
data.AddMember("F_135", Value().SetString(get_val(atts[i], "kl3_lccxmc"), al), al);
data.AddMember("F_136", 0, al);
data.AddMember("F_138", 0, al);
data.AddMember("F_137", Value().SetString(get_val(atts[i], "kl3_cpzt"), al), al);
}
if (type == 4)
{
data.AddMember("FSecInv", Value().SetString(get_val(atts[i], "kl3_aqkc"), al), al);
data.AddMember("FLowLimit", Value().SetString(get_val(atts[i], "kl3_zdkc"), al), al);
data.AddMember("FHighLimit", Value().SetString(get_val(atts[i], "kl3_zgkc"), al), al);
}
Value data2(kObjectType);
data2.AddMember("FNumber", Value().SetString(get_val(rev, "item_id"), al), al);
data2.AddMember("Data", data, al);
doc.AddMember("Data", data2, al);
StringBuffer sb;
Writer<StringBuffer> writer(sb);
doc.Accept(writer);
printf("data:%s\n", sb.GetString());
string result = ConvertToString(class1->Send(save_url, convert_to_cstring(sb.GetString()),key));
printf("result:%s\n", result.c_str());
if(result[0]=='s')
{
LOG(INFO) << result;
}else
{
LOG(ERROR) << result;
}
}
POM_AM__set_application_bypass(false);
return 0;
}
int kl_erp_update(EPM_action_message_t msg)
{
int arg_cnt = TC_number_of_arguments(msg.arguments);
string key, pref1, pref2;
for (auto i = 0; i<arg_cnt; i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(msg.arguments), &temp_key, &temp_val);
if (tc_strcmp(temp_key, "key")==0)
{
key = temp_val;
}
else if (tc_strcmp(temp_key, "pref1")==0)
{
pref1 = temp_val;
}
else if (tc_strcmp(temp_key, "pref2")==0)
{
pref2 = temp_val;
}
}
printf("key:%s\n", key.c_str());
printf("pref1:%s\n", pref1.c_str());
printf("pref2:%s\n", pref2.c_str());
return erp_update(msg.task,key,pref1,pref2);
}

@ -0,0 +1,71 @@
/**
* @defgroup common
* @defgroup workflow
* @defgroup bmf
* @defgroup service
*/
/**
* @addtogroup common
* @{
*/
/**
* @file
* @brief
* @date 2014/4/21
* @author mengyawei
*/
#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <tc/tc.h>
#include <tccore/custom.h>
#include <server_exits/user_server_exits.h>
#include "error_handling.h"
#include "epm_register_handler.h"
#include "epm_handler_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @fn extern "C" DLLAPI int liborigin_register_callbacks
* @return usually return ITK_ok
* @brief liborigin customization entry
*/
DLLAPI int libqtmc_register_callbacks()
{
int ifail = ITK_ok;
CALL( ifail = CUSTOM_register_exit(
"libqtmc",
"USERSERVICE_register_methods",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_methods) );
fprintf( stdout, "\n libqtmc registering USERSERVICE_register_methods completed!\n" );
CALL( ifail = CUSTOM_register_exit(
"libqtmc",
"USER_gs_shell_init_module",
(CUSTOM_EXIT_ftn_t)CUST_init_module));
fprintf( stdout, "\n libqtmc registering USER_gs_shell_init_module completed!\n" );
return ifail;
}
#ifdef __cplusplus
}
#endif
/**
* @}
*/

@ -0,0 +1,8 @@
// stdafx.cpp : 只包括标准包含文件的源文件
// HEZON_ITK.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息
#include "stdafx.h"
// TODO: 在 STDAFX.H 中
// 引用任何所需的附加头文件,而不是在此文件中引用

@ -0,0 +1,15 @@
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件

@ -0,0 +1,146 @@
/**
* @file string_helper.cpp
* @brief string utility functions' implemention
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
* 14-Jau-2009 James modify Split functions, add trim blank characters
*/
#pragma warning(disable:4996)
//
//#include <stdio.h>
//#include <iostream>
//#include <windows.h>
#include "string_helper.h"
string TrimString( string strArg )
{
size_t index1 = 0;
index1 = strArg.find_first_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin(), strArg.begin()+index1 );
index1 = strArg.find_last_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin() + index1 + 1 );
return strArg;
}
void Split( string strArg, char spliter, vector<string> &ans )
{
ans.clear();
size_t index0 = 0;
string one_arg;
if ( strArg.find_first_not_of(' ') == string.npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find_first_of( spliter );
if( index0 != string::npos )
{
one_arg = strArg.substr( 0,index0 );
strArg = strArg.substr( index0 + 1 );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
void Split( string strArg, string spliter, vector<string> &ans )
{
ans.clear();
size_t index0;
string one_arg;
if ( strArg.find_first_not_of(" ") == string::npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find(spliter);
if( index0 != string::npos )
{
one_arg = strArg.substr( 0, index0 );
strArg = strArg.substr( index0 + spliter.size() );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
void RemoveLiner( string &in, string &out )
{
char buf[BUFSIZ] = "";
for( int i=0; i<(int)in.size(); i++ )
{
if( in[i] == '\n')
continue;
else
sprintf( buf,"%s%c", buf, in[i] );
}
out.assign(buf);
}
////Converting a WChar string to a Ansi string
//std::string WChar2Ansi(LPCWSTR pwszSrc)
//{
// int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
//
// if (nLen<= 0) return std::string("");
//
// char* pszDst = new char[nLen];
// if (NULL == pszDst) return std::string("");
//
// WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
// pszDst[nLen -1] = 0;
//
// std::string strTemp(pszDst);
// delete [] pszDst;
//
// return strTemp;
//}
//
//string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
//
////Converting a Ansi string to WChar string
//std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
//{
// int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
// if(nSize <= 0) return NULL;
//
// WCHAR *pwszDst = new WCHAR[nSize+1];
// if( NULL == pwszDst) return NULL;
//
// MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
// pwszDst[nSize] = 0;
//
// if( pwszDst[0] == 0xFEFF) // skip Oxfeff
// for(int i = 0; i < nSize; i ++)
// pwszDst[i] = pwszDst[i+1];
//
// wstring wcharString(pwszDst);
// delete pwszDst;
//
// return wcharString;
//}
//
//std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}

@ -0,0 +1,25 @@
/**
* @file string_helper.h
* @brief string utilities to help dealing with string
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
*/
#ifndef STRING_HELPER
#define STRING_HELPER
#include <string>
#include <vector>
using namespace std;
string TrimString( string strArg );
void Split( string strArg, char spliter, vector<string> &ans );
void Split( string strArg, string spliter, vector<string> &ans );
void RemoveLiner( string &in, string &out );
//string ws2s(wstring& inputws);
//wstring s2ws(const string& s);
#endif

@ -0,0 +1,8 @@
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>

@ -0,0 +1,206 @@
#include "epm_handler_common.h"
#include <tc\tc_macros.h>
#include <tc\emh.h>
#include <tc\preferences.h>
#include <property\propdesc.h>
#include <epm\epm.h>
#include <epm\epm_toolkit_tc_utils.h>
#include <tccore\item.h>
#include <tccore\grmtype.h>
#include <tccore\grm.h>
#include <tccore\imantype.h>
#include <sa\am.h>
#include <sa\sa.h>
#include <tccore\aom.h>
#include <tccore\aom_prop.h>
#include <property\prop_errors.h>
#include <tccore\workspaceobject.h>
#include <qry\qry.h>
#include <bom\bom_attr.h>
#include <bom\bom.h>
#include <epm\signoff.h>
#include <pom\pom\pom.h>
#include <pom\pom\pom_errors.h>
#include <fclasses\tc_date.h>
#include <epm\cr.h>
#include <cfm\cfm.h>
#include <sa\am.h>
#include "tc/envelope.h"
#include <stdio.h>
#include "ae/dataset.h"
#include <ctype.h>
#include <string.h>
#include <string>
#include <iostream>
#include <iterator>
#include <map>
#include <vector>
#include "ce/ce.h"
#include <time.h>
#include <windows.h>
#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include "string"
#include "sstream"
#include <sa/tcfile.h>
#include <tccore/aom.h>
#include <sa/tcfile_cache.h>
#include "ctime"
#include "tchar.h"
#include "jni.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
bool isTypeOf(tag_t objtag, const char * type_name) {
tag_t type = NULLTAG;
TCTYPE_ask_object_type(objtag, &type);
tag_t item_type = NULLTAG;
TCTYPE_find_type(type_name, "", &item_type);
bool is_type = false;
if (item_type != NULLTAG) {
logical isok = FALSE;
TCTYPE_is_type_of(type, item_type, &isok);
if (isok) {
is_type = true;
}
}
return is_type;
}
string GBKToUTF8(const char* strGBK)
{
int len = MultiByteToWideChar(CP_ACP, 0, strGBK, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, strGBK, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
string strTemp = str;
if(wstr) delete[] wstr;
if(str) delete[] str;
return strTemp;
}
int sap(EPM_action_message_t msg)
{
printf("start sap\n");
int ifail = ITK_ok, att_count;
tag_t rootTask, *attachments, user_tag,relation_type;
char *action_string, *user_name, *task_name;
EPM_ask_root_task(msg.task, &rootTask);
EPM_ask_attachments(rootTask,EPM_target_attachment, &att_count, &attachments);
TC_argument_list_t * arguments = msg.arguments;
int arg_cnt = TC_number_of_arguments(arguments), status = 0;
map<string, string> paras;
for (auto i = 0; i<arg_cnt; i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(arguments), &temp_key, &temp_val);
paras[temp_key] = temp_val;
}
int pref_cnt;
char **pref_vals;
printf("11");
wstringstream wss;
wss << getenv("JRE_HOME") << "\\bin\\server\\jvm.dll";
JavaVMInitArgs vmArgs;
vmArgs.version = JNI_VERSION_1_6;
const int OPTION_COUNT = 2;
vmArgs.nOptions = OPTION_COUNT;
JavaVMOption options[OPTION_COUNT] = { 0 };
options[0].optionString = "-Djava.class.path=..\\portal\\plugins\\sap.jar";
options[1].optionString = "-Xmx1024m";
vmArgs.options = options;
vmArgs.ignoreUnrecognized = JNI_TRUE;
printf("before load dll\n");
HMODULE hModule = LoadLibrary(wss.str().c_str());
if (hModule == NULL)
{
printf("error load dll");
return -1;
}
printf("after load dll\n");
typedef jint(JNICALL *CreateJavaVMFuncPtr)(JavaVM **pvm, void **penv, void *args);
CreateJavaVMFuncPtr CreateJavaVM = (CreateJavaVMFuncPtr)GetProcAddress(hModule, "JNI_CreateJavaVM");
JavaVM *jvm = nullptr;
JNIEnv *env = nullptr;
jint res = (*CreateJavaVM)(&jvm, (void**)&env, &vmArgs);
if (res < 0)
{
printf("error load jvm");
return -1;
}
printf("after load jvm\n");
jclass class_Test = env->FindClass("zplm_interface/SAPTest");
jmethodID methodId_main = env->GetStaticMethodID(class_Test, "sap", "([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Z");
jobjectArray info = env->NewObjectArray(2, env->FindClass("Ljava/lang/String;"), NULL);
int index=0;
PREF_ask_char_values("Origin_SAP_URL",&pref_cnt,&pref_vals);
jstring url=env->NewStringUTF(pref_vals[0]);
PREF_ask_char_values("Origin_SAP_PassWord",&pref_cnt,&pref_vals);
env->SetObjectArrayElement(info, 0, env->NewStringUTF(pref_vals[0]));
env->SetObjectArrayElement(info, 1, env->NewStringUTF(pref_vals[1]));
vector<string> vec;
vec.push_back("cdc_Partnum");
vec.push_back("CustName");
vec.push_back("DCM_specification");
vec.push_back("cdc_Specsize1");
vec.push_back("DCM_Weight");
vec.push_back("DCM_SurfState");
vec.push_back("cdc_WetherTSTM");
vec.push_back("cdc_InWPTDT");
vec.push_back("cdc_WithWPTSTM");
printf("start\n");
GRM_find_relation_type(IMAN_master_form_rtype, &relation_type);
printf("type:%s\n",paras["itemRev_type"].c_str());
for(int i=0;i<att_count;i++){
if(isTypeOf(attachments[i],paras["itemRev_type"].c_str())){
int rel_cnt;
tag_t *rels;
GRM_list_secondary_objects_only(attachments[i], relation_type, &rel_cnt, &rels);
jobjectArray strs= env->NewObjectArray(vec.size(), env->FindClass("Ljava/lang/String;"), NULL);
for(auto j=0;j<vec.size();j++){
char *val;
AOM_UIF_ask_value(rels[0],vec[j].c_str(),&val);
string temp=val;
if(j==5||j==8){
int temp_index=temp.find(':');
if(temp_index!=-1){
temp=temp.substr(0,temp_index);
}
}else if(j==1&&temp.length()>3){
temp=temp.substr(3);
}
printf("args:%s\n",temp.c_str());
temp=GBKToUTF8(temp.c_str());
env->SetObjectArrayElement(strs, j, env->NewStringUTF(temp.c_str()));
}
printf("pass11");
jboolean result= env->CallStaticBooleanMethod(class_Test, methodId_main, strs, url,info);
printf("result:%d\n",result==JNI_TRUE);
if(result==JNI_FALSE){
printf("error\n");
EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, "SAP服务异常请与SAP系统管理员联系");
return 1;
}
}
}
jvm->DestroyJavaVM();
FreeLibrary(hModule);
return 0;
}

@ -0,0 +1,56 @@
#include "epm_handler_common.h"
#include <tc\tc_macros.h>
#include <tc\emh.h>
#include <tc\preferences.h>
#include <property\propdesc.h>
#include <epm\epm.h>
#include <epm\epm_toolkit_tc_utils.h>
#include <tccore\item.h>
#include <tccore\grmtype.h>
#include <tccore\grm.h>
#include <tccore\imantype.h>
#include <sa\am.h>
#include <sa\sa.h>
#include <tccore\aom.h>
#include <tccore\aom_prop.h>
#include <property\prop_errors.h>
#include <tccore\workspaceobject.h>
#include <qry\qry.h>
#include <bom\bom_attr.h>
#include <bom\bom.h>
#include <epm\signoff.h>
#include <pom\pom\pom.h>
#include <pom\pom\pom_errors.h>
#include <fclasses\tc_date.h>
#include <epm\cr.h>
#include <cfm\cfm.h>
#include <sa\am.h>
#include "tc/envelope.h"
#include <stdio.h>
#include "ae/dataset.h"
#include <ctype.h>
#include <string.h>
#include <string>
#include <iostream>
#include <iterator>
#include <map>
#include <vector>
#include "ce/ce.h"
#include <time.h>
#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include "string"
#include "sstream"
#include <sa/tcfile.h>
#include <tccore/aom.h>
#include <sa/tcfile_cache.h>
#include "ctime"
#include "tchar.h"
#include "rapidjson/document.h" // rapidjson's DOM-style API
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/prettywriter.h"
#include "easylogging++.h"

@ -0,0 +1,108 @@
#include "util.h"
bool isTypeOf(tag_t objtag, const char * type_name) {
tag_t type = NULLTAG;
TCTYPE_ask_object_type(objtag, &type);
tag_t item_type = NULLTAG;
TCTYPE_find_type(type_name, "", &item_type);
bool is_type = false;
if (item_type != NULLTAG) {
logical isok = FALSE;
TCTYPE_is_type_of(type, item_type, &isok);
if (isok) {
is_type = true;
}
}
return is_type;
}
string ConvertToString(System::String^ str)
{
char* p = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str);
return p;
}
System::String ^ convert_to_cstring(const char *p)
{
return System::Runtime::InteropServices::Marshal::PtrToStringAnsi((System::IntPtr)(char *)p);
}
char * get_val(tag_t tag, char *name)
{
char *val;
AOM_UIF_ask_value(tag, name, &val);
return val;
}
char * get_real_val(tag_t tag, char *name)
{
char *val;
AOM_ask_value_string(tag, name, &val);
return val;
}
Value get_jldw(const char *str, Document::AllocatorType &al,Value &config)
{
Value val(kObjectType);
if(config.HasMember(str))
{
val.AddMember("FName", Value().SetString(str,al), al);
val.AddMember("FNumber",Value().SetString(config[str]["id"].GetString(),al), al);
}
return val;
}
Value get_wlsx(string str, Document::AllocatorType &al,Value &config)
{
Value val(kObjectType);
char *name = "", *id = "";
if(config.HasMember(str.c_str()))
{
val.AddMember("FID", Value().SetString(config[str.c_str()].GetString(), al), al);
val.AddMember("FName", Value().SetString(str.c_str(), al), al);
}
return val;
}
Value get_acct(string str, Document::AllocatorType &al,int type,Value &config)
{
Value val(kObjectType);
if(config.HasMember(str.c_str()))
{
val.AddMember("FName",Value().SetString(config[str.c_str()]["name"].GetString(),al), al);
if (type == 0)
{
val.AddMember("FNumber", Value().SetString(config[str.c_str()]["acct"].GetString(), al), al);
}
else if (type == 1)
{
val.AddMember("FNumber", Value().SetString(config[str.c_str()]["sale"].GetString(), al), al);
}
else
{
val.AddMember("FNumber", Value().SetString(config[str.c_str()]["cost"].GetString(), al), al);
}
}
return val;
}
string getTime()
{
stringstream ss;
time_t t = time(0);
tm* local = localtime(&t);
ss << local->tm_year + 1900 << '-';
ss << local->tm_mon + 1 << '-';
ss << local->tm_mday << ' ';
ss << local->tm_hour << ':';
ss << local->tm_min << ':';
ss << local->tm_sec;
return ss.str();
}

@ -0,0 +1,82 @@
#pragma once
#using "D:/test/declib.dll"
#include "epm_handler_common.h"
#include <tc\tc_macros.h>
#include <tc\emh.h>
#include <tc\preferences.h>
#include <property\propdesc.h>
#include <epm\epm.h>
#include <epm\epm_toolkit_tc_utils.h>
#include <tccore\item.h>
#include <tccore\grmtype.h>
#include <tccore\grm.h>
#include <tccore\imantype.h>
#include <sa\am.h>
#include <sa\sa.h>
#include <tccore\aom.h>
#include <tccore\aom_prop.h>
#include <property\prop_errors.h>
#include <tccore\workspaceobject.h>
#include <qry\qry.h>
#include <bom\bom_attr.h>
#include <bom\bom.h>
#include <epm\signoff.h>
#include <pom\pom\pom.h>
#include <pom\pom\pom_errors.h>
#include <fclasses\tc_date.h>
#include <epm\cr.h>
#include <cfm\cfm.h>
#include <sa\am.h>
#include "tc/envelope.h"
#include <stdio.h>
#include "ae/dataset.h"
#include <ctype.h>
#include <string.h>
#include <string>
#include <iostream>
#include <iterator>
#include <map>
#include <vector>
#include "ce/ce.h"
#include <time.h>
#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include "string"
#include "sstream"
#include <sa/tcfile.h>
#include <tccore/aom.h>
#include <sa/tcfile_cache.h>
#include "ctime"
#include "tchar.h"
#include "rapidjson/document.h" // rapidjson's DOM-style API
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/prettywriter.h"
#include "easylogging++.h"
#ifndef easylog
#define easylog
_INITIALIZE_EASYLOGGINGPP
#endif
using namespace easyloggingpp;
using namespace rapidjson;
using namespace Testdll;
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
string ConvertToString(System::String^ str);
char * get_val(tag_t tag, char *name);
char * get_real_val(tag_t tag, char *name);
bool isTypeOf(tag_t objtag, const char * type_name);
Value get_jldw(const char *str, Document::AllocatorType &al,Value &val);
Value get_wlsx(string str, Document::AllocatorType &al,Value &val);
System::String ^ convert_to_cstring(const char *p);
Value get_acct(string str, Document::AllocatorType &al, int type,Value &val);
string getTime();
Loading…
Cancel
Save