ForeExecResult ForeExec(ForeId tFore, ForeExecArg tArg)
tFore. Moniker of the development environment object that contains implementation of the executed method.
tArg. Operation execution parameters.
The ForeExec operation executes methods implemented in Fore units.
To execute the operation, in the tFore field specify moniker of the unit, assembly that contains implementation of the executed method. The moniker can be obtained on executing the GetObjects operation. In the tArg.methodName field specify name of the method to be executed, and in the tArg.args field specify values of the method input parameters. Method implementation should be located in the global namespace.
Method signature must contain simple types parameters and return a simple type value. If the method returns a value, this value is available in the operation execution result.
If the executed method contains parameters with the Object type, string views of any object's monikers must be sent as values of these parameters. On executing the operation by the moniker the appropriate repository object is obtained and sent to the executed method. To work with this object, cast it to the interface that describes its structure. For example, on sending repository connection moniker, the parameter in method will be of the IMetabase type, on sending express report moniker it will be of the IEaxAnalyzer type, and so on.
If moniker of the binary object saved on the server using the PutBin/PutBinary operation is sent, in the executed method this object can be cast to the IBinary interface.
The ForeExec operation can send objects in the JSON format to the executed method and also receive response in the JSON format. Corresponding parameters in the method signature should have the IJsonObject type. The returned value type should be IJsonObject.
When developing the web application, from which various methods are supposed to be run, use the following recommendations:
Use ForeExec to execute the code, which makes simple calculations or operations that are not time and resource intensive.
If the code executes resource-intensive operations (report calculation, loading or transformation of large data sets, and so on), it is recommended to think about using a scheduled tasks container, that is, to create a unit execution task and use operations for working with scheduled tasks container to control the task.
When selecting BI server configuration, take into account possible resource-intensive operations that must have been executed in parallel by means of ForeExec. The number of processor cores (physical and logical) must be not less than the number of possible resource intensive operations running in one stream.
Due to possible use of the ForeExec operation for executing the code, to which the particular user must not have access, one can disable executing of the operation:
Create the Disallow parameter with the 1 value in the BI server settings file settings.xml. Operation execution is enabled or disabled by BI server.
Create the foreExec parameter with the False value in the PP.xml configuration file of the web application. The operation is allowed/forbidden by the web server, on which the web application back end is installed. In this case to disable operation, the p_h parameter with the 1 value is automatically created in the request title.
NOTE. For details about location of parameters see description of the appropriate configuration files.
Create the p_h or p-h parameter with the 1 value in the title of the request that executes the ForeExec operation. The parameter is created by means of resources of the programming language that is used for development according to the application logic. For example, the code developed with JavaScript will be the following:
<html>
<body>
<script language="javascript" type="text/javascript">
<!--...Previous application code...-->
<!--...-->
<!--Function for sending JSON request-->
function PostRequest(url, request) {
<!--...-->
var xhr = new XMLHttpRequest();
<!--...-->
xhr.setRequestHeader('p-h', '1');
<!--...-->
xhr.send(JSON.stringify(request));
<!--...-->
}
</script>
</body>
</html>
When the ForeExec operation works, units/assemblies change time is not checked that is why when the method is executed for the first time, the current object version is loaded to assembly cache from repository. If method code changes afterwards, its repeated start using the ForeExec operation will result in execution of the older method version, which already exists in assembly cache. To use the actual method version, restart BI server.
Various methods of using the operation are given in the following examples:
| Example name |
| Fore Method Execution |
| Sending Objects as Parameter Values |
| Working with Objects in JSON Format |
See also: