Exporting Salsa for CiviCRM » History » Version 54
Jon Goldberg, 02/12/2016 05:40 PM
1 | 24 | Jon Goldberg | {{lastupdated_at}} by {{lastupdated_by}} |
---|---|---|---|
2 | |||
3 | 1 | Jon Goldberg | h1. Exporting Salsa for CiviCRM |
4 | |||
5 | 54 | Jon Goldberg | h2. Do you use Pentaho Kettle? |
6 | |||
7 | If so, you can use my Salsa to CiviCRM transforms, available here: https://github.com/PalanteJon/civicrm_kettle_transforms |
||
8 | |||
9 | 50 | Jon Goldberg | h2. Before you begin |
10 | 1 | Jon Goldberg | |
11 | 50 | Jon Goldberg | * When exporting from Salsa, exporting to screen and exporting to a file yield different formats! Be sure to be consistent, or you'll find that your field names change, your date formats change, etc. *If you're exporting to give data to Palante, please use the scheduled export*. |
12 | * Salsa data is VERY messy compared to Civi data. Expect to find a lot of records that don't have a first name, last name OR e-mail address. Expect to find donations, participant records, etc. not attached to a supporter (most likely from a legacy import). Expect to find records with NULL for their "Date Created" values. Plan your transformations accordingly. |
||
13 | 1 | Jon Goldberg | |
14 | 50 | Jon Goldberg | h2. Exporting Supporter Data |
15 | |||
16 | When logged in as a Manager, go to "Supporter Management" tab, and "Query/Export" will give you a full export of contact data. There's a "Select My Entire List" button. There's also an "include my deleted supporters" checkbox, which you may want to check (but probably not). This will NOT get you groups/tags, but WILL get you the equivalent of @civicrm_contact@ plus all custom fields attached to the contact. |
||
17 | |||
18 | 25 | Jon Goldberg | h2. Exporting Data not on the Contact Entity |
19 | 1 | Jon Goldberg | |
20 | 8 | Jon Goldberg | You need to get to custom reports. If you have the Reports tab, great; if not, you can get there by clicking "Supporter Management" tab, then "Built-in Reports", then "Clone and Edit" a report, then select "List Your Custom Reports". Or go straight here: https://hq-org.salsalabs.com/dia/hq/reports/list.jsp?table=report |
21 | |||
22 | 11 | Jon Goldberg | h3. Groups |
23 | 12 | Jon Goldberg | |
24 | 3 | Jon Goldberg | * Create a new report. |
25 | * Select the type of report you would like to create: Standard report |
||
26 | * Use "Advanced Object Chooser". |
||
27 | 9 | Jon Goldberg | * Report "Supporter Groups", then "Groups". Press "Save". |
28 | 1 | Jon Goldberg | * Select the "Columns" tab and select your columns. I like just "Supporter Key" and "Group Name". |
29 | 7 | Jon Goldberg | * In Conditions, "Group Name" should be "Not Empty". |
30 | 4 | Jon Goldberg | * Save, Run the report. |
31 | * Click the "Export" link. |
||
32 | 1 | Jon Goldberg | |
33 | 11 | Jon Goldberg | h3. Tags |
34 | 12 | Jon Goldberg | |
35 | 5 | Jon Goldberg | * Create a new report. |
36 | * Select the type of report you would like to create: Standard report |
||
37 | * Use "Advanced Object Chooser". |
||
38 | * Report on "Tags", then "Tags Data", then "Database Table". Press "Save". |
||
39 | * Select the "Columns" tab and select your columns. I like just "Tag" and "Table Key". |
||
40 | 1 | Jon Goldberg | ** "Table Key" is the Supporter Key. It's similar to "entity_id" in CiviCRM. |
41 | 7 | Jon Goldberg | * In "Conditions", "Table Name" should equal "supporter". |
42 | 10 | Jon Goldberg | * Add another condition: "Tag.Tag" is "Not Empty". |
43 | 1 | Jon Goldberg | * Save, Run the report. |
44 | * Click the "Export" link. |
||
45 | |||
46 | 11 | Jon Goldberg | h3. Events |
47 | 1 | Jon Goldberg | |
48 | 15 | Jon Goldberg | As above, but no conditions, and report on the "Event" table. If you're only importing legacy events, this is a good list of easy fields to import: |
49 | Event KEY |
||
50 | Reference Name |
||
51 | Event Name |
||
52 | Description |
||
53 | Start |
||
54 | End |
||
55 | Deadline |
||
56 | Maximum Attendees |
||
57 | 46 | Jon Goldberg | Date Created (is a useful proxy when "Start" isn't defined) |
58 | 15 | Jon Goldberg | |
59 | 1 | Jon Goldberg | h3. Participants |
60 | 16 | Jon Goldberg | |
61 | As above. Report on tables "Supporter Event", then "Event". Note that there are a lot of tables that _look_ like "Supporter Event", like "Supporterevent" and "Supporter Events"! |
||
62 | |||
63 | Note that if you're matching on a unique field from "Events", you can just export "Supporter Event" and not the "Event" table. |
||
64 | Here are the fields I exported and what I matched them to: |
||
65 | Supporter KEY external_identifier |
||
66 | Event KEY event_key |
||
67 | Status status |
||
68 | Type role |
||
69 | Date Created register_date |
||
70 | 51 | Jon Goldberg | Last Modified register_date |
71 | |||
72 | (I didn't actually map both the date fields to register_date. I use "Date Created" unless it's NULL. |
||
73 | 16 | Jon Goldberg | |
74 | 28 | Jon Goldberg | h3. Recurring Donations |
75 | |||
76 | Export on table "Recurring Donation". Here's the field mapping: |
||
77 | |||
78 | Recurring Donation Key -> trxn_id |
||
79 | Supporter Key -> external_identifier |
||
80 | Transaction date -> create_date |
||
81 | Start Date -> start_date |
||
82 | RPREF -> invoice_id |
||
83 | RESULT (exclude 37, they're tests) |
||
84 | Amount -> amount |
||
85 | Pay Period -> use to remap to frequency_unit and frequency_interval |
||
86 | TERM -> installments |
||
87 | Status(?) |
||
88 | |||
89 | Note that in Salsa, there's no clear-cut way to tell whether a contact's recurring donation is still working or not - "Status" isn't a complete indicator, and thus doesn't cleanly map into Civi. |
||
90 | |||
91 | 27 | Jon Goldberg | h3. Donations |
92 | |||
93 | It's important to link the recurring donations to the donations when exporting if you need to identify the first recurring donation (e.g. to generate thank-you letters if it's a first donation and recurring). |
||
94 | |||
95 | 30 | Jon Goldberg | Under "Conditions", filter by "Supporter KEY is not empty" - when Salsa imports legacy data into their system, sometimes they don't do such a hot job. |
96 | |||
97 | 29 | Jon Goldberg | Export on table "Donation" linked to table "Donate Page". You'll want these fields (more or less): |
98 | 27 | Jon Goldberg | |
99 | Donation.donation KEY(donation) |
||
100 | 1 | Jon Goldberg | Donation.supporter KEY(donation) |
101 | 42 | Jon Goldberg | donate_page.Reference_Name (contribution_page_id) |
102 | Donation.Date_Entered |
||
103 | 27 | Jon Goldberg | Donation.Transaction Date(donation) |
104 | 1 | Jon Goldberg | Donation.amount(donation) |
105 | 43 | Jon Goldberg | Donation.Transaction Type(donation) (financial_type) |
106 | Donation.RESULT(donation) (only 0 and -1 should be accepted, others are tests) |
||
107 | 42 | Jon Goldberg | Donation.Tracking Code(donation) (source) |
108 | Donation.Designation Code(donation) (source - not sure what the differentiation between designation and tracking codes is) |
||
109 | 1 | Jon Goldberg | Donation.In Honor Name(donation) |
110 | Donation.In Honor Email(donation) |
||
111 | 27 | Jon Goldberg | Donation.In Honor Address(donation) |
112 | Recurring donation.Transaction Date(recurring_donation) |
||
113 | 1 | Jon Goldberg | Donation.Order_Info |
114 | 42 | Jon Goldberg | Donation.Form of Payment (payment_instrument) |
115 | 27 | Jon Goldberg | |
116 | 44 | Jon Goldberg | *Special Note:* Salsa seems to keep donations that are tied to supporters that don't exist (that is, the supporter_key on the donation doesn't match anyone in Salsa). I've seen this multiple times; I don't know why this is, but this is normal. |
117 | |||
118 | 19 | Jon Goldberg | h3. Actions |
119 | 17 | Jon Goldberg | |
120 | 19 | Jon Goldberg | Salsa has a separate table for actions, making them structurally comparable to Civi Events. A good match in Civi is the Survey entity, which is used for petitions. |
121 | 1 | Jon Goldberg | |
122 | 19 | Jon Goldberg | Export as above. Report on table "Action". |
123 | 1 | Jon Goldberg | Condition: "Reference Name" is not empty. |
124 | 47 | Jon Goldberg | |
125 | Fields: |
||
126 | Action.action KEY |
||
127 | Action.Reference Name |
||
128 | Action.Date Created |
||
129 | Action.Signatures |
||
130 | Action.Last Modified |
||
131 | Action.Title |
||
132 | Action.Description |
||
133 | |||
134 | 19 | Jon Goldberg | |
135 | *Note*: "Description" is likely to contain HTML that breaks the export. I find it helpful to export it as the last column. |
||
136 | |||
137 | h3. Supporter_Actions |
||
138 | 11 | Jon Goldberg | |
139 | 22 | Jon Goldberg | Export "action" and "supporter_action" and "supporter_action_comment" in that order. |
140 | 23 | Jon Goldberg | Condition: supporter_key IS NOT NULL |
141 | 20 | Jon Goldberg | |
142 | Here's the fields I grabbed with their mapping: |
||
143 | 22 | Jon Goldberg | supporter_action.supporter_key |
144 | 21 | Jon Goldberg | action.Reference Name |
145 | 22 | Jon Goldberg | supporter_action.Date_Created |
146 | 48 | Jon Goldberg | supporter_action_comment.Comment |
147 | 52 | Jon Goldberg | supporter_action.Last_Modified |
148 | |||
149 | (I didn't actually map both the date fields to activity_date_time. I use "Date Created" unless it's NULL. |
||
150 | 20 | Jon Goldberg | |
151 | 31 | Jon Goldberg | h3. Letter to the Editor |
152 | |||
153 | This isn't a feature CiviCRM has, but it maps reasonably well to an activity when migrating. |
||
154 | * Create a new report. |
||
155 | * Select the type of report you would like to create: Standard report |
||
156 | * Use "Advanced Object Chooser". |
||
157 | 49 | Jon Goldberg | * Report "Supporter Letter", then "Letter". Press "Save". |
158 | 31 | Jon Goldberg | * Select the "Columns" tab and select your columns: |
159 | > Date_Created -> activity_date_time |
||
160 | > supporter_KEY -> external_identifier |
||
161 | > person_media_ID? -> seems important - but I can't find a matching table, and this data doesn't seem to be accessible from Salsa. |
||
162 | > Letter_Subject -> details (concatenated) |
||
163 | > Letter_Content -> details |
||
164 | > Reference_Name -> subject |
||
165 | * Save, Run the report. |
||
166 | * Click the "Export" link. |
||
167 | |||
168 | 11 | Jon Goldberg | h3. Chapters |
169 | 12 | Jon Goldberg | |
170 | 7 | Jon Goldberg | * Create a new report. |
171 | 1 | Jon Goldberg | * Select the type of report you would like to create: Standard report |
172 | 7 | Jon Goldberg | * Use "Advanced Object Chooser". |
173 | 8 | Jon Goldberg | * Report "Supporter Chapter", then "Chapter". Press "Save". |
174 | * Select the "Columns" tab and select your columns. I like just "Supporter KEY" and "Chapter.Name". |
||
175 | * In Conditions, "Chapter.Name" should be "Not Empty". |
||
176 | 5 | Jon Goldberg | * Save, Run the report. |
177 | 1 | Jon Goldberg | * Click the "Export" link. |
178 | |||
179 | 32 | Jon Goldberg | h2. Programmatically creating custom fields in CiviCRM |
180 | |||
181 | To do this, you'll need to create a custom group, custom fields, option groups, and option values. |
||
182 | |||
183 | h3. Custom Field Group |
||
184 | |||
185 | Don't export anything from Salsa - just create this manually, or using my Kettle transform. |
||
186 | |||
187 | h3. Custom Fields, Option Groups, Option Values |
||
188 | |||
189 | 33 | Jon Goldberg | _Custom Columns_ |
190 | * Create a new report. |
||
191 | * Select the type of report you would like to create: Standard report |
||
192 | * Use "Advanced Object Chooser". |
||
193 | * Report "Custom Columns". Press "Save". |
||
194 | * Select the "Columns" tab and select your columns: |
||
195 | 36 | Jon Goldberg | > custom_column_key -> needed to relate to custom_column_options. Store in filter temporarily. |
196 | 34 | Jon Goldberg | > data_table (should = supporter_custom. In theory, we can probably export non-contact custom fields in this same process) |
197 | 33 | Jon Goldberg | > Date_Created -> created_date |
198 | > label -> label |
||
199 | > type -> data_type, html_type (can be bool, enum, text, varchar) |
||
200 | > Description -> help_pre |
||
201 | > Order -> weight |
||
202 | 53 | Jon Goldberg | > Name -> value* |
203 | > custom_column_option_key -> value* |
||
204 | > is_a_zero_index_enum -> (if this is true, use the "Name" as value. Else use custom_column_option_key as value). |
||
205 | |||
206 | 33 | Jon Goldberg | * Save, Run the report. |
207 | 1 | Jon Goldberg | * Click the "Export" link. |
208 | 37 | Jon Goldberg | * Do NOT import the Salsa name, it'll screw up Civi. |
209 | 1 | Jon Goldberg | |
210 | 35 | Jon Goldberg | _Option Groups_ |
211 | 36 | Jon Goldberg | These will be created automatically when you create custom fields. |
212 | 35 | Jon Goldberg | |
213 | 1 | Jon Goldberg | _Custom Column Options_ |
214 | 33 | Jon Goldberg | * Create a new report. |
215 | * Select the type of report you would like to create: Standard report |
||
216 | * Use "Advanced Object Chooser". |
||
217 | * Report "Custom Column Options". Press "Save". |
||
218 | * Select the "Columns" tab and select your columns: |
||
219 | 1 | Jon Goldberg | > custom_column_KEY -> a lookup field (against civicrm_custom_field.filter to get option_group_id) |
220 | 37 | Jon Goldberg | > custom_column_option_KEY -> value |
221 | > value -> name |
||
222 | 33 | Jon Goldberg | > label -> label |
223 | > isDefault -> is_default |
||
224 | > isDisplayed -> is_active |
||
225 | > _Order -> weight |
||
226 | * Save, Run the report. |
||
227 | * Click the "Export" link. |
||
228 | 7 | Jon Goldberg | |
229 | 1 | Jon Goldberg | h3. Receive_Email field |
230 | |||
231 | 26 | Jon Goldberg | Here's a TSV of how to interpret the "Receive_Email" field. |
232 | |*code*|*meaning*| |
||
233 | |-24|INACTIVE: (5.1.1 User Unknown)| |
||
234 | |-26|INACTIVE: Address contains RFC spec. invalid characters / is improperly formatted| |
||
235 | |-3|INACTIVE: UNSUBSCRIBED (actively unsubscribed by user)| |
||
236 | |-30|INACTIVE (Reported as Spam): Other Blacklist (BLACKLIST)| |
||
237 | |-32|(Unknown Status)| |
||
238 | |-35|INACTIVE (Reported as Spam): Outblaze| |
||
239 | |-4|(Unknown Status)| |
||
240 | |-42|INACTIVE (Recipient Initiated Spam Report): MSN/Hotmail/WebTV| |
||
241 | |-44|INACTIVE (Recipient Initiated Spam Report): UNTI (Juno/NetZero/FreeServers)| |
||
242 | |-45|INACTIVE (Recipient Initiated Spam Report): Yahoo| |
||
243 | |-46|INACTIVE (Recipient Initiated Spam Report): Comcast.net| |
||
244 | |-47|INACTIVE (Recipient Initiated Spam Report): AOL| |
||
245 | |-48|INACTIVE (Recipient Initiated Spam Report): RoadRunner| |
||
246 | |-50|ISP Specific Bounces: AIM.com Unactivated account| |
||
247 | |-51|INACTIVE (Recipient Initiated Spam Report): Excite| |
||
248 | |-52|INACTIVE (Reported as Spam): Earthlink| |
||
249 | |-53|(Unknown Status)| |
||
250 | |-54|(Unknown Status)| |
||
251 | |-60|Bad Address/Expired address, etc (n.b.: These addresses are all @democracyinaction.org)| |
||
252 | |-9|INACTIVE: DEATH (supporter has died)| |
||
253 | |0|0 - Inactive or Unknown(not subscribed)| |
||
254 | |1|1 - Imported or unknown (subscribed)| |
||
255 | |10|ACTIVE: CONFIRMED (Double opt-in)| |
||
256 | 1 | Jon Goldberg | |3|ACTIVE: CLIENT (Client has directly signed up)| |