Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Japan Dreamin' 2020 - AppExchangeプロダクト開発を続けて見えてきたプラクティス

Japan Dreamin' 2020 - AppExchangeプロダクト開発を続けて見えてきたプラクティス

Salesforce で ISV/OEM アプリケーションを開発する上で気をつけるべきポイント、たどり着いた解決策について紹介する。

Japan Dreamin' 2020
Practices I discovered during AppExchange product development
Here are some tips and tricks for developing ISV / OEM applications with Salesforce.

Akira Kuratani

January 25, 2020
Tweet

More Decks by Akira Kuratani

Other Decks in Technology

Transcript

  1. AppExchangeϓϩμΫτ։ൃΛ
    ଓ͚ͯݟ͖͑ͯͨϓϥΫςΟε
    Practices I discovered during AppExchange product development
    Japan Dreamin’ 2020 (2020/01/25)
    TeamSpirit Inc.
    @a_kuratani

    View Slide

  2. ຊ೔࿩͢͜ͱɺ࿩͞ͳ͍͜ͱ

    What to talk or not to talk about today
    ࿩͢͜ͱWhat to talk

    ɾAppExchange։ൃͰେ੾ͳ͜ͱ

    ɹImportant things in AppExchange development



    ɾ੒௕͢ΔϓϩμΫτΛ։ൃ͢ΔϓϥΫςΟε

    ɹPractices for developing a growing product

    ࿩͞ͳ͍͜ͱWhat not to talk

    ɾϕετϓϥΫςΟε

    ɹBest Practices
    
ɾͨ͘͞ΜചΕΔϓϩμΫτͷ࡞Γํ
    ɹɹHow to make products that sell a lot
    #͜ͷൃݴ͸ݸਓͷݟղͰ͋Γॴଐ͢Δ૊৫ͷެࣜݟղͰ͸͋Γ·ͤΜ

    View Slide

  3. Akira Kuratani / ૔୩ জ

    ɹɹɹ@a_kuratani
    ɹɹɹkuratani

    ɹɹɹTeamSpirit Inc.
    ɹɹɹEngineering Team / Director
    ɹɹɹPodcast(migration.fm)
    me

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. AppExchange։ൃͰ
    େ੾ͳ͜ͱ
    Important things in AppExchange Development

    View Slide

  8. ΞοϓάϨʔυՄೳͰ͋Δ͜ͱ
    Upgradeable

    View Slide

  9. ΞοϓάϨʔυՄೳͰ͋Δ͜ͱ
    Upgradeable
    ͳ͔ͥʁWhy?
    ଟ͘ͷϢʔβʔʹAppExchangeΞϓϦέʔγϣϯ
    Λఏڙ͠ɺܧଓతʹػೳ௥Ճ͍ͯ͘͠৔߹ɺ
    Ϣʔβʔʹ࠷৽όʔδϣϯΛ࢖ͬͯ΋Β͏ͨΊʹ
    ͸ɺΞοϓάϨʔυͷखؒΛ࠷খԽ͢Δඞཁ͕͋Δ

    If you provide the AppExchange application to a large number of users and continuously add
    features, we need to minimize the upgrade effort so that users can use the new version.

    View Slide

  10. ੒௕͢ΔϓϩμΫτ
    Growing products

    View Slide

  11. جຊઓུ

    Generic Strategy
    ΞοϓάϨʔυՄೳͰ͋Δ͜ͱ
    Upgradeable

    View Slide

  12. ͲͪΒͷ։ൃελΠϧ͕͍͍͔ʁ
    Which development style is better?

    View Slide

  13. એݴత։ൃ
    Declarative development
    or
    ίʔυ։ൃ
    Code development

    View Slide

  14. એݴత։ൃ or ίʔυ։ൃ
    Declarative development or Code development
    એݴత։ൃ

    %FDMBSBUJWFEFWFMPQNFOU
    ίʔυ։ൃ
    $PEFEFWFMPQFNFOU
    ΧελϚΠζ༰қ
    &BTZDVTUPNJ[BUJPO
    ߴ͍

    )JHI
    ௿͍

    -PX
    ΞοϓάϨʔυՄೳ

    6QHSBEFBCMF
    ௿͍

    -PX
    ߴ͍

    )JHI

    View Slide

  15. એݴత։ൃ or ίʔυ։ൃ
    Declarative development or Code development
    એݴత։ൃ

    %FDMBSBUJWFEFWFMPQNFOU
    ίʔυ։ൃ
    $PEFEFWFMPQFNFOU
    ΧελϚΠζ༰қ
    &BTZDVTUPNJ[BUJPO
    ߴ͍

    )JHI
    ௿͍

    -PX
    ΞοϓάϨʔυՄೳ

    6QHSBEFBCMF
    ௿͍

    -PX
    ߴ͍

    )JHI
    ಛ௃
    $IBSBDUFSJTUJD
    ιϦϡʔγϣϯςϯϓ
    Ϩʔτͱͯ͠ఏڙɻ

    1SPWJEFEBTTPMVUJPOUFNQMBUF
    ϓϩμΫτͱͯ͠ܧଓ
    ఏڙɻ

    1SPWJEFEDPOUJOVPVTMZBTQSPEVDUT

    View Slide

  16. ͲͪΒͷ։ൃελΠϧ͕͍͍͔ʁ
    Which development style is better?
    ܧଓఏڙ͢ΔͳΒίʔυ։ൃ
    Code development if provided continuously

    View Slide

  17. ΞοϓάϨʔυՄೳͱ͸

    What is upgradeable?
    • ؅ཧύοέʔδͷͲͷίϯϙʔωϯτ͕Ξο
    ϓάϨʔυͰ͖Δ͔ॻ͔Ε͍ͯΔ

    Which components of the managed package can be upgraded.

    View Slide

  18. ΞοϓάϨʔυՄೳͱ͸

    What is upgradeable?
    • ؅ཧύοέʔδͷͲͷίϯϙʔωϯτ͕Ξο
    ϓάϨʔυͰ͖Δ͔ॻ͔Ε͍ͯΔ

    Which components of the managed package can be upgraded.
    ISVΨΠυΛख़ಡ͢΂͠

    Peruse ISV Guide

    View Slide

  19. ੒௕͢ΔϓϩμΫτΛ
    ։ൃ͢ΔϓϥΫςΟε
    Practices for developing a growing product

    View Slide

  20. Salesforceඪ४ը໘͸
    ࢖͏΂͖͔ʁ

    View Slide

  21. Salesforce ඪ४ϖʔδ͸࢖͏΂͖͔ʁ
    Should we use the Salesforce standard pages?
    • ΦϒδΣΫτΛఆٛ͢Ε͹ɺ

    ͙͢ʹҰཡը໘ɺৄࡉը໘͕ར༻Ͱ͖Δ

    Once the object is defined, the list page and detail page can be used immediately.
    • ϨίʔυλΠϓͰϖʔδϨΠΞ΢τΛ੾Γସ
    ͑Δ͜ͱ͕Ͱ͖Δ

    We can switch page layout by record type.

    View Slide

  22. ࢲͷճ౴
    My Answer
    Salesforceඪ४ϖʔδ͸
    ۃྗ࢖͏΂͖Ͱ͸ͳ͍
    Salesforce standard pages should not be used as much as possible.

    View Slide

  23. ࢲͷճ౴
    My Answer
    Salesforceඪ४ը໘͸ۃྗ࢖͏΂͖Ͱ͸ͳ͍

    Salesforce standard pages should not be used as much as possible.
    ͳ͔ͥʁWhy?
    ϖʔδϨΠΞ΢τ͕ΞοϓάϨʔυͰ͖ͳ͍

    Page layout is not upgradeable.
    ✕ ΞοϓάϨʔυ

    View Slide

  24. ࢲͷճ౴
    My Answer
    Salesforceඪ४ը໘͸ۃྗ࢖͏΂͖Ͱ͸ͳ͍

    Salesforce standard pages should not be used as much as possible.
    Ͳ͏͢Δ͔ʁHow to do?
    VisualforceϖʔδͳͲͷΞοϓάϨʔυ

    ՄೳͳίϯϙʔωϯτΛར༻͢Δ

    Use upgradeable components such as Visualforce pages.

    View Slide

  25. બ୒ϦετΛͲ͏࣮૷͢Δ͔ʁ

    How to implement pick-lists?

    View Slide

  26. બ୒ϦετΛͲ͏࣮૷͢Δ͔ʁ

    How to implement pick-lists?
    • બ୒ϦετܕΛར༻͢Δ

    Use picklist type
    • खܰʹ࣮૷Ͱ͖Δ

    Easy implementation
    • ߲໨஋ʹΑΔόϦσʔγϣϯ͕Ͱ͖Δ

    Validation by item value

    View Slide

  27. ࢲͷճ౴
    My Answer
    બ୒ϦετܕΛ࢖༻͠ͳ͍

    Don't use pick-list type.

    View Slide

  28. ࢲͷճ౴
    My Answer
    બ୒ϦετܕΛ࢖༻͠ͳ͍

    Don't use pick-list type.
    ͳ͔ͥʁWhy?
    ΞοϓάϨʔυ࣌ʹର৅૊৫ͷબ୒Ϧετ
    ܕͷ߲໨஋Λ௥Ճɾมߋɾ࡟আͰ͖ͳ͍
    Cannot add / change / delete pick-list type item value of target organization when
    upgrading.
    ✕ ΞοϓάϨʔυ

    View Slide

  29. ࢲͷճ౴
    My Answer
    બ୒ϦετܕΛ࢖༻͠ͳ͍

    Don't use pick-list type.
    Ͳ͏͢Δ͔ʁHow to do?
    1. ςΩετܕͱͯ͠ɺ߲໨஋͸ผ్؅ཧ͢Δ

    Holds data in text type. Item values are managed separately.
    2. ΧελϜϝλσʔλܕͷબ୒ϦετΛར༻
    ͢Δ

    Use custom metadata type pick-lists.
    3. Ϛελʔ؅ཧ͢Δ

    Master manage.

    View Slide

  30. ࢲͷճ౴
    My Answer
    બ୒ϦετܕΛ࢖༻͠ͳ͍

    Don't use pick-list type.
    Ͳ͏͢Δ͔ʁHow to do?
    ํࣜ.FUIPE
    ৄࡉ%FUBJM
    ྑ͍఺(PPE
    ѱ͍఺#BE
    બ୒Ϧετܕ
    1JDLMJTUUZQF
    બ୒ϦετܕʹσʔλΛอଘ͢Δɻ

    4BWFUIFEBUBJOBQJDLMJTUUZQF
    ߲໨஋ΛόϦσʔγϣϯͰ͖Δ

    *UFNWBMVFTDBOCFWBMJEBUFE
    ߲໨஋Λ௥Ճมߋ࡟আͰ͖ͳ͍
    *UFNWBMVFTDBO`UCFBEEFE
    DIBOHFEEFMFUFE
    ΧελϜϝλσʔλܕ
    $VTUPN.FUBEBUBUZQF
    ΧελϜϝλσʔλܕΛఆٛ͠ɺσʔ
    λΛอ࣋͢Δɻ

    %FpOFDVTUPNNFUBEBUBUZQFTBOETBWF
    UIFEBUB
    ։ൃऀ͕߲໨஋Λ௥ՃͰ͖Δ

    %FWFMPQFSDBOBEEJUFNWBMVFT
    ߲໨஋Λมߋɾ࡟আͰ͖ͳ͍

    *UFNWBMVFTDBO`UCFDIBOHFE
    EFMFUFE
    ςΩετܕ

    5FYUUZQF
    ߲໨஋͸վߦ۠੾ΓͳͲͰอ࣋ɻ
    ςΩετܕʹσʔλΛอଘ͢Δɻ

    *UFNWBMVFTBSFTUPSFEBUMJOFCSFBLT
    4BWFUIFEBUBJOUFYUUZQF
    Ϣʔβʔ͕߲໨஋Λ௥Ճɾมߋɾ
    ࡟আͰ͖Δ
    6TFSDBOBEEDIBOHFEFMFUF
    JUFNWBMVFT
    ߲໨஋ΛόϦσʔγϣϯͰ͖ͳ͍

    *UFNWBMVFTDBO`UCFWBMJEBUFE
    Ϛελʔ؅ཧ

    .BTUFS.BOBHFNFOU
    ΦϒδΣΫτΛ࡞੒͠ɺࢀরܕͰσʔ
    λΛอ࣋͢Δɻ

    $SFBUFBOPCKFDUBOEIPMEUIFEBUBJOB
    SFGFSFODFUZQF
    Ϣʔβʔ͕߲໨஋Λ௥Ճɾมߋɾ
    ࡟আͰ͖Δ
    6TFSDBOBEEDIBOHFEFMFUF
    JUFNWBMVFT
    ࢀরܕ߲໨͕ඞཁ

    3FGFSFODFJUFNSFRVJSFE

    View Slide

  31. ϨϙʔτΛͲ͏ఏڙ͢Δ͔ʁ

    How to provide reports?

    View Slide

  32. ϨϙʔτΛͲ͏ఏڙ͢Δ͔ʁ

    How to provide reports?
    • ؅ཧύοέʔδʹϨϙʔτΛؚΊͯఏڙ͢Δ

    Providing reports in managed packages
    • खܰʹఏڙͰ͖Δ

    Easy implementation

    View Slide

  33. ࢲͷճ౴
    My Answer
    ϨϙʔτΛ؅ཧύοέʔδʹ
    ؚΊͳ͍

    Don’t include reports in managed packages.

    View Slide

  34. ࢲͷճ౴
    My Answer
    ϨϙʔτΛ؅ཧύοέʔδʹؚΊͳ͍

    Don’t include reports in managed packages.
    ͳ͔ͥʁWhy?
    Ϩϙʔτ͸ΞοϓάϨʔυͰ͖ͳ͍
    Reports cannot be upgraded.
    ✕ ΞοϓάϨʔυ

    View Slide

  35. ࢲͷճ౴
    My Answer
    ϨϙʔτΛ؅ཧύοέʔδʹؚΊͳ͍

    Don’t include reports in managed packages.
    Ͳ͏͢Δ͔ʁHow to do?
    • ϨϙʔτλΠϓ͚ͩఏڙͯ͠Ϩϙʔτ͸ఏڙ
    ͠ͳ͍

    Provide only report type, not report
    • ϨϙʔτΛఏڙ͢Δ؅ཧύοέʔδΛ

    ผύοέʔδʹ෼཭͢Δ

    Isolate managed packages that provide reports.

    View Slide

  36. ·ͱΊ
    Conclusion

    View Slide

  37. ·ͱΊ
    Conclusion
    • AppExchange։ൃʹ͓͍ͯ

    ʮΞοϓάϨʔυՄೳʯ

    Ͱ͋Δ͜ͱ͕ॏཁ

    It is important to be “upgradeable” in AppExchange development.
    • ӡ༻Λ૝૾͠ͳ͕ΒɺISV ΨΠυΛख़ಡ͢Δ

    Peruse the ISV guide while imagining operations.

    View Slide

  38. Thank you
    Practices I discovered during AppExchange product development

    View Slide