Beispiel Java-Benutzeroberfläche
Dieser Abschnitt enthält die folgenden Informationen:
*
*
*
Benutzeroberfläche - IdValidate
package com.unicacorp.uap.common.template;
import java.util.HashMap;
/**
Das ist eine Benutzeroberfläche, die vom Benutzer eines
Marketing Operations-Systems zur Prüfung der vom System generierten ID-Werte
gemäß dem Geschäftsablauf implementiert wird.
Implementierungen dieser Benutzeroberfläche werden vom Marketing Operations-Server aufgerufen.
*/
public interface IdValidate
{
/**
Gibt "true" zurück, wenn die angegebenen Attributtype gültig sind.
*
* @param id - aktuelle Projekt- oder Programm-ID. Das ist der Wert, wenn es ein neues Projekt/Programm ist.
* @param values - Das ist eine Gruppe von Name/Wert-Paaren mit Bezug auf eine aktuelle Datenbankverbindung, die entsprechende
Vorlagen-ID und eine weitere Hashzuordnung, die Name/Wert-Paare beinhaltet, die den Feldern und Werten auf dem Bildschirm entsprechen.
* @return true - wenn er gültig ist; ansonsten wird "false" zurückgegeben oder eine Ausnahme ausgelöst.
* @throws com.unicacorp.uap.user.IdValidateException
* Muss einen Nachrichtenwert enthalten, der Informationen zu
möglichen Fehlern liefert.
*/
public boolean isValid(int id, HashMap values) throws
IdValidateException;
/**
Der Name des Hashschlüssels in der Hashzuordnung wird an IdValidate.isValid(..) übermittelt,
das auf eine aktuelle Datenbankverbindung zu den
Marketing Operations
Systemtabellen verweist.
Diese Verbindung ist für die Verwendung bei Implementierungen dieser Benutzeroberfläche verfügbar.
*/
public final String PLAN_DB_CONNECTION = "dbconnection";
/**
* Der Name des Hashschlüssels in der Hashzuordnung, der an idValidate.isValid(..) übergeben wird, das sich auf die ID der zugehörigen
Vorlage bezieht.
*/
public final String OBJECT_TEMPLATE_ID = "templateid";
/**
* Der Name des Hashschlüssels in der Hashzuordnung wird an
* IdValidate.isValid(..) übergeben, das sich auf eine weitere Hashzuordnung bezieht, * die Name/Wert-Paare enthält. Der Name entspricht einem Feld in * der Ansicht für das Projekt/Programm und der Wert entspricht dem * vom Benutzer eingegebenen Text bzw. Option.
*/
public final String OBJECT_ATTRIB_VALUES = "attributeValues";
}
Benutzeroberfläche - IDGenerate
package com.unicaorp.uap.common.template;
import java.util.HashMap;
/* Dies ist eine Benutzeroberfläche, die vom Endbenutzer
* eines
Marketing Operations
* Systems zur Erstellung eines eindeutigen Projektcodes (PIDs) implementiert werden muss. Damit soll es * Benutzern ermöglicht werden, eine Verbindung zu bestehenden Unternehmenssystemen herzustellen und Ihre * Projekt-IDs somit in Ihrem Unternehmen aussagekräftig zu machen.
*
* Implementierungen dieser Benutzeroberfläche werden als Marketing Operations-Server bezeichnet.
* Der Marketing Operations-Server ist dafür zuständig,
* sicherzustellen, dass * nicht mehrere IDs gleichzeitig erstellt werden. Wenn die Implementierung dieser * Benutzeroberfläche aufgerufen wird, können sie voraussetzen, dass es keine anderen IDs gibt, die
* simultan erstellt werden.
*/
public interface IdGenerate {
/**
* Gibt einen Zeichencode zurück, der für die Definition eines Projektobjekts mit
Marketing Operations verwendet wird.
*
* @param uniqueId - Dies ist ein Ganzzahlwert, der vom
* Marketing Operations-System erstellt wird. Dadurch wird sichergestellt, dass * er im System eindeutig ist; wenn als die zurückgegebene Projekt-ID * die Zeichendarstellung dieser Ganzzahl ist, wird sie ein eindeutiger
* Projektcode (PID) sein.
*
* @param values - Das ist eine Gruppe von Name/Wert-Paaren, die auf die * Datenbankverbindung, zutreffende Vorlagen-ID, Codepräfix,
* Anforderungsmarkierung und eine weitere Hashzuordnung verweist, die Name/Wert-Paare
* enthält, die den Feldern und Werten auf der Ansicht entsprechen.
*
* @param uniqueChecker - Eine Implementierung, die für die Prüfung der Eindeutigkeit
* der IDs verwendet wird, die von dieser Instanz erstellt werden.
*
* @return - Eine Zeichenfolge, die die ID des Projekts repräsentiert, das wir
erstellen.
*
* @throws com.unicacorp.uap.user.IdGenerateException
* Sollte einen Nachrichtenwert enthalten, der aussagekräftige Informationen * darüber enthält, was schief gelaufen ist.
*/
public String generateID (int uniqueId, HashMap values, IdUniqueChecker
uniqueChecker)
throws IdGenerateException;
/**
* Der Name des Hashschlüssels in der Hashzuordnung, der an IdValidate.isValid(..)
* übergeben wird, der auf eine aktuelle Datenbankverbindung mit den
Marketing Operations-
* Systemtabellen verweist.
* Diese Verbindung steht für die Verwendung bei Implementierungen dieser Benutzeroberfläche zur Verfügung.
*/
public final String PLAN_DB_CONNECTION = "dbconnection";
/**
* Der Name des Hashschlüssels in der Hashzuordnung, der an IdValidate.isValid(..) übergeben wird,
* die auf die ID der zugehörigen Vorlage verweist.
*/
public final String OBJECT_TEMPLATE_ID = "templateid";
/**
* Der Name des Hashschlüssels in der Hashzuordnung, der an IdValidate.isValid(..) übergeben wird,
* die auf das gewünschte Zeichenpräfix verweist, um die erstellte ID als Präfix hinzuzufügen.
*/
public final String OBJECT_CODE_PREFIX = "pidprefix";
/**
* Der Name des Hashschlüssels in der Hashzuordnung, der an IdValidate.isValid(..) übergeben wird,
* der angibt, ob das aufrufende Objekt eine Anforderung ist.
*/
public final String OBJECT_REQUEST_FLAG = "flagprojectrequest";
/**
* Der Name des Hashschlüssels in der Hashzuordnung wird an IdValidate.isValid(..) übergeben,
* das auf eine andere Hashzuordnung verweist, die Name/Wert-Paare enthält. Der Name * entspricht einem Feld in der Ansicht für das Projekt/Programm und der Wert
* entspricht dem vom Benutzer eingegebenen Text bzw. Option.
*/
public final String OBJECT_ATTRIB_VALUES = "attributeValues";
/**
* Anfangsnummer des Standardstartplancodes */
public final int PLAN_CODE_SUFFIX_START = 1000;
/**
* Anfangsnummer des Standardstartprogrammcodes */
public final int PROGRAM_CODE_SUFFIX_START = 1000;
/**
* Anfangsnummer des Standardstartprojektcodes */
public final int PROJECT_CODE_SUFFIX_START = 1000;
/**
* Anfangsnummer der Standardstartangebotsanfrage */
public final int RFQ_CODE_SUFFIX_START = 1000;}
Benutzerdefinierter ID-Generator
package com.unica.uap.component.helper;
import com.unicacorp.uap.common.db.*;
import com.unicacorp.uap.common.template.*;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Properties;
/**
* Die Klasse CustomComponentPidGenerateImpl.
*/
public class CustomComponentPidGenerateImpl implements IdGenerate,
IdUniqueChecker {
/** Die Untergrenze. */
public static int LOWER_LIMIT = 0;
/** Die Obergrenze. */
public static int UPPER_LIMIT = 0;
static {
Properties attrPro = new Properties();
try {
String planHome = System.getProperty("plan.home");
System.out.println("planHome : " + planHome);
File file = new File(planHome + "/unwar/WEB-INF/IDRange.properties");
FileInputStream fi = new FileInputStream(file);
if (fi != null) {
attrPro.load(fi);
String min = (String) attrPro.get("mktOBJId.min");
String max = (String) attrPro.get("mktOBJId.max");
LOWER_LIMIT = Integer.parseInt(min);
UPPER_LIMIT = Integer.parseInt(max);
System.out.println("Lower Limit :" + LOWER_LIMIT);
System.out.println("Upper Limit :" + UPPER_LIMIT);
} else {
System.out.println("IDRange Property file can not be found");
throw new RuntimeException("IDRange Property file can not be found");
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("IDRange Property file can not be found");
}
}
/**
* The Constructor.
*/
public CustomComponentPidGenerateImpl() {
}
/**
* Generate ID.
*
* @param uniqueChecker the unique checker
* @param values the values
* @param instanceId the instance id
*
* @return the string
*
* @throws IdGenerateException the id generate exception
*/
public synchronized String generateID(int instanceId, HashMap values,
IdUniqueChecker uniqueChecker) throws IdGenerateException {
print("inside 'generateID' method");
print("instanceId : " + instanceId);
print("####################\n" + values + "####################\n");
String prefix = (String) values.get("pidprefix");
print("prefix : " + prefix);
String templateid = (String) values.get("templateid");
print("templateid : " + templateid);
Connection con = (Connection) values.get("dbconnection");
//int nextValue = -1;
boolean isEmptyPrefix = false;
try {
if (StringUtils.isEmpty(prefix)) {
isEmptyPrefix = true;
}
//GET THE CURRENT VALUE OF THE TEMPLATE ID - from CUST_GENIDS table
String sqlString = "SELECT ID_VALUE FROM CUST_GENIDS WHERE ENTITY_NAME = ?";
print("sqlString : " + sqlString);
PreparedStatement ps = null;
ResultSet rs = null;
int cnt = 0;
try {
ps = new UAPSQLPreparedStatement(con, sqlString);
UAPSQLUtils.setupPreparedStatement(ps, 1, templateid, "string");
rs = ps.executeQuery();
if (rs.next()) {
cnt = rs.getInt(1);
}
print("current ID vlaue :" + cnt);
UAPSQLUtils.closeResultSet(rs, ps);
} catch (SQLException ex) {
ex.printStackTrace();
UAPSQLUtils.closeResultSet(rs, ps);
throw new RuntimeException(ex);
} catch (Exception exception) {
exception.printStackTrace();
UAPSQLUtils.closeResultSet(rs, ps);
throw new RuntimeException(exception);
}
if (cnt == 0) {
//insert first new record for the template id into table
cnt = LOWER_LIMIT;
String sqlInsertStr = "INSERT INTO CUST_GENIDS values (?,?)";
print("sqlInsertStr : " + sqlInsertStr);
ps = new UAPSQLPreparedStatement(con, sqlInsertStr);
ps.setString(1, templateid);
ps.setInt(2, cnt);
}

else if ((cnt >= LOWER_LIMIT) && (cnt < UPPER_LIMIT)) {
//increase the counter and update the row for the template id
cnt++;
String sqlUpdateStr =
"UPDATE CUST_GENIDS SET ID_VALUE= ? WHERE ENTITY_NAME = ?";
print("Update : " + sqlUpdateStr);
ps = new UAPSQLPreparedStatement(con, sqlUpdateStr);
ps.setInt(1, cnt);
ps.setString(2, templateid);
} else {
print("Current ID is out of range, ID Range [" + LOWER_LIMIT +
"-" + UPPER_LIMIT + "]");
//throw exception that can not generate id, limit is over
throw new IdGenerateException(
"Current ID is out of range, ID Range [" + LOWER_LIMIT +
"-" + UPPER_LIMIT + "]");
}
//UAPSQLUtils.beginTransaction(con);
ps.execute();
//UAPSQLUtils.endTransaction(con, true);
String pid = (isEmptyPrefix ? "" : prefix) + cnt;
print("return from 'generateID' method with pid : " + pid);
return pid;
} catch (Exception ex) {
ex.printStackTrace();
throw new IdGenerateException(ex);
}
}
/**
* Checks if is unique.
*
* @param values the values
* @param Id the Id
*
* @return true, if is unique
*/
public boolean isUnique(String Id, HashMap values) {
print("inside 'isUnique' method");
//provide actual implementation for uniqueness check
return true;
}
/**
* Print.
*
* @param str the str
*/
private void print(String str) {
System.out.println(str);
}