public class MaxObjectCfg extends Mbo implements MaxObjectCfgRemote
See Configure Package description.
This is a system level object.
The key attribute for this object is ObjectName.
The attributes in this object are the same as in MaxObject
,
plus one additional attribute in MaxObjectCfg, and some non-persistent attributes, which are described below.
Refer to MaxObject
for a description of the common attributes.
Attribute Name | Description |
---|---|
AddRowstamp | Non-persistent attribute; same as MaxTable .
|
AltIxName | Non-persistent attribute; same as MaxTable .
|
AutoSelect | Non-persistent attribute; same as MaxView .
|
Changed | This is used by the configuration process.
On MaxObjectCfg, the values of Changed can be as follows (they are set via
the business object, not directly via the UI).
|
ContentAttribute | Non-persistent attribute; same as MaxTable .
|
EAuditTbname | Non-persistent attribute; same as MaxTable .
|
Imported | Indicates whether the object's entityname pre-existed on the native database.
This is the same as MaxObject , with this important note.
Normally, "imported" is supported only for persistent tables.
However, to support Oracle federated objects, "imported" can be true for a view that
references such an object. In this case, there will be data in maxattributecfg but
no data in maxviewcolumncfg, and the view will be readonly.
|
IsAuditTable | Non-persistent attribute; same as MaxTable .
|
IsLangTable | Non-persistent attribute; same as MaxTable .
|
JoinObject | Non-persistent attribute. When a views joins two tables, "ExtendsObject" represents the primary object (table), and "JoinObject" is the object (table) that it is inner-joined to. |
LangColumnName | Non-persistent attribute; same as MaxTable .
|
LangTableName | Non-persistent attribute; same as MaxTable .
|
RestoreData | Non-persistent attribute; same as MaxTable .
|
StoragePartition | Non-persistent attribute; same as MaxTable .
|
TextSearchEnabled | Non-persistent attribute; same as MaxTable .
|
TrigRoot | Non-persistent attribute; same as MaxTable .
|
UniqueColumnName | Non-persistent attribute; same as MaxTable .
|
ViewChanged | Non-persistent attribute. Will equal "Add", "Change", "Delete", or null, depending on the value of Changed. For display in the UI. |
ViewFrom | Non-persistent attribute; same as MaxView .
|
ViewSelect | Non-persistent attribute; same as MaxView .
|
ViewWhere | Non-persistent attribute; same as MaxView .
|
MaxTableCfg
,
MaxViewCfg
,
MaxAttributeCfg
MULTILANGCOPY, phantomList, phantomQueue
ALLROWS, CHANGEDBY_USER, COUNT_ADDITIONS, COUNT_AFTERSAVE, COUNT_DATABASE, COUNT_DELETED, COUNT_EXISTING, DBCONFIG, DELAYVALIDATION, DELAYVALIDATIONONLY, DISCARDABLE, GOTCOMPLETEWHERE, HIDDEN, NO_RELATEDMBOS_OF_OWNERSCHILDREN_FETCH, NOACCESSCHECK, NOACTION, NOADD, NOCOMMIT, NODELETE, NONE, NOOVERWRITE, NOSAVE, NOSETVALUE, NOUPDATE, NOVALIDATION, NOVALIDATION_AND_NOACTION, NOVALIDATION_AND_NOACTION_ALLOWCROSSOVER, READONLY, REBUILD, REQUIRED, SAMEVALUEVALIDATION, SETBYPARENT, USER
Constructor and Description |
---|
MaxObjectCfg(MboSet ms)
Construct the MaxObjectCfg object
|
Modifier and Type | Method and Description |
---|---|
void |
add()
Add a mbo, defaulting the attributes shown below.
|
void |
adjustViews(MboRemote attr)
If this is a table, and there are views that join to it, and we're adding or removing a
persistent attribute from the table, adjust the view(s) accordingly.
|
void |
appValidate()
Application validation routine.
|
void |
canDelete()
Table must be userdefined and not already marked for deletion.
|
void |
canNumTax(MboRemote object) |
void |
canUndelete()
To undelete, table must be marked for deletion via the "changed" attribute.
|
void |
checkIndexTotalLength(MboSetRemote cols)
If the total length of the columns in any one index exceeds the maximum allowed
for this db platform, throw error "configure" "ColLengthIndexTotal".
|
void |
clearNonEssentialRelatedSets()
This is called from ConfigurBean so that when an error is encountered on save,
the non-essential related sets are cleared out.
|
boolean |
createExtensionTable()
Create Extension Table for an object
|
void |
delete(long accessModifier)
Set the value of "changed" on maxattributecfg, maxsysindexes, and maxsyskeys
to indicate deletion.
|
void |
fireEvent(java.lang.String type)
Clean up related sets after commit.
|
int |
getCurrentNumberOfTaxes()
Return the number of taxes in the system
|
java.util.HashMap<java.lang.String,java.lang.String> |
getIndexMetaForColumn(java.lang.String columnname)
Find any index metadata that contains the specified column.
|
MboRemote |
getMaxTable(boolean getCfg)
Get the Mbo for MaxTable or MaxTableCfg.
|
MboRemote |
getMaxView(boolean getCfg)
Get the Mbo for MaxView or MaxViewCfg.
|
boolean |
getMeaFlag()
Indicates whether we are in the process of creating a MEA object.
|
MboRemote |
getSameAsParentObject(java.lang.String objectname)
Get the Mbo for MaxObjectCfg that is the sameas parent for one of this object's attributes.
|
void |
init()
Inititialize
util to the set's value. |
boolean |
isModified()
Has the data in the object been changed?
An object is modified if one or more of its attributes have been changed.
|
boolean |
isTextSearchEnabled()
Identify whether text search is enabled.
|
void |
loadCreateTable()
When defining a new table, load MaxAttributeCfg set.
|
void |
loadCreateView()
Populate maxattributecfg and maxviewcolumncfg with attributes from ExtendsObject and JoinObject.
|
void |
resetNewNumberOfTaxes(int currNumberOfTaxes)
Reset new number of taxes to currentnumber of taxes
|
void |
setChanged()
If value of "changed" is not "R", reevaluate it and set new value.
|
void |
setCurrentNumberOfTaxes(int currNumberOfTaxes)
Set current number of taxes in the system NUMBEROFTAXCODES0
|
void |
setLoadDefaultAttributes(boolean value)
Modify
loadDefaultAttributes . |
void |
setMeaFlag(boolean value)
Called from MEA to indicate a MEA object.
|
void |
setNewNumberOfTaxes(int currNumberOfTaxes)
Set new number of taxes in the system NUMBEROFTAXTEMP
|
void |
setQuickUpdate(boolean value) |
void |
setTaxAttributes(int numOfTax) |
void |
setTaxData()
Set taxtype extra rows
|
void |
setupTableOrView(java.lang.String attributename)
Use when setting value on MaxObjectCfg for objectname, isview, or entityname.
|
void |
setViewWhere()
Evaluate attributes on ExtendsObject and JoinObject and try to
default a value for ViewWhere.
|
boolean |
tableIsEmpty(java.lang.String tbname)
Identify whether the table contains any data.
|
boolean |
toBeSaved()
Check whether any of the non-persistent attributes have been modified.
|
void |
undelete()
Set the value of "changed" to indicate undeletion for maxattributecfg, maxsyskeys,
and maxsysindexes.
|
addMboSetForRequiredCheck, addToDeleteForInsertList, andEvaluateConditions, blindCopy, checkFieldAccess, checkMethodAccess, checkMethodAccess, checkQualifiedRestriction, checkSiteOrgAccessForSave, clear, copy, copy, copy, copyFake, copyValue, copyValue, createComm, delete, determineRequiredFieldsFromERM, duplicate, enableMethod, evaluateCondition, evaluateCondition, evaluateCtrlConditions, evaluateCtrlConditions, evaluateRestriction, excludeObjectForPropagate, findAllNullRequiredFields, generateAutoKey, generateContentUID, getAlwaysFlags, getAttrRestrictionFlag, getAttrRestrictions, getBoolean, getByte, getBytes, getCheckpoint, getClientLocale, getClientTimeZone, getCommLogOwnerNameAndUniqueId, getCondition, getDatabaseValue, getDate, getDeleteForInsertList, getDocLinksCount, getDomainFilterWhere, getDomainIDs, getDouble, getESId, getExistingMboSet, getFetchIndex, getFieldExceptions, getFlags, getFloat, getIgnoreLockCheck, getInitialValue, getInsertCompanySetId, getInsertItemSetId, getInsertOrganization, getInsertOrgForSite, getInsertSite, getInstanciatedMboSet, getInstanciatedMboValue, getInt, getIntegrationService, getKeyValue, getLanguageRecordRowStamp, getLinesRelationship, getList, getLockedByDisplayName, getLockedByUserID, getLong, getMatchingAttr, getMatchingAttr, getMatchingAttrs, getMaxMessage, getMboCtx, getMboData, getMboDataSet, getMboForAttribute, getMboForAttributeStatic, getMboInitialValue, getMboList, getMboLogger, getMboRecordData, getMboServer, getMboSet, getMboSet, getMboSet, getMboSetInfo, getMboValue, getMboValueData, getMboValueData, getMboValueData, getMboValueDataForDownload, getMboValueInfoStatic, getMboValueInfoStatic, getMessage, getMessage, getMessage, getMessage, getMXTransaction, getName, getOrgForGL, getOrgSiteForMaxvar, getOwner, getProfile, getPropagateKeyFlag, getProxy, getRecordIdentifer, getRecordMboName, getRelatedWhere, getRelatedWhere, getRelationshipNameToLangTable, getResourceName, getRowRestrictionFlag, getRowStamp, getRowStampObject, getSecurityLogger, getSiteOrg, getSqlLogger, getString, getString, getStringInBaseLanguage, getStringInSpecificLocale, getStringTransparent, getSynonymValueWhere, getTenantId, getThisMboSet, getTranslator, getUniqueIdentifer, getUniqueIDName, getUniqueIDValue, getUniqueLanguageIDRecord, getUserInfo, getUserName, getValidateOrder, hasFieldAccess, hasHierarchyLink, hasLockSaveRights, hasRelatedQbe, hasUniqueID, initFieldFlagsOnMbo, initRelationship, isApiBatchError, isAutoKeyed, isBasedOn, isChangeByUserWhenSetFromLookup, isEAuditFieldModified, isESigFieldModified, isFlagSet, isForDM, isLocked, isLocked, isLockedByMe, isMasterTenant, isMboLockedByMe, isModified, isNew, isNoSql, isNull, isOptionGranted, isSelected, isSkipCopyField, isValid, isZombie, lock, modify, moveFieldFlagsToMboValue, needCallInitFieldFlag, orEvaluateConditions, propagateKeyValue, removeCtx, removeRelatedSet, resolveNoSqlWhere, rollbackToCheckpoint, select, setAppDefaultValue, setApplicationError, setApplicationRequired, setAutokeyFields, setCopyDefaults, setDefaultValue, setDefaultValues, setDeleted, setEAuditFieldModified, setESId, setESigFieldModified, setFetchIndex, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlags, setFlag, setFlag, setFlags, setForDM, setHierarchyLink, setIgnoreRecordLockCheck, setLangCodeDefault, setMboCtx, setMLValue, setModified, setModifiedForIntegrationOnly, setNewMbo, setNoSql, setPropagateKeyFlag, setPropagateKeyFlag, setProxy, setReadonlyWhenParentIsReadonly, setReferencedMbo, setReferencedMbo, setResolveNoSqlWhere, setResourceName, setUniqueIDValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValueFromSequence, setValueNull, setValueNull, sigopGranted, sigopGranted, sigopGranted, sigOptionAccessAuthorized, smartFill, smartFind, smartFind, smartFindByObjectName, smartFindByObjectName, smartFindByObjectNameDirect, startCheckpoint, thisToBeUpdated, toBeAdded, toBeDeleted, toBeUpdated, toBeValidated, unlock, unselect, useDataSecurity, validate, validateAttributes, validateKeyUniqueness, valueChanged
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
addMboSetForRequiredCheck, addToDeleteForInsertList, blindCopy, checkMethodAccess, clear, copy, copy, copy, copyFake, copyValue, copyValue, createComm, delete, duplicate, evaluateCondition, evaluateCtrlConditions, evaluateCtrlConditions, excludeObjectForPropagate, generateAutoKey, getBoolean, getByte, getBytes, getCommLogOwnerNameAndUniqueId, getDatabaseValue, getDate, getDeleteForInsertList, getDocLinksCount, getDomainIDs, getDouble, getExistingMboSet, getFlags, getFloat, getIgnoreLockCheck, getInitialValue, getInsertCompanySetId, getInsertItemSetId, getInsertOrganization, getInsertSite, getInt, getKeyValue, getLinesRelationship, getList, getLockedByDisplayName, getLong, getMatchingAttr, getMatchingAttr, getMatchingAttrs, getMaxMessage, getMboData, getMboDataSet, getMboInitialValue, getMboList, getMboSet, getMboSet, getMboSet, getMboValueData, getMboValueData, getMboValueData, getMboValueDataForDownload, getMboValueInfoStatic, getMboValueInfoStatic, getMessage, getMessage, getMessage, getMessage, getMXTransaction, getName, getOrgForGL, getOrgSiteForMaxvar, getOwner, getPropagateKeyFlag, getRecordIdentifer, getSiteOrg, getString, getString, getStringInBaseLanguage, getStringInSpecificLocale, getStringTransparent, getThisMboSet, getUniqueIDName, getUniqueIDValue, getUserInfo, getUserName, hasHierarchyLink, hasLockSaveRights, isAutoKeyed, isBasedOn, isFlagSet, isForDM, isLocked, isLocked, isMasterTenant, isMboLockedByMe, isModified, isNew, isNull, isOptionGranted, isSelected, isZombie, lock, propagateKeyValue, rollbackToCheckpoint, select, setApplicationError, setApplicationRequired, setAutokeyFields, setCopyDefaults, setDeleted, setESigFieldModified, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlag, setFieldFlags, setFlag, setFlag, setFlags, setForDM, setIgnoreRecordLockCheck, setMLValue, setModified, setNewMbo, setPropagateKeyFlag, setPropagateKeyFlag, setReferencedMbo, setReferencedMbo, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValue, setValueNull, setValueNull, sigopGranted, sigopGranted, sigopGranted, sigOptionAccessAuthorized, smartFill, smartFind, smartFind, smartFindByObjectName, smartFindByObjectName, smartFindByObjectNameDirect, startCheckpoint, thisToBeUpdated, toBeAdded, toBeDeleted, toBeUpdated, toBeValidated, unlock, unselect, validate, validateAttributes
public MaxObjectCfg(MboSet ms) throws java.rmi.RemoteException
java.rmi.RemoteException
public void init() throws MXException
util
to the set's value.
If this is an EAudit or System table, set mbo to readonly.init
in class Mbo
MXException
getMaxView(boolean)
,
getMaxTable(boolean)
public void add() throws MXException, java.rmi.RemoteException
Attribute Name | Attribute Value |
---|---|
AddRowStamp | True |
AutoSelect | True |
Changed | I |
ClassName | psdi.mbo.custapp.CustomMboSet
|
EAuditEnabled | False |
Imported | False |
IsAuditTable | False |
IsLangTable | False |
Internal | False |
IsView | False |
MainObject | False |
Persistent | True |
RestoreData | False |
ServiceName | CUSTAPP |
SiteOrgType | SYSTEM |
StoragePartition | Value from
getDefaultStoragePartition
|
TextSearchEnabled | False |
UserDefined | True |
ViewChanged | value of MaxObjectCfgSet
ADD
|
add
in interface MboRemote
add
in class Mbo
MXException
java.rmi.RemoteException
public boolean toBeSaved() throws java.rmi.RemoteException
public boolean isModified()
Mbo
isModified
in interface MboRemote
isModified
in class Mbo
Mbo.isModified()
public void setQuickUpdate(boolean value)
public void clearNonEssentialRelatedSets() throws MXException, java.rmi.RemoteException
clearNonEssentialRelatedSets
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
clearNonEssentialRelatedSets()
public void appValidate() throws MXException, java.rmi.RemoteException
appValidate
in class Mbo
MXException
java.rmi.RemoteException
MaxAttributeCfgSet.addLanguageColumn(java.lang.String)
,
loadCreateView()
,
loadCreateTable()
,
updateEAuditMeta()
,
updateLangMeta()
,
MaxAttributeCfg.appValidate()
,
MaxAttributeCfgSet.resetForObjectValidation()
,
setChanged()
public void canDelete() throws MXException, java.rmi.RemoteException
delete
.canDelete
in class Mbo
MXException
java.rmi.RemoteException
public void delete(long accessModifier) throws MXException, java.rmi.RemoteException
However, if the accessModifier equals DBCONFIG then super is called. The DBCONFIG flag is used only internally from MaxTablesCfg, never from the UI framework.
delete
in interface MboRemote
delete
in class Mbo
accessModifier
- See Mbo delete
.MXException
java.rmi.RemoteException
Mbo.delete(long)
public void canUndelete() throws MXException, java.rmi.RemoteException
undelete
.MXException
java.rmi.RemoteException
public void undelete() throws MXException, java.rmi.RemoteException
undelete
in interface MboRemote
undelete
in class Mbo
MXException
java.rmi.RemoteException
MaxSysIndexes.nativeIndexExists()
,
MaxAttributeCfg.setChanged()
,
setChanged()
public void setChanged() throws MXException, java.rmi.RemoteException
setChanged
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
getHashMaps()
,
Util.reEvaluateObjectChanged(java.util.HashMap, java.util.HashMap, boolean, java.lang.String)
public MboRemote getMaxTable(boolean getCfg) throws MXException, java.rmi.RemoteException
getMaxTable
in interface MaxObjectCfgRemote
getCfg
- True to get MaxTableCfg; false to get MaxTableMXException
java.rmi.RemoteException
getMaxTable(boolean)
public MboRemote getMaxView(boolean getCfg) throws MXException, java.rmi.RemoteException
getMaxView
in interface MaxObjectCfgRemote
getCfg
- True to get MaxViewCfg; false to get MaxViewMXException
java.rmi.RemoteException
getMaxView(boolean)
public MboRemote getSameAsParentObject(java.lang.String objectname) throws MXException, java.rmi.RemoteException
objectname
- MXException
java.rmi.RemoteException
public boolean tableIsEmpty(java.lang.String tbname) throws MXException, java.rmi.RemoteException
tableIsEmpty
in interface MaxObjectCfgRemote
tbname
- MXException
java.rmi.RemoteException
Util.nativeTableExists(java.lang.String)
,
Util.tableIsEmpty(java.lang.String)
public java.util.HashMap<java.lang.String,java.lang.String> getIndexMetaForColumn(java.lang.String columnname) throws MXException, java.rmi.RemoteException
getIndexMetaForColumn
in interface MaxObjectCfgRemote
columnname
- The column name on this table for which we are looking for indexes.MXException
java.rmi.RemoteException
getIndexMetaForColumn(java.lang.String)
public void checkIndexTotalLength(MboSetRemote cols) throws MXException, java.rmi.RemoteException
checkIndexTotalLength
in interface MaxObjectCfgRemote
cols
- Set of MaxAttributeCfg. If null, this method will get the set.MXException
java.rmi.RemoteException
ConfigureService.getMaxLengthIndex()
public boolean isTextSearchEnabled() throws MXException, java.rmi.RemoteException
isTextSearchEnabled
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
isTextSearchEnabled()
public void setLoadDefaultAttributes(boolean value)
loadDefaultAttributes
.setLoadDefaultAttributes
in interface MaxObjectCfgRemote
value
- New value for loadDefaultAttributes.setLoadDefaultAttributes(boolean)
public void loadCreateTable() throws MXException, java.rmi.RemoteException
loadCreateTable
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
MaxAttributeCfgSet.loadCreateTable(java.lang.String)
,
setTableValues(psdi.mbo.MboRemote)
,
loadDefaultAttributes
public void loadCreateView() throws MXException, java.rmi.RemoteException
setBypassSameasPush
to True,
and does not process SameAs checks.)loadCreateView
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
MaxAttributeCfgSet.setBypassSameasPush(boolean)
,
setViewValues(psdi.mbo.MboRemote)
,
ConfigureService.getJoinAttributes(psdi.mbo.MboRemote, psdi.mbo.MboSetRemote, psdi.mbo.MboRemote, psdi.mbo.MboSetRemote)
,
ConfigureService.getAllCommonAttributes(psdi.mbo.MboSetRemote, psdi.mbo.MboSetRemote)
public void setupTableOrView(java.lang.String attributename) throws MXException, java.rmi.RemoteException
setupTableOrView
in interface MaxObjectCfgRemote
attributename
- The name of the attribute being changed.MXException
java.rmi.RemoteException
setupTableOrView(java.lang.String)
public void setViewWhere() throws MXException, java.rmi.RemoteException
joinAttrs
.setViewWhere
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
Util.getTableName(java.lang.String)
,
ConfigureService.getJoinAttributes(psdi.mbo.MboRemote, psdi.mbo.MboSetRemote, psdi.mbo.MboRemote, psdi.mbo.MboSetRemote)
public void adjustViews(MboRemote attr) throws MXException, java.rmi.RemoteException
MaxAttributeCfg appValidate
.attr
- MaxAttributeCfg mbo owned by this object (the table).MXException
java.rmi.RemoteException
public void setMeaFlag(boolean value) throws java.rmi.RemoteException
setMeaFlag
in interface MaxObjectCfgRemote
value
- java.rmi.RemoteException
meaFlag
public boolean getMeaFlag() throws java.rmi.RemoteException
getMeaFlag
in interface MaxObjectCfgRemote
java.rmi.RemoteException
getMeaFlag()
public void fireEvent(java.lang.String type) throws MXException, java.rmi.RemoteException
fireEvent
in class Mbo
MXException
java.rmi.RemoteException
Mbo.clearRelatedSets(java.util.HashSet)
public void canNumTax(MboRemote object) throws java.rmi.RemoteException, MXException
canNumTax
in interface MaxObjectCfgRemote
java.rmi.RemoteException
MXException
canNumTax(psdi.mbo.MboRemote)
public void setTaxAttributes(int numOfTax) throws java.rmi.RemoteException, MXException
setTaxAttributes
in interface MaxObjectCfgRemote
java.rmi.RemoteException
MXException
setTaxAttributes(int)
public int getCurrentNumberOfTaxes() throws java.rmi.RemoteException, MXException
getCurrentNumberOfTaxes
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
getCurrentNumberOfTaxes()
public void setCurrentNumberOfTaxes(int currNumberOfTaxes) throws java.rmi.RemoteException, MXException
setCurrentNumberOfTaxes
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
setCurrentNumberOfTaxes(int)
public void setNewNumberOfTaxes(int currNumberOfTaxes) throws java.rmi.RemoteException, MXException
setNewNumberOfTaxes
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
setCurrentNumberOfTaxes(int)
public void resetNewNumberOfTaxes(int currNumberOfTaxes) throws java.rmi.RemoteException, MXException
resetNewNumberOfTaxes
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
setCurrentNumberOfTaxes(int)
public void setTaxData() throws java.rmi.RemoteException, MXException, java.lang.Exception
setTaxData
in interface MaxObjectCfgRemote
MXException
java.lang.Exception
java.rmi.RemoteException
setTaxData()
public boolean createExtensionTable() throws MXException, java.rmi.RemoteException
createExtensionTable
in interface MaxObjectCfgRemote
MXException
java.rmi.RemoteException
createExtensionTable()