Ovm, dynamic arrays, sequences

I am very new to ovm, and I am very confused and feeling lost. Any help is greatly appreciated.

I have a sequence that looks like this. I removed parts of the code that are not relevant to this question.

Q1. Currently I have the wdata declared as a fixed size array and fill it in pre_body(), but ideally
I would like it to be burst_len size and fill it with random data.
Q2. Right now the sequence executes only one transaction. I would like to have it called in a loop with
different random data each time. Where should add the loop? Currently even if I add a loop
some where, my_xxx_data stays constant the way I have it setup.
How do I achieve this?

virtual class jtag_base_sequence extends ovm_sequence #(jtag_transaction);
rand drp_address_t my_drp_addr;
rand drp_data_t my_drp_wdata[32];
rand int my_burst_len;

class drp_command_seq extends jtag_base_sequence;

task body();
`ovm_do_with(req, {jtag_command==my_jtag_command; drp_addr==my_drp_addr;
drp_rw==my_drp_rw; burst_len==my_burst_len; burst==my_burst;
foreach(drp_wdata[i]) drp_wdata[i] == my_drp_wdata[i];

class my_single_write_seq extends drp_command_seq;

virtual task pre_body();
my_drp_wdata[0]= 16’h1234;

class single_write extends jtag_base_test;

 virtual function void build();
    set_config_string("my_jtag_env.jtg_agent.seqr", "default_sequence",
 endfunction : build

endclass: single_write