{{tag>category:"OpenInsight 32-Bit" author:"Wilhelm Schmitt" author:"[url=http://www.sprezzatura.com]The Sprezzatura Group[/url]" author:"Pat McNerthney" author:"Bob Carten"}}
[[https://www.revelation.com/the-works|Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community]]
==== Opening an engine from the command line (OpenInsight 32-Bit) ====
=== At 16 JUN 2003 02:00:31PM Wilhelm Schmitt wrote: ===
We want to open an engine from the command line and indicate the subroutine to be executed and additional parameters.
Something like this:
oengine /AP=APPNAME /UN=USRNAME /SN=XYZ [b]/FN=FUNCTION_NAME,PARAM[/b]
Is this possible? What would the syntax look like?
Regards
Wilhelm
----
=== At 16 JUN 2003 03:38PM [url=http://www.sprezzatura.com]The Sprezzatura Group[/url] wrote: ===
Not directly but what you could do is load an environment variable before invoking the engine and then run a startup routine in the OI environment that examines this variable and calls the routine. Synthesise this from http://www.revelation.com/website/discuss.nsf/search/167BE48F6BBE640785256C1A00735E59?OpenDocument and http://www.revelation.com/__8525652b0066bfaf.nsf/0/7a6c216759e0cef385256947003c0527?OpenDocument
[url=http://www.sprezzatura.com]The Sprezzatura Group[/url]
[/i]World leaders in all things RevSoft[/i]
[img]http://www.sprezzatura.com/zz.gif[/img]
----
=== At 17 JUN 2003 11:14AM Wilhelm Schmitt wrote: ===
Sprezz,
sorry to hear that there isn't a practical way for the command line.
Is there any special reason for this limitation?
Anyway, thanks for the suggestion.
Wilhelm
----
=== At 17 JUN 2003 11:24AM Pat McNerthney wrote: ===
Isn't is possible to run your own routine when an account is loaded? Couldn't such a startup routine then examine the command line and run another routine specified on the command line?
Pat
----
=== At 17 JUN 2003 12:58PM Bob Carten wrote: ===
Wilhelm:
A cute way to do this is to use OECGI
write an inet_function that calls your function
for example inet_runner.
Then write a batch file that looks like:
rem *******************************
rem ** oe_runner.bat
rem ** path info should be the name of the inet function
rem ** the env string queryparam should have &= delimited arguments
rem **
rem ** for this example
rem ** redirect the output to a file
rem ** then display the file
rem *******************************
set path_info=/inet_runner
set QUERY_STRING=arg1=%1
oecgi ]result.htm
start result.htm
rem ** end of bat file ************
rem *******************************
You can run the batch file without a web server.
It will need OECGI configured though.
As an alternative you can use Xrev.dll to make a small vb / delphi executable that does the same thing
HTH
Bob
----
=== At 17 JUN 2003 03:16PM Wilhelm Schmitt wrote: ===
Bob,
Batch file that changes environment settings:
What happens when I want to start another engine on the same machine through another batch file... and so on.
Our situation is this:
from the server, we want to have an engine dedicated to indexes, another one for process A and a third one for process B.
OECGI is configured for the web.
VB and XREV.DLL
Where can I find specs for the calls to XREV.DLL?
Regards
Wilhelm
BTW: This thread got truncated somehow. I can't see your response on the list below - I went in through the "flat-by-date" option.
----
=== At 20 JUN 2003 03:39PM Wilhelm Schmitt wrote: ===
Are the calls to XREV.DLL similar to the calls for OEngine?
Wilhelm
----
=== At 20 JUN 2003 03:49PM Bob Carten wrote: ===
Wilhelm:
I needed to write an object that could be called from asp pages without invoking cgi.
The vb code below uses Xrev.dll to start an engine and run a function,
then pass the result back to a caller.
Not debugged / tested for volume.
hope it helps
Bob
Option Explicit
Enum IniFileErrors
ERR_BASE=8192
ERR_FILEWRITE=1
ERR_FILEREAD=2
ERR_NOSECTION=3
ERR_NOKEYNAME=4
End Enum
Const ERR_NOSECTIONSTRING=No section was specified. Function aborted."
Const ERR_NOKEYNAMESTRING=No key name was specified. Function aborted."
Const DEFAULT_VALUE="
Const ININAME=.\oicall.ini"
Const SECTION=ENGINE"
Public Function RunRequest(RequestIn As String, inipath As String)
On Error Resume Next
'Create the core Revelation object.
Dim oRevelation As Revelation
'Create an OpenEngine.
Dim oEngine As RevSoftLib.IEngine
Dim lRet As Long
Dim OiPath As String
Dim ServerName As String
Dim DbName As String
Dim QueueName As String
Dim UserName As String
Dim Password As String
Dim ReturnValue As String
Dim Stored_Procedure As String
Dim html As String
html="
ChDir inipath
OiPath=GetKeyValue(SECTION, "Path")
DbName=GetKeyValue(SECTION, "Application")
UserName=GetKeyValue(SECTION, "UserName")
Password=GetKeyValue(SECTION, "Pw")
Stored_Procedure=GetKeyValue(SECTION, "Stored Procedure")
ServerName=\\.\OE" & Int(Rnd(Now()) * 1000)
QueueName=Q" & Int(Rnd(Now()) * 1000)
html=Before Engine " & Now()
html=html & "
Servername= & ServerName
html=html & "
Queuename= & QueueName
html=html & "
Application= & DbName
html=html & "
cur dir= & CurDir()
'Change the directory if not connecting to an existing engine.
ChDir OiPath
Set oRevelation=CreateObject("Revsoft.Revelation")
lRet=oRevelation.CreateEngine(oEngine, ServerName, DbName, 1, 1)
If lRet=0 Then
'Create an active Queue.
Dim oQueue As Object
lRet=oEngine.CreateQueue(oQueue, QueueName, DbName, UserName, Password)
html=html & "
Before Queue " & Now()
html=html & "
Servername= & ServerName
html=html & "
Queuename= & QueueName
html=html & "
Application= & DbName
html=html & "
Cur Dir= & CurDir()
If lRet=0 Then
'Call a Basic+ function...
Dim oiRequest As String
oiRequest=$SUBMIT=PROC"
oiRequest=oiRequest & "&PROC= & Stored_Procedure
oiRequest=oiRequest & "&cmd= & RequestIn
oiRequest=Replace(oiRequest, "%20", " ")
lRet=oQueue.CallFunction(ReturnValue, "RUN_OECGI_REQUEST", oiRequest)
oQueue.CloseQueue
Else
ReturnValue=Create Queue Failed " & Now()
End If
oEngine.CloseEngine
Else
html=Create Engine Failed " & Now() & " " & DbName
html=html & "
Before Queue " & Now()
html=html & "
Servername= & ServerName
html=html & "
Queuename= & QueueName
html=html & "
Application= & DbName
html=html & "
Cur Dir= & CurDir()
End If
Dim strMimeType As String
strMimeType=Content-type: text/html"
If Left(ReturnValue, Len(strMimeType))=strMimeType Then
ReturnValue=Mid(ReturnValue, Len(strMimeType) + 1)
End If
If InStr(1, RequestIn, "DEBUG=1") ] 0 Then
RunRequest=html & "
" & ReturnValue
Else
RunRequest=ReturnValue
End If
Set oRevelation=Nothing
Exit Function
Err_Handler:
Set oQueue=Nothing
Set oEngine=Nothing
Set oRevelation=Nothing
ReturnValue="
RunRequest=ReturnValue
Exit Function
End Function
Private Function GetKeyValue(ByVal sSectionName As String, ByVal sKeyName As String) As String
On Error GoTo e_Handler
'dims
Dim hr As Long
Dim sBuf As String
Dim lSize As Long
'default buffer size
lSize=128
'first things first, we really need a section name here
If Len(sSectionName)=0 Then
Err.Raise ERR_BASE + ERR_NOSECTION, , ERR_NOSECTIONSTRING
ElseIf Len(sKeyName)=0 Then
Err.Raise ERR_BASE + ERR_NOKEYNAME, , ERR_NOKEYNAMESTRING
End If
Do
'default buffer size
sBuf=Space$(lSize)
'call the API to get the key value
hr=GetPrivateProfileString(sSectionName, sKeyName, DEFAULT_VALUE, sBuf, Len(sBuf), ININAME)
'see API documentation for more info, suffice to say if the return val is size-1 then buffer was too small
If hr=lSize - 1 Then
'increase buffer size
lSize=lSize * 2
Else
'success
lSize=0
End If
'if lSize 0 then needs to loop again
Loop While lSize
'trim null chars
sBuf=Left$(sBuf, hr)
'return the value
GetKeyValue=sBuf
Exit Function
e_Handler:
'do nothing
Exit Function
End Function
[[https://www.revelation.com/revweb/oecgi4p.php/O4W_HANDOFF?DESTN=O4W_RUN_FORM&INQID=WORKS_READ&SUMMARY=1&KEY=2AEF32AB7D67EE5D85256D470062ECB8|View this thread on the Works forum...]]