Introduction
This chapter is provided to share some code snippets that show the usage of the Perl libraries.
Auto-Generated Code
After generation of the plugin using pdk
you will see that your
plugin has a single main class which inherits FlowPDF. This file will be
at dsl/properties/perl/lib/EC/Plugin/YOURCLASS.pm.
For each procedure in the plugin, a corresponding method will be created in a file with the same name as the procedure. For example dsl/procedures/YOUR_PROCEDURE/steps/YOUR_PROCEDURE.pl you will look something like this:
$[/myProject/perl/core/scripts/preamble.pl] use EC::Plugin::NewRest; # Auto generated code of plugin step EC::Plugin::YOURCLASS->runStep('YOURPROCEDURE', 'YOURPROCEDURESTEP', 'functionName');
The main plugin class will have a function called functionName as follows:
sub functionName { my ($pluginObject, $runtimeParameters, $stepResult) = @_; ...; }
Retrieving parameter values from configuration and step
Using one API
Here is a snippet where in both config as well as step parameter values can be retrieved using the same API.
my $runtimeParameters = $context->getRuntimeParameters(); # runtimeParameters is a HASH reference with following fields: # user, password, proxy_user, proxy_password, basic_user, basic_password (taken from config) # requestMethod and requestContent (taken from procedure parameters). print $runtimeParameters->{requestMethod}; print $runtimeParameters->{proxy_user};
Using two different APIs
Here is a snippet where in config and step parameter values are retrieved using different APIs.
my $context = $pluginObject->newContext(); my $parameters = $context->getStepParameters(); my $cred = $parameters->getParameter('credential'); my $url = $parameters->getParameter('url')->getValue(); my $method = undef; if (my $p = $parameters->getParameter('method')) { $method = $p->getValue(); } my ($username, $password); if ($cred) { $username = $cred->getUserName(); $password = $cred->getSecretValue(); }
my $configValues = $context->getConfigValues();
You can then use the methods in FlowPDF::Config object to access the config values.
Setting step results
for my $i (1..100) { $stepResult->setJobStepSummary("Progress: $i\n"); $stepResult->applyAndFlush(); sleep 1; }
or
# Step 1. Creating an object. my $stepResult = $context->newStepResult(); # Step 2. Adding action items. $stepResult->setOutputParameter('executionResult', 'Successfully finished!'); $stepResult->setJobStepSummary('Done with success'); # Step 3. Applying changes. $stepResult->apply();
Performing REST requests
# retrieving new rest client object. my $restClient = $context->newRESTClient(); # creating HTTP::Request object using our wrappers my $req = $restClient->newRequest(GET => 'https://localhost:8080'); # performing request and getting HTTP::Response object. my $response = $restClient->doRequest($req); # printing response content: print $response->decoded_content();
CLI execution
# Step 1 and 2. Loading component and creating CLI executor with working directory of current workspace. my $cli = FlowPDF::ComponentManager->loadComponent('FlowPDF::Component::CLI', { workingDirectory => $ENV{COMMANDER_WORKSPACE} }); # Step 3. Creating new command with ls as shell and -la as parameter. my $command = $cli->newCommand('ls', ['-la']); # adding two more parameters for command $command->addArguments('-lah'); $command->addArguments('-l'); # Step 4. Executing a command my $res = $cli->runCommand($command); # Step 5. Processing a response. print "STDOUT: " . $res->getStdout();
Logging
use FlowPDF::Log; logInfo("This is info"); logError("This is error");
or
my $reference = { one => 'two', three => 'four' }; logInfo("Reference is: ", $reference);
Defining custom fields
You can define custom fields in the pluginInfo subroutine of your main plugin module and retrieve them elsewhere.
sub pluginInfo { return { pluginName => '@PLUGIN_KEY@', pluginVersion => '@PLUGIN_VERSION@', configFields => ['config'], configLocations => ['ec_plugin_cfgs'], defaultConfigValues => { authScheme => 'basic' }, configValues => { one => 'two' } }; }
Here is how you retrieve them:
my $pluginValues = $pluginObject->getPluginValues(); logInfo("Value of one is: $pluginValues->{one}");