$30 off During Our Annual Pro Sale. View Details »

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
  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 #͜ͷൃݴ͸ݸਓͷݟղͰ͋Γॴଐ͢Δ૊৫ͷެࣜݟղͰ͸͋Γ·ͤΜ
  3. Akira Kuratani / ૔୩ জ
 ɹɹɹ@a_kuratani ɹɹɹkuratani 
 ɹɹɹTeamSpirit Inc.

    ɹɹɹEngineering Team / Director ɹɹɹPodcast(migration.fm) me
  4. None
  5. None
  6. None
  7. AppExchange։ൃͰ େ੾ͳ͜ͱ Important things in AppExchange Development

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

  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.
  10. ੒௕͢ΔϓϩμΫτ Growing products

  11. جຊઓུ
 Generic Strategy ΞοϓάϨʔυՄೳͰ͋Δ͜ͱ Upgradeable

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

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

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

    ίʔυ։ൃ $PEFEFWFMPQFNFOU ΧελϚΠζ༰қ &BTZDVTUPNJ[BUJPO ߴ͍
 )JHI ௿͍
 -PX ΞοϓάϨʔυՄೳ
 6QHSBEFBCMF ௿͍
 -PX ߴ͍
 )JHI
  15. એݴత։ൃ or ίʔυ։ൃ Declarative development or Code development એݴత։ൃ
 %FDMBSBUJWFEFWFMPQNFOU

    ίʔυ։ൃ $PEFEFWFMPQFNFOU ΧελϚΠζ༰қ &BTZDVTUPNJ[BUJPO ߴ͍
 )JHI ௿͍
 -PX ΞοϓάϨʔυՄೳ
 6QHSBEFBCMF ௿͍
 -PX ߴ͍
 )JHI ಛ௃ $IBSBDUFSJTUJD ιϦϡʔγϣϯςϯϓ Ϩʔτͱͯ͠ఏڙɻ
 1SPWJEFEBTTPMVUJPOUFNQMBUF ϓϩμΫτͱͯ͠ܧଓ ఏڙɻ
 1SPWJEFEDPOUJOVPVTMZBTQSPEVDUT
  16. ͲͪΒͷ։ൃελΠϧ͕͍͍͔ʁ Which development style is better? ܧଓఏڙ͢ΔͳΒίʔυ։ൃ Code development if

    provided continuously
  17. ΞοϓάϨʔυՄೳͱ͸
 What is upgradeable? • ؅ཧύοέʔδͷͲͷίϯϙʔωϯτ͕Ξο ϓάϨʔυͰ͖Δ͔ॻ͔Ε͍ͯΔ
 Which components of

    the managed package can be upgraded.
  18. ΞοϓάϨʔυՄೳͱ͸
 What is upgradeable? • ؅ཧύοέʔδͷͲͷίϯϙʔωϯτ͕Ξο ϓάϨʔυͰ͖Δ͔ॻ͔Ε͍ͯΔ
 Which components of

    the managed package can be upgraded. ISVΨΠυΛख़ಡ͢΂͠
 Peruse ISV Guide
  19. ੒௕͢ΔϓϩμΫτΛ ։ൃ͢ΔϓϥΫςΟε Practices for developing a growing product

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

  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.
  22. ࢲͷճ౴ My Answer Salesforceඪ४ϖʔδ͸ ۃྗ࢖͏΂͖Ͱ͸ͳ͍ Salesforce standard pages should not

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

    used as much as possible. ͳ͔ͥʁWhy? ϖʔδϨΠΞ΢τ͕ΞοϓάϨʔυͰ͖ͳ͍
 Page layout is not upgradeable. ✕ ΞοϓάϨʔυ
  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.
  25. બ୒ϦετΛͲ͏࣮૷͢Δ͔ʁ
 How to implement pick-lists?

  26. બ୒ϦετΛͲ͏࣮૷͢Δ͔ʁ
 How to implement pick-lists? • બ୒ϦετܕΛར༻͢Δ
 Use picklist type

    • खܰʹ࣮૷Ͱ͖Δ
 Easy implementation • ߲໨஋ʹΑΔόϦσʔγϣϯ͕Ͱ͖Δ
 Validation by item value
  27. ࢲͷճ౴ My Answer બ୒ϦετܕΛ࢖༻͠ͳ͍
 Don't use pick-list type.

  28. ࢲͷճ౴ My Answer બ୒ϦετܕΛ࢖༻͠ͳ͍
 Don't use pick-list type. ͳ͔ͥʁWhy? ΞοϓάϨʔυ࣌ʹର৅૊৫ͷબ୒Ϧετ

    ܕͷ߲໨஋Λ௥Ճɾมߋɾ࡟আͰ͖ͳ͍ Cannot add / change / delete pick-list type item value of target organization when upgrading. ✕ ΞοϓάϨʔυ
  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.
  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
  31. ϨϙʔτΛͲ͏ఏڙ͢Δ͔ʁ
 How to provide reports?

  32. ϨϙʔτΛͲ͏ఏڙ͢Δ͔ʁ
 How to provide reports? • ؅ཧύοέʔδʹϨϙʔτΛؚΊͯఏڙ͢Δ
 Providing reports in

    managed packages • खܰʹఏڙͰ͖Δ
 Easy implementation
  33. ࢲͷճ౴ My Answer ϨϙʔτΛ؅ཧύοέʔδʹ ؚΊͳ͍
 Don’t include reports in managed

    packages.
  34. ࢲͷճ౴ My Answer ϨϙʔτΛ؅ཧύοέʔδʹؚΊͳ͍
 Don’t include reports in managed packages.

    ͳ͔ͥʁWhy? Ϩϙʔτ͸ΞοϓάϨʔυͰ͖ͳ͍ Reports cannot be upgraded. ✕ ΞοϓάϨʔυ
  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.
  36. ·ͱΊ Conclusion

  37. ·ͱΊ Conclusion • AppExchange։ൃʹ͓͍ͯ
 ʮΞοϓάϨʔυՄೳʯ
 Ͱ͋Δ͜ͱ͕ॏཁ
 It is important to

    be “upgradeable” in AppExchange development. • ӡ༻Λ૝૾͠ͳ͕ΒɺISV ΨΠυΛख़ಡ͢Δ
 Peruse the ISV guide while imagining operations.
  38. Thank you Practices I discovered during AppExchange product development