docs: add DocuSign template migration guides (sandbox-to-production, DAL method) and generated PDFs
This commit is contained in:
parent
d70cd8a97a
commit
d77f14b205
|
|
@ -0,0 +1,93 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (anonymous) /CreationDate (D:20260330153955-04'00') /Creator (anonymous) /Keywords () /ModDate (D:20260330153955-04'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (unspecified) /Title (untitled) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1874
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm<D/\/e&H88.EQFIm7\a(oALIF1^e(#t5dqMg4)BEJS#.T</L>/-PgoU'420o)M&f7Gco+qh'CY@7Si\"R6Qc@'jsNk'DJ!j5kCZ!L=Tn`F)o:kc]Uta^o`=hhH@=^uj*KO*>6H1<%.X2tcJGgbMf"ueiJrgd+DD,1cgUme>7iX3"l'd:<$W`#k:lc;Zeg_Er4i]aAtPn*$_#*[D&@UchnL60nGMn$0./qGStp[jn^TKB&-Q(sM8T9`R9e]\2e_?^CUFc"G[c;nD.3\7,/u`#.3@tWJ]_,=Z.`OJ:P_r79,k#89G%oE66N_2OO):H)N@:F"NXmd`oDW&6/d/@nO(2a)?B%V*'>A)R\]I<`;HOb/!P3^S,T3k<Q%#7Lf<(tE7O9jr%&T[SHjT'RL;_I.*M\iRA_G/]8.a@kNC^N[uEpJ#0=&n[2[8^?STaJ7Ol]Ol:N\WjiGE=s%%$W@,dUOPK@\r`oG5*02]N>4>7nB18QfL/!4`mh_6H=dM+WbBs<:*W>CX:#VW^!G(@7E?u8quGeZ[A-85mm3/pe%,Y(.49I@#B7\H[_'Dt^99dVHDE^hiQB8?>?`.)#I&oJjL9nS/>"9jqJUK2,hCGWiAn^1<(&Em#sR]t,'.Lp2K(lfSZ^'A![KA-i,f*EMB%E#WJ_/CkP+j!;GXTnd/N!l6fBQ^Pcq)2\&?!j'lV]OV;E]G>2_P\SbM#r7/"4uJe>N"3hH][^D<PLr#fD?uIVMj*@k1oTT>r=GW:E8d)%t5+:_d3j`0/Dlg5N?g;#Igu`;g!cR^q(O1LchQlET>s0,J(YrW'_:tp'B/o;2FE5N-T4-%@k-G'RT.,`UbY&K^N195(-gDA.3@[_hLjVmc]Ub65l,kIcOqZ@NAiJ-n=9$1_G/%:ekPkD`dDM[*/\rZM2umG+a"\I"'b]DetL>Js<+?:3<bl]_jFg)dX'?demMM5u#K@`5H8@_'".S$msr?;$D)mVd49]3lMUl]>*m<]@d$Tc-P;@H<p9GeGa4/XNdct@CFG5>?I=0qMn"scF#'dfXU>.Z?'nLRn0's4l_L`-@LJ9g4S_Q%ns!$Rc_456Scm\iPD'f`+_du;^4VH/,ZbRifs!XgbSqFhc2\p*m:kM(1j0kAh;%`eu;jN1$Y@DX,(3+X;t(s;2V=tM"TL7lgH-CR^!scJ+m4ED-T/t%i0<*6mOa4Tk?dRS_EGt7&n#J#lRNLltsdf#$&LR)Gt?PO^#6BP%<0<QX(hTFo/b"B2j.0SUSD;'W7#;:>6M-D77d\YBZH*,EcqCd&#,"hl>VjEuq`a\h]aq<E25Ug]WUnT(DTa<sl1<hM,n"*qn?&D0??\mE31%4$`aA1%_O"!BZaQkF%:\C[BF(gR6s%Jnm/`.sC:]6@hiV'm\&F\qMLDH%=KIBrCtFLBb@!;2j*P4gcoe?0Ph5@op6dhHVBQ:+nsM&X;a\gIX!A/Qj1Jin:uk[CQ-6\HWu)gHt#S*C$[?iH_B['(05K_dag,;lunD'==\I6+@Ku<+o>W'+3kpE_(-U<ij#6Pt*Y_Ur6bU^WZK'`T*40B^<rbI=l;Tjb@=rn7s;.1_/_RO[elPOQNsiJhC?-3'KRHq.@D)Z9kIRid@@O5(r'8I2cGJ&B,Dl^O4N]oCI]+?:_ljZ?ubT![WYPN>VE%Xbp#^#[pIWU:%;%MS5q!A'k<j`g?LhIXI"a'\Z0_0>g>#[PYa/q2Q%p#5d5gZF0-PWq#3tMKq5Ni6;>q%6kQ(b#66r2Y5GAj)u5=&g:2MPiClT2NHBos3:^"IJ@B6WT/nio.<(f=%)/m'na^U;bTA/X&@6;>i6/"M7Zi5Xj3q+a7[\hC<O?*!T:)16ofR%KPiIO4j%M.2giH`^Bn5D$3~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1524
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm;@8GoC&H0nXR#anYVG3MTkt-(H[_N6,eKO.Z:>2:?-?35X-?^(bYl+A;gIW<VckI$(F]0Z+hO?IaM$IPgo?@61!;NpOd?t62%uUk/^^X[k!N1hXF5>`"h.n&D"u)UdYUJGIgkFcFL!*)!/>mN18ZRG7aTRB7W[',[r)5*C7e5["+Y8)Z_Wa;sHu)(G54l:aI:-u*J=#,7qXB('VC:^fSS)mpl3^'b67o0iUm=Ue:j,^Y,9Ri<>#VA5:2^G?:c;iL<5"hFOcTC,_eu0f@lH6\S@J'rbQY7bo/5JWW^Qt8[!l_[BVF9OUaYpT:sXi:D?(=XLb+Q/a]\0B*66(Z3)=5TH@BDtoj&i)dmR?,bDl`u[fR`_YThVTWkBRmW1bnb@K&U+@rouHk5u7_%_0&li^3`T(n4M8f3PBX!uST=G"DSDAT^<Ol2G[s(uLo52]R1NaFhO*rLh#qO*kbGG23>14iKLR'i*dYTjnlk`!W8dIj]s/CuZe]l!R3!2ct#nY[B4`,ugdkIn,4/[+5/^ciB)YMV"]b^gFV.,XF=icM<HuGmY(2ftTX:^D6:&$f=M#;PGQNI'C#oqhR6"M0R%Mm/XOK1JN4]\Z]baXAdB0aMU=L:("#?XQV72GE@WT'V+_GI;B]r*'C@C<\DUP`i.9%<+=2*l6U5'HdE<hX%H@g"&=7H(L[9ci79)dUQn5V,N#j^S#6,n(NdY,?2,U';]':b*`eq#+;Ib]j\er)nltL=qh>Qa$ok)N]U(]W0PO0dYD.7q^mhcA?OEbrSo!Dt<j\*<p7BAWm!=^un)unr[%#"_7_9I4iQX:$3Q<jsL$eKjGVEmq#&>AEU/>,W2P+YF.'2ZpTVcQs$T+n5R'U&QR7&-(T)K+#bnE1D0SR6h9n.5em2]*c%oTF^ju?GN<p+X(6'W/E.lmGm'u:M*(m1dII`j4W[3\#ZOsV_iM(Y!\lC!RA/,'>6SAR"+O2^\_l9[*6?hWaf-b@;A\/OecM*En\0.KiV?n0bpk_Su?W'?2%Mq[jY/F(R$6\O?5__0E=rf"'$F_giN.=*D@P[oLECAj-Mq+BO3GtNA!m(B8YTXh\SY-G07r+S89jCZjiQ\YYfcS<Y&<Z$HQ9=bn"2@qf3EAg0*)5DJW5LJ_mGFBki49U73?p)PHI1@tf-pA.]KoK-:5Ht')14Wf>km[7/p$eo6e\lM)]9ad;":'1;d^F/]KHLS(TI>'TL+#0=jNG"+rLWQW#KGM4IG\hrF4Fl1hq%/5ZNa[<hWB):p3)AKDYi4ZfQo@'oCk]@TQDB@>3g+Pj8YDeek24uO3qW8o?ro[;dIW"8<-6;=H_-O=@[kIoM:mceii/4C9<A%YD%Cj@5NLGZfufmaQjTpiJsm[6h^=;K1WsZbOGpc]#K2$5JE08A4RK*9eF-?&kc^e;EBc3(Vbr>Jk-?k+'gq"Y^K\kZ_0$7/me0rrrkGu%`Z%EcaBsF4nk,H@%9eg&O""qGBOC^A,Y^WNA(%MT&q0]Z4rShc#/QjM\Zg%#D;_sDZ~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000102 00000 n
|
||||||
|
0000000209 00000 n
|
||||||
|
0000000321 00000 n
|
||||||
|
0000000514 00000 n
|
||||||
|
0000000708 00000 n
|
||||||
|
0000000776 00000 n
|
||||||
|
0000001037 00000 n
|
||||||
|
0000001102 00000 n
|
||||||
|
0000003067 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<ee950e95b19116a21bdbd23f3647697f><ee950e95b19116a21bdbd23f3647697f>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
4683
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,185 @@
|
||||||
|
---
|
||||||
|
title: Migrate DocuSign templates from Sandbox to Production (Salesforce)
|
||||||
|
---
|
||||||
|
|
||||||
|
# Migrate DocuSign templates from Sandbox to Production
|
||||||
|
|
||||||
|
Purpose
|
||||||
|
- Step-by-step guide to: export templates from DocuSign Demo/Sandbox, import into DocuSign Production, and update (or duplicate) the corresponding Salesforce `dfsle__EnvelopeConfiguration__c` records.
|
||||||
|
- Includes instructions to create the `Short_Name__c` custom field used by our Apex and Flows.
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
- DocuSign admin access (Demo + Production) to export/import templates.
|
||||||
|
- Salesforce admin access to create fields and run Data Loader / sfdx commands.
|
||||||
|
- `dfsle` (DocuSign for Salesforce) managed package installed in Production.
|
||||||
|
- Optional: `sfdx` CLI or Data Loader for bulk changes.
|
||||||
|
|
||||||
|
High-level steps
|
||||||
|
1. Export current `dfsle__EnvelopeConfiguration__c` records from Salesforce (backup).
|
||||||
|
2. Export templates from DocuSign Demo/Sandbox and import into DocuSign Production.
|
||||||
|
3. Record the new DocuSign template IDs (GUIDs).
|
||||||
|
4. Create the `Short_Name__c` custom field on `dfsle__EnvelopeConfiguration__c` (if not present).
|
||||||
|
5. Prepare CSV mapping old→new template IDs.
|
||||||
|
6. Update existing `dfsle__EnvelopeConfiguration__c` records (or insert duplicates) with new IDs.
|
||||||
|
7. Validate by sending test envelopes through the Flow/Apex.
|
||||||
|
|
||||||
|
Detailed steps
|
||||||
|
|
||||||
|
1) Export existing Salesforce configs (backup)
|
||||||
|
|
||||||
|
- Recommended fields to export:
|
||||||
|
|
||||||
|
```
|
||||||
|
Id, Name, dfsle__DocuSignId__c, Short_Name__c, dfsle__EmailMessage__c
|
||||||
|
```
|
||||||
|
|
||||||
|
- sfdx (CSV output):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sfdx force:data:soql:query -u ORG_ALIAS -q "SELECT Id, Name, dfsle__DocuSignId__c, Short_Name__c, dfsle__EmailMessage__c FROM dfsle__EnvelopeConfiguration__c" --resultformat csv > dfsle_configs_backup.csv
|
||||||
|
```
|
||||||
|
|
||||||
|
- Or use Workbench / Data Loader to export the same fields.
|
||||||
|
|
||||||
|
Keep this CSV safe — it is your rollback and audit record.
|
||||||
|
|
||||||
|
2) Export templates from DocuSign Demo/Sandbox
|
||||||
|
|
||||||
|
- Use DocuSign Admin UI or API to export templates. Options:
|
||||||
|
- UI: Admin → Templates (select template) → export / download (if available).
|
||||||
|
- API: Use eSignature REST API `GET /v2.1/accounts/{accountId}/templates/{templateId}` to retrieve template definition; then `POST /v2.1/accounts/{accountId}/templates` to create in production.
|
||||||
|
|
||||||
|
- After import, capture the new template GUIDs. You can find a template's ID in its template URL or via the API.
|
||||||
|
|
||||||
|
3) Build mapping of old → new template IDs
|
||||||
|
|
||||||
|
- Minimal mapping CSV for updating existing records (update by `Id`):
|
||||||
|
|
||||||
|
```
|
||||||
|
Id,dfsle__DocuSignId__c
|
||||||
|
00Nxxxxxxxxxxxx,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
00Nyyyyyyyyyyyy,22222222-3333-4444-5555-666666666666
|
||||||
|
```
|
||||||
|
|
||||||
|
- Minimal CSV for inserting duplicates (keep old records intact):
|
||||||
|
|
||||||
|
```
|
||||||
|
Name,Short_Name__c,dfsle__DocuSignId__c,dfsle__EmailMessage__c
|
||||||
|
Invoice Template - EN,INV_EN,AAAAAAAA-BBBB-CCCC-DDDD-111111111111,Please sign the attached invoice
|
||||||
|
Invoice Template - FR,INV_FR,22222222-3333-4444-5555-666666666666,Veuillez signer la facture
|
||||||
|
```
|
||||||
|
|
||||||
|
4) Create the `Short_Name__c` field on `dfsle__EnvelopeConfiguration__c`
|
||||||
|
|
||||||
|
Why: Our Apex and Flow use `Short_Name__c` as a compact identifier. If it does not exist in Production, create it before updating/inserting records.
|
||||||
|
|
||||||
|
UI (recommended)
|
||||||
|
|
||||||
|
1. In Salesforce Setup go to **Object Manager**.
|
||||||
|
2. Search for **Envelope Configuration** (DocuSign) or type `dfsle__EnvelopeConfiguration__c` into the quick find.
|
||||||
|
3. Open **Fields & Relationships** → **New**.
|
||||||
|
4. Select **Text** as the field type.
|
||||||
|
5. Field Label: `Short Name` → Field Name (API): `Short_Name` → Length: `50` (adjust as needed) → Next.
|
||||||
|
6. Set Field-Level Security (make visible to integration/admin profiles) → Next.
|
||||||
|
7. Add to Page Layouts if desired → Save.
|
||||||
|
|
||||||
|
Notes about managed-package objects
|
||||||
|
- `dfsle__EnvelopeConfiguration__c` is a managed-package object. You can add subscriber-org custom fields to package objects; the API name will be `Short_Name__c` (no package namespace for the custom field).
|
||||||
|
- If you cannot create the field via the UI or need to automate it, deploy the field metadata with the Metadata API (MDAPI).
|
||||||
|
|
||||||
|
MDAPI example (place under `objects/dfsle__EnvelopeConfiguration__c/fields/Short_Name__c.field-meta.xml`):
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Short_Name__c</fullName>
|
||||||
|
<label>Short Name</label>
|
||||||
|
<type>Text</type>
|
||||||
|
<length>50</length>
|
||||||
|
<inlineHelpText>Short identifier for templates used by Apex/Flows</inlineHelpText>
|
||||||
|
</CustomField>
|
||||||
|
```
|
||||||
|
|
||||||
|
Include the field in your `package.xml` and deploy with `sfdx force:mdapi:deploy` or your CI.
|
||||||
|
|
||||||
|
5) Apply the mapping to Salesforce
|
||||||
|
|
||||||
|
- Update existing records (in-place update keeps references in other automation intact):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# update by Id
|
||||||
|
sfdx force:data:bulk:upsert -s dfsle__EnvelopeConfiguration__c -f updates.csv -i Id -u ORG_ALIAS -w 10
|
||||||
|
```
|
||||||
|
|
||||||
|
- Insert duplicates (if you prefer to preserve old configs):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sfdx force:data:bulk:insert -s dfsle__EnvelopeConfiguration__c -f inserts.csv -u ORG_ALIAS -w 10
|
||||||
|
```
|
||||||
|
|
||||||
|
- Data Loader: use the GUI to map CSV columns to fields and run Update or Insert jobs.
|
||||||
|
|
||||||
|
6) Validate & test
|
||||||
|
|
||||||
|
- Quick queries:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# list configs with short names
|
||||||
|
sfdx force:data:soql:query -u ORG_ALIAS -q "SELECT Id, Name, Short_Name__c, dfsle__DocuSignId__c FROM dfsle__EnvelopeConfiguration__c WHERE Short_Name__c != NULL" --resultformat csv
|
||||||
|
```
|
||||||
|
|
||||||
|
- Send test envelopes:
|
||||||
|
- Run the Flow that uses the templates from the UI or use the invocable Apex from Developer Console / Execute Anonymous.
|
||||||
|
- Watch logs / debug to verify the correct `dfsle__DocuSignId__c` is used and envelopes are sent successfully.
|
||||||
|
|
||||||
|
Example Apex (execute as anonymous) — adapt to your codebase if method names differ:
|
||||||
|
|
||||||
|
```apex
|
||||||
|
// Construct an invocable-style request object to test a single template
|
||||||
|
// Replace types/names with your project types if they differ
|
||||||
|
compositeEnvelope.DocusignEnvelopeRequest r = new compositeEnvelope.DocusignEnvelopeRequest();
|
||||||
|
r.templateIds = new List<String>{'NEW-TEMPLATE-GUID'};
|
||||||
|
r.recordId = '001xxxxxxxxxxxx';
|
||||||
|
System.debug(JSON.serializePretty(r));
|
||||||
|
// Call the invocable method or trigger the Flow to verify end-to-end behavior
|
||||||
|
```
|
||||||
|
|
||||||
|
7) Rollback / audit
|
||||||
|
|
||||||
|
- Keep the original export CSV as your rollback artifact.
|
||||||
|
- If something goes wrong, re-run Data Loader using the backup CSV to restore previous `dfsle__DocuSignId__c` values.
|
||||||
|
|
||||||
|
Troubleshooting & tips
|
||||||
|
- If an insert/update fails, check field-level security and that your user has API access for the managed-package object.
|
||||||
|
- Some fields on managed-package objects may be controlled by the package; if metadata deploy fails, create the `Short_Name__c` field via the UI.
|
||||||
|
- If your Flow or other automation reference specific Config record Ids, prefer updating in-place rather than inserting duplicates.
|
||||||
|
|
||||||
|
Appendix
|
||||||
|
|
||||||
|
- SOQL to select configs with non-blank `Short_Name__c`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT Id, Name, Short_Name__c FROM dfsle__EnvelopeConfiguration__c WHERE Short_Name__c != NULL
|
||||||
|
```
|
||||||
|
|
||||||
|
- Example update CSV (updates.csv):
|
||||||
|
|
||||||
|
```
|
||||||
|
Id,dfsle__DocuSignId__c
|
||||||
|
00Nxxxxxxxxxxxx,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
00Nyyyyyyyyyyyy,22222222-3333-4444-5555-666666666666
|
||||||
|
```
|
||||||
|
|
||||||
|
- Example insert CSV (inserts.csv):
|
||||||
|
|
||||||
|
```
|
||||||
|
Name,Short_Name__c,dfsle__DocuSignId__c
|
||||||
|
Invoice Template - EN,INV_EN,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want, I can:
|
||||||
|
- Export the current `dfsle__EnvelopeConfiguration__c` records from an org (provide `ORG_ALIAS`) and create the mapping CSV template for you.
|
||||||
|
- Create the MDAPI metadata XML for `Short_Name__c` under `deploy/mdapi/objects/dfsle__EnvelopeConfiguration__c/fields/` and add it to `deploy/mdapi/package.xml` for deployment.
|
||||||
|
|
||||||
|
---
|
||||||
|
Last updated: 2026-04-01
|
||||||
|
|
@ -0,0 +1,170 @@
|
||||||
|
---
|
||||||
|
title: Migrate DocuSign templates from Sandbox to Production using DAL export (Salesforce)
|
||||||
|
---
|
||||||
|
|
||||||
|
# Migrate DocuSign templates from Sandbox to Production — DAL (DocuSign Apps Launcher) export
|
||||||
|
|
||||||
|
Purpose
|
||||||
|
- Use DocuSign's DAL template export/import to preserve Salesforce merge fields embedded in the DocuSign-for-Salesforce templates (`dfsle__EnvelopeConfiguration__c`).
|
||||||
|
- This document covers exporting templates via DAL from Demo/Sandbox, importing into Production, capturing new template IDs, and updating Salesforce `dfsle__EnvelopeConfiguration__c` records.
|
||||||
|
- Includes instructions to create the `Short_Name__c` custom field required by our Apex classes and Flow.
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
- DocuSign admin access (Demo/Sandbox + Production) with permission to export/import templates via DAL.
|
||||||
|
- Salesforce admin access to create fields and run Data Loader / `sfdx` commands.
|
||||||
|
- `dfsle` (DocuSign for Salesforce) managed package installed in Production.
|
||||||
|
- Optional: `sfdx` CLI or Data Loader for bulk CSV updates.
|
||||||
|
|
||||||
|
High-level steps
|
||||||
|
1. Export the DocuSign templates from Sandbox/Demo using DAL export.
|
||||||
|
2. Import the DAL package(s) into DocuSign Production.
|
||||||
|
3. Capture the new DocuSign template IDs for each imported template.
|
||||||
|
4. Create the `Short_Name__c` custom field on `dfsle__EnvelopeConfiguration__c` (if missing).
|
||||||
|
5. Prepare CSV mapping old→new template IDs.
|
||||||
|
6. Update (or insert duplicates of) `dfsle__EnvelopeConfiguration__c` records in Salesforce.
|
||||||
|
7. Validate by sending test envelopes through the Flow/Apex.
|
||||||
|
|
||||||
|
Detailed steps
|
||||||
|
|
||||||
|
1) Download templates from the source Salesforce org (DAL)
|
||||||
|
|
||||||
|
- Preconditions: you must have Salesforce and DocuSign admin permissions and DAL (DocuSign Apps Launcher v4.5+) installed in the org.
|
||||||
|
|
||||||
|
- Steps in the source org:
|
||||||
|
1. Open the Salesforce App Launcher (grid icon) and select View All.
|
||||||
|
2. Select DocuSign Apps Launcher.
|
||||||
|
3. In the left column select eSignature to open the eSignature Configuration page.
|
||||||
|
4. On the eSignature Configuration page, locate the list of Envelope Templates.
|
||||||
|
5. Select the checkbox next to each template you want to download.
|
||||||
|
6. From the Create Template dropdown choose Download Template.
|
||||||
|
7. The page will refresh and show "Templates downloaded". Save the downloaded file(s) (ZIP) to your device.
|
||||||
|
- Note: Salesforce prevents downloading templates larger than 4 MB.
|
||||||
|
|
||||||
|
- Important: templates that include custom fields created by a specific user may not import cleanly into the destination org unless that creating user exists in the destination. Either add the creating user to the destination org before upload, or plan to rebuild the missing custom fields after import.
|
||||||
|
|
||||||
|
2) Import DAL package(s) into DocuSign Production
|
||||||
|
|
||||||
|
- In DocuSign Production, go to the Templates (or Template Management) area and use the **Import** or **Upload DAL package** option.
|
||||||
|
- Upload each DAL package file exported from Sandbox/Demo.
|
||||||
|
- After import, open each imported template and verify that merge fields (placeholders) are preserved and that the template content looks correct.
|
||||||
|
|
||||||
|
3) Capture new template IDs (GUIDs)
|
||||||
|
|
||||||
|
- For each imported template record in Production, record the new template ID (GUID). The template ID is often visible in the template URL (e.g., `/templates/{templateId}`) or in the template properties.
|
||||||
|
- Create a simple mapping list with columns: `OldDocuSignId, NewDocuSignId, TemplateName`.
|
||||||
|
|
||||||
|
4) Create `Short_Name__c` on `dfsle__EnvelopeConfiguration__c` (if not present)
|
||||||
|
|
||||||
|
Why: Our Apex and Flow expect a `Short_Name__c` field as a compact identifier. Create it before inserting/updating records so `Short_Name__c` values can be included in CSVs and UI pages.
|
||||||
|
|
||||||
|
UI steps (recommended):
|
||||||
|
|
||||||
|
1. In Salesforce Setup, open **Object Manager**.
|
||||||
|
2. Search for **Envelope Configuration** (DocuSign) or look up `dfsle__EnvelopeConfiguration__c`.
|
||||||
|
3. Click **Fields & Relationships** → **New**.
|
||||||
|
4. Select **Text** → **Next**.
|
||||||
|
5. Label: `Short Name` → API Name will be `Short_Name__c` → Length: `50` → Next.
|
||||||
|
6. Set Field-Level Security (visible to integration/admin profiles) → Next → Save.
|
||||||
|
|
||||||
|
Managed-package note
|
||||||
|
- Adding custom fields to managed-package objects is supported in subscriber orgs; the custom field's API name will be `Short_Name__c` (no package namespace).
|
||||||
|
|
||||||
|
MDAPI (optional automation)
|
||||||
|
- If you prefer to deploy the field via Metadata API, create a field metadata file:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Short_Name__c</fullName>
|
||||||
|
<label>Short Name</label>
|
||||||
|
<type>Text</type>
|
||||||
|
<length>50</length>
|
||||||
|
<inlineHelpText>Short identifier used by Apex and Flow</inlineHelpText>
|
||||||
|
</CustomField>
|
||||||
|
```
|
||||||
|
|
||||||
|
Place that at `deploy/mdapi/objects/dfsle__EnvelopeConfiguration__c/fields/Short_Name__c.field-meta.xml` and add the file to `deploy/mdapi/package.xml` before an `sfdx force:mdapi:deploy`.
|
||||||
|
|
||||||
|
5) Prepare mapping CSV (old → new)
|
||||||
|
|
||||||
|
- For updating existing Salesforce records (recommended if Flows reference record Ids):
|
||||||
|
|
||||||
|
```
|
||||||
|
Id,dfsle__DocuSignId__c
|
||||||
|
00Nxxxxxxxxxxxx,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
00Nyyyyyyyyyyyy,22222222-3333-4444-5555-666666666666
|
||||||
|
```
|
||||||
|
|
||||||
|
- For inserting duplicates (preserve old configs):
|
||||||
|
|
||||||
|
```
|
||||||
|
Name,Short_Name__c,dfsle__DocuSignId__c,dfsle__EmailMessage__c
|
||||||
|
Invoice Template - EN,INV_EN,AAAAAAAA-BBBB-CCCC-DDDD-111111111111,Please sign the attached invoice
|
||||||
|
```
|
||||||
|
|
||||||
|
6) Update or insert `dfsle__EnvelopeConfiguration__c` records in Salesforce
|
||||||
|
|
||||||
|
- Update (in-place):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# update by Id (bulk upsert)
|
||||||
|
sfdx force:data:bulk:upsert -s dfsle__EnvelopeConfiguration__c -f updates.csv -i Id -u ORG_ALIAS -w 10
|
||||||
|
```
|
||||||
|
|
||||||
|
- Insert (duplicates):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sfdx force:data:bulk:insert -s dfsle__EnvelopeConfiguration__c -f inserts.csv -u ORG_ALIAS -w 10
|
||||||
|
```
|
||||||
|
|
||||||
|
- Alternatively use Data Loader / Dataloader.io for GUI-driven imports.
|
||||||
|
|
||||||
|
Notes
|
||||||
|
- If flows or other automation reference the `dfsle__EnvelopeConfiguration__c` record Ids directly, prefer updating `dfsle__DocuSignId__c` in-place.
|
||||||
|
- If you want to keep previous configs for rollback or comparison, insert duplicates and then re-point any automation to new records as needed.
|
||||||
|
|
||||||
|
7) Validate end-to-end
|
||||||
|
|
||||||
|
- Query to verify `Short_Name__c` and new DocuSign IDs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sfdx force:data:soql:query -u ORG_ALIAS -q "SELECT Id, Name, Short_Name__c, dfsle__DocuSignId__c FROM dfsle__EnvelopeConfiguration__c WHERE Short_Name__c != NULL" --resultformat csv
|
||||||
|
```
|
||||||
|
|
||||||
|
- Trigger the Flow or call the Invocable Apex (in Developer Console or by running the Flow in UI) to send a test envelope and confirm the imported template is used and merge fields populate as expected.
|
||||||
|
|
||||||
|
Rollback
|
||||||
|
- Keep your original export CSV from step 1 as a rollback file. To revert, re-run Data Loader using the backup CSV to restore prior `dfsle__DocuSignId__c` values.
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
- If a bulk insert/update fails, check Field-Level Security, API access for the managed-package object, and required fields enforced by the package.
|
||||||
|
- If the DAL import does not preserve some merge mappings, capture the problem template and contact DocuSign support — but DAL is the recommended method because it preserves Salesforce-related merge fields.
|
||||||
|
|
||||||
|
Appendix
|
||||||
|
|
||||||
|
- Example SOQL to list templates with non-blank `Short_Name__c`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT Id, Name, Short_Name__c FROM dfsle__EnvelopeConfiguration__c WHERE Short_Name__c != NULL
|
||||||
|
```
|
||||||
|
|
||||||
|
- Example `updates.csv`:
|
||||||
|
|
||||||
|
```
|
||||||
|
Id,dfsle__DocuSignId__c
|
||||||
|
00Nxxxxxxxxxxxx,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
```
|
||||||
|
|
||||||
|
- Example `inserts.csv`:
|
||||||
|
|
||||||
|
```
|
||||||
|
Name,Short_Name__c,dfsle__DocuSignId__c
|
||||||
|
Invoice Template - EN,INV_EN,AAAAAAAA-BBBB-CCCC-DDDD-111111111111
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want, I can:
|
||||||
|
- Export the current `dfsle__EnvelopeConfiguration__c` records from an org (provide `ORG_ALIAS`) and prepare `updates.csv`/`inserts.csv` pre-filled with current data.
|
||||||
|
- Add the MDAPI field metadata for `Short_Name__c` into `deploy/mdapi/objects/dfsle__EnvelopeConfiguration__c/fields/` and update `deploy/mdapi/package.xml` for deployment.
|
||||||
|
|
||||||
|
---
|
||||||
|
Last updated: 2026-04-01
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Migrate DocuSign templates from Sandbox to Production — DAL (DocuSign Apps Launcher) export
|
||||||
|
|
||||||
|
# Purpose
|
||||||
|
- Use DocuSign's DAL template export/import to preserve Salesforce merge fields embedded in the DocuSign-for-Salesforce templates (`dfsle__EnvelopeConfiguration__c`).
|
||||||
|
- This document covers exporting templates via DAL from Demo/Sandbox, importing into Production, capturing new template IDs, and updating Salesforce `dfsle__EnvelopeConfiguration__c` records.
|
||||||
|
- Includes instructions to create the `Short_Name__c` custom field required by our Apex classes and Flow.
|
||||||
|
|
||||||
|
# Prerequisites
|
||||||
|
- DocuSign admin access (Demo/Sandbox + Production) with permission to export/import templates via DAL.
|
||||||
|
- Salesforce admin access to create fields and run Data Loader / `sfdx` commands.
|
||||||
|
- `dfsle` (DocuSign for Salesforce) managed package installed in Production.
|
||||||
|
- Optional: `sfdx` CLI or Data Loader for bulk CSV updates.
|
||||||
|
|
||||||
|
# High-level steps
|
||||||
|
1. Export the DocuSign templates from Sandbox/Demo using DAL export.
|
||||||
|
2. Import the DAL package(s) into DocuSign Production.
|
||||||
|
3. Capture the new DocuSign template IDs for each imported template.
|
||||||
|
4. Create the `Short_Name__c` custom field on `dfsle__EnvelopeConfiguration__c` (if missing).
|
||||||
|
5. Prepare CSV mapping old→new template IDs.
|
||||||
|
6. Update (or insert duplicates of) `dfsle__EnvelopeConfiguration__c` records in Salesforce.
|
||||||
|
7. Validate by sending test envelopes through the Flow/Apex.
|
||||||
|
|
||||||
|
# Detailed steps
|
||||||
|
|
||||||
|
## 1) Download templates from the source Salesforce org
|
||||||
|
|
||||||
|
- Preconditions: you must have Salesforce and DocuSign admin permissions and DAL (DocuSign Apps Launcher v4.5+) installed in the org.
|
||||||
|
|
||||||
|
### Steps in the source org:
|
||||||
|
1. Open the Salesforce App Launcher (grid icon) and select View All.
|
||||||
|
2. Select DocuSign Apps Launcher.
|
||||||
|
3. In the left column select eSignature to open the eSignature Configuration page.
|
||||||
|
4. The Templates tab should be showing
|
||||||
|
5. On the eSignature Configuration page, locate the list of Envelope Templates.
|
||||||
|
6. Select the checkbox next to each template you want to download.
|
||||||
|
7. From the Create Template dropdown choose Download Template.
|
||||||
|
8. The page will refresh and show "Templates downloaded". Save the downloaded file(s) (ZIP) to your device.
|
||||||
|
- Note: Salesforce prevents downloading templates larger than 4 MB.
|
||||||
|
|
||||||
|
- Important: templates that include custom fields created by a specific user may not import cleanly into the destination org unless that creating user exists in the destination. Either add the creating user to the destination org before upload, or plan to rebuild the missing custom fields after import.
|
||||||
|
|
||||||
|
## 2) Upload templates to the target Salesforce org
|
||||||
|
|
||||||
|
### Steps in the target org:
|
||||||
|
1. Open the Salesforce App Launcher (grid icon) and select View All.
|
||||||
|
2. Select DocuSign Apps Launcher.
|
||||||
|
3. In the left column select eSignature to open the eSignature Configuration page.
|
||||||
|
4. The Templates tab should be showing
|
||||||
|
5. From the Create Template dropdown choose Upload Template.
|
||||||
|
|
||||||
|
- Upload each Template file exported from the source org.
|
||||||
|
- After upload, open each template and verify that merge fields (placeholders) are preserved and that the template content looks correct.
|
||||||
|
|
||||||
|
## 3) Create `Short_Name__c` on `dfsle__EnvelopeConfiguration__c` (if not present)
|
||||||
|
|
||||||
|
Why: Our Apex and Flow expect a `Short_Name__c` field as a compact identifier. Create it before inserting/updating records so `Short_Name__c` values can be included in CSVs and UI pages.
|
||||||
|
|
||||||
|
### Steps for adding the Short_Name field:
|
||||||
|
1. Go to the Docusign Apps Launch eSignature Configuration page (should already be there from last step)
|
||||||
|
2. Click on Name of the top template (you can select any template). This will bring you into the template
|
||||||
|
3. Go to top Gear Icon Settings menu and Select "Edit Object"
|
||||||
|
4. This brings you to the Setup Object Manager for the Docusign Envelope Template
|
||||||
|
5. Click **Fields & Relationships** in left hand menu, then → **New**.
|
||||||
|
6. Select **Text** → **Next**.
|
||||||
|
7. Label: `Short Name` → API Name will be `Short_Name__c` → Length: `50` → Next.
|
||||||
|
8. Set Field-Level Security (visible to all profiles) → Next → Save.
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
%PDF-1.3
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (anonymous) /CreationDate (D:20260402234617-04'00') /Creator (anonymous) /Keywords () /ModDate (D:20260402234617-04'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||||
|
/Subject (unspecified) /Title (untitled) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1476
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm;gJ6d"&:L1SW4*3ti5CX/KK#3I(5^ibM%!1BTOV'ihQbnnDB"tXhs.Wj4!@J\'g`7iC$Ka(e2_@b-M1f;cS,Ir@fbUO)f,`pCTq*fKuF/L0#!_9%bR-E\RSimpY9XQGV0-E";Vl6ro11n-,No?eK^,r-o!5MHD4e!70\f(O&k6\8oY&nIphgDa&)adYWNTc]+e*WQ<`LTFIW?nf+5)*D*hSGKn9P1j^Ea]Gm=%M#[)&c2(_Nr9?s2bI(-)KP(c_W>1@srq_;s&l"k&=_0uB3^N]%"lB(p<RJpDQRr68/e%Z/a-mU:,Y=KM.W7F:i#T:c%@EgNd'O\Ad.)H77IQ7)?24;X`bBuU\/p]gqOY0-Wd9<CAr-Y!K@O__t&c%m9'lec$pA>oE/C1CrYj8"Dc0SA*lAdG/XrsHJ1X&Jt`@FR2^r,cR=7.SO#"-;H3G)aUd.&)j)"hm?+6'.m)U*AlGn(uJb"CrKc1.p*ci%+>",2N1LmX%S6$PB'hi@[aYTPY71/`b`p"U4rD%>Cb@9Q)&*R@_7l].5W>:<?-WG1qoQk4AcJ$TPX?"'R%_Ujm0MYssCOuTrI"eq0eZhSu/X4rXk9USeC<o\CjMRO*j*o11AdV9&V)AFP'I**5:_+@kd*SUi8M_\&"@>IPE:7m+,'fo*PQG)fDJHBE&Q.#M!ODc`KiO"'?^q6ZiaqNAgBaq[a4b_O'Zsub(6[G]:b$iRf"qQ;S-t*N;C)su$HUO1IJ\e^:Vm@%oD%>+>p!Pc4._N6`1]aV.`C/L5Kg4g[f`7>87Qu1*)I01])LFB_^(i[<9<VNPDBA4sMX@1:MdKKK:Uk[tWq?Q\!dJfuVR,!os5\0?OWs$"W"P$7fp\nto#.upp:WAdjQK$@XHs&>V=db[GJ+,H6(ba]g`6djZS",SCSn]`.2oa_riVpo5ND"8*T#:t)e0Dd<,.'\d'.[#1I5P[dMNS$XSqbKjA%9,/u:a/Ue+pRgWacWf*Cb\;nJU'&Ze)9DYq_\SrmXtnlRSt9X?`h7A5Jid`;P2hbCT>N0]Le2h0N+0\Wqp_%g7aA+VAJ@CD%iTL"\S+E8g0MNimNZ=6Q#3SC\K?GL[2^thl:_.@OC/[4/iV;)b[ri7`6l3i_(!Lk9)T+`ZR3&*8;?9?^Z4^:,iVf=dL):pW(5W^C(CS(CRjkeqhV:2FL!Bh6;GtQ5gWu8JN7CS4plOGIVr$_tbHdh#dh&cEq7nmrl$e#jg&f"raEfdNm$bH&KSbk_9qR'=@^\&SllqSIT[bcr#e[<&n7bi=hV3)s,p.]hYqd1EJgTTk@LYG:50W0G&T7Z^:mK8!@i`gtVOre;d@+X:V'MD1qL$%6f!E5@p=Mb`LrP)+VU&20i)?BTP@i]Cc9BX[K_5%B2^2RGgQ/Yu^Z_UTe[tUSP`+ma4+BebkO11@-4=hO)&mheVP)Nj9i>7th.bP/.+t@Vf($]^UU`-rAnDum4Q[.3~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1726
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm;mn_\!'`Gb\iee7BV;cWn:"mHC`aD,B0Km!1l)><*a\D*G[3OEToY9:kj.u'E#=2.L-BU>QkPdO*-A#b((]"*[-,>9B]YBCJlGFm&..5&.\V?$a]DD?.J)9'FNPYij%&:WU-;3P&,X&Z&?l')na6/W=;Bq\^RIb^'RH7%-_<,tF6D_o#5:O+ITQ7Q(.ho!KR,G7]oW.3s_W3dP]!(8D:O5T?1@2gt$;@SB8/IZmR&MHppd@ml+A3MY!t_P6$'.dV?S_:&Kjn2#n7WB+7m4B3C?^;q2*-7K,fm>B*!.imarl'?B[)CbYfFdYbi9a<#h*?%*k;iT1"U(S^gmX]TcW0ca__\=Ad=PM[]54iGmZPJ3:3*ti@^lWm,>ISqm>tPeX,Nob8t4m6\[+_[Z4lXWiJ(<7\ejn%Yn9/DNr+=U+XgR8uEB5`YD+XM2f](;e,u^krEJcP=^Sho7tm"PL1oEKgSqb6>9(UFh5PBTIk,NMDCru/<-JYaZ57&5jB:7K@q.[Qi^3Xo+XeaKU6Ka;ULF%b5KD$*"nGBA5]K8M(7McMT0[>c(EF*-mdt+d.+n(;'$+;BGq>nq<NC@rO@Ko8%mjQM?]AXe]@.5]8+H9WH&8UiMq#gO+8u3h._kTOpcciIcT]<7(hU#33:r+ZJ6(7Q*t>EmZYfh@LmhGhj->aW<Tq0Sc.(Pgob0&O**$c[sO42H;.Uhr822T2L[CgdG7qVR[O@M_E!#bcjO-M%#0al6mUXn<]F;<SJ;<5ZVm['^=1A4o*flD,ULG\9;SuP3'P3I&8fH;l,Nh=he;^RQ'T]\*40Fa>MgDh9k]/#>ZH=]bc0on.$q6:^1C>E=B29WNull<9RLjnW5OrpDku$kR?Qfsg3n]^W2Z-<?9d;20kk&]TsNWk5Oi^jZ6n.X!g`T;L6/_ZOrZKVc?*gXL5_oHVq.)q=8Br"fU8(_7Y=t=GLlrKj=A_B?WWE$6lNmFA>UA.Pi>#d%(1("TtM,%lE)bp%j+m<ipQN,qUr"`Bt,]S)6HKq#C1sMRbG-^KZ-gE'E]Np>2eFX6+O_E@8"8J:EP,`q'!q@TYKb,Co?%DTtMtl+E[:`_fK`o5&t@eh&>,u:4luWnGb,lVf5;P`E@af^*8nq()gp-2o+c_<5(E/a93o>bC\+bSe3]_<>(HU(OV:73p9u4_4nH8JiZ,C?PZdUCfD(EW<8**L;%,kUqogJb@Xj<Ic_pRr9g'EoY4`"LMiX;$-i'!pdOKcoT-J?KD7N0p</O2p4d=IV#SJ)qOnMB69_C&*hA7Z?Y')\W_2:cP`Q2$;7:ZDF*klt/\iMgb3-`20`%:n'_putE;QA,AOL&rkCTTrggp1:dDq*9:/u*WFP:^V%BdL_6^V+;^J5;d5T7sC[>*#7b<;ER+2b=+Wb,nEmqNe0>h*90e:C_O6Di_!7"tQh]&#<?@C#NR(``;.,3'GVBA_s7K=7/l$K8+H_Y+Q\s'6AV+lKX3pVUVjR9RX9BC>E6ZZ!Xf9YrEEe0XI)0.WIi$iWHNqogU9@Cf`'N.)LD\1G.3*'#Va4QQC__%'@Ug/!I^QX((A_RRG&DRZ`Dopb>Zo<$a6:?VeFaM!F`Ha>;^.*O8kZsL'VMUS50^@NH#o/QVf<=M[Qq9SH*oo7QOkB9/(P2eL6mBY/$-]OjZ?"GS^*r>c&^+KTfSX,`!2(?=u)a4paB4M]mTp8hog^`g#RdK!QTC(CL_7Q=A_!hI~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 12
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000061 00000 n
|
||||||
|
0000000112 00000 n
|
||||||
|
0000000219 00000 n
|
||||||
|
0000000331 00000 n
|
||||||
|
0000000408 00000 n
|
||||||
|
0000000602 00000 n
|
||||||
|
0000000796 00000 n
|
||||||
|
0000000864 00000 n
|
||||||
|
0000001125 00000 n
|
||||||
|
0000001190 00000 n
|
||||||
|
0000002758 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<74d07b662bedb5b80492225fc042af8b><74d07b662bedb5b80492225fc042af8b>]
|
||||||
|
% ReportLab generated PDF document -- digest (opensource)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 12
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
4576
|
||||||
|
%%EOF
|
||||||
Loading…
Reference in New Issue