Patch level : 12.0 1028

Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe
Commento
            :
Modficata la possibilità di caricare campi delle righe documento con i valori di campi delle righe di riferimento.

Interno:

Per recuperare i valori bisogna definire nel profilo riga ducumento e profilo documento due variabili :

RIF_FLD_ROW per i valori da recuperare dichiarato come TRecfield cioè campo virtuale es. RG1:RIFFLEX ora è una token string es. Campo1|Campo2|Campo3.....
RIF_FLD_UPDATE_ROW per i campi da aggiornare dichiarato come campo normale es. RIFFLEX ora è una token string es. Campo1|Campo2|Campo3.....
Se invece voglio caricare la maschera di inserimento invece di definire RIF_FLD_UPDATE_ROW bisogna definire un handler di riga sul campo da caricare con codice 9.
This commit is contained in:
Alessandro Bonazzi 2021-01-13 21:18:37 +01:00
parent 9606cf6656
commit 258579ca17
4 changed files with 21 additions and 7 deletions

View File

@ -740,7 +740,7 @@ public:
const TDate get_property_date(const char * paragraph, const char * property_name, const char * defval = "", int idx = -1) const;
const real get_property_real(const char * paragraph, const char * property_name, const char * defval = "", int idx = -1) const;
const TString & retrieve_original_row_field();
const TString & retrieve_original_row_field(const TString & rif_fld);
TRiga_documento(TDocumento* doc, const char* tipo = NULL);
TRiga_documento(const TRiga_documento & row);

View File

@ -1896,7 +1896,7 @@ const real TRiga_documento::get_property_real(const char * paragraph, const char
return r;
}
const TString & TRiga_documento::retrieve_original_row_field()
const TString & TRiga_documento::retrieve_original_row_field(const TString & rif_fld)
{
TString & val = get_tmp_string(4096);
@ -1914,7 +1914,6 @@ const TString & TRiga_documento::retrieve_original_row_field()
FOR_EACH_ARRAY_ROW(row_refs, r, row_ref)
{
const TRectype& orig_row = cache().get(LF_RIGHEDOC, *row_ref); // ORC | 2020 | D | 3 | 8
const TString & rif_fld = get_property_str("", RIF_FLD_ROW);
TRecfield riffld((TRectype &)orig_row, rif_fld);
const TString rifval = (const char *)riffld;

View File

@ -1580,9 +1580,16 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
}
FOR_EACH_SELF_PHYSICAL_RDOC(i, rdoc)
{
const TString & row_field = rdoc->get_property_str("", RIF_FLD_UPDATE_ROW);
if (row_field.full())
rdoc->put(row_field, rdoc->retrieve_original_row_field());
TToken_string row_fields = rdoc->get_property_str("", RIF_FLD_UPDATE_ROW);
TToken_string rif_fields = rdoc->get_property_str("", RIF_FLD_ROW);
if (row_fields.full())
FOR_EACH_TOKEN(row_fields, f)
{
const TString rif_fld = rif_fields.get();
rdoc->put(f, rdoc->retrieve_original_row_field(rif_fld));
}
}
err = TMultiple_rectype::write_rewrite(f, re);

View File

@ -3671,7 +3671,15 @@ bool multi_row_rif_handler(TMask_field& f, KEY key)
const int current_doc_row = sh.selected() + 1;
TRiga_documento & row = mask.doc()[current_doc_row];
f.set(row.retrieve_original_row_field());
const TToken_string rif_fields = row.get_property_str("", RIF_FLD_ROW);
int nfield = rif_fields.find(f.field()->name());
if (nfield >= 0)
{
const TString rif_fld = rif_fields.get(nfield);
f.set(row.retrieve_original_row_field(rif_fld));
}
}
return true;
}