Loading
Opi
Sisällysluettelo
Valitse suodattimet

          Ei tuloksia
          Ei tuloksia
          Tässä on joitain hakuvinkkejä

          Tarkista avainsanojesi oikeinkirjoitus.
          Käytä yleisempiä hakutermejä.
          Laajenna hakua valitsemalla vähemmän suodattimia.

          Hae koko Salesforce-ohjeesta
          Toimenpidesuunnitelman kehyksen käyttäminen

          Toimenpidesuunnitelman kehyksen käyttäminen

          Luo uusi toimintasuunnitelma varmistaaksesi, että toimenpiteesi suoritetaan oikeassa järjestyksessä ja että hinnoittelua sovelletaan yhdenmukaisesti tarjoukseen.

          Vaaditut versiot

          Käytettävissä: Lightning Experiencessa
          Käytettävissä: Revenue Cloudin Enterprise-, Performance-, Unlimited- ja Developer Edition -versioissa, joissa on Salesforce Pricing käytössä
          Tarvittavat käyttöoikeudet
          Toimenpidesuunnitelmien määritelmien luominen ja päivittäminen:

          Toimenpidesuunnitelman käyttöoikeus

          AND

          Salesforce Pricing Design Time -käyttäjä

          Hinnoittelutoimenpiteiden luominen, päivittäminen ja poistaminen:

          Toimenpidesuunnitelman käyttöoikeus

          OR

          Salesforce Pricing Design Time -käyttäjä

          Hinnoittelutoimenpiteiden käyttäminen: Salesforce Pricing Run Time -käyttäjä
          Apex-luokkien määrittäminen, muokkaaminen, poistaminen, suojauksen määrittäminen ja versioasetusten määrittäminen: Apex-laadintaoikeus

          Kuvittele, että työskentelet lentoyhtiössä ja autat liikematkailijoita. Nyt varaamme lennon! Hintamme haluamme heijastaa reaaliaikaisia markkinaehtoja ja näyttää hinnat asiakkaan paikallisella valuutalla.

          Ennen kuin laskemme hinnan, keräämme automaattisesti dynaamisen perushinnan ulkoisesta järjestelmästä varmistaaksemme kilpailukyvyn hinnoittelussa. Sovellamme myös ajanvarausalustan alennuksia ja lisäämme mukavuusmaksun.

          Kun laadimme toimintasuunnitelmamme, luomme tarjouksen. Muunnamme sitten käyttäjän sijainnin (esimerkiksi Intian) perusteella kokonaishinnan USD:stä INR:ään.

          Varmista ennen aloittamista, että:

          • Olet ottanut Salesforce Pricing -ominaisuuden käyttöön.
          • Sinulla on oikeudet luoda toimenpiteitä, toimintasuunnitelmia, tuotteita ja tarjouksia.
          • Katso miten voit luoda hinnoittelutoimenpiteitä. Lisätietoja hinnoittelutoimenpiteistä on kohdassa Hinnoittelutoimenpiteidesi rakentaminen Salesforce Pricingilla.
          • Ymmärrä ja opi käyttämään kontekstimääritelmiä. Lisätietoja kontekstimääritelmistä on kohdassa Context Definitions.
          • Käytä samaa kontekstimääritelmää kaikissa hinnoittelutoimenpiteissä ja toimintasuunnitelmissa.

          Toimenpidesuunnitelmien määritelmät voivat olla monimutkaisia, varsinkin kun ne sisältävät Apex ja eri hinnoittelutoimenpiteitä. Noudata näitä ohjeita luodaksesi tarjouksen ja oppiaksesi tekemään hinnoittelusta dynaamisen ja paikkansapitävän monimutkaistamatta itse toimenpidettä.

          Toimenpidesuunnitelman orkestroinnin ottaminen käyttöön hinnoittelua varten

          1. Kirjoita Määritykset-valikon Pikahaku-kenttään Tuottoasetukset ja valitse Tuottoasetukset.
          2. Etsi ja ota käyttöön toimenpidesuunnitelman orkestrointi hinnoittelua varten.
          3. Etsi ja ota käyttöön Ei sisällä oletusarvoisia ja myyntitapahtumien tyyppien hinnoittelutoimenpiteitä.

          Kaupallisen tuotteen luominen

          1. Etsi ja avaa sovelluskäynnistimestä Tuotteet.
          2. Luo kaupallinen tuote nimeltään Delhi - New York.
            Lisätietoja tuotteen luomisesta on kohdassa Yksinkertaisten tuotteiden luominen ja varmista, että tuotteen tietuetyypiksi on määritetty Kaupallinen.
          3. Lisää tuote katalogiin ja luo sille hintakirjamerkintä.
          4. Hae ja avaa Määritykset-valikon Pikahaku-kentästä Salesforce Pricing -määritykset.
          5. Napsauta Synkronoinnin hinnoittelutiedot -osiosta Synkronoi.

          Hinnoittelutoimintosi rakentaminen

          1. Luo hinnoittelutoimenpide ja anna sille nimeksi Flight Booking Pricing Procedure.
            Luo hinnoittelutoimenpide noudattamalla kohdassa Hinnoittelutoiminnon määrittäminen kuvattuja 5 ensimmäistä vaihetta.
          2. Luo vakioita. Nämä vakiot toimivat paikanpitäjinä kiinteille arvoille hinnoitteluprosessissasi.
            Vakio-nimi Tietotyyppi Oletusarvo
            AdjType TEXT Prosenttia
            AdjValue NUMBER 5
            Korvaa TEXT Korvaa
            ConvFeeAdjType TEXT Amount
            ConvFeeAdjValue NUMBER -250
          3. Lisää seuraavat elementit.
            1. Hintojen asetus
            2. Luettelohinta. Käytä päätöstaulukkoa Hintakirjamerkinnät V2.
            3. Manuaaliset alennukset. Sinun täytyy lisätä kolme manuaalista alennuselementtiä.
          4. Ensimmäinen Manuaalinen alennus -elementti lisätään laskeakseen lennon dynaamisen perushinnan. Kartoita nämä muuttujat.
            • Input-muuttujat
              • Säädön tyyppi: Korvaa
              • Säätöarvo: PartnerUnitPrice
              • Määrä: LineItemQuantity
              • Input-yksikköhinta: ListPrice
            • Tulosmuuttuja
              • Nettoyksikköhinta: NetUnitPrice
          5. Toinen Manuaalinen alennus -elementti lisätään laskeakseen sovellusalustan alennuksen lennon varaukselle. Kartoita nämä muuttujat.
            • Input-muuttujat
              • Säädön tyyppi: AdjType
              • Säätöarvo: AdjValue
              • Määrä: LineItemQuantity
              • Input-yksikköhinta: PartnerUnitPrice
            • Tulosmuuttuja
              • Nettoyksikköhinta: NetUnitPrice
          6. Lisäksi viimeinen Manuaalinen alennus -elementti lisätään laskeakseen mukavuusmaksun, joka veloittaa asiakkaasi lennon varauksesta.
            • Input-muuttujat
              • Säädön tyyppi: ConvFeeAdjType
              • Säätöarvo: ConvFeeAdjValue
              • Määrä: LineItemQuantity
              • Input-yksikköhinta: NetUnitPrice
            • Tulosmuuttuja
              • Nettoyksikköhinta: NetUnitPrice
          7. Määritä valintasi tarkastellaksesi hinnoittelutietoja, profiilien käyttöoikeuksia ja pisteytystietoja.
          8. Tallenna toimenpiteesi.
          9. Aktivoi toimenpiteesi.

          Toimenpiteesi tulisi näyttää tältä. Selkeyden vuoksi olemme muuttaneet kunkin Manuaalinen alennus -elementin nimiä näyttämään suoritettavan hinnoittelun. Jos haluat muuttaa elementin nimeä, napsauta Muokkaa-kuvakeja kirjoita haluamasi nimi.

          Toimenpidesuunnitelman hinnoittelutoimenpide

          Luokkien määrittäminen Apex

          1. Kirjoita Määritykset-valikon Pikahaku-kenttään Apex ja valitse Apex-luokat.
          2. Napsauta Uusi.
          3. Ensimmäinen Apex on etuliitin, joka noutaa kaikki myyntitapahtumien kohteet Hinnoittelu-kontekstista ja korvaa niiden PartnerUnitPrice-tunnisteen dynaamisella satunnaisella perushinnalla väliltä 990–1200, ennen kuin hinnoittelu suoritetaan ulkoisesta tietokannasta.
            public class DynamicFlightBasePriceApex implements RevSignaling.SignalingApexProcessor {
            
                public RevSignaling.TransactionResponse execute(RevSignaling.TransactionRequest request) {
                    System.debug('Executing PREHOOK');
                    String contextId = request.ctxInstanceId;
                    Context.IndustriesContext industriesContext = new Context.IndustriesContext();
                    
                    //Query SalesTransactionItem nodes
                    Map<String, Object> inputQueryItem = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'SalesTransactionItem' }
                    };
                    Map<String, Object> itemQueryOutput = industriesContext.queryTags(inputQueryItem);
                    Map<String, Object> itemQueryResult = (Map<String, Object>)itemQueryOutput.get('queryResult');
                    List<Object> itemData = (List<Object>) itemQueryResult.get('SalesTransactionItem');
                    System.debug('QLI itemData=' + itemData);
            
                    // Generate random price between 990 and 1200
                    Decimal minPrice = 990;
                    Decimal maxPrice = 1200;
                    Decimal range = maxPrice - minPrice;
            
                    // Use Crypto.getRandomInteger() to generate a secure random number
                    Integer randomInt = Math.abs(Crypto.getRandomInteger());
                    Decimal randomPrice = minPrice + Math.mod(randomInt, range.intValue() + 1);
            
                    System.debug('Generated Random Price: ' + randomPrice);
                    
                    // STEP 3 - Build update list
                    List<Map<String, Object>> itemNodeUpdates = new List<Map<String, Object>>();
                    for (Object itemObj : itemData) {
                        Map<String, Object> itemNode = (Map<String, Object>) itemObj;
                        List<Object> dataPath = (List<Object>) itemNode.get('dataPath');
                        System.debug('Full item dataPath: ' + JSON.serialize(dataPath));
            			dataPath.remove(0); // Remove contextId
            			itemNodeUpdates.add(new Map<String, Object>{
                            'nodePath' => new Map<String, Object>{ 'dataPath' => dataPath },
                            'attributes' => new List<Object>{
                                new Map<String, Object>{
                                    'attributeName' => 'PartnerUnitPrice',
                                    'attributeValue' => randomPrice
                               }
                            }
                        });
                    }
                           
                    // STEP 4 - Submit context update
                    if (!itemNodeUpdates.isEmpty()) {
                        Map<String, Object> updateInput = new Map<String, Object>{
                            'contextId' => contextId,
                            'nodePathAndAttributes' => itemNodeUpdates
                        };
                        System.debug('--- PREHOOK: SUBMITTING CONTEXT UPDATE ---');
                        System.debug(JSON.serializePretty(updateInput));
                        industriesContext.updateContextAttributes(updateInput);
                    }
            
                    // Return the response
                    RevSignaling.TransactionResponse response = new RevSignaling.TransactionResponse();
                    response.status = RevSignaling.TransactionStatus.SUCCESS;
                    response.message = 'Apex executed successfully with Random Price: ' + randomPrice;
                    return response;
                }
            }
            
          4. Luo toinen Apex.
            Tämä Apex on posthook, joka noutaa NetUnitPrice-tunnisteen hinnoittelun jälkeen ja muuntaa sen paikalliselle valuutalle INR (Intian rupia) käyttämällä simuloitua dynaamista vaihtokurssia 85–86. Sen jälkeen se päivittää myyntitapahtuman kohteen kuvauksen uudella INR-hinnalla tarjotakseen Intian asiakkaille lokalisoidun hinnoittelun näkyvyyden.
            public class ConvertFareToINRApex implements RevSignaling.SignalingApexProcessor {
            
                public RevSignaling.TransactionResponse execute(RevSignaling.TransactionRequest request) {
                    System.debug('Executing POSTHOOK');
                    String contextId = request.ctxInstanceId;
                    Context.IndustriesContext industriesContext = new Context.IndustriesContext();
                    
                    //Query SalesTransactionItem nodes
                    Map<String, Object> inputQueryItem = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'SalesTransactionItem' }
                    };
                    Map<String, Object> itemQueryOutput = industriesContext.queryTags(inputQueryItem);
                    Map<String, Object> itemQueryResult = (Map<String, Object>)itemQueryOutput.get('queryResult');
                    List<Object> itemData = (List<Object>) itemQueryResult.get('SalesTransactionItem');
                    System.debug('QLI itemData=' + itemData);
                    
                    //Query NetUnitPrice nodes
                    Map<String, Object> inputQueryItem2 = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'NetUnitPrice' }
                    };
                    Map<String, Object> itemQueryOutput2 = industriesContext.queryTags(inputQueryItem2);
                    Map<String, Object> itemQueryResult2 = (Map<String, Object>)itemQueryOutput2.get('queryResult');
                    List<Object> itemData2 = (List<Object>) itemQueryResult2.get('NetUnitPrice');
                    System.debug('NetUnitPrice itemData=' + itemData2);
                    Map<String, Object> netUnitTagData = (Map<String, Object>) itemData2.get(0);
                    Decimal netUnitPrice = (Decimal) netUnitTagData.get('tagValue');
                    netUnitPrice = netUnitPrice.setScale(2);
                    System.debug('NetUnitPrice Tag Value=' + netUnitPrice);
            
                    // Generate random price between 85.00 and 86.00 with decimals
                    Decimal minPrice = 85.00;
                    Decimal maxPrice = 86.00;
                    Decimal range = maxPrice - minPrice; 
                    Integer randomInt = Math.abs(Crypto.getRandomInteger());
                    Integer randomDecimalInt = Math.mod(randomInt, 100);
                    Decimal randomFraction = Decimal.valueOf(randomDecimalInt) / 100;
                    Decimal usdToInrRate = minPrice + randomFraction;
                    if (usdToInrRate > maxPrice) { 
                        usdToInrRate = maxPrice;
                    }
                    
                    // Calculate NetUnitPrice in INR
                    Decimal fareInInr = (netUnitPrice * usdToInrRate).setScale(2);
                    
                    String fareMessage = 'The Flight fare in INR is: ' + fareInInr + 
                                 ' (USD ' + netUnitPrice + 
                                 ' at rate ' + usdToInrRate + ')';
                    System.debug(fareMessage);
                    
                    // STEP 3 - Build update list
                    List<Map<String, Object>> itemNodeUpdates = new List<Map<String, Object>>();
                    for (Object itemObj : itemData) {
                        Map<String, Object> itemNode = (Map<String, Object>) itemObj;
                        List<Object> dataPath = (List<Object>) itemNode.get('dataPath');
                        System.debug('Full item dataPath: ' + JSON.serialize(dataPath));
            			dataPath.remove(0); // Remove contextId
            			itemNodeUpdates.add(new Map<String, Object>{
                            'nodePath' => new Map<String, Object>{ 'dataPath' => dataPath },
                            'attributes' => new List<Object>{
                                new Map<String, Object>{
                                    'attributeName' => 'SalesTrxnItemDescription',
                                    'attributeValue' => fareMessage
                               }
                            }
                        });
                    }
                        
                    
                    // STEP 4 - Submit context update
                    if (!itemNodeUpdates.isEmpty()) {
                        Map<String, Object> updateInput = new Map<String, Object>{
                            'contextId' => contextId,
                            'nodePathAndAttributes' => itemNodeUpdates
                        };
                        System.debug('--- PREHOOK: SUBMITTING CONTEXT UPDATE ---');
                        System.debug(JSON.serializePretty(updateInput));
                        industriesContext.updateContextAttributes(updateInput);
                    }
            
                    // Return the response
                    RevSignaling.TransactionResponse response = new RevSignaling.TransactionResponse();
                    response.status = RevSignaling.TransactionStatus.SUCCESS;
                    response.message = 'Apex executed successfully with Price in INR: ' + fareInInr;
                    return response;
                }
            }
            

          Mukautetun toimintasuunnitelman määritelmän määrittäminen

          1. Hae ja avaa Määritykset-valikon Pikahaku-kentästä Toimenpidesuunnitelman määritelmät.
          2. Napsauta Uusi.
          3. Määritä nämä lisätiedot.
            1. Otsikko: Lentovarauksen toimintasuunnitelma.
              Paina Välilehti täyttääksesi Kehitysnimi-kentän automaattisesti.
            2. Prosessin tyyppi: Revenue Cloud.
            3. Ensisijainen objekti: Tarjous.
            4. Kontekstin määritelmä: <Context-määritelmän nimi>.
              Sinun täytyy valita käyttötarkoitukseesi suunniteltu kontekstimääritelmä. Varmista kuitenkin, että tämä on sama asiayhteyden määritelmä, jota käytit hinnoittelutoimenpiteesi rakentamisessa.
            5. Tallenna muutoksesi.
          4. Avaa juuri luotu toimenpidesuunnitelman määritystietue.
          5. Jos haluat lisätä haluamasi toimenpiteet toimintasuunnitelman osioihin, valitse Lisää.
          6. Lisää ensimmäinen osio nähdäksesi lentojen dynaamisen perushinnan. Määritä nämä lisätiedot.
            1. Tyyppi: Vakiomuotoinen.
            2. Nimi: DynamicBasePriceApex.
            3. Osion tyyppi: Apex.
            4. Kun osio on lisätty, napsauta Nuolikuvake ja määritä nämä lisätiedot.
              1. Vaiheet: Hinnoittelu
              2. Ratkaisun tyyppi: Default
              3. Apex: DynamicFlightBasePriceApex
              Sen pitäisi näyttää tältä:
              Toimenpidesuunnitelman osio
          7. Lisää vastaavalla tavalla toinen osio suorittaaksesi hinnoittelun laskennan ja korvataksesi perushinnan Apex luomallamme hinnalla. Määritä nämä arvot.
            1. Tyyppi: Vakiomuotoinen.
            2. Nimi: FlightPriceCalculation.
            3. Osion tyyppi: Hintojen toimenpide .
            4. Napsauta Nuolikuvake ja määritä nämä lisätiedot.
              1. Vaiheet: Hinnoittelu
              2. Ratkaisun tyyppi: Default
              3. Toimenpide: Flight_Booking_Pricing_Procedure
          8. Lisää lopuksi osio muuntaaksesi hinnan USD:stä INR:ään (Yhdysvaltain dollari Intian rupiaan) lisäämällä tämä Apex käyttäjille, joiden Laskutusosoite: maa on Intia.
            1. Tyyppi: Vakiomuotoinen.
            2. Nimi: ConvertFareToINR.
            3. Osion tyyppi: Apex.
            4. Napsauta Nuolikuvake ja määritä nämä lisätiedot.
              1. Vaiheet: Hinnoittelu
              2. Ratkaisun tyyppi: Sääntöön perustuva
              3. Ehtovaatimukset: Kaikki ehdot täyttyvät (AND)
              4. Resurssi: Summa maahan
              5. Operaattori: Yhtä kuin
              6. Tulosarvo: Intia
              7. Apex: ConvertFareToINRApex
          9. Tallenna ja aktivoi toimintasuunnitelman määritelmä.

          Toimenpidesuunnitelman suorittamisen vahvistaminen

          Tarvitsemme tarjouksen varmistaaksemme, että toimenpidesuunnitelma suoritetaan määrittämässämme järjestyksessä ja että hinnoittelu on oikein.

          1. Luo tarjous.
            Syötä Laskutusta maaksi -kenttään Intia.
          2. Tallenna muutoksesi.
          3. Napsauta Selaa katalogeja ja lisää tarjoukseen tuote Delhi - New York.
          4. Siirrä kursorisi Net Unit Price -arvon ylle nähdäksesi hinnan vesiputouksen lisätiedot.
            Näet toimintasuunnitelmasi sovelluksen sekä hinnoittelutoimenpiteessäsi määrittämäsi alennukset ja lisäykset.
            Tarjouksen hinnan vesiputous
          5. Jos haluat nähdä tarjouksen rivikohteen muunnetun vaihtokurssin, napsauta tarjouksen rivikohteen riviltä Näkymäkuvakeja valitse Näytä.
          6. Rivikohteen kuvaus näyttää lentosi lokalisoidun hinnan.
            Tarjouksen rivikohteen kuvaus
           
          Ladataan
          Salesforce Help | Article