#8121
ctaleck
Participant

I created my own class to handle adding custom fields to a draft message using the Novell Object API. I hope the following code is of some assistance to you.

quote:


‘ Custom Fields
Set myFields = New CCustomFields
If myFields.AttachToMsg(DraftMsg) Then
Call myFields.SetFieldValue(FIELD_ACCOUNT, NewMsgDlg.eAccount.Text, fgwString)
Call myFields.SetFieldValue(FIELD_PROJDESC, NewMsgDlg.eProjectDesc.Text, fgwString)
End If


Here is the full code of how I send a message with custom fields:

'-------------------------------------------------------------------------------
' Send the message
'-------------------------------------------------------------------------------
Function SendMessage(ByVal RecipientEmail, ByVal CCEmail, ByVal BCEmail, ByVal Subject, ByVal BodyText, ByVal AttachList)
  Dim i, DraftMsg, SentMsg, myFields
  SendMessage = ""
  ' Use the Object API to create a new draft email message
  Set DraftMsg = GroupWise.Account.Mailbox.Messages.Add("GW.MESSAGE.MAIL", fgwDraft)
  ' Subject and Body
  DraftMsg.Subject = Subject
  DraftMsg.BodyText.PlainText = BodyText
  ' Recepient Field
  If RecipientEmail.Count > 0 Then
    For i = 0 To RecipientEmail.Count - 1
      Call DraftMsg.Recipients.Add(RecipientEmail.EmailAddress(i), "NGW", fgwTo)
    Next
  End If
  ' CC Field
  If CCEmail.Count > 0 Then
    For i = 0 To CCEmail.Count - 1
      Call DraftMsg.Recipients.Add(CCEmail.EmailAddress(i), "NGW", fgwCC)
    Next
  End If
  ' BC Field
  If BCEmail.Count > 0 Then
    For i = 0 To BCEmail.Count - 1
      Call DraftMsg.Recipients.Add(BCEmail.EmailAddress(i), "NGW", fgwBC)
    Next
  End If
  ' Attachments
  Dim sFilename
  For i = 0 to AttachList.Items.Count - 1
    sFilename = Toolbox.NormalizeFilePathLoc(AttachList.Items(i).SubItems(0))
    Utilities.Trace "Attach sFilename " & sFilename
    DraftMsg.Attachments.Add(sFilename)
  Next
  ' Custom Fields
   Set myFields = New CCustomFields
  If myFields.AttachToMsg(DraftMsg) Then
    Call myFields.SetFieldValue(FIELD_ACCOUNT, NewMsgDlg.eAccount.Text, fgwString)
    Call myFields.SetFieldValue(FIELD_PROJDESC, NewMsgDlg.eProjectDesc.Text, fgwString)
  End If
  ' Send the message and return the message ID
  Set SentMsg = DraftMsg.Send
  If not SentMsg is nothing then
    Utilities.Trace "SentMsg.MessageID=" & SentMsg.MessageID
    SendMessage = SentMsg.MessageID
    Set SentMsg = Nothing
  End If
  Set DraftMsg = Nothing
  Set myFields = Nothing
End Function

And here is my class to handle custom fields:

'-------------------------------------------------------------------------------
'
' CCustomFields Class
'
' Methods:
'   AttachToMsg(Msg) - Attach to the current message.  Return a boolean indicating success
'   SetFieldValue(TheName, TheValue, TheType) - Store TheValue in TheName field
'   GetFieldValue(TheName, TheType) - Return the value currently stored in the custom field of TheName
'
' Use:
'   Dim iFields
'   Set iFields = New CCustomFields
'   iFields.AttachToMsg(Msg)
'   MsgBox (iFields.GetFieldValue(FIELD_NAME,1)
'   Call iFields.SetFieldValue(FIELD_NAME,Value,1)
'
' TheType is of eFieldType
'   fgwString   1   String
'   fgwNumeric  2   Numeric (32 bits)
'   fgwDate     3   Date
'   fgwBinary   4   Binary
'   fgwReserved 5   Reserved
'
'
' This class contains methods designed to make access to GroupWise message
' custom fields simpler.  Use the AttachToMsg to connect to the message we
' want to write to/read from, then use the SetFieldValue()/GetFieldValue()
' methods to read/write the data
'
'-------------------------------------------------------------------------------
class CCustomFields

  Private iMsg

  Private Sub class_terminate
    set iMsg = nothing
  End sub

  Public Function AttachToMsg(ByRef Msg)
    If Toolbox.SkipErrors Then On Error Resume Next
    AttachToMsg = false
    set iMsg = Msg
    if iMsg is Nothing then
      exit function
    else
      AttachToMsg = true
    end if
    Toolbox.OnErrorCheckUp("AttachToMsg")
  end function

  Public Sub SetFieldValue(ByVal TheName, ByVal TheValue, ByVal TheType)
    If Toolbox.SkipErrors Then On Error Resume Next
    If Len(TheName) = 0 Then Exit Sub
    If Not FieldExists(TheName, TheType) Then
      Call GroupWise.Account.FieldDefinitions.Add(TheName, TheType)
    End If
    Call iMsg.Fields.Add(TheName, TheType, TheValue)
    Toolbox.OnErrorCheckUp("SetFieldValue")
  End Sub

  Public Function GetFieldValue(TheName, TheType)
    If Toolbox.SkipErrors Then On Error Resume Next
    Dim iField
    If iMsg.Fields.Count > 0 Then
      Set iField = iMsg.Fields.Item(TheName, TheType)
      GetFieldValue = iField.Value
    Else
      GetFieldValue = ""
    End If
    Toolbox.OnErrorCheckUp("GetFieldValue")
  End Function

  Private Function FieldExists(TheName, TheType)
    If Toolbox.SkipErrors Then On Error Resume Next
    Dim FieldObj
    Dim FieldDefs
    Set FieldDefs = GroupWise.Account.FieldDefinitions
    Set FieldObj = FieldDefs.Item(TheName,TheType)
    If IsObject(FieldObj) Then
      FieldExists = TRUE
    Else
      FieldExists = FALSE
    End If
    Toolbox.OnErrorCheckUp("FieldExists")
    Set FieldObj = Nothing
    Set FieldDefs = Nothing
 End function

End Class
'
' End CCustomFields Class
'-------------------------------------------------------------------------------

Please note: You cannot use this class as is, because there are other classes involved that I have not presented.