發表文章

目前顯示的是有「sandbox refresh」標籤的文章

愚蠢的 sandbox 備份法 / [Error] Inbound Change Sets: An internal server error has occurred

圖片
案例宣教 我有一個 sandbox 準備要 refresh,但裡面還有一些東西是還沒上到 production、且必須保留下來繼續開發的。 備份的方法有很多,但我剛好就選用了最笨的一種…… 我把 A sandbox 要備份的東西打包成一個 outbound change set,然後傳到了另一個 B sandbox。 但我沒有 deploy 他,想說就讓他以一個 inbound change set的姿態靜靜地躺在 B sandbox 裡面,等哪天我需要他的時候再打開來取用就好了。 於是我就放心地 refresh 了 A sandbox。 結果好死不死,當我真的遇到需要打開這個 inbound change set 來查看的時候,發現遇到了…… An internal server error has occurred 那個靜靜躺著的 inbound change set,怎麼樣也點不開。一點就出錯。 後來又查又問了 Salesforce Support 才發現:當你的來源 sandbox 被 refresh 後,對應的 inbound change set 也會失效。 沒救了。

Connected App/User 以及 Production 與 Sandbox 交錯複雜的通用關係

情境說明  先上個 Python Sample Code,再容我慢慢解釋: import requests from simple_salesforce import Salesforce PROD_password = '<PROD_password>' PROD_security_token = '<PROD_security_token>' PROD_url = 'https://login.salesforce.com/services/oauth2/token'   STG_password = '<STG_password>' STG_security_token = '<STG_security_token>' STG_url = 'https://test.salesforce.com/services/oauth2/token'     prodSecretKeyWith_ProdUsernamePassword = [ ( 'grant_type' , 'password' ) , ( 'client_id' , '<Production Connected App Client Id>' ) , #PROD ( 'client_secret' , '<Production Connected App Client Secret>' ) , #PROD ( 'username' , 'api@salesforce-note.com' ) , #PROD ( 'password' , '{}{}' . format ( PROD_password , PROD_security_token ) ) , ( 'instance_url' , 'https://salesforce-n...

Sandbox Refresh 的間隔期限,是從前一次按下去的時間起算?還是從前一次跑完的時間起算?

圖片
問 Sandbox Refresh 的間隔期限,是從前一次按下去的時間起算?還是從前一次跑完的時間起算? 例如 Developer 類型的 sandbox,一天最多只能做一次 refresh。 更精確地說,是24小時之內只能做一次。 所以如果今天早上按了 refresh,就必須等明天早上才能再按一次。 但每次從按下 refresh 到跑完 refresh 流程,都需要等一陣子。 例如我早上九點按 refresh,可能到了中午十二點才 refresh 完成。 那以這個情況來說, 我到底是隔天的九點就可以再按一次 refresh,還是隔天的中午十二點才能再按呢? 答 早上九點即可再按一次。 是以 按下去的時間起算 24小時 ( Last Refresh Request Date ) 而不是以 Completed On 的時間來起算的。

關於Sandbox Refresh時 、Password、Security Token、Connected App的幾個實證結果

#背景說明 每次 Sandbox Refresh,總是要花一點時間重建 integration。在此紀錄一下幾個容易忘記的重點。 #Sandbox Refresh重點 user email需要手動重新改回 valid 的 email address。 剛 refresh 完成的時候,user 的 password 和 security token 都會保持跟 Production 一致。 Connect App 的 Consumer Key 和 Consumer Secret 都會產生全新的一組。若有需要,可請 integration 對方更新一下。但是對方也可以續用 Production 的 Connected App Key/Secret, Authorization 一樣打得通。 這邊所謂的打得通,有其侷限性。以get token來說,確實原本的 Production 的 Key 和 Secret 都還是可以讓 Sandbox 的 username 來使用,也可以得到一副 access_token。但如果拿這個 token 去在 Sandbox 做 Query,就會得到一個 [{"message":"This session is not valid for use with the REST API","errorCode":"INVALID_SESSION_ID"}] 的 error message。 要解決上述 invalid session id 的問題,可以在 Sandbox 幫此 user 開通  Use Any API Client 的權限 (在 Profile 或 Permission Set 開都可以) 或者是關掉MFA,可能也可以解決這個問題。(待驗證) 打 API 的時候,原則上要在 password 上 append Security Token。但如果來源是 Trust IP 的話,Security Token可免。要附上也可以,多附也不會出錯。 但是如果密碼是正確的、Security Token 是不正確的……一樣會被擋下來哦!