Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Tässä artikkelissa on tietoja siitä, miten uuden tapahtuman pakolliset toimenpiteet toteutetaan.
Tehtävät ovat luokkia, jotka viimeistelevat työn verointegraatissa. Tiedosto-objekti TaxIntegrationDocumentObject on välitetty tehtävästä toimintoon. Tehtävä suoritetaan kohteen metatiedoissa TaxIntegrationDocumentObject. Kaikki verointegriteettitoiminnot TaxIntegrationAbstractActivity laajentavat luokan, ja ne voidaan liittää sarjaan ja suorittaa TaxIntegrationFacade::calculate() seuraavassa järjestyksessä.
Kaikkia tehtäviä ei saa ottaa käyttöön tai muokata uuden tapahtuman integroimista varten. Useimmissa tapauksissa riittää kaksi tiettyä tointa: TaxIntegrationDataRetrievalActivityOnDocument TaxIntegrationDataPersistenceActivityOnDocument Jos uudelle tapahtumalle on otettu käyttöön uusia ominaisuuksia , katso lisätietoja verointegraaton käyttöönottamisen ominaisuuksista.
Tietojen noutaminen
Tietojen noutaminen (TaxIntegrationDataPersistenceActivityOnDocument) kopioi kaikki metatiedot, joita tarvitaan veron laskentaan tietokannasta objektiin TaxIntegrationDocumentObject .
Tämä tehtävä muodostaa ja kutsuu sitten TaxIntegrationAbstractDataRetrievalTemplate luokan tapahtumakohtaista alaluokkaa sen mukaan, HeadingTableId mikä on käsiteltävän tapahtuman arvo tehtaassa. Seuraavaksi aliluokka suorittaa kyselyitä kaikista tapahtumariveistä, kuluista ja muista tietokannan käyttökelpoisista tiedoista ja tallentaa tiedot tiedostokohteelle.
Aloita tietojen noutaminen luomalla ja panemalla käyttöön uusi aliluokka TaxIntegrationAbstractDataRetrievalTemplate. Anna aliluonnille nimi, esimerkiksi TaxIntegration***DataRetrieval. Seuraavassa luettelossa on integroitujen tapahtumien tietojen noutaminenluokkia:
- AxClass/TaxIntegrationPurchTableDataRet myösval
- AxClass/TaxIntegrationPurchParmTableDataRet myösval
- AxClass/TaxIntegrationPurchREQTableDataRet myösval
- AxClass/TaxIntegrationPurchRFQTableDataRet myösval
- AxClass/TaxIntegrationVendInvoiceInfoTableDataRetraporttival
- AxClass/TaxIntegrationSalesTableDataRet myösval
- AxClass/TaxIntegrationSalesParmDataRet myösval
Nimet koostuvat Etuliite TaxIntegration-integratiosta, tapahtuman otsikkotaulun nimestä ja sitten DataRetlokivalista. Jos vapaatekstilaskutapahtuma on integroittava, TaxIntegrationCustInvoiceTableRetrieval luokka tulee ottaa käyttöön.
Tietojen noutaminen -luokan käyttöönotaminen
Tässä osassa esitellään tietojen noutaminenluokan käyttöönotto. Sitä käytetään TaxIntegrationPurchTableDataRetrieval esimerkinä tämän luokan pääpiirteittäin.
[TaxIntegrationDataRetrieval(tableStr(PurchTable))] // Attribute for TaxIntegrationDataRetrievalActivityOnDocument to call this class
public class TaxIntegrationPurchTableDataRetrieval extends TaxIntegrationAbstractDataRetrievalTemplate
{
protected PurchTable purchTable; // Header table buffer
protected PurchLine purchLine; // Line table buffer
// Query builder methods, for the SQL query for framework to execute
[Replaceable]
protected SysDaQueryObject getDocumentQueryObject()
[Replaceable]
protected SysDaQueryObject getLineQueryObject()
[Replaceable]
protected SysDaQueryObject getDocumentChargeQueryObject()
[Replaceable]
protected SysDaQueryObject getLineChargeQueryObject()
// Construct a TaxIntegrationLineObject
protected TaxIntegrationLineObject constructLine()
// Data retrieval methods, copy the metadata from table buffer to Document object.
protected void copyToDocument()
protected void copyToDocumentFromHeaderTable()
protected void copyToLine(TaxIntegrationLineObject _line)
protected void copyToLineFromLineTable(TaxIntegrationLineObject _line)
...
}
Ilmoitus
Seuraava esimerkki on peräisin TaxIntegrationPurchTableDataRetrieval.xpp.
/// <summary>
/// The <c>TaxIntegrationPurchTableDataRetrieval</c> class retrieves data from <c>PurchTable</c>, etc.
/// </summary>
[TaxIntegrationDataRetrieval(tableStr(PurchTable))]
public class TaxIntegrationPurchTableDataRetrieval
extends TaxIntegrationAbstractDataRetrievalTemplate
{
// ...
Luokka ilmoitetaan määritteen avulla [TaxIntegrationDataRetrieval(tableStr(PurchTable))] . Sitä käytetään tämän TaxIntegrationDataRetrievalActivityOnDocument luokan valmistamaan ja kutsumaan sitä tehtaan mallin mukaan. Taulun nimen tulee olla tapahtumaotsikon taulu, HeadingTableId ja taulun tunnuksen tulee olla sama kuin objektissa alustettu TaxIntegrationDocumentObject arvo.
Katso tässä actStatic esitettyä TaxIntegrationDataRetrievalActivityOnDocument.xpp menetelmää.
protected static void actStatic(TaxIntegrationDocumentObject _document)
{
// ...
TaxIntegrationAbstractDataRetrievalTemplate dataRetrievalInstance = SysExtensionAppClassFactory::getClassFromSysAttributeWithInstantiationStrategy(
classStr(TaxIntegrationAbstractDataRetrievalTemplate),
new TaxIntegrationDataRetrievalAttribute(tableId2Name(_document.getLocalTableId())),
new SysExtensionGenericInstantiation(_document));
/// ...
dataRetrievalInstance.execute();
}
Ilmoita kullekin tapahtumalle vähintään kaksi taulua. Tämän tapahtuman otsikkotaulu ja rivitaulu on ilmoitettu. (Esimerkiksi ostotilauksissa taulut ovat ja PurchTable PurchLine.) Jos muiden taulujen kenttiä käytetään laskentaan syötteenä, ne näytetään tässä.
[TaxIntegrationDataRetrieval(tableStr(PurchTable))]
public class TaxIntegrationPurchTableDataRetrieval
extends TaxIntegrationAbstractDataRetrievalTemplate
{
protected PurchTable purchTable;
protected PurchLine purchLine;
protected TransportationDocument transportationDocument; // Other tables through join relationship
protected VendTable vendTable;
private LedgerDimensionDefaultAccount ledgerAccount;
Kyselyobjektin luominen
Verointegra tämän menetelmän avulla voit tehdä kyselyitä verointegroinnissa SysDaQuery . Useiden menetelmien käytön jälkeen get***QueryObject() verointegrointikehys kutsui näitä menetelmiä, hakee tiedot tietokannasta ja liittää sen aiemmin ilmoitettuun taulun puskuriin.
Kyselyobjekteja on muotoiltava neljä, jotta voit suorittaa seuraavat kyselyt:
- Suorittaa kyselyn otsikon tason tauluista ja
HeadingTableIdniidenHeadingRecIdarvoistaTaxIntegrationDocumentObject. Otsikkotason taulut viittaavat tauluihin, jotka liittyvät tapahtuman otsikkotauluun (esimerkiksiPurchTableostotilauksiin). Jos tiedosto-objekti rakennetaan tietueen avullaTaxIntegrationDocumentObject::constructWithRecord(Common _record), määritä otsikkotaulu suoraan puskuriinthis.document.getLocalRecord(). Otsikkotaulua ei tarvitse kysellä uudelleen. - Kysele rivitaulua otsikkotaulun ja rivitaulun välisen suhteen mukaan, kun otsikkotaulun puskuri on annettu.
- Kysele otsikkokulua (
MarkupTrans). - Kysele rivikulua (
MarkupTrans).
Seuraava esimerkki on peräisin TaxIntegrationPurchTableDataRetrieval.xpp.
/// <summary>
/// Gets the query for the document.
/// </summary>
/// <returns>The query for the document.</returns>
[Replaceable]
protected SysDaQueryObject getDocumentQueryObject()
{
this.purchTable = this.document.getLocalRecord();
SysDaQueryObjectBuilder queryObjectBuilder = SysDaQueryObjectBuilder::from(this.vendTable)
.where(this.vendTable, fieldStr(VendTable, AccountNum))
.isEqualTo(this.purchTable, fieldStr(PurchTable, OrderAccount))
.outerJoin(this.transportationDocument) // primary key
.where(this.transportationDocument, fieldStr(TransportationDocument, RecId))
.isEqualTo(this.purchTable, fieldStr(PurchTable, TransportationDocument));
.outerJoin(this.vendTableInvoice) // alternate key
.where(this.vendTableInvoice, fieldStr(VendTable, AccountNum))
.isEqualTo(this.purchTable, fieldStr(PurchTable, InvoiceAccount));
return queryObjectBuilder.toSysDaQueryObject();
}
/// <summary>
/// Gets the query for the lines of the document.
/// </summary>
/// <returns>The query for the lines of the document</returns>
[Replaceable]
protected SysDaQueryObject getLineQueryObject()
{
return SysDaQueryObjectBuilder::from(this.purchLine)
.where(this.purchLine, fieldStr(PurchLine, PurchId))
.isEqualToLiteral(this.purchTable.PurchId)
.toSysDaQueryObject();
}
/// <summary>
/// Gets the query for the charges of the document.
/// </summary>
/// <returns>The query for the charges of the document</returns>
[Replaceable]
protected SysDaQueryObject getDocumentChargeQueryObject()
{
return SysDaQueryObjectBuilder::from(this.markupTransOfDocument)
.where(this.markupTransOfDocument, fieldStr(MarkupTrans, TransTableId))
.isEqualToLiteral(this.purchTable.TableId)
.where(this.markupTransOfDocument, fieldStr(MarkupTrans, TransRecId))
.isEqualToLiteral(this.purchTable.RecId)
.toSysDaQueryObject();
}
/// <summary>
/// Gets the query for the charges of each line.
/// </summary>
/// <returns>The query for the charges of each line.</returns>
[Replaceable]
protected SysDaQueryObject getLineChargeQueryObject()
{
return SysDaQueryObjectBuilder::from(this.markupTransOfLine)
.where(this.markupTransOfLine, fieldStr(MarkupTrans, TransTableId))
.isEqualToLiteral(this.purchLine.TableId)
.where(this.markupTransOfLine, fieldStr(MarkupTrans, TransRecId))
.isEqualToLiteral(this.purchLine.RecId)
.toSysDaQueryObject();
}
Muistiinpano
Jos muiden taulujen kenttiä tarvitaan, liitä ne kyselyobjektiin. Edellisessä esimerkissä tätä menetelmää käytetään menetelmässä transportationDocument getDocumentQueryObject() .
Riviobjektin muodostaminen
/// <summary>
/// Constructs a line of the document.
/// </summary>
/// <returns>The constructed line of the document.</returns>
protected TaxIntegrationLineObject constructLine()
{
return TaxIntegrationLineObject::constructOnDocument(
this.purchLine.TableId,
this.purchLine.RecId,
this.document);
}
Muodosta objekti TaxIntegrationLineObject rivin taulun tunnuksen ja tietuetunnuksen avulla. Tätä menetelmää kutsutaan kehykseksi. Korvaa uuden tapahtuman taulun puskurin.
Menetelmien kopioiminen
Kopioinnin aloittamista useiden menetelmien on oltava käytössä, jotta metatietoja voidaan kopioida taulun puskurista tiedosto-objektiin. Lisätietoja on kohdassa Tietojen hakeminen tietokannasta. Koska on luotava uusia luokkia, laajennusten tiedot voidaan ohittaa.
Kun käytät menetelmiä, määritä, mitkä kentät veron laskentapalvelu edellyttää, ja kopioi vain pakolliset kentät. Lisätietoja uusien kenttien lisäämiseen on kohdassa Tietomuuttujan lisääminen objektiluokkaan. Lisätietoja niiden lisäämiseen pyyntöön on kohdassa Tietojen lisääminen pyyntöön.
Tietojen säilyvyystehtävä
Kun tietojen säilymistehtävä (TaxIntegrationDataPersistenceActivityOnDocument) suoritetaan, veron laskentapalvelua kutsutaan. Vastaus käsitellään ja tallennetaan TaxIntegrationDocumentObject. Tietojen säilyvyystehtävän tehtävä on päivittää tarvittavat metatiedot vastauksena tietokantaan. Metatietoja ovat veron laskentatulokset, veroryhmä, veronimikeryhmä, ALV-tunnus ja luettelokoodi.
Tietojen noudon luokan TaxIntegrationDataPersistenceActivityOnDocument lisäksi myös rakentaa ja kutsuu HeadingTableId tietojen säilymisluokkaa käsiteltävän tapahtuman arvon mukaisesti. Tässä on otettava käyttöön TaxIntegration***DataPersistence luokka. Luokka on esimerkiksi käytössä TaxIntegrationCustInvoiceTableDataPersistence vapaatekstilaskuissa.
Toisin kuin tietojen noutaminen, TaxIntegrationDataPersistenceActivityOnDocument tekee kuitenkin itse suurimman osan pysyvyydestään eli verolaskennan tuloksesta. Tätä osaa käsitellään vakiokoodilla. Uutta tapahtumaa integroitaessa ei tarvita lisätyötä.
Uusi pysyvuusluokka tallentaa tapahtumakohtaiset kentät (kuten veroryhmän, veronimikeryhmän, ALV-tunnuksen, numerosarjaryhmän ja luettelokoodin) tietokantaan.
Seuraavassa esimerkissä esitetään perusrakenne TaxIntegrationPurchTableDataPersistence.
/// <summary>
/// The <c>TaxIntegrationPurchTableDataPersistence</c> class persists data to <c>PurchTable</c>, etc.
/// </summary>
[TaxIntegrationDataPersistence(tableStr(PurchTable))] // Attribute for TaxIntegrationDataPersistenceActivityOnDocument to call
public class TaxIntegrationPurchTableDataPersistence
extends TaxIntegrationAbstractDataPersistenceTemplate
{
// Table buffer to be updated
protected PurchTable purchTable;
protected PurchLine purchLine;
// Query builder methods
[Replaceable]
protected SysDaQueryObject getDocumentQueryObject()
[Replaceable]
protected SysDaQueryObject getLineQueryObject()
[Replaceable]
protected SysDaQueryObject getDocumentChargeQueryObject()
[Replaceable]
protected SysDaQueryObject getLineChargeQueryObject()
// Get line object
protected TaxIntegrationLineObject getLine()
// Save to database
protected boolean saveDocument()
protected boolean saveLine(TaxIntegrationLineObject _line)
...
}
Kuten edellinen esimerkki osoittaa, tietojen säilyvyysluokka muistuttaa tietojen noudon luokan rakennetta. Ainoa ero on se , että tietojen noutaminenluokka kopioi tiedot tietokannasta tiedosto-objektiin, kun taas tietojen säilyvyysluokka kopioi tietoja tiedosto-objektista tietokantaan. Seuraavassa on lyhyt esittely käyttöönotosta. Kaikkia koodiesimerkkejä ei liitetä.
[TaxIntegrationDataPersistence(tableStr(PurchTable))]on attribuutti,TaxIntegrationDataPersistenceActivityOnDocumentjoka rakennetaan tehtaassa.QueryObjecton lähes sama kuin tietojen noutaminen, lukuun ottamatta kahta pistettä:-
.forUpdate()-luokkaa kutsutaan pysyväksi päivittämään tiedot tietokantaan. - Taulua
Lesskäytetään, koska se on päivitettävä.
-
Menetelmä
getLine()muistuttaa tietojenconstructLine()noudon luokan menetelmää. Taulun nimi voidaan kuitenkin korvata uudella tapahtumataululla.Menetelmät, jotka alkavat käyttäen tallennusta, ovat tämän luokan päätyö. Lisätietoja on seuraavassa osassa.
Tallenna menetelmät
Seuraava esimerkki on peräisin TaxIntegrationPurchTableDataPersistence.
/// <summary>
/// Saves the document.
/// </summary>
/// <returns>Always true.</returns>
protected boolean saveDocument()
{
TaxIntegrationTaxIdUtility::saveTaxIDFromDocumentToTable(document, purchTable);
TaxIntegrationListCodeUtility::saveListCodeFromDocumentToTable(document, purchTable);
this.saveNumberSequenceGroupToTable();
return true;
}
/// <summary>
/// Saves the current line of the document.
/// </summary>
/// <param name = "_line">The current line of the document.</param>
/// <returns>true if the operation is successful; otherwise, false.</returns>
protected boolean saveLine(TaxIntegrationLineObject _line)
{
if (!_line.isTaxable())
{
return true;
}
TaxGroup taxGroup = _line.getTaxGroup();
TaxItemGroup taxItemGroup = _line.getTaxItemGroup();
this.checkGroup(taxGroup, taxItemGroup);
purchLine.TaxGroup = taxGroup;
purchLine.TaxItemGroup = taxItemGroup;
purchLine.doUpdate();
return true;
}
Menetelmä saveDocument() päivittää otsikkotaulun kentät, kun taas menetelmä saveLine() päivittää tapahtumarivin taulun kentät.
Tällä hetkellä alv-tunnus, numerosarjaryhmä ja luettelokoodi päivitetään otsikkotauluun. Menetelmässä saveLine() on päivitettävä veron laskentapalvelun palauttama veroryhmä ja nimikkeen veroryhmä. Tämä vaatimus koskee useimpia tapahtumia.
Muistiinpano
Jotta vältyt ylimääräisellä logiikalla, käytä doUpdate() sitä. update()