Конвертировать данные SDT в BC в Genexus - PullRequest
0 голосов
/ 04 декабря 2018

Я заполнил SDT данными в Genexus 15 и мне нужно сохранить их в транзакции.SDT имеет двухуровневую структуру с информацией заголовка и подробными элементами.

Я пытался с этим DataProvider, но что-то не так, потому что я получаю ошибку нарушения внешнего ключа при попытке его выполнить:

Правила:

parm(in: &NewInvoice); // SDT variable

Источник:

DPInvoice 
{
    StampId = &NewInvoice.StampId
    InvoiceNumber = &NewInvoice.InvoiceNumber
    CustomerId = &NewInvoice.CustomerId
    Concept
    {
        ProductId = &NewInvoice.Concept.CurrentItem.ProductId
        ConceptQty = &NewInvoice.Concept.CurrentItem.ConceptQty
    }
}

Событие, запускающее DP в веб-панели:

&Invoice = DPInvoice(&NewInvoice)
&Invoice.Insert()
commit

Это структура транзакции

Это структура SDT

Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 04 декабря 2018

Необходимо выполнить итерацию по второму уровню &NewInvoice.

. Определить переменную &NewInvoiceItem типа SDTInvoiceCopy1.ConceptItem в DataProvider и использовать следующий исходный код:

DPInvoice 
{
    StampId = &NewInvoice.StampId
    InvoiceNumber = &NewInvoice.InvoiceNumber
    CustomerId = &NewInvoice.CustomerId
    Concept Input &NewInvoiceItem in &NewInvoice.Concept
    {
        ProductId = &NewInvoiceItem.ProductId
        ConceptQty = &NewInvoiceItem.ConceptQty
    }
}
...