initialize

This commit is contained in:
Pruefer
2025-06-06 09:15:13 +02:00
commit fa7c2730f1
5817 changed files with 1339670 additions and 0 deletions

View File

@@ -0,0 +1,249 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MesTools.ImsApi
{
public class ArrayPrinter
{
private TypePrinter typePrinter;
public static int MAX_ARRAY_SIZE = 3;
public ArrayPrinter(TypePrinter typePrinter)
{
this.typePrinter = typePrinter;
}
public void print(String varName, String[] data, StringBuilder stringBuffer)
{
printArrayHeader("String", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append('"').Append(data[i]).Append('"');
}
stringBuffer.Append('}');
}
public void print(String varName, char[] data, StringBuilder stringBuffer)
{
printArrayHeader("char", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append('\'').Append(data[i]).Append('\'');
}
stringBuffer.Append('}');
}
public void print(String varName, float[] data, StringBuilder stringBuffer)
{
printArrayHeader("float", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, double[] data, StringBuilder stringBuffer)
{
printArrayHeader("double", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
private void printArrayHeader(String type, String varName, int Length, StringBuilder stringBuffer)
{
typePrinter.print(type, stringBuffer);
if (varName != null && varName.Length != 0)
{
stringBuffer.Append(varName).Append(":");
}
stringBuffer.Append('[').Append(Length).Append("]{");
}
public void print(String varName, bool[] data, StringBuilder stringBuffer)
{
printArrayHeader("boolean", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, byte[] data, StringBuilder stringBuffer)
{
printArrayHeader("byte", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, short[] data, StringBuilder stringBuffer)
{
printArrayHeader("short", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, int[] data, StringBuilder stringBuffer)
{
printArrayHeader("int", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
private void printArrayValues(Object[] data, StringBuilder stringBuffer)
{
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, long[] data, StringBuilder stringBuffer)
{
printArrayHeader("long", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append(data[i]);
}
stringBuffer.Append('}');
}
public void print(String varName, StringBuilder[] data, StringBuilder stringBuffer)
{
printArrayHeader("StringBuffer", varName, data.Length, stringBuffer);
for (int i = 0; i < data.Length; i++)
{
if (i >= MAX_ARRAY_SIZE)
{
stringBuffer.Append("...");
break;
}
if (i > 0)
{
stringBuffer.Append(',');
}
stringBuffer.Append('"').Append(data[i].ToString()).Append('"');
}
stringBuffer.Append('}');
}
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MesTools.ImsApi
{
public class FieldPrinter
{
public static bool INCLUDE_FIELD_NAMES = true;
public static bool FIELD_COUNTER = false;
public void print(String fieldName, StringBuilder stringBuffer)
{
if (INCLUDE_FIELD_NAMES && fieldName != null && fieldName.Length != 0)
{
stringBuffer.Append(fieldName).Append(":");
}
}
public void printCounter(int counter, StringBuilder stringBuffer)
{
if (FIELD_COUNTER)
{
stringBuffer.Append("#").Append(counter).Append(":");
}
}
}
}

View File

@@ -0,0 +1,209 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.itac.mes.imsapi.client.dotnet;
using com.itac.mes.imsapi.domain.container;
namespace com.itac.mes.imsapi
{
/// <summary>
/// frankp 20141211
/// A snapshot of he current IMS-API.
/// I do a generic logging for all API functions via a proxy. This requires all functions to reside in an interface instead of a class.
/// </summary>
public interface IIMSApi
{
int adviceConfirmAdvice(IMSApiSessionContextStruct sessionContext, string stationNumber, string userName, string password, int adviceId, int confirmationStatus, string[] adviceEditTextArray);
int adviceGetAdvice(IMSApiSessionContextStruct sessionContext, string stationNumber, bool ignoreStationNumber, bool checkStationGroup, bool checkPartGroup, KeyValue[] adviceFilters, out Advice[] adviceArray);
int apsGetWorkorderDetails(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] apsGetWorkorderDetailsFilters, string[] apsGetWorkorderDetailResultKeys, out string[] apsGetWorkorderDetailResultValues, out bool hasMore);
int apsGetWorkorders(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] apsGetWorkordersFilters, string[] apsGetWorkordersResultKeys, out string[] apsGetWorkordersResultValues, out bool hasMore);
int attribAppendAttributeValues(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, long bookDate, int allowOverWrite, string[] attributeUploadKeys, string[] attributeUploadValues, out string[] attributeResultValues);
int attribCreateAttribute(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string attributeCode, string attributeDesc, string uniquenessType);
int attribGetAttributeValues(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, string[] attributeCodeArray, int allMergeLevel, string[] attributeResultKeys, out string[] attributeResultValues);
int attribGetObjectsForAttributeValues(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string attributeCode, string attributeValue, int maxRows, KeyValue[] attributeFilters, string[] objectResultKeys, out string[] objectResultValues);
int attribRemoveAttributeValue(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, string attributeCode, string attributeValueKey);
int batchAssignBatchNumberToWorkOrder(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string partNumber, string bomVersion, string bomIndex, string bomVersionErp, int processLayer, string batchNumber, double quantity, int activateWorkOrder);
int batchGetBatchInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] batchInfoFilter, string[] batchInfoResultKeys, out string[] batchInfoResultValues);
int batchGetRegisteredBatch(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string[] batchResultKeys, out string[] batchResultValues);
int batchMergeBatch(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberPos, string batchNumber, int processLayer, double usedBatchQuantity, int duplicateSerialNumber, int ignoreBatchComplete);
int batchRegisterBatch(IMSApiSessionContextStruct sessionContext, string stationNumber, string batchNumber, int processLayer, int ignoreBatchComplete, long registerDate);
int batchSplitBatchNumberToSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, ref string serialNumberRef, ref string serialNumberPos, string batchNumber, int processLayer, double usedBatchQuantity, int duplicateSerialNumber, int ignoreBatchComplete);
int batchUnregisterBatch(IMSApiSessionContextStruct sessionContext, string stationNumber, string batchNumber, int processLayer, double batchTotalQuantity, int batchComplete, long unregisterDate);
int configCreateParameters(IMSApiSessionContextStruct sessionContext, KeyValue[] options, string[] parameterUploadKeys, string[] parameterUploadValues, string[] parameterResultKeys, out string[] parameterResultValues);
int configDeleteParameters(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] parameterFilter, string[] parameterResultKeys, out string[] parameterResultValues);
int configDeleteValues(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] configContext, string[] uploadKeys, string[] uploadValues, string[] resultKeys, out string[] resultValues);
int configGetDimensionValues(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] dimensionFilter, out string[] resultValues);
int configGetParameters(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] parameterFilter, string[] parameterResultKeys, out string[] parameterResultValues);
int configGetValues(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] configContext, KeyValue[] parameterFilter, string[] parameterResultKeys, out string[] parameterResultValues, string[] resultKeys, out string[] resultValues);
int configUpdateParameters(IMSApiSessionContextStruct sessionContext, KeyValue[] options, string[] parameterUploadKeys, string[] parameterUploadValues, string[] parameterResultKeys, out string[] parameterResultValues);
int configUpdateValues(IMSApiSessionContextStruct sessionContext, KeyValue[] options, KeyValue[] configContext, string[] uploadKeys, string[] uploadValues, string[] resultKeys, out string[] resultValues);
int customFunction(IMSApiSessionContextStruct sessionContext, string methodName, string[] inArgs, out string[] outArgs, out string customErrorString);
int edaAssignExternalData(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, string[] assignExternalDataUploadKeys, string[] assignExternalDataUploadValues);
int edaGetExternalDataForObject(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] externalDataFilterKeys, string[] externalDataFilterValues, string[] externalDataResultKeys, out string[] externalDataResultValues);
int edaGetNextFreeExternalData(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, int functionMode, string[] nextFreeExternalDataFilterKeys, string[] nextFreeExternalDataFilterValues, string[] nextFreeExternalDataResultKeys, out string[] nextFreeExternalDataResultValues);
int edaGetObjectsForExternalData(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] objectExternalDataFilterKeys, string[] objectExternalDataFilterValues, string[] objectExternalDataResultKeys, out string[] objectExternalDataResultValues);
int edaManageExternalData(IMSApiSessionContextStruct sessionContext, string stationNumber, int functionMode, string[] partGroupArray, string[] partNumberArray, KeyValue[] manageExternalData, string[] externalDataValues);
int equCheckEquipmentData(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string serialNumber, string partNumber, int processLayer, int returnFailuresOnly, string[] equipmentResultKeys, out string[] equipmentResultValues);
int equGetEquipment(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] equipmentGetFilters, string[] equipmentGetResultKeys, out string[] equipmentGetResultValues);
int equGetRequiredEquipmentData(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string serialNumber, string partNumber, int processLayer, string pmGroup, string[] equipmentResultKeys, out string[] equipmentResultValues);
int equGetSetupEquipmentData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] equipmentSetupFilters, string[] equipmentSetupResultKeys, out string[] equipmentSetupResultValues);
int equRemoveEquipment(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string serialNumber, int processLayer);
int equSetLocation(IMSApiSessionContextStruct sessionContext, string stationNumber, string equipmentNo, string equipmentIndex, string location);
int equUpdateEquipment(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] equipmentUpdateKeys, string[] equipmentUpdateValues, out string[] equipmentUpdateResultValues);
int equUpdateEquipmentData(IMSApiSessionContextStruct sessionContext, string stationNumber, int setupFlag, string serialNumber, string workOrderNumber, int processLayer, string[] equipmentUploadKeys, string[] equipmentUploadValues, out string[] equipmentResultValues);
int execFormula(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] formulaReferences, string[] formulaKeys, string[] formulaValues, string[] parameterKeys, string[] parameterValues, string[] resultKeys, out string[] resultValues, string[] missingParameterKeys, out string[] missingParameterValues);
int execRuleSet(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string ruleType, string ruleSet, KeyValue[] ruleProperties, out RuleResult[] ruleResults);
int imsapiGetErrorList(IMSApiSessionContextStruct sessionContext, string[] localeArray, string[] groupNameArray, string[] functionNameArray, int[] errorCodes, string[] errorCodeResultKeys, out string[] errorCodeResultValues);
int imsapiGetErrorText(IMSApiSessionContextStruct sessionContext, int errorCode, out string errorString);
int imsapiGetFunctionInfo(IMSApiSessionContextStruct sessionContext, string functionName, out ImsApiFunctionStruct functionInfo, out ImsApiParameterStruct[] parameterArray);
int imsapiGetFunctions(IMSApiSessionContextStruct sessionContext, string groupName, out ImsApiFunctionStruct[] functionArray);
int imsapiGetGroups(IMSApiSessionContextStruct sessionContext, out ImsApiGroupStruct[] groupArray);
int imsapiGetParameterConditions(IMSApiSessionContextStruct sessionContext, string functionName, string parameterName, out string conditionParamName, out ImsApiParamConditionStruct[] parameterConditionArray);
int imsapiGetParameterInfo(IMSApiSessionContextStruct sessionContext, string functionName, string parameterName, string conditionValue, out ImsApiParameterStruct parameter, out ImsApiParamConditionStruct condition, out ImsApiKeyStruct[] keys);
int imsapiGetSystemInfos(IMSApiSessionContextStruct sessionContext, string[] systemInfoResultKeys, out string[] systemInfoResultValues);
int lockGetLockedObjects(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, string lockGroupName, long lockDateFrom, long lockDateTo, int lockState, int maxRows, string[] objectResultKeys, out string[] objectResultValues);
int lockObjects(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string lockGroupName, string lockInformation, long lockDate, int lockDependencies, string[] objectUploadKeys, string[] objectUploadValues, out string[] objectResultValues);
int lockUnlockObjects(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string lockGroupName, string unlockInformation, int unlockCompleteGroup, long unlockDate, int lockDependencies, string[] objectUploadKeys, string[] objectUploadValues, out string[] objectResultValues);
int mdaActivateRecipe(IMSApiSessionContextStruct sessionContext, string stationNumber, int functionMode, int recipeId, int recipeVersionId);
int mdaCreateRecipe(IMSApiSessionContextStruct sessionContext, string stationNumber, string versionName, string versionDesc, int majorVersionChange, bool activate, long creationDate, int objectType, KeyValue[] recipeFilters, string[] recipeUploadKeys, string[] recipeUploadValues, out string[] recipeResultValues);
int mdaGetDocumentContent(IMSApiSessionContextStruct sessionContext, string stationNumber, long documentId, out byte[] content);
int mdaGetDocuments(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] attributeFilters, KeyValue[] dataTypeFilters, string[] mdaResultKeys, out string[] mdaResultValues);
int mdaGetRecipeData(IMSApiSessionContextStruct sessionContext, string stationNumber, int recipeVersionId, string function, string functionStep, string measurementName, double sequentialNumber, string type, string measurementType, int objectType, KeyValue[] recipeFilters, string[] recipeResultKeys, out string[] recipeResultValues);
int mdaGetRecipeHeaderAndVersion(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, KeyValue[] recipeHeaderFilter, string[] recipeHeaderResultKeys, out string[] recipeHeaderResultValues);
int mdataBomVerify(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string workOrderNumber, string productNumber, string bareBoardNumber, string bomIndex, string bomInfo, int bomValidFrom, string bomVersionERP, int verifyCompNameBased, int createNewBom, string[] bomUploadKeys, string[] bomUploadValues, out string[] bomResultValues);
int mdataChangeWorkorderData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] workorderChangeData);
int mdataCreateWorkorder(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] workorderUploadKeyValues, string[] workorderResultKeys, out string[] workorderResultValues);
int mdataGetBomData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] bomDataFilter, string[] bomDataResultKeys, out string[] bomDataResultValues);
int mdataGetCalendarData(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] calendarDataResultKeys, out string[] calendarDataResultValues);
int mdataGetContactData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] contactFilter, string[] contactResultKeys, out string[] contactResultValues, out bool hasMore);
int mdataGetFailureDataForStation(IMSApiSessionContextStruct sessionContext, string stationNumber, int functionMode, string[] failureDataResultKeys, out string[] failureDataResultValues);
int mdataGetMachineAssetStructure(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] machineAssetStructureFilter, string[] machineAssetStructureResultKeys, out string[] machineAssetStructureValues);
int mdataGetPartData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] partFilter, string[] partDataResultKeys, out string[] partDataResultValues);
int mdataGetProductInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, string partNumber, int bomVersion, string bomIndex, int processVersion, int desolvingFlag, int onlyReleased, int onlyValid, string[] productInfoResultKeys, out string[] productInfoResultValues);
int mdataGetProductsForLineOrStation(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] productForLineOrStationFilter, string[] bomResultKeys, out string[] bomResultValues, string[] workplanResultKeys, out string[] workplanResultValues);
int mdataGetStationConfiguration(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] stationConfigFilter, string[] stationConfigCodeResultKeys, out string[] stationConfigCodeResultValues, string[] stationParamResultKeys, out string[] stationParamResultValues, string[] stationLicenseResultKeys, out string[] stationLicenseResultValues);
int mdataGetWorkorders(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mdataGetWorkordersFilters, string[] mdataGetWorkordersResultKeys, out string[] mdataGetWorkordersResultValues, out bool hasMore);
int mdataGetWorkplanActivities(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] workplanFilter, string[] workplanDataResultKeys, out string[] workplanDataResultValues, string[] activitiesDataResultKeys, out string[] activitiesDataResultValues, string[] activityParamResultKeys, out string[] activityParamResultValues, string[] deviceDataResultKeys, out string[] deviceDataResultValues);
int mdataGetWorkplanData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] workplanFilter, string[] workplanDataResultKeys, out string[] workplanDataResultValues);
int mdataSetProductionCycleTime(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string workOrderNumber, int processLayer, double setupCycleTime, double prodCycleTime, string processType, int cycleTimeForMultipleBoard);
int mdaUploadDocument(IMSApiSessionContextStruct sessionContext, string stationNumber, int targetType, KeyValue[] attributeValues, KeyValue[] mdaValues, byte[] content);
int mdcCreateConditionCode(IMSApiSessionContextStruct sessionContext, string stationNumber, string conditionClass, string conditionGroup, string conditionCode, string conditionName, string conditionDesc, string conditionCause, string conditionType, string colorRGB, string[] stationNumbers, string[] lineNumbers);
int mdcCreateLog(IMSApiSessionContextStruct sessionContext, string stationNumber, long startDate, long endDate, string subject, string text, int forLine);
int mdcGetConditionCodes(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] conditionCodeFilter, string[] conditionCodeResultKeys, out string[] conditionCodeResultValues);
int mdcGetLog(IMSApiSessionContextStruct sessionContext, string stationNumber, long fromDate, long toDate, out MdcLog[] logArray);
int mdcGetRegisteredUser(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mdcGetRegisteredUserFilter, string[] mdcGetRegisteredUserKeys, out string[] mdcGetRegisteredUserValues);
int mdcGetStationConditions(IMSApiSessionContextStruct sessionContext, string stationNumber, long fromDate, long toDate, string conditionType, int objectType, string[] conditionResultKeys, out string[] conditionResultValues);
int mdcRegisterUserAtLine(IMSApiSessionContextStruct sessionContext, string stationNumber, string userId, string password, int registrationType, long bookDate);
int mdcUploadStationCondition(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] stationConditionUploadKeys, string[] stationConditionUploadValues, out string[] stationConditionResultValues);
int mlChangeMaterialBinData(IMSApiSessionContextStruct sessionContext, string stationNumber, string materialBinNumber, KeyValue[] materialBinDataUploadValues);
int mlCreateNewMaterialBin(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] materialBinUploadKeys, string[] materialBinUploadValues, out string[] materialBinResultValues);
int mlGetMaterialBinData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] materialBinFilters, AttributeInfo[] attributes, string[] materialBinResultKeys, out string[] materialBinResultValues);
int mlGetNextMaterialBinNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string partNumber, out string materialBinNumber);
int mlGetStorage(IMSApiSessionContextStruct sessionContext, string stationNumber, string storageCellNumber, string storageGroupNumber, string storageNumber, string[] storageResultKeys, out string[] storageResultValues);
int mlSetMaterialBinLocation(IMSApiSessionContextStruct sessionContext, string stationNumber, string materialBinNumber, long bookDate, string binLocation, string binLocationBarcode, int transactionType);
int mlSplitMaterialBin(IMSApiSessionContextStruct sessionContext, string stationNumber, string materialBinNumber, string[] splitMaterialBinKeys, string[] splitMaterialBinUploadValues, string[] splitMaterialBinResultKeys, out string[] splitMaterialBinResultValues);
int mlUploadMaterialBinBooking(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] materialBinBookingUploadKeys, string[] materialBinBookingUploadValues, out string[] materialBinBookingResultValues);
int mslBeginDryObject(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mslBeginDryEventParams, string[] mslObjectKeys, string[] mslObjectValues, out string[] mslResultValues);
int mslEndDryObject(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mslEventParams, string[] mslObjectKeys, string[] mslObjectValues, out string[] mslResultValues);
int mslGetMinDryTimeForSerialnumber(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mslInfoFilters, string[] mslWorstCaseMinDryTimeResultKeys, out string[] mslWorstCaseMinDryTimeResultValues, string[] mslMinDryTimeResultKeys, out string[] mslMinDryTimeResultValues);
int mslGetObjectInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, KeyValue[] mslInfoFilters, string[] mslInfoResultKeys, out string[] mslInfoResultValues);
int mslStartObjectExpiration(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mslEventParams, string[] mslObjectKeys, string[] mslObjectValues, out string[] mslResultValues);
int mslStopObjectExpiration(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mslEventParams, string[] mslObjectKeys, string[] mslObjectValues, out string[] mslResultValues);
int pmGetFailureData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] failureDataFilters, string[] failureDataResultKeys, out string[] failureDataResultValues);
int pmGetProductQuantity(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, long dateFrom, long dateTo, int functionMode, KeyValue[] productQuantityFilters, string[] filterDataKeys, string[] filterDataValues, string[] productQuantityResultKeys, out string[] productQuantityResultValues);
int pmUploadQuantityAndFailureData(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] bookingFailureData, string[] failureDataUploadKeys, string[] failureDataUploadValues, out string[] failureDataUploadResultValues);
int regCheckLicense(IMSApiSessionContextStruct sessionContext, string stationNumber, int licenseType, string[] licenseUploadKeys, string[] licenseUploadValues, out string[] licenseResultValues);
int regGetRegisteredUser(IMSApiSessionContextStruct sessionContext, string stationNumber, out string userName, out string name, out string firstname);
int regLogin(IMSApiSessionValidationStruct sessionValidationStruct, out IMSApiSessionContextStruct sessionContext);
int regLogout(IMSApiSessionContextStruct sessionContext);
int regRegisterUser(IMSApiSessionContextStruct sessionContext, string stationNumber, string userName, string password, string client);
int regUnregisterUser(IMSApiSessionContextStruct sessionContext, string stationNumber, string userName, string password, string client);
int setupChangeSetupForSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] setupChangeSerialKeys, string[] setupChangeSerialValues, string[] setupChangePartKeys, string[] setupChangePartValues, string[] setupChangeResultKeys, out string[] setupChangeResultValues);
int setupCheck(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberRefPos, string workOrderNumber, int processLayer, int checkMode, int resultMode, out string workorderNumber, out string productNumber, out string placementName, out int setupActive, out CheckSetupData[] checkSetupDataArray);
int setupGetMaterialSetup(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, int setupFlag, long setupStartDate, long setupEndDate, string[] setupResultKeys, out string[] setupResultValues, string[] componentResultKeys, out string[] componentResultValues);
int setupGetSetupDataBySerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string partNumber, string location, int level, string[] setupResultKeys, out string[] setupResultValues);
int setupGetSetupName(IMSApiSessionContextStruct sessionContext, string stationNumber, out string setupName);
int setupGetStationSetupDataForMaterialBin(IMSApiSessionContextStruct sessionContext, string stationNumber, string materialBinNumber, string[] setupResultKeys, out string[] setupResultValues);
int setupReplaceSetupForSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumber, int serialNumberPos, string materialNumber, string compName, string materialBinNumberOld, string materialBinNumberNew, long bookDate);
int setupStateChange(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string workOrderNumber, string serialNumber, int serialNumberPos, int activateFlag);
int setupUpdateMaterialSetup(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string workOrderNumber, string productNumber, string setupName, string[] materialSetupUploadKeys, string[] materialSetupUploadValues, string[] compPositionsUploadKeys, string[] compPositionsUploadValues, out string[] materialSetupResultValues, out string[] compPositionsResultValues);
int shipActivateShippingLotAtKap(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber);
int shipAddChildLotToParentLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumberChild, string lotNumberParent, long bookDate);
int shipAddSerialNumberToShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, string serialNumber, int serialNumberPos, long bookDate);
int shipCheckSerialNumberAddToShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, string serialNumber, string serialNumberPos);
int shipCheckSerialNumberFromShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, string serialNumber, string serialNumberPos);
int shipCompleteLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, int allowLessQuantity, long bookDate);
int shipDeactivateShippingLotAtKap(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber);
int shipGetChildLotsForParentLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumberParent, string[] childLotResultKeys, out string[] childLotResultValues);
int shipGetLotFromSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string[] lotResultKeys, out string[] lotResultValues);
int shipGetSerialNumberDataForShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, string[] serialNumberResultKeys, out string[] serialNumberResultValues);
int shipGetShippingLotInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] shippingLotFilters, string[] shippingLotResultKeys, out string[] shippingLotResultValues);
int shipGetShippingPrefs(IMSApiSessionContextStruct sessionContext, string stationNumber, int objectType, string objectNumber, string objectDetail, int withPackagingRule, string[] shippingPrefsResultKeys, out string[] shippingPrefsResultValues);
int shipMoveChildLots(IMSApiSessionContextStruct sessionContext, string stationNumber, StringStruct[] childLotArray, string actualParentLot, string newParentLot, long bookDate, out ResultData[] resultDataArray);
int shipRemoveChildLots(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumberParent, string[] lotNumbersChild, long bookDate, out ResultData[] resultArray);
int shipRemoveSerialNumberFromShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, string serialNumber, string serialNumberPos, long bookDate);
int shipReuseCompletedShippingLot(IMSApiSessionContextStruct sessionContext, string stationNumber, int functionMode, string lotNumber, string[] shippingLotResultKeys, out string[] shippingLotResultValues);
int shipSendLot(IMSApiSessionContextStruct sessionContext, string stationNumber, string lotNumber, long bookDate, KeyValue[] shippingLotSendValues);
int smtCheckMaterialBin(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] materialBinUploadKeys, string[] materialBinUploadValues, out string[] materialBinResultValues);
int smtConsumption(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string lineName, string setupName, string productName, string bomVersion, string placementRecipe, bool assignSerialNumbers, bool bookSerialNumbers, bool activateSetup, ref SmtSerialNo[] serialNumbers, ref SmtEvent[] events, ref SmtPlacement[] placements, bool ignoreContainerProblems, bool createWorkOrder, bool activateWorkOrder, string workOrderNumber, double cycleTime);
int smtEventSetup(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string lineName, string setupName, string productName, string bomVersion, string placementRecipe, bool assignSerialNumbers, bool bookSerialNumbers, bool activateSetup, ref SmtSerialNo[] serialNumbers, ref SmtEvent[] events, ref SmtPlacement[] placements, bool ignoreContainerProblems, bool createWorkOrder, bool activateWorkOrder, string workOrderNumber, double cycleTime);
int smtSerialNumberCheckIn(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] serialNoCheckUploadKeys, string[] serialNoCheckUploadValues, out string[] serialNoCheckResultValues, string[] logInfoUploadKeys, string[] logInfoUploadValues, out string[] logInfoResultValues, string[] serialNumberStateResultKeys, out string[] serialNumberStateResultValues, string[] recipeResultKeys, out string[] recipeResultValues);
int smtSerialNumberSetup(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string lineName, string setupName, string productName, string bomVersion, string placementRecipe, bool assignSerialNumbers, bool bookSerialNumbers, bool activateSetup, ref SmtSerialNo[] serialNumbers, ref SmtEvent[] events, ref SmtPlacement[] placements, bool ignoreContainerProblems, bool createWorkOrder, bool activateWorkOrder, string workOrderNumber, double cycleTime);
int smtSetupData(IMSApiSessionContextStruct sessionContext, string stationNumber, int functionMode, string[] smtSetupHeaderKeys, string[] smtSetupHeaderValues, out string[] smtSetupHeaderResultValues, string[] smtSerialNumberKeys, string[] smtSerialNumberValues, out string[] smtSerialNumberResultValues, string[] smtEventKeys, string[] smtEventValues, out string[] smtEventResultValues, string[] smtPlacementKeys, string[] smtPlacementValues);
int trActivateWorkOrder(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string serialNumber, string serialNumberPos, int processLayer, int flag);
int trAddSerialNumberToPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, string[] serialNumberPoolKeys, string[] serialNumberPoolValues, out string[] serialNumberPoolResults);
int trAddSerialNumberToSerialNumberPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string serialNumberPoolName, out int state, out string partNumber, out string workOrderNumber);
int trAssignSerialNumberForProductOrWorkOrder(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string partNumber, string bomVersion, string serialNumberRef, string serialNumberRefPos, int processLayer, SerialNumberData[] serialNumberArray, int activateWorkOrder);
int trAssignSerialNumberMergeAndUploadState(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumberRef, string serialNumberRefPos, SerialNumberData[] serialNumberArray, string serialNumberSlave, int doUploadState, int serialNumberState, int multiplePanel);
int trChangePoolSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, string[] poolSerialNumberKeys, string[] poolSerialNumberValues, out string[] poolSerialNumberResults);
int trChangeSerialNumberPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, KeyValue[] serialNumberPoolData);
int trChangeWorkOrder(IMSApiSessionContextStruct sessionContext, string stationNumber, int lineFlag, string[] workorderResultKeys, out string[] workorderResultValues);
int trCheckMergedPartsForSerialNumberComplete(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, int serialNumberPos, int allMergedPartsVisible, int checkMultipleBoard, string[] mergePartsResultKeys, out string[] mergePartsResultValues);
int trCheckSerialNumberState(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, int checkMultiBoard, string serialNumber, string serialNumberPos, string[] serialNumberStateResultKeys, out string[] serialNumberStateResultValues);
int trCheckUserSkill(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string userId, KeyValue[] checkUserSkillFilter);
int trCreateSerialNumberPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, string serialNumberPoolDesc, string changeOrderNumber, string infoTxt, int serialNumberPoolType);
int trDeleteSerialNumberPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName);
int trGetCapturedRepairHistoryData(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, KeyValue[] repairHistoryFilter, string[] failureDataResultKey, string[] failureSlipDataResultKey, out string[] failureDataResultValues, out string[] failureSlipDataResultValues);
int trGetMergeHistory(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] mergedHistoryFilters, string[] mergedHistoryResultKeys, out string[] mergedHistoryResultValues);
int trGetMergeParts(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, int resolveDirection, int resolveLevel, string[] mergePartsResultKeys, out string[] mergePartsResultValues);
int trGetNextProductionStep(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, int functionMode, int stateCheck, int confirmFlag, string[] productionStepResultKeys, out string[] productionStepResultValues);
int trGetNextSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string workOrderNumber, string partNumber, int numberOfRecords, out SerialNumberData[] serialNumberArray);
int trGetPools(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, string changeOrder, int snrPoolState, string[] serialNumberPoolResultKeys, out string[] serialNumberPoolResultValues);
int trGetPoolSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, string serialNumber, string serialNumberPos, int startPosition, int maxRowCount, int processingStateFlag, int snrStateFlag, string[] poolSerialNumberResultKeys, out string[] poolSerialNumberResultValues, out bool hasMore, out string outSerialNumberPoolName);
int trGetProductQuantity(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, int functionMode, KeyValue[] workorderFilters, KeyValue[] filterDataArray, string[] productQuantityResultKeys, out string[] productQuantityResultValues);
int trGetResultDataForSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumber, int serialNumberPos, string type, string name, int allProductEntries, int onlyLastEntry, KeyValue[] resultDataFilters, string[] resultDataKeys, out string[] resultDataValues);
int trGetSerialNumberActivityUploadInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberRefPos, KeyValue[] activityFilter, string[] activityDataResultKeys, out string[] activityDataResultValues);
int trGetSerialNumberBySerialNumberRef(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberRefPos, out SerialNumberData[] serialNumberArray);
int trGetSerialNumberForWorkOrderAndWorkstep(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string workOrderNumber, int sequenceType, int workstepNumber, int multiplePanel, int state, int maxRows, int confirmFlag, int sortFlag, string[] serialNumberResultKeys, out string[] serialNumberResultValues);
int trGetSerialNumberHistoryData(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, int processLayer, int desolvingSerialNumber, int desolvingLevel, string[] bookingResultKeys, out string[] bookingResultValues, string[] failureDataResultKeys, out string[] failureDataResultValues, string[] failureSlipDataResultKeys, out string[] failureSlipDataResultValues, string[] measureDataResultKeys, out string[] measureDataResultValues, out string workOrderNumber, out string partNumber, out string customerPartNumber, out string partDesc, out string quantity, out long lastReportDate, out string lotNumber, out int isLocked);
int trGetSerialNumberInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string[] serialNumberResultKeys, out string[] serialNumberResultValues);
int trGetSerialNumberPoolInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberPoolName, int workOrderInfo, string[] poolInfoResultKeys, out string[] poolInfoResultValues, out string changeOrder, out string partNumber, out string erpBomIndex, out string infoTxtChangeOrder, out string infoTxtSnrPool, out int qtyAssignedSerialNumbers, out int qtyIdentifiedSerialNumbers, out int qtyCOAssignedSerialNumbers, out int snrPoolState, out string snrPoolDescription);
int trGetSerialNumberUploadInfo(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumber, string serialNumberPos, int checkProcessStep, string[] uploadInfoResultKeys, out string[] uploadInfoResultValues);
int trGetStationResult(IMSApiSessionContextStruct sessionContext, string stationNumber, string workorderNumber, string partNumber, int bomVersion, string bomIndex, string bomVersionErp, long fromDate, long toDate, string[] measurementNames, int functionMode, string[] stationResultKeys, out string[] stationResultValues);
int trGetStationSetting(IMSApiSessionContextStruct sessionContext, string stationNumber, string[] stationSettingResultKeys, out string[] stationSettingResultValues);
int trGetTestplanData(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, int processLayer, string workorderNumber, KeyValue[] testplanFilters, string[] varParamResultKeys, out string[] varParamResultValues, string[] varFailCodeResultKeys, out string[] varFailCodeResultValues, string[] attribParamResultKeys, out string[] attribParamResultValues, string[] attribParamValueResultKeys, out string[] attribParamValueResultValues, string[] attribFailCodeResultKeys, out string[] attribFailCodeResultValues);
int trGetTopFailures(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] trGetTopFailuresFilter, string[] topFailuresResultKeys, out string[] topFailuresResultValues);
int trGetWorkOrderForStation(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] workorderFilter, string[] workorderResultKeys, out string[] workorderResultValues);
int trIdentifyPoolSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string serialNumberPoolName);
int trMergeParts(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, int duplicateSerialNumber, string serialNumberMaster, string serialNumberMasterPos, string serialNumberSlave, string serialNumberSlavePos);
int trRemoveMergeParts(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumberSlave, string serialNumberSlavePos, string textInfo);
int trRemoveSerialNumberFromSerialNumberPool(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, string serialNumberPoolName);
int trSimulateMerge(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberMaster, string serialNumberMasterPos, string workorderNumberMaster, string serialNumberSlave, string serialNumberSlavePos, string workorderNumberSlave, string[] simulateMergeResultKeys, out string[] simulateMergeResultValues);
int trSplitPanel(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberRefPos, int functionMode, string[] splitPanelKeys, string[] splitPanelValues, out string[] splitPanelResults);
int trSwitchSerialNumber(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberRef, string serialNumberRefPos, ref SwitchSerialNumberData[] serialNumberArray);
int trTestPaa(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, int processLayer, int model, out int resultPaa, out string infoText);
int trTestSpa(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, int processLayer, int model, out int resultCp, out int resultCpk, out string infoText);
int trUploadActivity(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumberRef, string serialNumberRefPos, int serialNumberState, int duplicateSerialNumber, long bookDate, float cycleTime, string[] activityDataKeys, string[] activityDataValues, out string[] activityDataResults);
int trUploadFailureAndResultData(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumberRef, string serialNumberRefPos, int serialNumberState, int duplicateSerialNumber, float cycleTime, long bookDate, string[] measureKeys, string[] measureValues, out string[] measureResultValues, string[] failureKeys, string[] failureValues, out string[] failureResultValues, string[] failureSlipKeys, string[] failureSlipValues, out string[] failureSlipResultValues);
int trUploadFailuresForMergedParts(IMSApiSessionContextStruct sessionContext, string stationNumber, KeyValue[] uploadMasterSerialNumberKeys, string[] uploadSlaveSerialNumberKeys, string[] uploadSlaveSerialNumberValues, out string[] uploadSlaveSerialNumberResults, string[] uploadFailuresForSlaveSerialNumberKeys, string[] uploadFailuresForSlaveSerialNumberValues, out string[] uploadFailuresForSlaveSerialNumberResults);
int trUploadPmQuantity(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string workOrderNumber, double passQty, double failQty, double scrapQty);
int trUploadResultDataAndRecipe(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, int recipeVersionId, string serialNumberRef, string serialNumberRefPos, int serialNumberState, int duplicateSerialNumber, long bookDate, float cycleTime, int recipeVersionMode, string[] resultUploadKeys, string[] resultUploadValues, out string[] resultValues);
int trUploadState(IMSApiSessionContextStruct sessionContext, string stationNumber, int processLayer, string serialNumberRef, string serialNumberRefPos, int serialNumberState, int duplicateSerialNumber, long bookDate, float cycleTime, string[] serialNumberUploadKeys, string[] serialNumberUploadValues, out string[] serialNumberResultValues);
int trUploadStationResult(IMSApiSessionContextStruct sessionContext, string stationNumber, string partNumber, int bomVersion, string bomIndex, string bomVersionErp, string workOrderNumber, long bookDate, int serialUnitTrace, string[] stationResultUploadKeys, string[] stationResultUploadValues, out string[] stationResultValues);
int trUploadTestplanResult(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumber, string serialNumberPos, long bookDate, string[] workStepKeys, string[] workStepValues, out string[] workStepResults, string[] varUploadKeys, string[] varUploadValues, out string[] varUploadResults, string[] varFailUploadKeys, string[] varFailUploadValues, out string[] varFailUploadResults, string[] attribUploadKeys, string[] attribUploadValues, out string[] attribUploadResult, string[] attribFailUploadKeys, string[] attribFailUploadValues, out string[] attribFailUploadResults);
int trVerifyMerge(IMSApiSessionContextStruct sessionContext, string stationNumber, string serialNumberSlave, string serialNumberSlavePos, string serialNumberMaster, string serialNumberMasterPos, int checkMultiBoard, out SerialNumberStateData[] serialNumberStateDataArray);
int trVerifyMergeProduct(IMSApiSessionContextStruct sessionContext, string stationNumber, string partNumber, int bomVersion, string bomIndex, string serialNumberSlave, int level);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace com.itac.mes.imsapi
{
/// <summary>
/// Attribut für das automatische Mapping von Werten in Strukturen nach String-Arrays und umgekehrt
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public class ImsApiKey : Attribute
{
/// <summary>
/// String field.
/// </summary>
string key;
/// <summary>
/// Attribute constructor.
/// </summary>
public ImsApiKey()
{
}
/// <summary>
/// Get and set.
/// </summary>
public string Key
{
get { return this.key; }
set { this.key = value; }
}
}
}

View File

@@ -0,0 +1,453 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
namespace com.itac.mes.imsapi
{
/// <summary>
/// tool fuer das automatische Mapping von Werten in Strukturen nach String-Arrays und umgekehrt
///
/// Prinzip uebernommen aus dem ImsInterfaces, Klasse ImsApiMapTool
/// </summary>
/// <typeparam name="T"></typeparam>
public class ImsApiMapTool<T>
{
// von einem Typ
private static Dictionary<Type, Dictionary<String, FieldInfo>> fieldMapperTable = new Dictionary<Type, Dictionary<String, FieldInfo>>();
private static Dictionary<Type, Dictionary<String, PropertyInfo>> propertyMapperTable = new Dictionary<Type, Dictionary<String, PropertyInfo>>();
public static void clearClassCache(Type clazz)
{
Dictionary<String, FieldInfo> fieldKeyMapper = null;
if (fieldMapperTable.ContainsKey(clazz))
{
fieldKeyMapper = fieldMapperTable[clazz];
fieldMapperTable.Remove(clazz);
}
Dictionary<String, PropertyInfo> propertyKeyMapper = null;
if (propertyMapperTable.ContainsKey(clazz))
{
propertyKeyMapper = propertyMapperTable[clazz];
propertyMapperTable.Remove(clazz);
}
}
/// <summary>
/// eine Abbildungstabelle fuer einen Typ ermitteln (Namen von Feldern und IMSAPI-Keys)
/// </summary>
/// <param name="clazz"></param>
/// <returns></returns>
protected Dictionary<String, FieldInfo> getFieldMapperTable(Type clazz)
{
Dictionary<String, FieldInfo> keyMapper = null;
if (fieldMapperTable.ContainsKey(clazz))
{
keyMapper = fieldMapperTable[clazz];
}
else
{
keyMapper = new Dictionary<String, FieldInfo>();
// welche ImsApiKeys werden auf welche Fields abgebildet
// iterate over all fields
FieldInfo[] fields = clazz.GetFields();
foreach (FieldInfo field in fields)
{
// get relevant annotation
object[] annotation = field.GetCustomAttributes(typeof(ImsApiKey), true);
if (annotation != null && annotation.Length > 0)
{
// add field mappings
keyMapper.Add(((ImsApiKey)annotation[0]).Key, field);
}
}
fieldMapperTable.Add(clazz, keyMapper);
}
return keyMapper;
}
protected Dictionary<String, PropertyInfo> getPropertyMapperTable(Type clazz)
{
Dictionary<String, PropertyInfo> keyMapper = null;
if (propertyMapperTable.ContainsKey(clazz))
{
keyMapper = propertyMapperTable[clazz];
}
else
{
keyMapper = new Dictionary<String, PropertyInfo>();
// welche ImsApiKeys werden auf welche Fields abgebildet
// iterate over all fields
PropertyInfo[] properties = clazz.GetProperties();
foreach (PropertyInfo property in properties)
{
// get relevant annotation
object[] annotation = property.GetCustomAttributes(typeof(ImsApiKey), true);
if (annotation != null && annotation.Length > 0)
{
// add field mappings
keyMapper.Add(((ImsApiKey)annotation[0]).Key, property);
}
}
propertyMapperTable.Add(clazz, keyMapper);
}
return keyMapper;
}
/// <summary>
/// aus einem String-Array mit Keys und Werten eine Struktur erzeugen.
/// alle Felder in der Struktur muessen dafuer mit dem Attribut [IMSAPIKEY]
/// versehen sein
/// </summary>
/// <param name="clazz"></param>
/// <param name="imsApiKeys"></param>
/// <param name="imsApiValues"></param>
/// <returns></returns>
public T getStruct(Type clazz, string[] imsApiKeys, string[] imsApiValues)
{
if (clazz == null)
{
throw new ArgumentException("parameter clazz must not be null");
}
if (imsApiKeys == null)
{
throw new ArgumentException("parameter imsApiKeys must not be null");
}
if (imsApiValues == null)
{
throw new ArgumentException("parameter imsApiValues must not be null");
}
// Anzahl der Werte muss identisch sein mit der Anzahl der Keys
if (imsApiKeys.Length != imsApiValues.Length)
{
throw new ArgumentException("parameter imsApiKeys and imsApiValues must have the same size");
}
Dictionary<String, FieldInfo> keyMapper = getFieldMapperTable(clazz);
Dictionary<String, PropertyInfo> propertyKeyMapper = getPropertyMapperTable(clazz);
T instance = getInstance(clazz, imsApiKeys, imsApiValues, keyMapper, propertyKeyMapper, 0);
return instance;
}
private T getInstance(Type clazz, String[] imsApiKeys, String[] imsApiValues, Dictionary<String, FieldInfo> keyMapper,
Dictionary<String, PropertyInfo> propertyMapper, int baseIndex)
{
T instance = (T)Activator.CreateInstance(clazz);
// now map all keyValues to fields
for (int index = 0; index < imsApiKeys.Length; index++)
{
String key = imsApiKeys[index];
String sValue = imsApiValues[baseIndex + index];
if (!keyMapper.ContainsKey(key))
{
// dieser key ist nicht zur Abbildung definiert, d.h. es gibt keine Annotation in der Zielklasse mit diesem Key
if (!propertyMapper.ContainsKey(key))
{
continue;
}
PropertyInfo propInfo = propertyMapper[key];
safeSetProperty(instance, propInfo, sValue);
continue;
}
FieldInfo f = keyMapper[key];
safeSetField(instance, f, sValue);
}
return instance;
}
/// <summary>
/// aus einem String-Array mit Keys und Werten ein Array von Strukturen erzeugen.
/// alle Felder in der Struktur muessen dafuer mit dem Attribut [IMSAPIKEY]
/// versehen sein
/// </summary>
/// <param name="clazz"></param>
/// <param name="imsApiKeys"></param>
/// <param name="imsApiValues"></param>
/// <returns></returns>
public T[] getArray(Type clazz, String[] imsApiKeys, String[] imsApiValues)
{
// Check parameters
if (clazz == null)
{
throw new ArgumentException("parameter clazz must not be null");
}
if (imsApiKeys == null)
{
throw new ArgumentException("parameter imsApiKeys must not be null");
}
if (imsApiValues == null || imsApiValues.Length == 0)
{
throw new ArgumentException("parameter imsApiValues must not be null");
}
// Anzahl der Werte muss ein ganzzahliges Vielfaches der Anzahl der Keys sein
if ((imsApiValues.Length % imsApiKeys.Length) != 0)
{
throw new ArgumentException("parameter imsApiValues must be a multiple of imsApiKeys");
}
Dictionary<String, FieldInfo> keyMapper = getFieldMapperTable(clazz);
Dictionary<String, PropertyInfo> propertyKeyMapper = getPropertyMapperTable(clazz);
int length = imsApiValues.Length / imsApiKeys.Length;
T[] resultArray = (T[])Array.CreateInstance(clazz, length);
for (int baseIndex = 0; baseIndex < imsApiValues.Length; baseIndex += imsApiKeys.Length)
{
T instance = getInstance(clazz, imsApiKeys, imsApiValues, keyMapper, propertyKeyMapper, baseIndex);
resultArray[baseIndex / imsApiKeys.Length] = instance;
}
return resultArray;
}
protected void safeSetField(T instance, FieldInfo field, String sValue)
{
//if ((field.getModifiers() & Modifier.PRIVATE) == Modifier.PRIVATE) {
// field.setAccessible(true);
//}
try
{
if (field.FieldType == typeof(int) || field.FieldType == typeof(Int16) || field.FieldType == typeof(Int32) || field.FieldType == typeof(Int64))
{
try
{
field.SetValue(instance, Int32.Parse(sValue));
}
catch (Exception)
{
// replace all , by .
string s = sValue.Replace(",", ".");
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
field.SetValue(instance, Convert.ToInt32(Double.Parse(s, culture)));
}
}
else if (field.FieldType == typeof(String) || field.FieldType == typeof(string))
{
field.SetValue(instance, sValue);
}
//} else if (field.getType() == Boolean.class || field.getType() == boolean.class) {
// field.setBoolean(instance, Boolean.parseBoolean(sValue));
else if (field.FieldType == typeof(DateTime))
{
field.SetValue(instance, getDateValue(sValue));
}
else
{
throw new ArgumentException("unknown type mapper for " + field.FieldType.Name);
}
}
catch (Exception e)
{
throw new ArgumentException("unknown type mapper or invalid value for " + field.Name + ":" + sValue, e);
}
}
protected void safeSetProperty(T instance, PropertyInfo field, String sValue)
{
//if ((field.getModifiers() & Modifier.PRIVATE) == Modifier.PRIVATE) {
// field.setAccessible(true);
//}
try
{
if (field.PropertyType== typeof(int) || field.PropertyType == typeof(Int16) || field.PropertyType == typeof(Int32) || field.PropertyType == typeof(Int64))
{
try
{
field.SetValue(instance, Int32.Parse(sValue), new object[] { });
}
catch (Exception)
{
// replace all , by .
string s = sValue.Replace(",", ".");
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
field.SetValue(instance, Convert.ToInt32(Double.Parse(s, culture)), new object[] { });
}
}
else if (field.PropertyType == typeof(String) || field.PropertyType == typeof(string))
{
field.SetValue(instance, sValue, new object[] { });
}
//} else if (field.getType() == Boolean.class || field.getType() == boolean.class) {
// field.setBoolean(instance, Boolean.parseBoolean(sValue));
else if (field.PropertyType == typeof(DateTime))
{
field.SetValue(instance, getDateValue(sValue), new object[] { });
}
else
{
throw new ArgumentException("unknown type mapper for " + field.PropertyType.Name);
}
}
catch (Exception e)
{
throw new ArgumentException("unknown type mapper or invalid value for " + field.Name + ":" + sValue, e);
}
}
public DateTime getDateValue(string sDateValue)
{
if (sDateValue == null || sDateValue.Equals(""))
{
return new DateTime(1899, 12, 31, 23, 59, 59, DateTimeKind.Utc);
}
string s = sDateValue.Replace(",", ".");
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
double millies = Double.Parse(sDateValue, culture);
if (millies <= 1000)
{
return new DateTime(1899, 12, 31, 23, 59, 59, DateTimeKind.Utc);
}
// treat date values >= 30.12.3000 as infinite...
if (millies >= 32535039600000)
{
return new DateTime(9999, 12, 31, 23, 59, 59, DateTimeKind.Utc);
}
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime expiry = epoch.AddMilliseconds(millies);
return expiry;
}
public String[] getValueArray(T[] value, String[] imsApiKeys)
{
if (value == null)
{
throw new ArgumentException("parameter value must not be null");
}
if (imsApiKeys == null)
{
throw new ArgumentException("parameter imsApiKeys must not be null");
}
if (value.Length == 0)
{
return new String[0];
}
// aus der uebergebenen Struktur ein String Array bilden, unter der Prämisse der Imsapikeys
// Kein Element des ValueArray darf null sein !!!!!
if (value[0] == null)
{
throw new ArgumentException("first element in value array must not be null");
}
Dictionary<String, FieldInfo> keyMapper = getFieldMapperTable(value[0].GetType());
String[] resultArray = new String[imsApiKeys.Length * value.Length];
// nicht in der Struktur enthaltene Keys führen zu Fehlern
// in der Struktur enthaltene Keys, die nicht im imsapiKeysArray enthalten sind werden einfach ignoriert
int startIndex = 0;
foreach (T item in value)
{
toImsApiStringArray(item, resultArray, imsApiKeys, keyMapper, startIndex);
startIndex += imsApiKeys.Length;
}
return resultArray;
}
/// <summary>
/// aus einer Struktur ein String-Array erzeugen; alle als Keys uerbegebenen Felder
/// sind im String-Array in der Reihenfolge der imsApiKeys enthalten
/// </summary>
/// <param name="value"></param>
/// <param name="imsApiKeys"></param>
/// <returns></returns>
public String[] getValueArray(T value, String[] imsApiKeys)
{
if (value == null)
{
throw new ArgumentException("parameter value must not be null");
}
if (imsApiKeys == null)
{
throw new ArgumentException("parameter imsApiKeys must not be null");
}
// aus der uebergebenen Struktur ein String Array bilden, unter der Prämisse der Imsapikeys
Dictionary<String, FieldInfo> keyMapper = getFieldMapperTable(value.GetType());
String[] resultArray = new String[imsApiKeys.Length];
// nicht in der Struktur enthaltene Keys führen zu Fehlern
// in der Struktur enthaltene Keys, die nicht im imsapiKeysArray enthalten sind werden einfach ignoriert
toImsApiStringArray(value, resultArray, imsApiKeys, keyMapper, 0);
return resultArray;
}
protected void toImsApiStringArray(T value, String[] resultArray, String[] imsApiKeys,
Dictionary<String, FieldInfo> keyMapper, int i)
{
int destinationIndex = i;
foreach (String key in imsApiKeys)
{
if (!keyMapper.ContainsKey(key))
{
throw new ArgumentException("destination key '" + key + "' is not available in structure");
}
FieldInfo field = keyMapper[key];
try
{
String imsapiString = safeGetField(field, value);
resultArray[destinationIndex++] = imsapiString;
}
catch (NullReferenceException)
{
// field is null
destinationIndex++;
}
catch (Exception )
{
destinationIndex++;
}
}
}
protected String safeGetField(FieldInfo field, T value)
{
try
{
Object o = field.GetValue(value);
if (field.FieldType == typeof(int) || field.FieldType == typeof(Int16) || field.FieldType == typeof(Int32) || field.FieldType == typeof(Int64) )
{
return o.ToString();
}
else if (field.FieldType == typeof(string) || field.FieldType == typeof(String))
{
return o.ToString();
}
else if (field.FieldType == typeof(Boolean) || field.FieldType == typeof(bool))
{
bool b = (Boolean)o;
if (b)
{
return "1";
}
else
{
return "0";
}
}
else if (field.FieldType == typeof(DateTime))
{
DateTime d = (DateTime)o;
if (d == null)
{
return "0";
}
return "" + d.Ticks;// todo:correction
}
}
catch (NullReferenceException)
{
return "";
}
catch (AccessViolationException)
{
// einfach ignorieren, dies sollte eigentlich nie vorkommen
}
throw new ArgumentException("unknown type mapper for " + field.FieldType.Name);
}
}
}

View File

@@ -0,0 +1,159 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.itac.mes.imsapi.client.dotnet;
using com.itac.mes.imsapi.domain.container;
using System.Reflection;
using System.Runtime.Remoting.Proxies;
using System.Runtime.Remoting.Messaging;
using com.itac.mes.tools;
using System.Diagnostics;
using MesTools.ImsApi;
using System.Collections.Specialized;
using System.Globalization;
namespace com.itac.mes.imsapi
{
/// <summary>
/// Proxy for calling IMSAPI Functions
/// all paramaters are logged automatically the same way as in the imsinterfaces
/// </summary>
public class ImsApiProxy : RealProxy
{
private IIMSApiDotNet delegateObject;
public static bool parameterLogging = true;
private ObjectEvaluator fieldEvaluator = new ObjectEvaluator();
private Dictionary<string, MethodInfo> methods = new Dictionary<string, MethodInfo>();
public ImsApiProxy(IIMSApiDotNet delegateObject)
: base(typeof(IIMSApiDotNet))
{
this.delegateObject = delegateObject;
if (delegateObject != null)
{
MethodInfo[] apiMethodArray = typeof(IIMSApiDotNet).GetMethods();
foreach (MethodInfo method in apiMethodArray)
{
if (methods.ContainsKey(method.Name))
{
continue;
}
methods.Add(method.Name, method);
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "calling method " + method.Name);
}
}
}
/// <summary>
/// calling the functions
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public override IMessage Invoke(IMessage message)
{
// start der Methode
DateTime dtStart = DateTime.Now;
IMethodCallMessage methodMsg = (IMethodCallMessage)message;
MethodInfo methodInfo = methods[methodMsg.MethodName];
StringBuilder paramStr = new StringBuilder();
// call api function on delegate object
object result = methodInfo.Invoke(delegateObject, methodMsg.Args);
Dictionary<string, string[]> uploadValues = new Dictionary<string, string[]>();
if (parameterLogging)
{
for (int i = 0; i < methodInfo.GetParameters().Length; i++)
{
ParameterInfo methodParameter = methodInfo.GetParameters()[i];
if (!ObjectEvaluator.CLASSES_IN_ONE_LINE)
{
paramStr.Append(" ");
}
// corresponding Key-Values?
if (methodParameter.Name.EndsWith("Keys"))
{
// keep for evaluation of return values
String baseName = methodParameter.Name.Substring(0, methodParameter.Name.Length - "Keys".Length);
uploadValues.Add(baseName, (String[])methodMsg.Args[i]);
// are there some more parameters
if (methodInfo.GetParameters().Length > (i + 1))
{
if (methodInfo.GetParameters()[i + 1].Name.StartsWith(baseName) &&
methodInfo.GetParameters()[i + 1].Name.EndsWith("Values"))
{
StringBuilder stb = new StringBuilder();
MesTools.ImsApi.ImsApiTools.printKeyValues(stb, baseName, (String[])methodMsg.Args[i], (String[])methodMsg.Args[i + 1]);
paramStr.Append(stb.ToString());
paramStr.Append('\n');
i += 1;
continue;
}
}
}
fieldEvaluator.evaluateObject(methodInfo.GetParameters()[i].Name, methodMsg.Args[i], paramStr);
if (i < (methodInfo.GetParameters().Length - 1))
{
if (ObjectEvaluator.CLASSES_IN_ONE_LINE)
{
paramStr.Append(", ");
}
else
{
paramStr.Append("\n");
}
}
}
}
StringBuilder returnValues = new StringBuilder();
// calculate execution time
DateTime dtEnd = DateTime.Now;
long elapsedTicks = dtEnd.Ticks - dtStart.Ticks;
TimeSpan elapsedSpan = new TimeSpan(elapsedTicks);
returnValues.Append(methodInfo.Name).Append("() completed in ").Append(elapsedSpan.ToString()).Append(" millies\n").Append(paramStr);
if (parameterLogging)
{
StringBuilder stbResult = new StringBuilder();
if (result != null)
{
HashSet<String> inArgNames = new HashSet<string>();
for (int j = 0; j < methodMsg.InArgs.Length; j++)
{
inArgNames.Add(methodMsg.GetInArgName(j));
}
List<string> orderOutNames = new List<string>();
Dictionary<string, string[]> outValues = new Dictionary<string, string[]>();
// alle out-args mit betrachten...
for (int j = 0; j < methodMsg.Args.Length; j++)
{
if (!inArgNames.Contains(methodMsg.GetArgName(j)))
{
Debug.WriteLine("found out arg " + methodMsg.GetArgName(j));
orderOutNames.Add(methodMsg.GetArgName(j));
object k = methodMsg.GetArg(j);
outValues.Add(methodMsg.GetArgName(j), (string[])methodMsg.GetArg(j));
}
}
stbResult.Append(new ImsApiResultEvaluator().evaluate(result, orderOutNames, outValues, uploadValues));
returnValues.Append("\nreturn:\n" + stbResult.ToString());
}
}
LogHandler.log(Constants.LOGGER, TraceEventType.Information, returnValues.ToString());
return new ReturnMessage(result, methodMsg.Args, 0, methodMsg.LogicalCallContext, methodMsg);
}
}
}

View File

@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
namespace MesTools.ImsApi
{
public class ImsApiResultEvaluator
{
public StringBuilder evaluate(Object result, List<string> orderedOutArgs, Dictionary<String, String[]> resultValueMap, Dictionary<String, String[]> uploadValues)
{
// check preconditions
StringBuilder stb = new StringBuilder();
if (result == null)
{
stb.Append("(null");
return stb;
}
// print type info
ObjectEvaluator oe = new ObjectEvaluator();
stb.Append('(').Append(result).Append(")\n");
// handle all out params...
if (orderedOutArgs != null && orderedOutArgs.Count > 0)
{
// evaluate return values (key-value arrays...)
foreach (string fieldName in orderedOutArgs)
{
// find the stationResultUploadKeys for out stationResultValues
string[] values = resultValueMap[fieldName];
Debug.WriteLine(fieldName);
string[] keys = null;
// key-information available for this parameter?
string baseName = fieldName;
if (fieldName.EndsWith("Values") && uploadValues != null)
{
if (uploadValues.ContainsKey(fieldName))
{
keys = uploadValues[fieldName];
}
else
{
// replace "Values" by "Upload"
baseName = fieldName.Substring(0, fieldName.Length - 6) + "Upload";
if (uploadValues.ContainsKey(baseName))
{
keys = uploadValues[baseName];
}
}
if (keys != null)
{
Object v = new String[] { };
try
{
v = values;
}
catch (Exception)
{
// explicitly no error handling
}
// print formatted imsapi-key-Value
ImsApiTools.printKeyValues(stb, baseName, keys, (String[])v);
stb.Append('\n');
}
continue;
}
// print ordinary values
/* try
{
Object v = field.GetValue(result);
StringBuilder pstb = new StringBuilder();
oe.evaluateObject(field.Name, v, pstb);
stb.Append(pstb.ToString()).Append('\n');
}
catch (Exception)
{
// explicitly no error handling
}*/
}
}
foreach (FieldInfo field in result.GetType().GetFields())
{
}
return stb;
}
}
}

View File

@@ -0,0 +1,257 @@
using System;
using System.Text;
using com.itac.mes.imsapi;
using com.itac.mes.imsapi.domain.container;
namespace MesTools.ImsApi
{
public class ImsApiTools
{
public static String[] getKeys(params ImsApiKey[] configKeys)
{
if (configKeys == null)
{
return null;
}
String[] retArray = new String[configKeys.Length];
for (int i = 0; i < configKeys.Length; i++)
{
retArray[i] = configKeys[i].Key;
}
return retArray;
}
/**
* @param imsapiKeys
* @param values
* @return null, wenn einer der Parameter null ist oder wenn die Arrays unterschiedliche L&auml;ngen haben
*/
public static KeyValue[] getKeyValue(ImsApiKey[] imsapiKeys, String[] values)
{
if (imsapiKeys == null || values == null)
{
return null;
}
if (imsapiKeys.Length != values.Length)
{
return null;
}
KeyValue[] result = new KeyValue[imsapiKeys.Length];
for (int i = 0; i < imsapiKeys.Length; i++)
{
result[i] = new KeyValue(imsapiKeys[i].Key, values[i]);
}
return result;
}
public static String toString(String fieldName, ImsApiKey[] imsApiKeys, String[] values)
{
// geordnete Ausgabe der Values (lesbar)
try
{
StringBuilder stb = new StringBuilder();
// sind die Daten ein Array??
if (imsApiKeys == null)
{
return "IMSAPITools print problem: imsapiKeys=null";
}
if (values == null)
{
return "IMSAPITools print problem: values array=null";
}
if (imsApiKeys.Length == 0)
{
return "IMSAPITools print problem: imsapiKeys.length=0";
}
bool isArray = imsApiKeys.Length < values.Length;
if (isArray)
{
int arrayCount = values.Length / imsApiKeys.Length;
// arrayCount == 0 kann nicht vorkommen
// if (arrayCount == 0) {
// printKeyValues(stb, fieldName, imsApiKeys, values, 0, arrayCount);
// }
for (int i = 0; i < arrayCount; i++)
{
printKeyValues(stb, fieldName, imsApiKeys, values, i, arrayCount);
}
}
else
{
stb.Append(fieldName);
if (!fieldName.Equals(""))
{
stb.Append('\n');
}
printKeyValues(stb, fieldName, imsApiKeys, values, -1, -1);
}
return stb.ToString();
}
catch (Exception)
{
return "IMSAPITools print problem";
}
}
private static void printKeyValues(StringBuilder stb, String fieldName, ImsApiKey[] imsApiKeys, String[] values, int arrayIndex,
int arrayCount)
{
int baseIndex = 0;
if (arrayIndex >= 0)
{
baseIndex = arrayIndex * imsApiKeys.Length;
}
stb.Append(fieldName);
if (arrayIndex >= 0)
{
stb.Append('[').Append(arrayIndex).Append("]/[").Append(arrayCount).Append(']');
}
if (!fieldName.Equals("") && arrayIndex >= 0)
{
stb.Append('\n');
}
if (arrayCount <= 0)
{
return;
}
for (int k = 0; k < imsApiKeys.Length; k++)
{
stb.Append(" ").Append(imsApiKeys[k].Key);
// Array-index ausgeben
stb.Append(':');
stb.Append(values[baseIndex + k]).Append('\n');
}
}
/**
* print keys and values in a formatted way for column-oriented logging
* <p>
* <code>
* key1: value1, key2: value2, key3: value3, key4: value4,<br>
* key5: value5
* </code>
*
* @param baseName
* may be null, no printing, no line feed
* @param imsApiKeys
* @param values
* @return
*/
public static void printKeyValues(StringBuilder stb, String baseName, String[] imsApiKeys, String[] values)
{
if (imsApiKeys == null || values == null)
{
stb.Append("keys/values = null");
return;
}
if (values.Length == 0)
{
stb.Append("");
return;
}
if ((values.Length % imsApiKeys.Length) != 0)
{
stb.Append("keys/values unequal size");
return;
}
int maxColumns = 132; // print-width
// find key-length and value length over all...
int keyLength = 0;
foreach (String item in imsApiKeys)
{
keyLength = Math.Max(keyLength, item.Length);
}
int valueLength = 0;
foreach (String value in values)
{
valueLength = Math.Max(valueLength, value.Length);
}
bool isArray = values.Length > imsApiKeys.Length;
int arrayIndex = 0;
int column = 0;
int valueStartIndex = 0;
if (baseName != null)
{
stb.Append(baseName);
if (baseName.Length > 0)
{
stb.Append(':');
}
stb.Append('\n');
}
while (valueStartIndex < values.Length)
{
if (isArray)
{
// print index-key
if (arrayIndex > 0)
{
stb.Append('\n');
column = 0;
}
stb.Append('[').Append(arrayIndex).Append("]\n");
}
for (int k = 0; k < imsApiKeys.Length; k++)
{
if (column == 0)
{
stb.Append(" ");
column += 3;
}
stb.Append(fillString(imsApiKeys[k], keyLength)).Append(": ");
column += (keyLength + 2 + valueLength);
if (k < (imsApiKeys.Length - 1))
{
stb.Append(fillString(values[valueStartIndex + k], valueLength, ','));
column += 2;
}
else
{
stb.Append(fillString(values[valueStartIndex + k], valueLength));
}
if (column > maxColumns)
{
stb.Append('\n');
column = 0;
}
}
arrayIndex++;
valueStartIndex += imsApiKeys.Length;
}
}
/**
* Fills a string to the given length with spaces, optionally Append a closig character.
*
* @param name
* the string to be filled
* @param keyLength
* the resulting string should have this length
* @param closingChar
* optional; if given this is Appended to the string
* @return the filled string with the given length
*/
private static String fillString(String name, int keyLength, params char[] closingChar)
{
StringBuilder stb = new StringBuilder(name);
if (closingChar.Length > 0)
{
stb.Append(closingChar[0]);
}
while (stb.Length <= keyLength)
{
stb.Append(' ');
}
return stb.ToString();
}
}
}

View File

@@ -0,0 +1,447 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using MesTools.ImsApi;
namespace MesTools.ImsApi
{
public class ObjectEvaluator
{
// should a class be printed in one line or every field of a class in a separate line
public static bool CLASSES_IN_ONE_LINE;
private static TypePrinter typePrinter = new TypePrinter();
private static ArrayPrinter arrayPrinter = new ArrayPrinter(typePrinter);
private static FieldPrinter fieldNamePrinter = new FieldPrinter();
public void evaluateObject(String extFieldName, Object object_, StringBuilder stringBuffer)
{
try
{
if (object_ == null)
{
stringBuffer.Append("null");
return;
}
if (isPrimitiveClass(object_.GetType())) // auch String und StringBuffer direkt
// anzeigen
{
typePrinter.print(typePrinter.getSimpleTypeName(object_.GetType()), stringBuffer);
fieldNamePrinter.print(extFieldName, stringBuffer);
if (extFieldName.Equals("password"))
{
stringBuffer.Append("*****");
}
else
{
stringBuffer.Append(object_.ToString());
}
return;
}
else if (object_.GetType().IsArray)
{
evaluateArrayWithoutfield(object_, stringBuffer);
return;
}
typePrinter.print(object_.GetType().Name, stringBuffer);
fieldNamePrinter.print(extFieldName, stringBuffer);
FieldInfo[] fields = object_.GetType().GetFields();
if (fields.Length > 1)
{
stringBuffer.Append('\n');
}
// alle Felder auflisten
for (int i = 0; i < fields.Length; i++)
{
// if ((fields[i].getModifiers() & Modifier.PRIVATE) == Modifier.PRIVATE || (fields[i].getModifiers() & Modifier.PROTECTED) == Modifier.PROTECTED)
// {
// continue;
// }
Type fieldType = fields[i].GetType();
fieldNamePrinter.printCounter(i, stringBuffer);
if (isPrimitiveClass(fieldType))
{
evalPrimitiveField(fields[i], object_, stringBuffer, "");
}
else if (fieldType.Equals(typeof(String)) || fieldType.Equals(typeof(StringBuilder)))
{
printString(object_, fields[i], stringBuffer);
}
else if (fieldType.IsArray)
{
evalArray(fields[i], object_, stringBuffer);
}
else
{
// komplexe Typen
Object subObject = fields[i].GetValue(object_);
evalStructuredField(fields[i], subObject, stringBuffer);
}
if (i < (fields.Length - 1))
{
if (CLASSES_IN_ONE_LINE)
{
stringBuffer.Append(", ");
}
else
{
stringBuffer.Append("\n");
}
}
}
}
catch (Exception t)
{
throw t;
}
}
private void printString(Object object_, FieldInfo field, StringBuilder stringBuffer)
{
// wert ausgeben
if (!CLASSES_IN_ONE_LINE)
{
stringBuffer.Append(" ");
}
typePrinter.print("String", stringBuffer);
fieldNamePrinter.print(field.Name, stringBuffer);
if (object_ == null)
{
stringBuffer.Append("null");
return;
}
Object subObject = field.GetValue(object_);
if (subObject == null)
{
stringBuffer.Append("null");
}
else
{
stringBuffer.Append(subObject.ToString());
}
}
private void evaluateArrayWithoutfield(Object object_, StringBuilder stringBuffer)
{
if (object_ == null)
{
stringBuffer.Append("null");
return;
}
if (object_.GetType().Equals(typeof(long[])))
{
arrayPrinter.print(null, (long[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(int[])))
{
arrayPrinter.print(null, (int[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(short[])))
{
arrayPrinter.print(null, (short[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(byte[])))
{
arrayPrinter.print(null, (byte[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(bool[])))
{
arrayPrinter.print(null, (bool[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(double[])))
{
arrayPrinter.print(null, (double[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(float[])))
{
arrayPrinter.print(null, (float[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(char[])))
{
arrayPrinter.print(null, (char[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(String[])))
{
arrayPrinter.print(null, (String[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(StringBuilder[])))
{
arrayPrinter.print(null, (StringBuilder[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(Int16[])))
{
arrayPrinter.print(null, (Int16[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(Int16[])))
{
arrayPrinter.print(null, (Byte[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(Double[])))
{
arrayPrinter.print(null, (Double[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(Boolean[])))
{
arrayPrinter.print(null, (Boolean[])object_, stringBuffer);
}
else if (object_.GetType().Equals(typeof(Char[])))
{
arrayPrinter.print(null, (Char[])object_, stringBuffer);
}
else
{
Object[] unknownArray = (Object[])object_;
if (unknownArray.Length > 0)
{
evalArray(unknownArray, null, stringBuffer);
}
}
}
private void evalArray(Object[] unknownArray, String varName, StringBuilder stringBuffer)
{
// spezielle Type-information für das Array
// spezielle Type-information für das Array
if (varName != null)
{
fieldNamePrinter.print(varName, stringBuffer);
}
if (unknownArray == null)
{
stringBuffer.Append("[null]\n");
return;
}
if (unknownArray == null)
{
stringBuffer.Append("null");
return;
}
if (true)
{
typePrinter.print(unknownArray.GetType().Name, stringBuffer);
stringBuffer.Append('[').Append(unknownArray.Length).Append("]\n");
}
String indentation = " ";
for (int index = 0; index < unknownArray.Length; index++)
{
// typePrinter.print(unknownArray.getClass().getSimpleName(), stringBuffer);
if (index >= ArrayPrinter.MAX_ARRAY_SIZE)
{
stringBuffer.Append("output limited to ").Append(ArrayPrinter.MAX_ARRAY_SIZE).Append(" items\n");
break;
}
stringBuffer.Append(indentation).Append('[').Append(index).Append("]");
if (unknownArray[index] == null)
{
stringBuffer.Append(":null");
}
else
{
// z.B. ein Array of Long[] wird dargestellt als long[]
if (isPrimitiveClass(unknownArray[index].GetType()))
{
evalPrimitiveField(unknownArray[index], stringBuffer, indentation);
continue;
}
FieldInfo[] fields = unknownArray[index].GetType().GetFields();
// alle Felder auflisten
for (int i = 0; i < fields.Length; i++)
{
if (i == 0 && !CLASSES_IN_ONE_LINE)
{
stringBuffer.Append("\n");
}
// if ((fields[i].getModifiers() & Modifier.PRIVATE) == Modifier.PRIVATE || (fields[i].getModifiers() & Modifier.PROTECTED) == Modifier.PROTECTED)
// {
// continue;
// }
fieldNamePrinter.printCounter(i, stringBuffer);
if (isPrimitiveClass(fields[i].GetType()))
{
evalPrimitiveField(fields[i], unknownArray[index], stringBuffer, indentation);
}
else if (fields[i].GetType().IsArray)
{
evalArray(fields[i], unknownArray[index], stringBuffer);
}
else
{
stringBuffer.Append(indentation);
printString(unknownArray[index], fields[i], stringBuffer);
}
if (i < fields.Length - 1)
{
if (!CLASSES_IN_ONE_LINE)
{
stringBuffer.Append("\n");
}
else
{
stringBuffer.Append(", ");
}
}
}
}
if (index < unknownArray.Length - 1)
{
stringBuffer.Append('\n');
}
}
}
private void evalPrimitiveField(Object object_, StringBuilder stringbuffer, String indentation)
{
if (!CLASSES_IN_ONE_LINE)
{
stringbuffer.Append(indentation).Append(" ");
}
if (object_ == null)
{
stringbuffer.Append("null");
return;
}
stringbuffer.Append(object_);
}
/**
* isPrimitive() liefert true fuer int, long, etc. diese Methode liefert true, wenn die Klasse eine Klasse fuer einen
* primitiven Type ist
*
* @param class1
* @return
*/
public bool isPrimitiveClass(Type class1)
{
return class1.Namespace.StartsWith("System");
// (class1 == Integer.class || class1 == Short.class || class1 == Byte.class || class1 == Long.class
// || class1 == String.class || class1 == StringBuffer.class || class1 == Boolean.class || class1 == Float.class
// || class1 == Double.class || class1 == Character.class);
}
private void evalPrimitiveField(FieldInfo field, Object object_, StringBuilder stringbuffer, String indentation)
{
if (!CLASSES_IN_ONE_LINE)
{
stringbuffer.Append(indentation).Append(" ");
}
Type fieldType = field.GetType();
typePrinter.print(field.GetType().Name, stringbuffer);
fieldNamePrinter.print(field.Name, stringbuffer);
if (field.GetValue(object_) == null)
{
stringbuffer.Append("null");
return;
}
/* if (fieldType == Boolean.class || fieldType == boolean.class) {
stringbuffer.Append(field.getBoolean(object));
} else if (fieldType == Integer.class || fieldType == int.class) {
stringbuffer.Append(field.getInt(object));
} else if (fieldType == Short.class || fieldType == short.class) {
stringbuffer.Append(field.getShort(object));
} else if (fieldType == Byte.class || fieldType == byte.class) {
stringbuffer.Append(field.getByte(object));
} else if (fieldType == Long.class || fieldType == long.class) {
stringbuffer.Append(field.getLong(object));
} else if (fieldType == Character.class || fieldType == char.class) {
stringbuffer.Append(field.getChar(object));
} else if (fieldType == Double.class || fieldType == double.class) {
stringbuffer.Append(field.getDouble(object));
} else if (fieldType == Float.class || fieldType == float.class) {
stringbuffer.Append(field.getFloat(object));
}*/
}
private void evalStructuredField(FieldInfo field, Object object_, StringBuilder stringBuffer)
{
String indentation = " ";
if (object_ == null)
{
stringBuffer.Append("null");
return;
}
FieldInfo[] fields = object_.GetType().GetFields();
// alle Felder auflisten
for (int i = 0; i < fields.Length; i++)
{
// if ((fields[i].getModifiers() & Modifier.PRIVATE) == Modifier.PRIVATE || (fields[i].getModifiers() & Modifier.PROTECTED) == Modifier.PROTECTED)
// {
// fields[i].setAccessible(true);
// }
if (isPrimitiveClass(fields[i].GetType()))
{
evalPrimitiveField(fields[i], object_, stringBuffer, indentation);
}
else if (fields[i].GetType().IsArray)
{
evalArray(fields[i], object_, stringBuffer);
}
else if (fields[i].GetType().Equals(typeof(String)) || fields[i].GetType().Equals(
typeof(StringBuilder)))
{
printString(object_, fields[i], stringBuffer);
}
// else
// {
// evalStructuredField(fields[i], object, stringBuffer);
// }
}
}
private void evalArray(FieldInfo field, Object object_, StringBuilder stringBuffer)
{
if (object_ == null)
{
stringBuffer.Append("null");
return;
}
String fieldName = field.Name;
try
{
Object simpleObject = field.GetValue(object_);
Type classOfObject = simpleObject.GetType();
/* if (classOfObject == long[].class) {
arrayPrinter.print(fieldName, (long[]) simpleObject, stringBuffer);
} else if (classOfObject == int[].class) {
arrayPrinter.print(fieldName, (int[]) simpleObject, stringBuffer);
} else if (classOfObject == short[].class) {
arrayPrinter.print(fieldName, (short[]) simpleObject, stringBuffer);
} else if (classOfObject == byte[].class) {
arrayPrinter.print(fieldName, (byte[]) simpleObject, stringBuffer);
} else if (classOfObject == float[].class) {
arrayPrinter.print(fieldName, (float[]) simpleObject, stringBuffer);
} else if (classOfObject == double[].class) {
arrayPrinter.print(fieldName, (double[]) simpleObject, stringBuffer);
} else if (classOfObject == boolean[].class) {
arrayPrinter.print(fieldName, (boolean[]) simpleObject, stringBuffer);
} else if (classOfObject == char[].class) {
arrayPrinter.print(fieldName, (char[]) simpleObject, stringBuffer);
} else {
*/ // ganz allgemein ein Array einer Klasse die von java.lang.Object erbt
Object[] data = (Object[])simpleObject;
evalArray(data, fieldName, stringBuffer);
//}
}
catch (Exception )
{
stringBuffer.Append("failed to evaluate data for field ").Append(fieldName);
}
}
}
}

View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MesTools.ImsApi
{
public class TypePrinter
{
public static bool INCLUDE_TYPE_INFO = false;
public void print(String typeName, StringBuilder stringBuffer)
{
if (typeName == null)
{
return;
}
if (INCLUDE_TYPE_INFO)
{
stringBuffer.Append("(").Append(typeName).Append(")");
}
}
public String getSimpleTypeName(Type class1)
{
/* if (class1 == Integer.class)
{
return "Integer";
}
else if (class1 == int.class)
{
return "int";
}
else if (class1 == Long.class)
{
return "Long";
}
else if (class1 == long.class)
{
return "long";
}
else if (class1 == double.class)
{
return "double";
}
else if (class1 == Double.class)
{
return "Double";
}
else if (class1 == float.class)
{
return "float";
}
else if (class1 == Float.class)
{
return "Float";
}
else if (class1 == Boolean.class)
{
return "Boolean";
}
else if (class1 == boolean.class)
{
return "boolean";
}
else if (class1 == char.class)
{
return "char";
}
else if (class1 == Character.class)
{
return "Character";
}
else if (class1 == short.class)
{
return "short";
}
else if (class1 == Short.class)
{
return "Short";
}
else if (class1 == byte.class)
{
return "byte";
}
else if (class1 == Byte.class)
{
return "Byte";
}*/
return class1.Name;
}
}
}