You have put the function in the correct place (in Head section). I assume
that the function starts this way:
-->
<SCRIPT language=VBScript>
Function NameOfFunction(Argument1, Argument2)
' script that does the function's work
End Function
-->
</SCRIPT>
I have not done work with using a function to fill in a textbox, so I
probably won't be able to give you the exact suggestions that you seek.
However, I would anticipate that you'll need to use some page event to run
the function and fill in the value in the textbox.
In order to use a value from a field in the page's Recordset object, I
usually assign its value to a variable and then use the variable. This is
easier for me because the full reference to a field in a page is a bit
"long-winded" (see my example below). In this example, the variable is
myvalue and the field name is sciid and SetVariable is a subroutine that
is
using the variable's value:
dim myvalue
myvalue=msodsc.CurrentSection.DataPage.Recordset.Fields("sciid").value
call SetVariable("sciid",myvalue)
Also, note that DAP's do not provide "debug" error message boxes the way
VBA
does. If an error occurs in the VBScript in a DAP, the page's code just
stops running -- no notice, no warning, no nothing. The only way I know to
debug VBScript "effectively" is to insert MsgBox statements after every
line
so that you can 'trace' the script's progress and identify which line is
erroring, and then use MsgBox steps to show you the various values and be
sure that they are what you expect.
--
Ken Snell
<MS ACCESS MVP>
"Christian Bahnsen" <ChristianBahnsen@[EMAIL PROTECTED]
> wrote in
message news:C17E9412-76F6-49AC-9B8A-16A7E1DD75E7@[EMAIL PROTECTED]
> Thanks for your reply. I've been experimenting with VBscript, reworking
> the
> DAP.
>
> In Access I deleted the column using my Access function "duration()"
from
> the underlying query, and created a new DAP. This DAP opens fine from
> SharePoint, no longer throwing the "Data provider failed while executing
a
> provider command" and "Undefined function 'duration' in expression"
> errors.
>
> I then added a textbox to the Header section of the DAP and set its Id
to
> "Elapsed_Time". I also added a label to the Caption section of the DAP,
> set
> its Id to Elapsed_Time_Label and the InnerText to Elapsed_Time.
>
> I saved the DAP in Access then opened it again successfully from
> SharePoint.
> The other columns populate with data; my Elapsed_Time column appears but
> has
> no data at this point.
>
> I closed the DAP, went back to Access, opened the DAP in design mode,
> opened
> the script editor, and added the following script/function at the tail
end
> of
> the HEAD section:
>
> <SCRIPT language=vbscript>
>
> Option Explicit
> Function duration(AdmitDate,AdmitTime,DispoDate,DispTime)
>
> Dim myAdmitHours
> Dim myAdmitMinutes
> Dim myDischargeHours
> Dim myDischargeMinutes
> Dim temp
> Dim temp2
>
> myAdmitHours = Int(Left(myAdmit, 2))
> myDischargeHours = Int(Left(myDischarge, 2))
> myAdmitMinutes = Int(Right(myAdmit, 2))
> myDischargeMinutes = Int(Right(myDischarge, 2))
>
> If myAdmitDate = myDischargeDate Then
>
> temp = myDischargeHours - myAdmitHours
>
> Else
>
> temp = 24 + (myDischargeHours - myAdmitHours)
>
> End If
>
>
> temp2 = myDischargeMinutes - myAdmitMinutes
>
> If temp2 < 0 Then
>
> temp = temp - 1
> temp2 = 60 + temp2
>
> End If
>
> duration = cstr(temp) & "hrs" & trim(cstr(temp2))
&
> "mins"
>
> End Function
>
> </SCRIPT>
>
>
> Note: AdmitDate, AdmitTime, DispoDate, and DispTime are other columns in
> the
> DAP and the underlying query. They are also visible in the pull-down
list
> of
> the ControlSource property for textboxes. My first question is: can my
> function recognize these fields/columns as arguments? (The Access
> function
> can.)
>
> Being methodical, I saved the DAP in Access, then opened it again from
its
> SharePoint do***ent folder. No problems, but still no data in the
> Elapsed_Time column.
>
> I closed the DAP, went back to Access, and opened the DAP in design
mode.
> My second question is now: How do I get the Elapsed_Time textbox to use
> the
> vbscript function and display the calculated result for each row?
>
> For my Elapsed_Time textbox I tried entering:
>
> =duration(AdmitDate,AdmitTime,DispoDate,DispTime) into the ControlSource
> property. This throws the error: The expression
> "duration(AdmitDate,AdmitTime,DispoDate,DispTime)" is not valid.
>
> duration(AdmitDate,AdmitTime,DispoDate,DispTime) into the ControlSource
> property. This throws the error: Invalid property value.
>
> =duration(AdmitDate,AdmitTime,DispoDate,DispTime) into the DefaultValue
> property. This doesn't throw any errors; neither does it render any
data
> into the Elapsed_Time field when I view the DAP.
>
> duration(AdmitDate,AdmitTime,DispoDate,DispTime) into the DefaultValue
> property. This doesn't throw any errors; it renders the word "duration"
> in
> the Elapsed_Time field when I view the DAP.
>
> either variation into the AlternateDataSource property. This doesn't
> throw
> any errors; neither does it render any data into the Elapsed_Time field
> when
> I view the DAP.
>
> ++++++
>
> Just for comparison, here is the Access version of the function, which
> works
> fine:
>
> Public Function duration(myAdmitDate As Date, myAdmit As String,
> myDischargeDate As Date, myDischarge As String) As String
>
> Dim myAdmitHours, myAdmitMinutes, myDischargeHours,
myDischargeMinutes
> As Integer
> Dim temp, temp2 As Integer
>
> 'first let's separate the hours and minutes for the admit and
discharge
> myAdmitHours = Int(Left(myAdmit, 2))
> myDischargeHours = Int(Left(myDischarge, 2))
> myAdmitMinutes = Int(Right(myAdmit, 2))
> myDischargeMinutes = Int(Right(myDischarge, 2))
>
> If myAdmitDate = myDischargeDate Then
>
> temp = myDischargeHours - myAdmitHours
>
> Else
>
> temp = 24 + (myDischargeHours - myAdmitHours)
>
> End If
>
> temp2 = myDischargeMinutes - myAdmitMinutes
> If temp2 < 0 Then
>
> 'the admission time is greater than the discharge time
> 'that means we need to subtract an hour from temp
> 'and adjust the hour
> temp = temp - 1
> temp2 = 60 + temp2
>
> Else
>
> 'the discharge time is greater than the discharge time
> 'no action necessary
>
> End If
>
> duration = Str(temp) & "hrs " & Trim(Str(temp2)) & "mins"
>
> End Function
>
> +++++
>
> Thanks again in advance for any help.
>
>
>
> --
> Christian Bahnsen
>
>
> "Ken Snell (MVP)" wrote:
>
>> You have to put the user-defined function in the script module of the
DAP
>> itself so that the script can "see" and run it. You need to put it in
as
>> a
>> separate script procedure.
>> --
>>
>> Ken Snell
>> <MS ACCESS MVP>
>>
>>
>>
>> "Christian Bahnsen" <ChristianBahnsen@[EMAIL PROTECTED]
> wrote
in
>> message news:3B3692A5-BF26-41E3-AEE8-4FEAB8A005D8@[EMAIL PROTECTED]
>> >I wrote a public function in an Access module to calculate elapsed
time
>> > between two values. It works fine in Access queries and in a data
>> > access
>> > page (DAP) in Access during the design phase. But when I try to open
>> > the
>> > DAP
>> > outside Access from its SharePoint folder the DAP throws an error,
>> > apparently
>> > unable to access the user-defined function.
>> >
>> > Is there any way for DAPs to use user-defined functions?
>> >
>> > --
>> > Christian Bahnsen
>>
>>
>>


|