Piezīme
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt pierakstīties vai mainīt direktorijus.
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt mainīt direktorijus.
Pakalpojumu izmantošana kontrolē nodokļu integrācijas plūsmu, izmantojot secību, kas uztur aktivitāšu sarakstu. Šis raksts iepazīstina šīs trīs klases nodokļu integrācijā.
Pamatlīdzekļu darbības
public final static class TaxIntegrationFacade
Feaade (TaxIntegrationFacade
) ir papildu nodokļu integrācijas interfeiss. Tas ir tilts uz nodokļu aprēķinu pakalpojumu.
Šajā piemērā parādīta svarīgākā metode.
[Replaceable]
public static void calculate(TaxIntegrationDocumentObject _document)
Šī metode pieņem dokumentu (TaxIntegrationDocumentObject
) kā ievadi un atgriež to void
.
Metode modificē dokumentu tieši. Dokuments darbojas arī kā rezultāts.
Piezīme
Metode ir nomaināma. Citiem vārdiem sakot, to var pilnībā nomainīt (pielāgots).
TaxIntegrationSequence sequence = TaxIntegrationSequence::construct(LoggerName)
.appendActivityOnDocument(TaxIntegrationSettingRetrievalActivityOnDocument::construct())
.appendActivityOnDocument(TaxIntegrationDataRetrievalActivityOnDocument::construct())
.appendActivityOnDocument(TaxIntegrationCalculationActivityOnDocument::construct())
// ...
.appendActivityOnDocument(TaxIntegrationDataPersistenceActivityOnDocument::construct());
sequence.act(_document);
if (!_document.isOK())
{
throw _document.getException();
}
Metodē tiek veidota un izsaukta secība (TaxIntegrationSequence
). Visas aktivitātes tiek pievienotas secībai pēc kārtas.
Kā pieprasīts, izņēmums ir skaidri uzmests beigās.
Sērija
Secība (TaxIntegrationSquence
) ir īpaša aktivitāte, kas uztur aktivitāšu secību. Izsaucot act
tās metodi, visas aktivitātes tiek palaistas tādā secībā, kā tās tiek pievienotas.
public final class TaxIntegrationSequence
extends TaxIntegrationAbstractActivity
{
public final void act(TaxIntegrationDocumentObject _document);
private void actInternal(TaxIntegrationDocumentObject _document);
}
Secības izmantošanai ir jāveic šādas darbībasTaxIntegrationSequence
:
- Metode
construct
izveido secību. - Secība
appendActivitySequence
tiekappendActivityOnDocument
veidotaappendActivityOnLine
, izmantojot metodes. - Metode
act
ir secība.
Iekšēji secība uztur aktivitāšu sarakstu (List
). Pēc tam tas tiek uzskaitīts piesaukšanas () sarakstāact
.
Secība izsauc aktivitātes
shouldSkip
metodi, lai noteiktu, vai šī dokumenta aktivitāte ir jāizlaiž.TaxIntegrationSequence
UnTaxIntegrationAbstractActivityOnDocument
, ja aktivitāte nav jāizlaiž, metode tiek izsauktaact
tieši.Secībai
TaxIntegrationAbstractActivityOnLine
tiek uzskaitīti visi dokumentaTaxIntegrationLineObject
objekti un izsaukta tāact
metode. Maksas tiek ieviestas arī objektāTaxIntegrationLine
. Metodeact
vispirms tiek izsaukta no dokumenta maksām. Pēc tam tas tiek izsaukts dokumenta rindās kopā ar maksu katrā rindā. Piemēram, dokumentā ir divas maksas un divas rindas. Vienlaicīgi katrai rindai ir divas maksas. Šajā gadījumā pilnīga secība būs šāda:- Pirmā dokumenta maksa
- Dokumenta otrā maksa
- Dokumenta pirmā rinda
- Pirmās rindas maksa
- Pirmās rindas otrā maksa
- Dokumenta otrā rinda
- Otrās rindas pirmā maksa
- Otrās rindas maksa
TaxIntegrationSequence
ir paredzēts izmantošanai tieši un tiek ieviesta kā konkrēta klase, kam ir publiska act
metode.
Tālākajos piemēros ir parādīta actInternal
ātrās atsauces metode.
private void actInternal(TaxIntegrationDocumentObject _document)
{
var enumerator = list.getEnumerator();
while (enumerator.moveNext())
{
anytype current = enumerator.current();
if (current is TaxIntegrationSequence)
{
TaxIntegrationSequence sequence = current;
sequence.act(_document);
continue;
}
if (current is TaxIntegrationAbstractActivityOnDocument)
{
TaxIntegrationAbstractActivityOnDocument activity = current;
if (!activity.shouldSkip(_document))
{
activity.act(_document);
}
continue;
}
if (current is TaxIntegrationAbstractActivityOnLine)
{
TaxIntegrationAbstractActivityOnLine activity = current;
if (!activity.shouldSkip(_document))
{
SetEnumerator chargeEnumerator = _document.getChargeSet().getEnumerator();
while (chargeEnumerator.moveNext())
{
TaxIntegrationLineObject charge = chargeEnumerator.current();
activity.act(charge);
}
SetEnumerator lineEnumerator = _document.getLineSet().getEnumerator();
while (lineEnumerator.moveNext())
{
TaxIntegrationLineObject line = lineEnumerator.current();
activity.act(line);
chargeEnumerator = line.getChargeSet().getEnumerator();
while (chargeEnumerator.moveNext())
{
TaxIntegrationLineObject charge = chargeEnumerator.current();
activity.act(charge);
}
}
}
continue;
}
}
}
Aktivitāte
Aktivitāte veic reālu darbu integrācijas plūsmā. Tas darbojas kā segments integrācijas plūsmā. Aktivitātes nosaukums apraksta tās nolūku.
Visas aktivitātes ir pārmantotas no vienas klases TaxIntegrationAbstractActivity
. Ir trīs aktivitāšu tipi:
TaxIntegrationSequence
TaxIntegrationAbstractActivityOnDocument
TaxIntegrationAbstractActivityOnLine
Katrs darbības tips satur metodi un act
metodi, bet actInternal
tie pieņem dažādus argumentus.
TaxIntegrationAbstractActivityOnDocument
un TaxIntegrationAbstractActivityOnLine
paredzēts paplašināt. Tās ir ieviestas kā abstraktās klases, kurām ir iekšējā act
metode un abstrakta actInternal
metode. Tāpēc jaunajai aktivitātei jāpaplašina viena no šīm divām abstraktām klasēm. Aktivitātei jāievieš sava actInternal
metode, lai aizturētu aktivitātes īsto loģiku. Ja aktivitāte nav piemērojama visām darbībām/dokumentiem, tai jāievieš sava shouldSkip
metode.
TaxIntegrationSequence
paredzēts tiešai izmantošanai. Tas ir ieviests kā konkrēta klase, kam ir publiska act
metode.
Visi trīs aktivitāšu notikumu tipi reģistrē notikumus metodes act
laikā, kā nepieciešams pēc TaxIntegrationLogLevelUtility
pārbaudes. Reģistrēšanas konteksts ir pārmantots TaxIntegrationAbstractActivity
. Šajā ilustrācijā parādīta aktivitāšu hierarhija.
Papildinformāciju par to, kā pievienot jaunu aktivitāti, skatiet sadaļā Jaunas aktivitātes pievienošana nodokļu integrācijai.
Sērija
TaxIntegrationSequence
ir īpaša aktivitāte.
Dokumentu aktivitāte
Dokumentu aktivitāte darbojas tālāk TaxIntegrationDocumentObject
un paplašinās TaxIntegrationAbstractActivityOnDocument
.
public abstract class TaxIntegrationAbstractActivityOnDocument
extends TaxIntegrationAbstractActivity
{
internal final void act(TaxIntegrationDocumentObject _document);
protected abstract void actInternal(TaxIntegrationDocumentObject _document);
}
Jaunai dokumentu aktivitātei jāievieš actInternal
metode, lai būtu šīs aktivitātes loģika. Metode actInternal
pieņem objektu kā TaxIntegrationDocumentObject
ievadi. Tāpēc atšķirībā no rindas aktivitātes tā var manipulēt ar datiem dokumentu līmenī. Tomēr dokumenta darbība var darboties, TaxIntegrationLineObject
arī uzkrājot TaxIntegrationDocumentObject
objektu. Lielākā daļa dokumentu darbību apstrādā datus gan dokumentu līmenī, gan rindu līmenī. Ja aktivitāte nav piemērojama visām darbībām un dokumentiem, tai jāievieš sava shouldSkip
metode.
Rindas aktivitāte
Rindas aktivitāte darbojas arī tālāk TaxIntegrationLineObject
un pagarinās TaxIntegrationAbstractActivityOnLine
.
public abstract class TaxIntegrationAbstractActivityOnLine
extends TaxIntegrationAbstractActivity
{
internal final void act(TaxIntegrationLineObject _line);
protected abstract void actInternal(TaxIntegrationLineObject _line);
}
Jaunās rindas aktivitātei jāievieš actInternal
metode, lai aizturētu šīs aktivitātes loģiku. Metode actInternal
pieņem objektu kā TaxIntegrationLineObject
ievadi un var manipulēt tikai ar datiem no konkrētā rindas objekta. Tomēr, tā kā maksas ir aprakstītas arī kā TaxIntegrationLineObject
objekts, maksas arī tiks apstrādātas ar rindas aktivitāti. Ja aktivitāte nav piemērojama visām dokumenta rindām , tai jāievieš sava shouldSkip
metode. Metode shouldSkip
norāda, vai pašreizējā aktivitāte ir jāizlaiž visām dokumenta rindām (iekļaujot maksas), jo tā pieņem objektu kā TaxIntegrationDocumentObject
ievadi.
Pašreizējās aktivitātes
Šeit ir pašreizējo aktivitāšu saraksts šādā secībā TaxIntegrationFacade::calculate
:
- TaxIntegrationSettingRetrievalActivityOnDocument
- TaxIntegrationDataRetrievalActivityOnDocument
- TaxIntegrationCalculationActivityOnDocument
- TaxIntegrationErrorHandlingActivityOnDocument
- TaxIntegrationTaxCodeCheckActivityOnLine
- TaxIntegrationTaxIdActivityOnDocument
- TaxIntegrationListCodeActivityOnDocument
- TaxIntegrationCurrencyExchangeActivityOnDocument
- TaxIntegrationDataPersistenceActivityOnDocument