[[https://www.revelation.com/|Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community]]
==== Using dict formulas as defaults (OpenInsight 32-bit Specific) ====
=== At 26 JUN 2003 05:56:21PM Jim Peters wrote: ===
{{tag>"OpenInsight 32-bit Specific"}}
Those of us working through the process of converting an AREV application have noticed that dictionary symbolics like this: {FIELDNAME_DEF} DO NOT work as defaults in OI forms. (You get a 'cannot read' error if you try it.)
Personnally I do not know why OI could not EASILY accommodate this, but it does not. If you are doing a conversion likely the AREV app has zillions of these, and dealing with them as individual functions or event code is very time (and PROFIT!) consuming.
I was not too thrilled with other solutions to this that I found here... all basically involving recreating what DEFAULT is supposed to do as a gotfocus event.... and reconstructing the original default logic within. Way too time consuming if you need to do it many times over.
Here is a little function I wrote that encapsulates a dictionary item into a function, so it can be called from the control's default.
Theoretically I should be able to retrieve the name of the table programmatically from the form (TABLE property of @WINDOW?)... but alas I could not... so it is specified as a parameter. Crude but it works.
If anyone has a *more elegant* solution please share, but here is what I came up with:
FUNCTION GET_DICT_DFLT(tablename,column)
/* this allows dict symbolics to be used for editline
defaults, by encapsulating the formula within a function.
This should also work with a literal field.
USE: Place this in the default line of a control with the
table name and column name as parameters.
*/
* 06/26/03 Jim Peters Created
declare function unassigned, Get_Property
ans ="
if unassigned(tablename) then
tablename="
end
if unassigned(column) then
column="
end
if (tablename # "") AND (column # "") then
id =Get_Property(@WINDOW,"ID")
rec =Get_Property(@WINDOW,"RECORD")
@ID =id
@RECORD=rec
Open "DICT", tablename to @DICT then
ans=CALCULATE(column)
end else
call fsmsg(column)
end
end
return ans
----
=== At 26 JUN 2003 08:22PM Ray Chan wrote: ===
Jim,
Maybe this will help.
In the Default for the control, we call a program, e.g.,
GET_DEFAULT_VALUE('ZIP')
Notice I am passing one parameter "ZIP" or whatever. Maybe you can pass two separate parameters, but I haven't test that. This works for us however.
If you can't pass two parameters, but need to, then you might try something like this GET_MANAGER('ZIP*ZIP_FILE' and parse out the values you need.
HTH, and good luck on your journey. I think that you will really enjoy working with and using OI, especially OI32.
Ray Chan
----
=== At 27 JUN 2003 04:59AM Oystein Reigem wrote: ===
Jim,
[i]Theoretically I should be able to retrieve the name of the table programmatically from the form (TABLE property of @WINDOW?)... but alas I could not... so it is specified as a parameter. Crude but it works.[/i]
See .
- Oystein -
----
=== At 27 JUN 2003 09:55AM Jim Peters wrote: ===
Ah, yes... that works!
----------------------------
WinID=@Window
$Insert OIWin_Comm_Init
TableName=JoinMap@
----------------------------
Thanks! to Oystein -] Carl Pates -] Andrew for the answer to that one.
The original version worked nicely, but it bugged me that I had to supply the table name when calling it.
Here is an updated version of the function that only requires the column name as a parameter:
=============================
FUNCTION GET_DICT_DFLT(Column)
/* this allows dict symbolics to be used for editline
defaults, by encapsulating the formula within a function.
This should also work with a literal field.
USEAGE: Place this in the default of a control with the
column name supplied as a parameter.
06/26/03 Jim Peters Created
*/
declare subroutine fsmsg
declare function unassigned, Get_Property
TableName="
ans ="
WinID =@Window
$Insert OIWin_Comm_Init
TableName=JoinMap@
if unassigned(column) then
column="
end
if (TableName # "") AND (Column # "") then
@ID =Get_Property(@WINDOW,"ID")
@RECORD=Get_Property(@WINDOW,"RECORD")
*
Open "DICT", TableName to @DICT then
ans=CALCULATE(Column)
end else
call fsmsg()
end
end
return ans
[[https://www.revelation.com/revweb/oecgi4p.php/O4W_HANDOFF?DESTN=O4W_RUN_FORM&INQID=NONWORKS_READ&SUMMARY=1&KEY=6549656E97CD338985256D510078843B|View this thread on the forum...]]