Commerce 9. Oktober 2015. Petter Sørby



Like dokumenter
AP221 Use Case - TUL - Utarbeid prosessflytmal og komponenter

Kapittel 9: Sortering og søking Kort versjon

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

OPPGAVE 5b og 8b Java Kode

Debugging. Tore Berg Hansen, TISIP

LO191D/LC191D Videregående programmering

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

2 Om statiske variable/konstanter og statiske metoder.

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Norges Informasjonsteknologiske Høgskole

IN1010 våren januar. Objektorientering i Java

import java.util.arraylist;

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

AP221 Use Case TUL Bygg verktøykasse

En algoritme for permutasjonsgenerering

TDT4100 Objektorientert programmering

Kapittel 7: Mer om arv

/** * A cache of words and their stems */ static private Map<String, String> cache = new WeakHashMap<String, String>();

TDT4100 Objektorientert programmering

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Tjenesteutvikling i ny Altinn-løsning Gunn Heidi Rørmark

Algoritmer og Datastrukturer

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Enkle generiske klasser i Java

INF våren 2017

)DVW3ODQ,QVWDOOHULQJ $%% $6 'LYLVMRQ $XWRPDVMRQVSURGXNWHU ΑΒΒ 3RVWERNV 6NLHQ

Eksamen Objektorientert Programmering 2013

INF1010. Grensesnittet Comparable<T>

Objektorientering i VB en introduksjon

INF1010 våren januar. Objektorientering i Java

J2EE. CMP Entity Beans, Transaksjoner, JSP

Kapittel 9: Sortering og søking Kort versjon

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Obligatorisk oppgave 4: Lege/Resept

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

IN våren 2019 Onsdag 16. januar

Innhold. Installasjon av SQL server 2012/ Installasjon og konfigurasjon... 2 Port-konfigurasjon... 14

IN våren 2018 Tirsdag 16. januar

Altinn II. Leseguide for brukerveiledningen til TUL

Løsningsforslag eksamen INF1020 høsten 2005

Mattespill Nybegynner Python PDF

INF1010 Sortering. Marit Nybakken 1. mars 2004

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Socket og ServerSocket

Løsningsforslag for eksamensoppgave, våren 2004

Forelesning inf Java 5

Forelesning inf Java 5

For mer informasjon om SQL Server 2014 Express, se Microsoft sine nettsider:

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF Uke 10. Ukesoppgaver oktober 2012

INF Seminaroppgaver til uke 3

Del 3: Evaluere uttrykk

2 Aktiviteter og intensjoner

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

Repetisjon. Fundamentale konsepter. Objekter og klasser Grunnleggende programmering i Java Monica Strand 28.

/** *Kamp klassen inneholder kampfakte og hoveddelen av kampmotoren. young */

UNIVERSITETET I OSLO

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

Løsningsforslag til eksamen i INF1000 våren 2006

Løsnings forslag i java In115, Våren 1996

EKSAMEN med løsningsforslag

NYHETER M Reiseregning

EKSAMEN. Algoritmer og datastrukturer

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Implementering av caching ved hjelp av Spring. Christian Vestøl

GUI («Graphical User Interface») del 2

Program delegate. Lage et nytt prosjekt i Visual Studio

Kontakt oss i Egroup for mer informasjon!

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Liste som abstrakt konsept/datatype

Forelesning inf Java 4

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Eksamen i Internetteknologi Fagkode: ITE1526

Kapittel 8: Sortering og søking

Sortering med tråder - Quicksort

Microsoft Partner Network LiveMeeting

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Kapittel 8: Sortering og søking INF100

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

360 Online. ikke bare "one size for all" Simen Myrum Forretningsutvikler Tieto, Software Innovation

Kapittel 8: Sortering og søking INF100

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Transkript:

Commerce 9 Oktober 2015 Petter Sørby

Agenda Ytelsesforbedringer Workflow Kampanje/promotion API endringer Bonusfeature

Ytelsesforbedringer Ytelse har vært hovedfokus siste året Tidligere oppdateringer har kraftig redusert tidsforbruk Endret struktur for versjoner og kladder TID 120 100 80 60 40 20 0 7.5 9.0

Workflow Windows Workflow Foundation Enkelt å legge til egne steg Små konkrete oppgaver i hver aktivitet Brukt til raske oppgaver med definert start og stop. Ment for oppgaver som kan starte og stoppe Manglende støtte i Visual Studio Problematisk å bruke i senere versjon. Forutsetter kompilering med riktig versjon

Checkout <SequentialWorkflowActivity x:class="epicode.commerce.workflow.cartcheckoutworkflow" x:name="cartcheckoutworkflow" xmlns:ns0="clrnamespace:epicode.commerce.workflow.activities;assembly=epicode.commerce.workflow.activities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> <IfElseActivity x:name="ifelseactivity1"> <IfElseBranchActivity x:name="ifelsebranchactivity1"> <IfElseBranchActivity.Condition> <CodeCondition Condition="RunProcessPayment" /> </IfElseBranchActivity.Condition> <ns0:processpaymentactivity Warnings="{x:Null}" OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" Payment="{x:Null}" x:name="processpaymentactivity1" /> </IfElseBranchActivity> </IfElseActivity> <ns0:calculatetotalsactivity x:name="calculatetotalsactivity1" OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" Warnings="{x:Null}" /> <IfElseActivity x:name="ifelseactivity2"> <IfElseBranchActivity x:name="ifelsebranchactivity2"> <IfElseBranchActivity.Condition> <CodeCondition Condition="CheckInstoreInventory" /> </IfElseBranchActivity.Condition> <ns0:adjustinstoreinventoryactivity PickupWarehouseInShipment="{ActivityBind CartCheckoutWorkflow,Path=PickupWarehouseInShipment}" Warnings="{ActivityBind CartCheckoutWorkflow,Path=Warnings}" Description="Adjusts In Store Inventory." OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" x:name="adjustinstoreinventoryactivity1" /> </IfElseBranchActivity> <IfElseBranchActivity x:name="ifelsebranchactivity3"> <ns0:adjustinventoryactivity Description="Adjusts Inventory." x:name="adjustinventoryactivity1" OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" Warnings="{x:Null}" /> </IfElseBranchActivity> </IfElseActivity> <ns0:recordpromotionusageactivity UsageStatus="Used" Warnings="{x:Null}" OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" x:name="recordpromotionusageactivity1" /> <ns0:createpurchaseorderactivity x:name="createpurchaseorderactivity1" OrderGroup="{ActivityBind CartCheckoutWorkflow,Path=OrderGroup}" Warnings="{ActivityBind CartCheckoutWorkflow,Path=Warnings}" /> </SequentialWorkflowActivity>

Activity Flow [ActivityFlowConfiguration(Name = OrderGroupWorkflowManager.CartCheckOutWorkflowName)] public class CartCheckoutActivityFlow : ActivityFlow { public override ActivityFlowRunner Configure(ActivityFlowRunner activityflow) { return activityflow.if(() => ShouldProcessPayment()).Do<ProcessPaymentActivity>().EndIf().Do<CalculateTotalsActivity>().Do<AdjustInventoryActivity>().Do<RecordPromotionUsageActivity>(); } }

ExecutionManager Registrerer ActivityFlow implementasjoner Vurderer prioritet Høyere prioritet «vinner» ved samme navn [ActivityFlowConfiguration(Name = OrderGroupWorkflowManager.CartValidateWorkflowName)] public class CartValidateActivityFlow : ActivityFlow {...} [ActivityFlowConfiguration(Name = OrderGroupWorkflowManager.CartValidateWorkflowName, Priority=1)] public class CustomCartValidateActivityFlow : ActivityFlow {...} OrderGroupWorkflowManager > ExecutionManager Sender inn cart I fremtidige versjoner vil muligens ExecutionManager brukes direkte

EPiServer.Commerce.Tools.WorkflowMigration

Workflow

Marketing Ny rabatt/kampanjestyring Enklere (mer kjent) for redaktører Forbedret testbarhet for utviklere

Marketing / Promotion (Beta) Tilgjengeliggjøre <add name="epibetausers" type="episerver.security.mappedrole, EPiServer.Framework" roles="webeditors, WebAdmins, Administrators" mode="any" /> Prosessere <Features> <add feature="workflowsvnext" state="enabled" type="mediachase.commerce.core.features.workflowsvnext" /> </Features>

Promotion/Discount Data Result Processor

Promotion Data IContent PromotionData EntryPromotion OrderPromotion ShippingPromotion Definerer egenskaper for å validere og angi rabatten

Processor PromotionProcessorBase<T> where T : PromotionData public IPromotionResult Evaluate(IOrderGroup ordergroup, PromotionData promotiondata) Validerer gyldighet av en rabatt Returnerer IPromotionResult med FulfillmentStatus NotFulfilled, SomewhatFulfilled, AlmostFulfilled, Fulfilled

Result IPromotionResult ApplyReward. Blir kalt når FulfillementStatus er Fulfilled Gjør selve beregningen/endring av handlekurven

Promotion

Nye deler av APIet Ordreobjekter IOrderRepository IOrderGroup IOrderForm IShipment ILineItem IOrderAddress «Kalkulatorer» ITaxCalculator IShippingCalculator IOrderGroupCalculator IOrderFormCalculator ILineItemCalculator

Add to cart 9.0 public void AddToCart(VariationContent variation, int quantity, IPriceService priceservice, ICurrentMarket market) { var OrderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>(); var cart = OrderRepository.Load<Cart>(GetContactId(),Cart.DefaultName).FirstOrDefault(); if (cart == null){ cart = OrderRepository.Create<Cart>(GetCommerceCustomerId(), Cart.DefaultName); cart.customername = PrincipalInfo.CurrentPrincipal.Identity.Name; var orderreference = OrderRepository.Save(cart); } var price = priceservice.getdefaultprice(market.getcurrentmarket().marketid, DateTime.UtcNow, new CatalogKey(new Guid(variation.ApplicationId), variation.code), SiteContext.Current.Currency); var lineitem = CreateLineItem(variation, quantity, price.unitprice.amount); var orderform = cart.orderforms.first(); orderform.lineitems.add(lineitem); } var index = orderform.lineitems.indexof(lineitem); cart.orderforms.first().shipments.first().addlineitemindex(index, lineitem.quantity); OrderRepository.Save(cart); cart = OrderRepository.Load<Cart>(GetCommerceCustomerId(), Cart.DefaultName).FirstOrDefault(); PromotionEngine.Run(cart); OrderRepository.Save(cart);

Add to cart 9.2 public void AddToCart(VariationContent variation, int quantity, IPriceService priceservice, ICurrentMarket market) { var OrderRepository = ServiceLocator.Current.GetInstance<IOrderRepository>(); var cart = OrderRepository.LoadOrCreate<Cart>(PrincipalInfo.CurrentPrincipal.GetContactId(), Cart.DefaultName).FirstOrDefault(); var price = PriceService.GetDefaultPrice(market.GetCurrentMarket().MarketId,DateTime.UtcNow, new CatalogKey(new Guid(variation.ApplicationId), variation.code),context.current.currency); var lineitem = CreateLineItem(variation, quantity, price.unitprice.amount); cart.forms.first().shipments.first().lineitems.add(lineitem); PromotionEngine.Run(cart); } OrderRepository.Save(cart);

OPPGAVER TIL NESTE DEPLOY! Endre startsiden Opprett artikkelside under FAQ Kontakt oss etc. Alle sider må opprettes på samtlige språk. Innhold finner du på h:\felles\...\...\...\deployment.v12.34.5 \tekster.txt

Migration Steps [ServiceConfiguration(typeof(IMigrationStep))] public class ChangeSettingsMigrationStep : IMigrationStep

Migration