<field name="status" reporter:datatype="text" reporter:label="Status"/>
<field name="edi" reporter:datatype="text" reporter:label="EDI Message Body"/>
<field name="jedi" reporter:datatype="text" reporter:label="JEDI Message Body"/>
+ <field name="labeled_json" reporter:datatype="text" reporter:label="Labeled JSON Message Body"/>
<field name="error" reporter:datatype="text" reporter:label="Error"/>
<field name="purchase_order" reporter:datatype="link" reporter:label="Purchase Order"/>
<field name="message_type" reporter:datatype="text" reporter:label="Message Type"/>
} else {
$edi_message->jedi($ret->value); # translator returns an object
}
+ eval {
+ my $labeled_objects = [];
+ my $jedi = $edi_message->jedi();
+ my $perl = __PACKAGE__->jedi2perl($jedi);
+ foreach my $part (@{$perl->{body}}) {
+ unless (ref $part and scalar keys %$part) {
+ next;
+ }
+ foreach my $key (keys %$part) {
+ my $msg = __PACKAGE__->message_object($part->{$key}) or next;
+ my $v = dump_readable_object($msg);
+ push @$labeled_objects, $v;
+ }
+ }
+ $edi_message->labeled_json( OpenSRF::Utils::JSON->perl2JSON( $labeled_objects ) );
+ };
+ if ($@) {
+ $logger->warn($@);
+ }
return $edi_message;
}
return \@messages;
}
+sub dump_readable_object {
+ my $edi_msg = shift;
+ my $obj = { 'children' => [] };
+ if (! ref $edi_msg) {
+ return $edi_msg;
+ }
+ my @keys = $edi_msg->part_keys();
+ foreach my $key ( @keys ) {
+ $key =~ s/^all_//;
+ my @parts = ();
+ my $child;
+ eval {
+ if ($key eq 'label' or $key eq 'desc' or $key eq 'code' or $key eq 'value') {
+ $child = 0;
+ @parts = ( $edi_msg->$key() );
+ } else {
+ $child = 1;
+ @parts = $edi_msg->part("all_$key");
+ }
+ };
+ if ($@) {
+ eval {
+ @parts = $edi_msg->part("$key");
+ };
+ if ($@) {
+ eval {
+ @parts = ( $edi_msg->$key() );
+ };
+ if ($@) {
+ $logger->warn('EDI pooh ' . Dumper($@));
+ }
+ }
+ }
+ if (scalar(@parts) == 1) {
+ if ($child) {
+ my $child_obj = dump_readable_object($parts[0]);
+ if (! defined $child_obj) {
+ next;
+ }
+ if (ref $child_obj) {
+ $child_obj->{'key'} = $key;
+ }
+ push @{ $obj->{'children'} }, $child_obj;
+ } else {
+ my $dobj = dump_readable_object($parts[0]);
+ if (! defined $dobj) {
+ next;
+ }
+ $obj->{$key} = $dobj;
+ }
+ } else {
+ if ($child) {
+ foreach my $part ( @parts ) {
+ my $child_obj = dump_readable_object($part);
+ if (! defined $child_obj) {
+ next;
+ }
+ if (ref $child_obj) {
+ $child_obj->{'key'} = $key;
+ }
+ push @{ $obj->{'children'} }, $child_obj;
+ }
+ } else {
+ $obj->{$key} = [];
+ foreach my $part ( @parts ) {
+ my $dobj = dump_readable_object($part);
+ if (! defined $dobj) {
+ next;
+ }
+ push @{ $obj->{$key} }, $dobj;
+ }
+ }
+ }
+ }
+ return $obj;
+}
+
# returns message object if processing should continue
# returns false/undef value if processing should abort
query="{id: '*'}"
[% IF ctx.page_args.0 %]
fieldOrder="['message_type', 'status', 'create_time', 'translate_time', 'process_time', 'error_time', 'error', 'account', 'remote_file']"
- suppressFields="['id', 'edi', 'jedi', 'purchase_order']"
+ suppressFields="['id', 'edi', 'jedi', 'labeled_json', 'purchase_order']"
[% ELSE %]
fieldOrder="['purchase_order', 'message_type', 'status', 'create_time', 'translate_time', 'process_time', 'error_time', 'error', 'account', 'remote_file']"
- suppressFields="['id', 'edi', 'jedi']"
+ suppressFields="['id', 'edi', 'jedi', 'labeled_json']"
[% END %]
editStyle='pane'
fmClass='acqedim'