Forum Replies Created
-
AuthorReplies
-
We are not aware of any problems of this nature, but will undertake further investigation. I’ll report my findings in this thread. In the meantime, I suspect you will have to continue installing the software using the security setting the end user will ultimately be using.
Thanks,
Advansys Support
Simon,
Hold down the CTRL key while executing the applet to redisplay the management portal. Here’s a snippet from the Business Solutions Pack Users Guide:
quote:
Each time the Web Site Portals applet is executed, the portal ‘Manage Web Site Portals’ appears. You use this portal to add, edit and delete your web portals. You can stop this portal from being created by unchecking the check box ‘Show this settings portal each time the applet is executed’ at the bottom of the display. You can force ‘Manage Web Site Portals’ to appear again by holding down the CTRL key when executing the applet.
Advansys Support
This issue has been dealt with directly.
Advansys Support
Assuming you are referring to the example code above, how did you get the source code into an applet?
To use the example, create a new applet in the Formativ editor, then copy and paste the source code above directly into the Formativ editor. (You cannot take source code and save it as a .VBF file. VBF files contain more than just source code).
If you still have problems after trying the above, please advise your GW version and the exact assert error message text.
Advansys Support
August 27, 2002 at 4:46 pm in reply to: the applet of “publish folder of calendar to word” not working #8510If you are using Formativ Admin 1.0, you need to download the source code version of the applet. Formativ Admin 1.0 cannot edit or execute encoded applets. Encoded applets can only be executed by Formativ Runtime.
Here is the link to the open source version of the Plublish Folder List to MS Word example applet:
Publish folder list to MS Word
Advansys Support
August 22, 2002 at 5:19 pm in reply to: the applet of “publish folder of calendar to word” not working #8511Encoded applets were originally introduced in Formativ 1.0 to for exclusive use by the Runtime (Client) version. Encoding an applet secures and hides the inner workings of the original open source applet. With the introduction of Formativ 1.5, all versions of Formativ can execute Encoded applets.
If you are using Formativ Admin 1.0, you need to download the source code version of the applet.
I have included some general information on this topic from our website below:
Which Formativ product do I need?
I just want to run pre-written Formativ solutions.
Use Formativ Runtime (or Client), which is a low cost engine used to run an unlimited number of Formativ solutions for GroupWise.I want to create and modify Formativ solutions.
Use Formativ Developer, which is a low cost tool for building and running your own GroupWise solutions powered by Formativ.I want to create, modify, securely manage and distribute Formativ solutions.
Use Formativ Admin, which enables you to create, run and securely manage/distribute Formativ solutions via Novell eDirectory/NDS.Note: When released, Formativ 1.5 will supercede Formativ 1.0 products.
Here is a simple example of exporting GroupWise appointments to Excel. We created this applet using GroupWise 6 and Excel 2000.
We hope this helps.
Advansys Support
'-------------------------------------------------------------------------------
' Formativ Example
' Export GroupWise appointments to Excel
' Designed by: Formativ Business Solution Team
' Advansys Corporation (www.advansyscorp.com)
' Version 1.5
'
' DESCRIPTION:
' This applet will export GroupWise appointments into MS Excel. The applet also
' displays the total duration of the appointments in excel.
'-------------------------------------------------------------------------------
HRT = Chr(13) & Chr(10)
DEFAULTFOLDER = Utilities.GetDataDirectory
Const CAPTION = "Formativ Examples"
'-------------------------------------------------------------------------------
' Main line processing
'-------------------------------------------------------------------------------
Sub Main(Client, GWEvent)
dim iStartDate
dim iEndDate
dim iDialogClass
dim iControllerClass
cExit = 999
cIntro = 101
cDateRange = 103
Cmd = cIntro
set iControllerClass = new ControllerClass
set iDialogClass = new DialogClass
iDialogClass.DisplayDlg
do while Cmd <> cExit
' Introduction dialog
if (Cmd = cIntro) then
select case iDialogClass.iDlg.Execute
case Btn1 Cmd = cDateRange
case else Cmd = cExit
end select
end if
' Check date range
if (Cmd = cDateRange) then
iStartDate = iDialogClass.iStartDateCTL.Date
iEndDate = iDialogClass.iEndDateCTL.Date
if (iEndDate >= iStartDate) then
if iControllerClass.ExportMessages(iStartDate, iEndDate) then
Cmd = cExit
else
Cmd = cIntro
end if
else
call msgbox("Invalid end date. The end date need to be after the start date.", vbInformation, CAPTION)
Cmd = cIntro
end if
end if
loop
set iDialogClass = nothing
set iControllerClass = nothing
End Sub
'-------------------------------------------------------------------------------
' ControllerClass
' Manage the whole process
'-------------------------------------------------------------------------------
Class ControllerClass
private iTotalDuration
private iExcel
private iStatusDlg
private iCalendar
' Constructor
private sub class_initialize
iTotalDuration = 0
Set iStatusDlg = Utilities.NewStatusDialog
set iCalendar = Groupwise.Account.Calendar
end sub
' Destructor
private sub class_terminate
set iExcel = nothing
set iCalendar = nothing
set iStatusDlg = nothing
End Sub
' Get the excel object
private function GetExcelObject()
GetExcelObject = TRUE
On error resume next
Set iExcel = GetObject("Excel.Application")
if IsEmpty(iExcel) then
Set iExcel = CreateObject("Excel.Application")
if IsEmpty(iExcel) then
iStatusDlg.Hide
Call MsgBox("Could not connect to Excel - Please check it is correctly installed and try again.", vbCritical, CAPTION)
GetExcelObject = FALSE
end If
end if
end function
' Write the heading into the cell
private sub WriteHeadingIntoCell(iNewWorkBook, aTotal)
iRow = 1
' Total appointments
with iNewWorkBook.ActiveSheet.Cells(iRow, 1)
.Value = "Total Appointments:"
.Font.Size = 11
.Font.FontStyle = "Bold"
.Font.Color = vbBlue
end with
with iNewWorkBook.ActiveSheet.Cells(iRow, 2)
.Value = aTotal
.Font.Size = 11
.Font.FontStyle = "Bold"
.Font.Color = vbBlue
end with
iRow = iRow + 1
with iNewWorkBook.ActiveSheet.Cells(iRow, 1)
.Value = "Total Duration:"
.Font.Size = 11
.Font.FontStyle = "Bold"
.Font.Color = vbBlue
end with
if (iTotalDuration >= 60) then
iHour = round((iTotalDuration /60), 0)
iMinutes = iTotalDuration mod 60
if (iMinutes > 0) then
iTotalDuration = iHour & " hours and " & iMinutes & " minutes"
else
iTotalDuration = iHour & " hours"
end if
else
iTotalDuration = iTotalDuration & " (Minutes)"
end if
with iNewWorkBook.ActiveSheet.Cells(iRow, 2)
.Value = iTotalDuration
.Font.Size = 11
.Font.FontStyle = "Bold"
.Font.Color = vbBlue
end with
iRow = iRow + 2
'
with iNewWorkBook.ActiveSheet.Cells(iRow, 1)
.Value = "Subject"
.Font.Size = 10
.Font.FontStyle = "Bold"
end with
with iNewWorkBook.ActiveSheet.Cells(iRow, 2)
.Value = "Place"
.Font.Size = 10
.Font.FontStyle = "Bold"
end with
with iNewWorkBook.ActiveSheet.Cells(iRow, 3)
.Value = "Start Date"
.Font.Size = 10
.Font.FontStyle = "Bold"
end with
with iNewWorkBook.ActiveSheet.Cells(iRow, 4)
.Value = "End Date"
.Font.Size = 10
.Font.FontStyle = "Bold"
end with
with iNewWorkBook.ActiveSheet.Cells(iRow, 5)
.Value = "Duration (Minutes)"
.Font.Size = 10
.Font.FontStyle = "Bold"
end with
end sub
' Write the entry into the cell
private sub WriteIntoCell(iNewWorkBook, iRow, aSubject, aPlace, aStartDate, aEndDate)
iDuration = DateDiff("n", aStartDate, aEndDate)
with iNewWorkBook.ActiveSheet
.Cells(iRow, 1).Value = aSubject
.Cells(iRow, 2).Value = aPlace
.Cells(iRow, 3).Value = aStartDate
.Cells(iRow, 4).Value = aEndDate
.Cells(iRow, 5).Value = iDuration
end with
iTotalDuration = iTotalDuration + iDuration
iRow = iRow + 1
end sub
' Write duration column total
private sub WriteColumnTotal(iNewWorkBook, iRow, aTotal)
with iNewWorkBook.ActiveSheet
.Cells(iRow, 4).Value = "Total"
.Cells(iRow, 4).Font.FontStyle = "Bold"
.Cells(iRow, 5).Value = aTotal
.Cells(iRow, 5).Font.FontStyle = "Bold"
end with
end sub
' Publish appointments into excel
private sub PublishIntoMSExcel(iTotalItems, iMessagesList)
dim iNewWorkBook
iRow = 5
iExcel.visible = TRUE
with iStatusDlg
.Title = "Writing into excel..."
.ProgressRange = iTotalItems
.show
end with
Set iNewWorkBook = iExcel.WorkBooks.Add
' Loop through the messages list and extract the message object
for x = 1 to iTotalItems
set iMsg = iMessagesList.Item(x)
if not iMsg is nothing then
call WriteIntoCell(iNewWorkBook, iRow, iMsg.Subject, iMsg.Place, iMsg.StartDate, iMsg.EndDate)
iStatusDlg.statustext = "Subject: " & iMsg.Subject
end if
iStatusDlg.progressposition = x
next
' Type the duration column total
call WriteColumnTotal(iNewWorkBook, iRow, iTotalDuration)
' Type the heading
call WriteHeadingIntoCell(iNewWorkBook, iTotalItems)
' Auto fit the section
with iExcel
.Cells.Select
.Selection.Columns.AutoFit
.Range("A1:A1").Select
end with
iStatusDlg.hide
call msgbox("MS Excel document created and opened for review.", vbInformation, CAPTION)
end sub
' Find appointments messages and export into excel
public function ExportMessages(aStartDate, aEndDate)
dim iTotalItems
dim iMessagesList
ExportMessages = TRUE
with iStatusDlg
.Title = "Initializing..."
.Show
end with
aStartDate = Year(aStartDate) & "/" & Month(aStartDate) & "/" & Day(aStartDate)
aEndDate = Year(aEndDate) & "/" & Month(aEndDate) & "/" & Day(aEndDate)
iFilter = ("(APPOINTMENT) AND (ACCEPTED) AND (ON_CALENDAR) AND (START_DATE >= " & aStartDate & " AT 00:00:00 AND START_DATE <= " & aEndDate & " AT 23:59:59)")
set iMessagesList = iCalendar.FindMessages(iFilter)
iTotalItems = iMessagesList.Count
' If there is any appointments messages found
if (iTotalItems > 0) then
if GetExcelObject then
call PublishIntoMSExcel(iTotalItems, iMessagesList)
end if
else
iStatusDlg.hide
call msgbox("No appointments were found. You may need to modify the date range.", vbInformation, CAPTION)
ExportMessages = FALSE
end if
set iMessagesList = nothing
end function
End Class
'-------------------------------------------------------------------------------
' DialogClass
' Manage all the dialogs in this applet
'-------------------------------------------------------------------------------
Class DialogClass
public iDlg
public iEndDateCTL
public iStartDateCTL
' Constructor
private sub class_initialize
end sub
' Destructor
private sub class_terminate
set iDlg = nothing
set iEndDateCTL = nothing
set iStartDateCTL = nothing
End Sub
' Introduction dialog
public sub DisplayDlg
Set iDlg = Utilities.NewControlBoxDialog
with iDlg
.AutoSize = TRUE
.Caption = CAPTION
.Title = "Export Appointments to Excel"
.Description = HRT & "This applet exports GroupWise appointments to MS Excel. Please specify a date range and press OK to continue."
end with
Set iStartDateCTL = iDlg.AddDateTimeControl
With iStartDateCTL
.Caption = "Start date"
.Hint = "Select start date"
End With
Set iEndDateCTL = iDlg.AddDateTimeControl
With iEndDateCTL
.Caption = "End date"
.Hint = "Select end date"
End With
end sub
End ClassYes, this is certainly possible. We will prepare a simple example demonstrating the basics of Excel integration and post it here in the next couple of days.
Advansys Support
It appears that the native field name for the last name field is not being correct translated. We have not had this reported previously, so I am not entirely sure why this would be the case. Formativ 1.5 uses a different technique when handling different language field definitions, so this issue should not be a problem.
To work around the issue, you need to determine the internal name for the last name field in the Dutch client. The following applet shows all the internal field names for the given book. Execute it and make a note of the last name field as displayed:
Sub Main(Client, GWEvent)
Dim iAddressBooks
Dim iAddressBook
Dim iObject
Dim iFieldDefs
Dim iFieldDef
Set iAddressBooks = GroupWise.AddressBooks
Set iAddressBook = iAddressBooks.Item("test2")
Set iObject = iAddressBook.Object
for each iFieldDef in iObject.FieldDefinitions
MsgBox iFieldDef.Name
next
End SubYou then need to use the AddressBookEntry.Object property to access the native address book entry, then use the extact field name you obtained from the applet above to write the last name to the entry. I have modified your applet to show how this is done. Note that you will have to change the text “Last Name” with the Ducth string as output by the applet shown above:
const egwString = 1
Sub Main(Client, GWEvent)
Dim AddressBooks
Dim AddressBook
Dim oAddressBookEntries
Dim oAddressBookEntry
Dim iObject
Set AddressBooks = GroupWise.AddressBooks
Set AddressBook = AddressBooks.Item("Test Book")
if IsEmpty(AddressBook) then
MsgBox("Could not locate that address book")
else
MsgBox(AddressBook.Name)
Set oAddressBookEntry = AddressBook.AddContact("Bill Smith")
oAddressBookEntry.FirstName = "Bill"
' Get the native GroupWise address book entry object
set iObject = oAddressBookEntry.Object
on error resume next
call iObject.Fields.Add("Last Name", egwString, "Smith")
end if
Set AddressBooks = nothing
MsgBox("Done")
End SubI hope this helps.
Advansys Support
Scott,
The process of accessing another account object via the Multilogin method will not update the appearance of the client. Account objects, whether they be the root account, or obtained by calling Multilogin, are opaque, and have no affect on the appearance of the client.
The only way to have the client change in appearance is to use proxy. However, the applet you are modifying was written using the account approach, which is the most efficient way to access data in the GroupWise message store. You could probably rewrite it using proxy and commands like GroupWise.ItemListCreateFromView(), but this would be a big job, and probably not worth it just to see the client change while the data was extracted.
If it is important to see the client change while the export process takes place, you might be able to proxy to the appropriate user, then use the multilogin feature to access the appropriate account. After you have exported the data, proxy back to the root account (and release the account object you obtained in your call to Multilogin).
I hope this helps.
Advansys Support
Scott,
The only real way to do this is to use the multi-login feature to log into the account you need to export calendar data from. You use the Multilogin method to do this. Formativ exposed multilogin support in version 1.5 (which I believe you are using).
In order find out which accounts a user has rights to, have a look at the AccountRights property of the Account object. You’ll find it documented here: Documentation
This collection should let you know who you can log in as. Please be aware that you also need to know the password of the user you will log in as.
To use the Multilogin feature, you need to login to the appropriate account using the GroupWise.Session.MultiLogin method. This is documented here:
Once you have logged into the appropriate account, you can access the calendar data in the normal way.
Please let us know if you have any further questions.
Advansys Support
Andre,
Thanks for the update. There is currently no ‘fully-featured’ version of this applet available. The applets on the CoolSolutions web site are examples of the kind of functionality possible with Formativ.
We are constantly updating and adding applets to our ‘Business Solutions Pack’ collection of applets, which represent complete, supported solutions. The ‘save message and attachments’ applet is not currently part of this collection. We may well update this applet to a sufficient level where it would be included. I’m confident such an upgrade would include the functionality you require.
In the meantime, depending on the resources you have available, you might be able to update the applet yourself to add the required functionality. Alternatively, we offer consulting services. Please email sales@advansyscorp.com if you are interested in this option.
I hope this helps.
Advansys Support.
Dear Andre,
I assume you are referring the “Save Message and Attachments” applet. This is an example applet that is not fully featured, and makes several assumptions. One of these assumptions is that the destination folder will be on the current drive (normally C: drive).
You cannot enter a full path into the filename edit box in the applet – this edit box only accepts the name of the file to use when saving the message. It will ignore the path if you enter one.
You can easily modify the applet to let you select a directory on another drive. Around line 100 you will see a line that looks like this:
Set iFolderDlg = Utilities.NewSelectDirectoryDialog
Insert a new line after the above line as shown below (this assumes you wish to select a directory somewhere on D: drive):
iFolderDlg.Root = "D:"
When you execute the applet and press the Folder button, you will now be able to select a directory on D: drive.
I hope this helps.
Advansys Support
nullIt sounds like the local applet cache is not being cleared. (A local applet cache is maintained on your local machine representing the applets stored in eDirectory. The cache should be cleared between sessions.).
Try deleting the directory (and all it’s contents) called “C:Program FilesAdvansysFormativMirror”, then re-start GroupWise a couple of times to see if the duplication continues.
Advansys Support
We have responded to this enquiry via direct email. An updated anniversary applet that fixes this problem will be posted to the CoolSolutions web site ASAP.
Advansys Support
-
AuthorReplies