Forum Replies Created
-
AuthorReplies
-
It appears the installation is not finding the correct Windows Registry entry to allow the automatic location for the Snapins folder. I will check this with our engineering team. In the meantime, I have posted the ConsoleOne snapin for Formativ 1.0 to our Web site and you can download it from http://www.advansyscorp.com/formativ/1_0/formativ.jar . Copy this file into the ConsoleOne snapins folder on the workstation.
Please let us know if this does not assist in the short term.
Regards,
Advansys Support
Go to the Formativ Download page, http://www.advansyscorp.com/formativ_download.htm , select the Formativ Admin 1.0 radio button product selection, scroll down to Product Description and you will see the link to the Admin Tools software. We also send the link in the automated message about important product information when the product is downloaded
Here is the information:
The Formativ Admin Tools 1.0 includes eDirectory/NDS ConsoleOne and NWAdmin snap-ins and the Formativ eDirectory/NDS schema extender. This software is required to administer Formativ Admin and Client (Runtime) using Novell eDirectory/NDS.
You can download the Admin Tools from the link below.
http://www.advansyscorp.com/download/admintoolssetup.exe
Hope this helps.
Regards,
Advansys Support
At this stage there is no way to run Formativ applets from an external application. However, you could write an applet which is integrated with the GroupWise On Startup event, which would execute each time the GroupWise client starts. You could write the applet solution in such a way that it only executed the Shared Address Book update once per day (i.e. by writing a small text file to indicate that processing was complete for that day etc.).
Another possibility for initiating solutions, which is not likely to be desirable in this case, is to write an applet solution which triggers on the On Message Arrival event and which looks for a message specific subject/sender etc., then, if the message is a match, it executes the function and deletes the ‘trigger’ message. It could even send an email to the user indicating that the update was complete.
There are a couple of disadvantages with the On Message Arrival approach for your requirements. Firstly, you do not know what the user may be doing when the solution is triggered by the incoming trigger message and you don’t want to interfere with the user’s work. Secondly, the GroupWise client must be running for the On Message Arrival event to trigger. Both of these disadvantages can be worked around. For example, when the applet solution triggers on an incoming message, ask the user whether they wish to update now or not. If the user decides not to update, leave the trigger message in the Mailbox and use the GroupWise client On Startup event start the same applet and get it look for any remaining trigger messages. If found, perform the update and remove any remaining trigger messages.
BTW, you can also use Formativ to hide any message (such as the trigger message) from the user interface but allow it to be accessible via a search (this can also be disabled). Alternatively, access can be restricted exclusively to direct programmatic access.
Regards,
Advansys Support
The code below will add an attachment, in this case ‘c:test.txt’, to a new mail message.
Groupwise.NewMail
' The attachment's full path
iFilePath = "c:test.txt"
call GroupWise.ItemAttachmentAdd("X00", itcAttachClassFile, iFilePath, "")Hope this helps.
Best regards,
Advansys Support
July 15, 2002 at 8:57 pm in reply to: Can Formativ be used to change ‘Copies to Self’ behaviour #6465Sorry for the delay, we’ve been hard at work getting the Formativ 1.5 beta launched on our Web site, http://www.advansyscorp.com/formativ_1_5.htm .
Which version of GroupWise client are you using, 5.5, 5.5 Enhancement Pack or 6.01?
Regards,
Advansys Support
The Import Outlook Items applet available on Cool Solutions is ‘open source’, which will only run with Formativ Admin installed. The reason why it won’t run on your installation is because you have Formativ Client installed, which only executes ‘Encoded’ applets produced by Formativ Admin.
You could solve the problem by installing Formativ Admin from our Web site, http://www.advansyscorp.com/formativ_download.htm, or to facilitate a quick solution, we have uploaded an encoded version of the applet, which will work with your current Formativ Client installation, to the following URL:
http://www.advansyscorp.com/formativ/applets/encoded/import outlook items.vbf
You just need to download this encoded version of the applet and copy it into the c:program filesadvansysformativlocal folder and then restart the GroupWise client.
Please let us know if you have any questions.
Regards,
Advansys Support
July 9, 2002 at 6:54 pm in reply to: Can Formativ be used to change ‘Copies to Self’ behaviour #6467There are ways to achieve a pre-send filing option but each approach would have advantages and disadvantages.
To help us better understand your business requirements, would it be possible for you to let us know the objective of the copy-to-self requirement? For example, would moving the GroupWise sent message into a target folder be sufficient or do you specifically need the sent message to also be addressed to the sender, which is then filed into the user’s target folder?
Which version of GroupWise are you using?
Here are some quick, off the cuff suggestions for implementing a system which moves the GroupWise sent item to a target folder, which is selected by the user prior to sending message.
The basic approach would be to mark the outgoing message with the user’s selection and then have a mechanism which identifies the marking and moves the message into the correct folder.
1) Marking the message
1a) Using a Custom Field
Design an applet which allows the user to select a target folder and which then saves the user selection in a custom field into the draft message prior to sending. The catch with this approach is that the draft message must be saved at least once, to get a valid message ID (rather than ‘X00’), before you can add a custom field. The applet could save the message by using the ItemSaveMessageDlg command (or another command depending on the version of GW you are using), which will prompt the user for a draft folder. The applet could be executed manually or integrated with the OnSend event (but again, the draft message must be saved first to get a valid Message ID).
The benefit of using a custom field to mark the message is that the data remains hidden from the user and does not appear in the outgoing message.
1b) Using the Message Fields
Another approach is for an applet to mark either the subject, the message text or by attaching a special file attachment. For example, you could append a special text code to the end of the subject, end of the message text, or add a text attachment which includes the target folder code or location.
The advantage of this approach is that you don’t need to save the message first but the disadvantage is that the target folder code or information would appear in the outgoing message.
2) Idenfiying and filing the message
Once the message is marked with the required target folder identifier, the next step is to develop a process which identifies the marking and then automatically files the message. Again there are a couple of approaches which could be used but to ensure an optimal solution, each approach would need to be tested first.
Note: You can’t have the same ‘marking’ applet move the GroupWise sent message because of the send event sequencing, i.e. when an applet is triggered by the client On Send event, the GroupWise message is not yet committed to the database.
2a) Automatically Generated Rule
The applet which marks the message could generate a GroupWise rule configured to automatically move the sent message, which includes the specific marking, to the target folder. This technique would have to be tested for timing issues. However, as the rule would be created before the message is sent, and because the rule events are POA database (server) driven, the rule ‘send’ event would trigger only when the message has been sent by the client. In any case, once the rule was created, it would work without potential timing problems for any subsequent messages containing the same marking identifier. The outcome of this approach is that, in addition to the marking applet, you will have a number of GroupWise rules created to do the filing.
2b) Filing Applet
The other approach is to use another applet which is either manually executed by the user and/or is triggered to run on GroupWise startup. This applet would scan GroupWise sent messages for the specific markings and automatically move them into the correct target folders.
Summary
The above suggestions focus on the GroupWise sent message, which is normally automatically created by the GroupWise client and by default is stored in the Mailbox folder. If you require that a copy of the sent message is filed, or if the sent message is to be addressed to the sender to achieve a copy, the above approaches could be adapted to work in either scenario.
I hope the above suggestions are of assistance. If you don’t wish to develop this solution yourself, Advansys does offer custom development services.
Regards,
Advansys Support
I think you will find that the Internet Reply Formatter applet will suit your requirements. This applet is installed with Formativ Admin.
Below is some info about the applet from our web site:
The Internet style reply formatter applet lets you format email replies using the standard ‘>’ quoting system. For example, if you reply to a message and execute this applet, the original message text has any soft line breaks converted to hard line breaks are a configurable column, and the ‘>’ character is inserted at the start of each line as shown below:
>Dear Sir,
>
>Thank you very much for your email message.
>We were very happy with your proposal and look
>forward to hearing from you soon.Please let us know if this applet does not meet your needs.
Regards,
Advansys Support
Thanks, no problem. Let us know if you have any further questions.
Regards,
Advansys Support
This example saves the message information from a composing item and will work when integrated with the OnSend event.
Let us know if you have any questions.
Regards,
Advansys Support
'-------------------------------------------------------------------------------
' Formativ Solutions for GroupWise
' Save Composing Message
' Designed by: Formativ Business Solution Team
' Copyright (c) 2002 Advansys Corporation (www.advansyscorp.com)
' Version 1.01
'
' Description:
' This applet will save the composing message details to a file.
' You need to provide the folder path where the file will be saved.
'
' File name format: The file name will start with the subject,
' followed by the current date/time.
' For example: my subject_020314153920.txt
' where:
' my subject = The composing message's subject
' 020314153920 = yymmdd + time(24 hours) + current second
'
' INTEGRATIONS: GroupWise mail OnSend.
'-------------------------------------------------------------------------------
dim FSO
Const CAPTION = "Formativ Business Solutions"
HRT = Chr(13) & Chr(10)
' Provide the root folder where the file will be saved
'===============================================================================
const FOLDER_PATH = "c:"
'===============================================================================
' Do you want a confirmation message box when the applet creates the file
' TRUE - Yes, FALSE - No
const CONFIRMATION_DLG = TRUE
'-------------------------------------------------------------------------------
' Main line processing
'-------------------------------------------------------------------------------
Sub Main(Client, GWEvent)
dim iMsgID
dim iMsgText
dim iSubject
dim iAttachCounter
set FSO = CreateObject("Scripting.FileSystemObject")
' Does the folder exist?
if FSO.FolderExists(FOLDER_PATH) then
' Get the composing message ID
iMsgID = GroupWise.ItemMessageIDFromView
' Make sure we have a composing message selected
if (iMsgID = "X00") then
' Get the To, CC, BC, Subject and the body text
iMsgText = iMsgText & "To: " & GroupWise.ItemGetText(iMsgID, itfTo) & HRT
iMsgText = iMsgText & "CC: " & GroupWise.ItemGetText(iMsgID, itfCC) & HRT
iMsgText = iMsgText & "BC: " & GroupWise.ItemGetText(iMsgID, itfBC) & HRT
iSubject = GroupWise.ItemGetText(iMsgID, itfSubject)
iMsgText = iMsgText & "Subject: " & iSubject & HRT & HRT
iMsgText = iMsgText & "Message: " & GroupWise.ItemGetText(iMsgID, itfMessage) & HRT & HRT
' Does the message have any attachments?
iAttachCounter = GroupWise.ItemAttachmentGetCount(iMsgID)
if (iAttachCounter > 0) then
' Loop through the attachments to get the name
for x = 0 to (iAttachCounter -1)
iMsgText = iMsgText & "Attachment " & (x + 1) & ": " & GroupWise.ItemAttachmentGetName(iMsgID, x) & HRT
next
end if
' Save the text into a file
if (iMsgText <> "") then
call SaveTextIntoFile(iMsgText, iSubject)
end if
else
call msgbox("Select a composing message and set the integration with OnSend.", vbInformation, CAPTION)
end if
else
call msgbox(FOLDER_PATH & " - folder not exists.", vbCritical, CAPTION)
end if
set FSO = nothing
End Sub
'-------------------------------------------------------------------------------
' Save the text into a new file
'-------------------------------------------------------------------------------
sub SaveTextIntoFile(aText, aSubject)
dim iFileName
dim MyFile
iFileName = FOLDER_PATH & RemoveInvalidCharacter(aSubject) & "_" & GetCurrentDateTime & ".txt"
Set MyFile = FSO.CreateTextFile(iFileName, True)
MyFile.WriteLine(aText)
MyFile.Close
set MyFile = nothing
' Do you need a confirmation message box?
if CONFIRMATION_DLG then
call msgbox("The following file created." & HRT & iFileName, vbInformation, CAPTION)
end if
end sub
'-------------------------------------------------------------------------------
' Get the current date time to create a unique name
'-------------------------------------------------------------------------------
function GetCurrentDateTime
dim iDay
dim iMonth
dim iYear
dim iTime
iDay = Day(date)
if len(iDay) = 1 then
iDay = "0" & iDay
end if
iMonth = Month(date)
if len(iMonth) = 1 then
iMonth = "0" & iMonth
end if
iYear = Year(date)
if len(iYear) > 2 then
iYear = right(iYear, 2)
end if
iTime = FormatDateTime(Time, vbShortTime)
iTime = Replace(iTime, ":", "")
iTime = Replace(iTime, ",", "")
iTime = Replace(iTime, " ", "")
GetCurrentDateTime = iYear & iMonth & iDay & iTime & Second(Now)
end function
'-------------------------------------------------------------------------------
' Remove invalid characters [The following characters are not acceptable as a file name]
'-------------------------------------------------------------------------------
function RemoveInvalidCharacter(aText)
aText = replace(aText, "/", "")
aText = replace(aText, "", "")
aText = replace(aText, ":", "")
aText = replace(aText, "*", "")
aText = replace(aText, """", "")
aText = replace(aText, "|", "")
aText = replace(aText, "<", "")
aText = replace(aText, ">", "")
aText = replace(aText, "?", "")
aText = replace(aText, ".", "")
RemoveInvalidCharacter = aText
end functionPlease find below an example of disclaimer applet which supports both text and HTML and which checks to see if any outgoing addresses are external. It achieves this by attempting to resolve an address with an embedded ‘@’ sign against the system address book.
Please let us know if you have any questions.
Regards,
Advansys Support
'-------------------------------------------------------------------------------
' Formativ Business Solutions
' Disclaimer
' Copyright (c) 2002 Advansys Corporation (www.advansyscorp.com)
' Version 1.0
'
' This applet appends a disclaimer to the end of the message when the event is
' OnSend. If the message recipients are internal GroupWise system users only,
' then the applet will not add the disclaimer. The disclaimer can be a plain
' text or HTML file (extension must be .htm or .html).
'
' INTEGRATION: This applet requires integration with OnSend event.
'
' Notes: If you are using internet addressing, you will need to set the
' DOMAINNAME constant to your company's Internet domain name.
'-------------------------------------------------------------------------------
' DOMAINNAME should be your company's Internet domain name, i.e. advansyscorp.com
Const DOMAINNAME = "domainname.com" 'do not prefix the domain name with www.
' Full path to the location of the HTM file
FILENAME = Utilities.GetDataDirectory + "Disclaimer.htm"
'-------------------------------------------------------------------------------
' Main line processing
'-------------------------------------------------------------------------------
Sub Main(Client, GWEvent)
Dim Msg
Dim FSO
On Error Resume Next
If ValidMsg(Msg) And (GWEvent = "GW#C#SEND") Then
Set FSO = CreateObject("Scripting.FileSystemObject")
If (FSO.FileExists(FILENAME)) Then
sTo = Msg.To_
sCC = Msg.CC
sBC = Msg.BC
Call GroupWise.FocusSet(9, "")
If CheckExternalEmail(sTo, sCC, sBC) = FALSE Then
If FileType And (GroupWise.EnvEditorStyle = 1) Then
Call GroupWise.SwitchToHTMLView
End If
'Set the position where you want to place the disclaimer.
' To place the disclaimer at the
' top of the message - uncomment the PosTextTop,
' end of the message - uncomment PosToEndOfText
'Call GroupWise.PosTextTop
Call GroupWise.PosToEndOfText
Call GroupWise.Retrieve(FILENAME)
End If
End If
Set FSO = Nothing
End If
End Sub
'-------------------------------------------------------------------------------
' Decide whether the file is HTM/HTML or text file?
'-------------------------------------------------------------------------------
Function FileType
Dim sFileType
If (Instr(1, FILENAME, ".") <> 0) then
sFileType = Split(FILENAME, ".", -1, 1)
sType = sFileType(UBound(sFileType))
If (UCase(sType) = "HTM") Or (UCase(sType) = "HTML") Then
FileType = TRUE
End If
End If
End Function
'-------------------------------------------------------------------------------
' Check any external email addresses which exist in the recipient list
'-------------------------------------------------------------------------------
Function CheckExternalEmail(sTo, sCC, sBC)
'To field
If Len(sTo) > 0 then
If ResolveAddress(sTo) = FALSE Then
CheckExternalEmail = FALSE
Exit Function
Else
CheckExternalEmail = TRUE
End If
End If
'CC Field
If Len(sCC) > 0 Then
If ResolveAddress(sCC) = FALSE Then
CheckExternalEmail = FALSE
Exit Function
Else
CheckExternalEmail = TRUE
End If
End If
'BCC Field
If Len(sBC) > 0 Then
If ResolveAddress(sBC) = FALSE Then
CheckExternalEmail = FALSE
Exit Function
Else
CheckExternalEmail = TRUE
End If
End If
End Function
'-------------------------------------------------------------------------------
' Resolve Address
'-------------------------------------------------------------------------------
Function ResolveAddress(ByVal Recp)
Dim sMail
Dim sEntry
Dim sAddress
Dim sReturnAddr
sAddress = Trim(Recp)
'If the recipient list contains more than one entry and separated by ';' then proceed
If (Instr(1, sAddress, ";") <> 0) Then
sEntry = Split(sAddress, ";", -1, 1)
For x = 0 to UBound(sEntry)
sMail = Trim(sEntry(x))
If MailCheck(sMail) Then
ResolveAddress = TRUE
Else
ResolveAddress = FALSE
Exit Function
End If
Next
Else
If MailCheck(sAddress) Then
ResolveAddress = TRUE
Else
ResolveAddress = FALSE
End If
End If
End Function
'-------------------------------------------------------------------------------
' Check for the external mail
'-------------------------------------------------------------------------------
Function MailCheck(sMail)
Dim sEmail
If (Instr(1, sMail, "@") = 0) Then
On Error Resume Next
sEmail = GroupWise.AddressBookResolveFullName(sMail)
If (Instr(1, sEmail, "@") <> 0) Then
If (Instr(1, sEmail, DOMAINNAME) = 0) Then
MailCheck = FALSE
Else
MailCheck = TRUE
End If
Else
MailCheck = TRUE
End If
Else
If (Instr(1, sMail, DOMAINNAME) = 0) Then
MailCheck = FALSE
Else
MailCheck = TRUE
End If
End If
End Function
'-------------------------------------------------------------------------------
' Do we have a composing item available?
'-------------------------------------------------------------------------------
Function ValidMsg(ByRef Msg)
On Error Resume Next
Set Msg = GroupWise.ComposingItem
If Msg is Nothing then
ValidMsg = FALSE
Else
ValidMsg = TRUE
End If
End FunctionTo meet your requirements, the applet needs to be executed prior to the delete function being processed by GroupWise and, depending on the number of selected messages, we may need to prevent the GroupWise delete function from executing. Unfortunately it is not possible to do this with the current version of Formativ.
A future version after v1.5 (probably v2) will provide you with the capability to control the sequence of event processing and applet execution.
Regards,
Advansys Support
The following sample code which will display the composing message’s attachment name(s) in a message box. It will also allow you to save an attachment but you will need to uncomment the ItemAttachmentSaveAs ‘save’ code and provide the target file name (this code would have to be updated to handle multiple filenames and check whether the file already exists).
dim iMsgID
dim iAttachCounter
Const CAPTION = "Formativ Business Solutions"
' Get the composing message ID through TOKEN
iMsgID = GroupWise.ItemMessageIDFromView
' Make sure we have a composing message selected
if (iMsgID = "X00") then
iAttachCounter = GroupWise.ItemAttachmentGetCount(iMsgID)
' Does the message have any attachments?
if (iAttachCounter > 0) then
' Loop through attachments to get the names
for x = 0 to (iAttachCounter -1)
call msgbox (GroupWise.ItemAttachmentGetName(iMsgID, x), vbInformation, CAPTION)
' To save the attachment(s), you need to provide the file name(s) and have to check whether
' the file already exists
'call GroupWise.ItemAttachmentSaveAs(iMsgID, x, "c:test.txt")
next
else
call msgbox("No attachments found.", vbInformation, CAPTION)
end if
else
call msgbox("Select a composing message to display the attachment names.", vbInformation, CAPTION)
end ifHope this helps.
Regards,
Advansys Support
The following sample code which will display the composing message’s attachment name(s) in a message box. It will also allow you to save an attachment but you will need to uncomment the ItemAttachmentSaveAs ‘save’ code and provide the target file name (this code would have to be updated to handle multiple filenames and check whether the file already exists).
dim iMsgID
dim iAttachCounter
Const CAPTION = "Formativ Business Solutions"
' Get the composing message ID through TOKEN
iMsgID = GroupWise.ItemMessageIDFromView
' Make sure we have a composing message selected
if (iMsgID = "X00") then
iAttachCounter = GroupWise.ItemAttachmentGetCount(iMsgID)
' Does the message have any attachments?
if (iAttachCounter > 0) then
' Loop through attachments to get the names
for x = 0 to (iAttachCounter -1)
call msgbox (GroupWise.ItemAttachmentGetName(iMsgID, x), vbInformation, CAPTION)
' To save the attachment(s), you need to provide the file name(s) and have to check whether
' the file already exists
'call GroupWise.ItemAttachmentSaveAs(iMsgID, x, "c:test.txt")
next
else
call msgbox("No attachments found.", vbInformation, CAPTION)
end if
else
call msgbox("Select a composing message to display the attachment names.", vbInformation, CAPTION)
end ifHope this helps.
Regards,
Advansys Support
Hi Bill,
Our Formativ Stationery applet can be readily adapted for your requirements. We’ve written a detailed reply, including examples, to the email which you also sent to us. Please let us know if you have any further questions.
Regards,
Advansys Support
-
AuthorReplies