Forum Replies Created
-
AuthorReplies
-
Yes. Sample code would be nice as I’m not familiar with calling a COM enabled component concept from Formativ.
I’ve test calling applets from Excel using the Formativ API concept, but have not used it in applet yet.
I am using version 2.0. I am familiar with the new forms designer and I’m aware that using the Utilities.NewControlBoxDialog method is “outdated.” However, I would like to be able to create my entire form dynamically and not use the form designer. Is this possible with the new technology?
Got it. A bit of reverse thinking, but I guess it will do the trick. Thank you.
I guess I should clarify the problem.
I’m asking the question exactly because I do have these options checked and yet, the cache was not cleared on one of my users machines.
How do I ensure the old ones are gone with out having to go to each machine and delete the cache directory?
Does the Formativ Control panel settings override the Config object settings in this case? In other words, if a user un-checked the options, would this turn it off for them?
I have confirmed that it does not occur for all users. However, I have not confirmed what Config object is being assigned to those that it does not. I am keeping an eye on it…
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.
Sorry by VB, I was referring to the VB Scripting engine of Formativ as opposed to just looking at the About Formativ dialog.
It would be helpful to have access to this information like you do for other applet information in the Utilities object:
Utilities.UserCacheDirectory
Perhaps something like:
Utilities.UserConfig
Thank you.
Yes, every one of the boxes mentioned is checked and always has been (Are these the defaults?) and I still experienced a problem. I will have to investigate further to see if the problem persists.
Yes, I am aware of the info in the About Formativ dialog.
What I would like to know is how does Formativ determine which group to use when a user is in multiple groups that have different Config objects. Using this information, I will then arrange my groups so that I can pre-determine which applets a user will get.
For example, would groups higher up in the eDir tree take precedence over groups deeper in the tree? Or would it be the other way?
I understand the discovery process for objects, however there is no documentation for the Group Object specifically, which is confusing because a user can be a member of multiple groups.
In other words, if a certain user is a member of two groups (Group A and Group B) and those groups are associated with two different Config Objects: Config Object 1 -> Group A and Config Object 2 -> Group B, then which Config Object will the user be assigned?
Interesting development: The Portal now allows scrolling while a form is open with no changes except a restart of my machine and GroupWise!
I do so much development on my machine (with many crashes of GroupWise from bad code) that I’m thinking I had bad memory which needed to be cleared out.
In the meantime, I also explored the “EmbeddedWB” control which also worked for me.
I also considered your suggestion but opted not to put a control on the report that would “ruin” it visually.
Thanks.
One more thing to clarify…
So even though I am using the “frmMain.Show” instead of “frmMain.ShowModal” it still is acts as modal because all of the Formativ application is modal to the GroupWise application (but not other external applications)?
I am not familiar with the FormativAPI yet. Maybe I need to rethink my solution. Basically, I am trying to create a report (in HTML) which can be previewed first (does not have to be a Portal) and then printed while having a form open.
Are there any other approaches people have used to do this? I am currently researching these controls: “EmbeddedWB,” “HTMLEditorEx” or “OleContainer” to see if they can help. Any insight would be appreciated.
I am unable to get the “Dilbert” or “Web Service Signature” Web Service examples to work on my machine using SoapClient method.
set SoapClient = CreateObject("MSSOAP.SoapClient").
I receive this error:
quote:
Client
C:Documents and SettingsctaleckMy DocumentsAdvansysFormativAppletsTUT333 – Web Service Signature.vbf
WSDLReader:Loading of the WSDL file failed HRESULT=0x80070057 – WSDLReader:XML Parser failed at linenumber 0, lineposition 0, reason is: System error: -2147012867.
HRESULT=0x1 at line 31, column 6
Can anyone tell me how I would check that I have the appropriate files to support this technique?
In the meantime, I have been able to get this Web Service to work using the POST method:
Set httpReq = CreateObject("MSXML2.ServerXMLHTTP") httpReq.Open "POST", webServiceUrl, False httpReq.Send Set myXmlDoc = CreateObject("MSXML.DOMDocument") myXmlDoc.load(httpReq.responseBody)
Thank you.
Can this be changed to another attribute? We currently use the “See Also” field for what it was intended for and now it is displaying “Development+config” in our see also list. This can be very confusing for our end users!
Please advise.
-
AuthorReplies