In this section you will learn how to create a DMS rpc job starting from a template project. First of all download Samples from DMSContainer Repository
DMSContainer Repository SamplesClone project dms_job_quickstart_only_rpc under dms_jobs_quickstart folder.
This project is going to be used as a template to create your job. Follow these steps:
Open the cloned project in Delphi IDE
Rename project as “dms_job_<yourjobname>”
Rename unit Jobs.QuickStart2.Job as “Job.<yourjobname>.rpc”
Rename Class TJobQuickStart1RPC as “T<yourjobname>RPC”
Write the methods you want to expose. You can find the Echo function as example that can be delete.
JSONRPC allows you to call all public methods you define in your RPC Class
Inside your RPC Job class you can access special folders:
Inside your RPC Job class you can access special method to serialize/unserialize data:
function GetSerializer: TMVCJsonDataObjectsSerializer;
function JSONObjectAs<T: class, constructor>(const JSON: TJSONObject): T;
procedure LoadJSONObjectAs<T: class, constructor>(const ObjectInstance: T;
const JSON: TJSONObject);
Check whether DMS_HOME variable is setted and that points to your DMS installation, in tools\Options\Environment Variables:
Build the package. You will find the newly created bpl under DMS installation in jobspackage folder as setted in Project Compiler Options:
Add Job configuration in jobsmanager.json file under Conf folder. Please change Jobname, jobclass and rpcuri with the right values:
{
"enabled": true,
"jobname": "your job name",
"schedule": "* * * * * *",
"jobtype":"class",
"rpcclass":"Jobs.<yourrpcunitname>.RPC.<yourrpcclassname>",
"rpcuri":"/<uripath>"
}
To correctly schedule your job please follow configuration page the scheduling syntax paragraph.
Restart your DMS Service.
To test , you can create a JSONRPC request using TMVCJSONRPCExecutor class:
private
procedure ValidateCertificateEvent(
const Sender: TObject;
const ARequest: TURLRequest;
const Certificate: TCertificate;
var Accepted: Boolean);
public
{ Public declarations }
end;
implementation
uses
System.NetEncoding, System.IOUtils,
MVCFramework.JSONRPC, MVCFramework.JSONRPC.Client;
procedure TMainForm.btnRequestClic(Sender: TObject);
var
lReq: IJSONRPCRequest;
lResp: IJSONRPCResponse;
lRPCExecutor: IMVCJSONRPCExecutor;
begin
lRPCExecutor := TMVCJSONRPCExecutor.Create('https://localhost/<yourrpcclassuri>');
//define ValidateCertificateEvent to escape certificate validation or you
lRPCExecutor.SetOnValidateServerCertificate(ValidateCertificateEvent);
lReq := TJSONRPCRequest.Create(1234, '<yourmethodname>');
lReq.Params.Add(<paramvalue>);
lResp := lRPCExecutor.ExecuteRequest(lReq);
showmessage(lResp.Result.AsString); //test result if you method returns one
end;
procedure TMainForm.ValidateCertificateEvent(const Sender: TObject;
const ARequest: TURLRequest; const Certificate: TCertificate;
var Accepted: Boolean);
begin
Accepted := True; // do not check certificate
end;
otherwise you can use any RESTClient and create a request:
url: ‘https://localhost/<yourrpcclassuri>:
http verb: POST
body:
{"jsonrpc": "2.0", "method": "yourrpcmethod", "params": [<array of params>], "id": 1}