# EsbOtlAddMember

Description

EsbOtlAddMember() adds a member to the outline and sets the member's attributes.

Syntax

    EsbOtlAddMember (hOutline, pMemberInfo, hParent, hPrevSibling, phMember)

    ByVal hOutline     As Long
          pMemberInfo  As ESB_MBRINFO_T
    ByVal hParent      As Long
    ByVal hPrevSibling As Long
          phMember     As Long

Parameters

hOutline | Outline context handle.
pMemberInfo | Member information structure defining the member and its attributes.
hparent | Handle of parent. This field is used only if the hPrevSibling field is ESB_NULL.
hPrevSibling | Handle of previous sibling.
phMember | Handle of new member returned from the API.

Return Value

Returns 0 if successful; otherwise one of the following:

OTLAPI_BAD_CONSOL
OTLAPI_BAD_MBRNAME
OTLAPI_ERR_ADDNAMEUSED
OTLAPI_ERR_BADSHARE
OTLAPI_ERR_BADSKIP
OTLAPI_ERR_BADSTORAGE
OTLAPI_ERR_BADSTORAGECATEGORY
OTLAPI_ERR_BADTIMEBAL
OTLAPI_ERR_CURTOOMANYDIMS
OTLAPI_ERR_ILLEGALBOOLEAN
OTLAPI_ERR_ILLEGALCURRENCY
OTLAPI_ERR_ILLEGALDATE
OTLAPI_ERR_ILLEGALNUMERIC
OTLAPI_ERR_ILLEGALTAG
OTLAPI_ERR_LEAFLABEL
OTLAPI_ERR_NOSHAREPROTO
OTLAPI_ERR_NOTIMEDIM

Notes

- The ESB_MBRINFO_T structure must be created and filled before calling this function.
- The member name must be unique unless you are creating a shared member.
- Position of the added member:
  - The new member is inserted following the hPrevSibling member.
  - If the hPrevSibling field is ESB_NULL, the new member becomes the first child of the parent specified by hParent.
  - If both hParent and hPrevSibling are ESB_NULL, the new member becomes the first dimension in the outline.
- To add a shared member:
  - The shared member must be a zero-level (leaf node) member. (Shared members cannot have children.)
  - The actual member must already exist in the dimension.
  - Set the usShare field of the ESB_MBRINFO_T structure to ESB_SHARE_SHARE.
- To add a LABEL member:
  - You must first add the member without the label attribute set.
  - Next, add its children.
  - Then, use EsbOtlSetMemberInfo() to set the label tag of the label member. (A label member must have children.)
- To add an attribute member, set the fields of ESB_MBRINFO_T as follows:

  Field | Setting
  usConsolidation | ESB_UCALC_NOOP
  fTwoPass | ESB_FALSE
  fExpense | ESB_FALSE
  usConversion | ESB_CONV_NONE
  usTimeBalance | ESB_TIMEBAL_NONE
  usSkip | ESB_SKIP_NONE
  usShare | ESB_SHARE_DYNCALCNOSTORE
  usStorage | ESB_DIMTYPE_SPARSE
  usCategory | ESB_CAT_ATTRIBUTE
  usStorageCategory | ESB_STORECAT_ATTRIBUTE
  Attribute | The actual Attribute value. For an attribute dimension or zero-level (leaf node) attribute member, set one of the following data types: ESB_ATTRMBRDT_BOOL ESB_ATTRMBRDT_DATETIME ESB_ATTRMBRDT_DOUBLE ESB_ATTRMBRDT_STRING You may instead set a zero-level (leaf node) attribute member to ESB_ATTRMBRDT_AUTO. You may set attribute members that are not zero level to ESB_ATTRMBRDT_NONE or ESB_ATTRMBR_AUTO.

  - Notes on Adding an Attribute Member:
    - Adding a zero-level attribute member that is not of type ESB_ATTRMBRDT_STRING also sets the szMember field of the ESB_MBRINFO_T structure to the attribute member's long name, using the specifications for the outline in the ESB_ATTRSPECS_T structure.
    - You must set usCategory and usStorageCategory for an attribute member, as well as an attribute dimension. (You need not set usCategory and usStorageCategory for a base member. You must set them for a base dimension only.)
    - Do not set the szDimName field of the ESB_MBRINFO_T structure.
    - For a zero-level attribute member that is not of type ESB_ATTRMBRDT_STRING, do not set the Attribute field. The attribute value is derived internally by converting the attribute member long name.
    - If you set an attribute member's data type to ESB_ATTRMBRDT_AUTO, Essbase does the following:
      - Sets the member's data type to the data type of its dimension, if the member name can be converted to a value of that type.
      - If the member name cannot be converted to a value of the dimension's data type, sets the member's data type to ESB_ATTRMBRDT_NONE.
      - For the first child member converted from ESB_ATTRMBRDT_AUTO to a data type other than ESB_ATTRMBRDT_NONE, converts the parent's long name to a short name.
- To add a dimension:
  - To add an attribute dimension, call EsbOtlAddDimension(). Do not call EsbOtlAddMember().
  - To add a dimension that is not an attribute dimension, call either EsbOtlAddDimension() or EsbOtlAddMember().
    - EsbOtlAddDimension() gives you the benefit of selecting any member in the added dimension to be assigned the data values associated with the existing dimensions.
    - If EsbOtlAddMember() is used, the top member (dimension) of the added dimension is assigned the data values associated with the existing dimensions.

Example

    Declare Function EsbOtlAddMember Lib "ESBOTLW"
    (ByVal hOutline As Long, pMemberInfo As ESB_MBRINFO_T,
    ByVal hParent As Long, ByVal hPrevSibling As Long,
    phMember As Long) As Long

    Sub ESB_OtlAddMember()
    Dim sts As Long
    Dim Object As ESB_OBJDEF_T
    Dim hOutline As Long
    Dim MbrInfo As ESB_MBRINFO_T
    Dim hMemberProfit As Long
    Dim hNewMember As Long

    Object.hCtx = hCtx
    Object.Type = ESB_OBJTYPE_OUTLINE
    Object.AppName = "Sample"
    Object.DbName = "Basic"
    Object.FileName = "Basic"

    sts = EsbOtlOpenOutline(hCtx, Object, ESB_YES,
    ESB_YES, hOutline)

    If sts = 0 Then
       sts = EsbOtlFindMember(hOutline,
        "Profit", hMemberProfit)
    End If

    If sts = 0 And hMemberProfit <> 0 Then
       MbrInfo.szMember = "Inventory"
        sts = EsbOtlAddMember(hOutline, MbrInfo,
         ESB_NULL, hMemberProfit, hNewMember)
    End If
    End Sub

See Also

EsbOtlAddDimension()
EsbOtlDeleteMember()
EsbOtlDeleteDimension()
EsbSetMemberInfo()
EsbOtlFindMember()