मैं चीजों पर्ल कार्यप्रवाह मॉड्यूल के साथ काम पाने के लिए कोशिश कर रहा हूँ के साथ पर्ल कार्यप्रवाह मॉड्यूल - http://search.cpan.org/~jonasbn/Workflow/सत्यापनकर्ता
मैं यह पता लगाने की कि यह कैसे कार्य प्रवाह, कार्यों, शर्तों और सभी के साथ काम करता कामयाब रहे, लेकिन मैं यह करने के लिए नहीं मिल सकता है कार्रवाई के लिए सत्यापनकर्ता वर्ग लागू करें।
सत्यापनकर्ता से मेरा _init विधि लोड करता है और उस पंक्ति को प्रिंट करता है जिसे मैंने परीक्षण के लिए रखा है लेकिन सत्यापन विधि कभी ट्रिगर नहीं होती है। साथ ही, जब कार्रवाई वर्ग से $ self-> get_validators() को डंप करते समय मुझे खाली सूची मिलती है।
मैंने एक छोटा सा उदाहरण बनाया है, इसलिए कृपया इसे आजमाएं और अगर आपको समस्या दिखाई दे तो मदद करें। Tnx!
कोड के लिए लिंक - https://github.com/vmcooper/perl_workflow_test
कार्यक्रम चल रहा है
कार्यक्रम
Answer: London
If you answer right the action should change state to 'finished'. Try answering wrong first.
Capital city of England:
के साथ शुरू होता है, तो आप "बर्मिंघम" का जवाब यह
Your answer is being validated!
लिख सकते हैं और आप से पूछना चाहिए क्यू फिर से estion।
जब आप का जवाब "लंदन" यह
Correct! Current state of workflow is - finished
संपादित अब इसे बाहर लिखते हैं चाहिए "सही कार्यप्रवाह की वर्तमान स्थिति है - समाप्त" जो कुछ भी अपने जवाब है।
workflow_test.pl
use strict;
use Log::Log4perl qw(get_logger);
use Workflow::Factory qw(FACTORY);
Log::Log4perl::init('log4perl.conf');
system('clear');
# Stock the factory with the configurations; we can add more later if we want
FACTORY->add_config_from_file(
workflow => 'workflow.xml',
action => 'action.xml',
persister => 'persister.xml',
validator => 'validator.xml'
);
my $workflow = FACTORY->create_workflow("Workflow1");
my $context = $workflow->context;
while ($workflow->state eq "INITIAL") {
print "If you answer right the action should change state to 'finished'. Try answering wrong first.\n";
my $city = get_response("Capital city of England: ");
print "You answered - $city\n";
$workflow->execute_action('action1');
if($workflow->state eq "INITIAL") {
print "Your answer is wrong! try again!\n\n";
}
}
print "\nCorrect! Current state of workflow is - ".$workflow->state."\n\n";
# Generic routine to read a response from the command-line (defaults,
# etc.) Note that return value has whitespace at the end/beginning of
# the routine trimmed.
sub get_response {
my ($msg) = @_;
print $msg;
my $response = <STDIN>;
chomp $response;
$response =~ s/^\s+//;
$response =~ s/\s+$//;
return $response;
}
workflow.xml
<workflow>
<type>Workflow1</type>
<time_zone>local</time_zone>
<description>This is my workflow.</description>
<persister>Persister1</persister>
<state name="INITIAL">
<action name="action1" resulting_state="finished"/>
</state>
<state name="finished" />
</workflow>
action.xml
<actions>
<action name="action1" class="App::Action::Action1" >
<validator name="validator1">
<arg>$city</arg>
</validator>
</action>
</actions>
validator.xml
<validators>
<validator name="validator1" class="App::Validator::Validator1">
<param name="answer" value="London" />
</validator>
</validators>
अनुप्रयोग :: कार्रवाई :: Action1.pm
package App::Action::Action1;
use strict;
use base qw(Workflow::Action);
use Workflow::Exception qw(validation_error configuration_error);
use Data::Dumper;
sub new {
my $class = shift;
my $self = {};
bless ($self, $class);
return $self;
}
sub execute {
my $self = shift;
my $wf = shift;
print "App::Action::Action1::Execute\n";
print "Validators: ".Dumper($self->get_validators())."\n";
}
1;
अनुप्रयोग :: सत्यापनकर्ता :: Validator1.pm
package App::Validator::Validator1;
use strict;
use base qw(Workflow::Validator);
use Workflow::Exception qw(validation_error configuration_error);
use Data::Dumper;
use Carp qw(carp);
sub _init {
my ($self, $params) = @_;
unless ($params->{answer}) {
configuration_error
"You must define a value for 'answer' in ",
"declaration of validator ", $self->name;
}
if (ref $params->{answer}) {
configuration_error
"The value for 'answer' must be a simple scalar in ",
"declaration of validator ", $self->name;
}
print "Answer: ".$params->{answer}."\n";
$self->{ answer => $params->{answer} };
}
sub validate {
my ($self, $wf, $city) = @_;
print "Your answer is being validated!\n";
print "Your answer is - ".$city."\n";
my $check;
if ($city eq $self->{answer}){
$check = 1;
} else {
$check = 0;
}
unless ($check) {
validation_error "Validation error!";
}
}
1;
संपादित करें: अगर मैं सही निर्माण के बाद और इससे पहले कि कार्यप्रवाह वस्तु डंप किसी भी कार्रवाई है निष्पादित मैं इस मिल:
Workflow: $VAR1 = bless({
'_states' => {
'INITIAL' => bless({
...,
'_actions' => {
'action1' => {
'resulting_state' => 'finished',
'name' => 'action1'
}
},
'_factory' => bless({
...,
'_action_config' => {
'default' => {
'action1' => {
'name' => 'action1',
'class' => 'App::Action::Action1',
'validator' => [
{
'arg' => [
'$city'
],
'name' => 'validator1'
}
]
}
}
},
'_validators' => {
'validator1' => bless({
'name' => 'validator1',
'class' => 'App::Validator::Validator1',
'PARAMS' => {}
}, 'App::Validator::Validator1')
},
'_validator_config' => {
'validator1' => {
'answer' => 'London',
'name' => 'validator1',
'class' => 'App::Validator::Validator1'
}
},
...
}, 'Workflow::Factory'),
'type' => 'Workflow1',
'PARAMS' => {}
}, 'Workflow::State'),
'finished' => $VAR1->{'_states'}{'INITIAL'}{'_factory'}{'_workflow_state'}{'Workflow1'}[1]
},
...
}, 'Workflow');
आप देख सकते हैं, सत्यापनकर्ता यहाँ है और सब कुछ सेट होने और लग रहा है यह ठीक है लेकिन सत्यापनकर्ता लागू नहीं किया जाता है।
एचएम ... मैं इसे स्पष्ट और न्यूनतम के रूप में समझा सकता हूं: कार्रवाई निष्पादित होने से पहले सत्यापनकर्ता लागू नहीं किया गया है। उस के रूप में सरल। मैंने कोड और एक गिथब रेपो भी शामिल किया है, इसलिए मैं वास्तव में नहीं जानता कि कैसे और अधिक सटीक होना चाहिए। – Vedran
कोड इतना आसान है क्योंकि यह हो सकता है क्योंकि मैं यह समझने की उम्मीद कर रहा हूं कि यह मॉड्यूल कैसे काम करता है। आप देख सकते हैं कि "प्रोग्राम चालू करना" के तहत क्या करना चाहिए। यह बोल्ड है। मैं आपको एक नोटिस देता हूं कि मैं यहां पर पर्ल मॉड्यूल का उपयोग कर रहा हूं, जिसे मैंने स्वयं नहीं लिखा था। सीपीएन के शीर्ष पर एक लिंक है जहां आप मॉड्यूल देख सकते हैं जिसके बारे में मैं बात कर रहा हूं। यही कारण है कि मैं पूछ रहा हूं कि कोई जानता है कि इसका उपयोग कैसे किया जाए और मैंने कॉन्फ़िगरेशन फ़ाइलों या कक्षाओं में क्या गलत किया? – Vedran
क्षमा करें, बर्मिंघम उदाहरण के अतिरिक्त चूक गए। प्रश्न वास्तव में अब पूरा हो गया है, धन्यवाद। – ikegami