RE7 Media Export
Apologies if this is a well trodden path, but I have the dreaded question about exporting embedded media from RE7.
I have seen it mentioned before that it's just not possible, but is this still the case? Is there no way, in bulk, to extract media from RE7, or is going through each record one-by-one and saving each individual file the only method? Has anyone had any success with this?
Comments
-
Hi Brian, yep, that's the only method I'm aware of. If you think about it, Raiser's Edge query and export tools are designed to output data fields. It would be great to have a tool that would let you ask, for example, "Please export all Constituent Ids and then export any files on the media tab", but where would Export store the files? It can't store attachments in individual cells of a CSV. And how would the tool generate a file that indicates which attachment goes with which Id? There would need to be a way for Export to provide everything in a hierarchical zipped format with another application to unpack those files in a meaningful way.
It's a great idea! Sadly, you can't get there from here.4 -
Sadly, Aaron Rothberg is right. The way the files are stored in the SQL database makes it very difficult to extract them without using the RE user interface.
I'll add a note that Blackbaud does seem to have come up with some sort of automated way to get the Media files out of RE and into the "supplemental" NXT database, but they aren't sharing that with us mere mortals.1 -
That's disappointing, but I appreciate the responses. Saves me wasting time fighting it.
Thanks.2 -
For those that aren't hosted, if someone that knows a lot about SQL Server and blob/memo fields and general programming wanted to research it, there might be a way.
I've been able to successfully extract data from the media table, but the catch is it was still just for a single record. And I needed to edit the data that came out with a hex editor before I could restore the file.
In any case, this is what I had:
using the Windows command line program "bcp" (Bulk Copy Program):
bcp re7_db.dbo.<name-of-sql-query-no-spaces> OUT myNative.bcp -S <REServerName> -T -n
This extracts the data specified by the query into the file "myNative.bcp". To convert that file into whatever it used to be, you'll need to edit it (with hex editor) to remove a little bit, then save it back to whatever file type it used to have.
I haven't messed with it enough to know if the number of characters before the start of the file is constant.
This technique might be able to be built into something that could be used on many files at once. You would want to have a loop, and temporarily have many queries on the server, each one corresponding to a different row in the Media table. You would give each outputed .bcp file a name corresponding to that.
The tricky bit is the editing and the guessing the original file type. If the prefix before the start of the file is constant length, then you could just remove that number of characters every time. Finally, you could then process the file through Unix's file command to have it tell you what type of file it should be, and add the appropriate file type.
----------------------------------------------
It would be a lot of work to build all that though. It's weird that Blackbaud doesn't just release some sort of utility to do it.2 -
This looked somewhat interesting so I spent a few mins with it;
This is the ~sql code to extract the media object into files - the files are named with the RE record ID and the media ID (you can change the select statement, directory location, naming convention to whatever you want) - note: you need to enable ole automation within your sql database (hopefully, you are working in an sql db copy and not your production system)
DECLARE @outPutPath varchar(50) = 'C:\\Blob\\'
select @data=object,@fPath = @outPutPath +cast(parent_id as varchar(15))+'-'+cast(id as varchar(15))+'.ole' from media where object is not null
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT;
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open';
EXEC sp_OAMethod @init, 'Write', NULL, @data;
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2;
EXEC sp_OAMethod @init, 'Close';
EXEC sp_OADestroy @init;
The result is a sub-dir of media files. Using c#, python, etc you can then extract the header information and rename the file to the specific extension. Example, you can search for 'Acroexch.Dcoument' in the first ~50chars, if a match you can then discard everything up to the char string '%PDF' - granted this is a very simplistic approach but worked for the 100 or some files I tested which were PDFs. Am sure there is a pattern for other file types (ex. Word, jpg, etc).
3 -
dennis ladnier:
This looked somewhat interesting so I spent a few mins with it;
This is the ~sql code to extract the media object into files - the files are named with the RE record ID and the media ID (you can change the select statement, directory location, naming convention to whatever you want) - note: you need to enable ole automation within your sql database (hopefully, you are working in an sql db copy and not your production system)
DECLARE @outPutPath varchar(50) = 'C:\\Blob\\'
select @data=object,@fPath = @outPutPath +cast(parent_id as varchar(15))+'-'+cast(id as varchar(15))+'.ole' from media where object is not null
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT;
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open';
EXEC sp_OAMethod @init, 'Write', NULL, @data;
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2;
EXEC sp_OAMethod @init, 'Close';
EXEC sp_OADestroy @init;
The result is a sub-dir of media files. Using c#, python, etc you can then extract the header information and rename the file to the specific extension. Example, you can search for 'Acroexch.Dcoument' in the first ~50chars, if a match you can then discard everything up to the char string '%PDF' - granted this is a very simplistic approach but worked for the 100 or some files I tested which were PDFs. Am sure there is a pattern for other file types (ex. Word, jpg, etc).
That's pretty cool! Thanks for posting it. (I'll be saving that for if I need it one day.)
For the pattern part: can confirm-- that's why I mentioned the Unix "file" command. In part, it works by recognizing a file type identifier that's usually located at the start of the file. In Unix parlance, these are referred to as "magic numbers" even though they're usually strings or partially strings.
1
Categories
- All Categories
- Shannon parent
- shannon 2
- shannon 1
- 21 Advocacy DC Users Group
- 14 BBCRM PAG Discussions
- 89 High Education Program Advisory Group (HE PAG)
- 28 Luminate CRM DC Users Group
- 8 DC Luminate CRM Users Group
- Luminate PAG
- 5.9K Blackbaud Altru®
- 58 Blackbaud Award Management™ and Blackbaud Stewardship Management™
- 409 bbcon®
- 2.1K Blackbaud CRM™ and Blackbaud Internet Solutions™
- donorCentrics®
- 1.1K Blackbaud eTapestry®
- 2.8K Blackbaud Financial Edge NXT®
- 1.1K Blackbaud Grantmaking™
- 527 Education Management Solutions for Higher Education
- 1 JustGiving® from Blackbaud®
- 4.6K Education Management Solutions for K-12 Schools
- Blackbaud Luminate Online & Blackbaud TeamRaiser
- 16.4K Blackbaud Raiser's Edge NXT®
- 4.1K SKY Developer
- 547 ResearchPoint™
- 151 Blackbaud Tuition Management™
- 1 YourCause® from Blackbaud®
- 61 everydayhero
- 3 Campaign Ideas
- 58 General Discussion
- 115 Blackbaud ID
- 87 K-12 Blackbaud ID
- 6 Admin Console
- 949 Organizational Best Practices
- 353 The Tap (Just for Fun)
- 235 Blackbaud Community Feedback Forum
- 55 Admissions Event Management EAP
- 18 MobilePay Terminal + BBID Canada EAP
- 36 EAP for New Email Campaigns Experience in Blackbaud Luminate Online®
- 109 EAP for 360 Student Profile in Blackbaud Student Information System
- 41 EAP for Assessment Builder in Blackbaud Learning Management System™
- 9 Technical Preview for SKY API for Blackbaud CRM™ and Blackbaud Altru®
- 55 Community Advisory Group
- 46 Blackbaud Community Ideas
- 26 Blackbaud Community Challenges
- 7 Security Testing Forum
- 1.1K ARCHIVED FORUMS | Inactive and/or Completed EAPs
- 3 Blackbaud Staff Discussions
- 7.7K ARCHIVED FORUM CATEGORY [ID 304]
- 1 Blackbaud Partners Discussions
- 1 Blackbaud Giving Search™
- 35 EAP Student Assignment Details and Assignment Center
- 39 EAP Core - Roles and Tasks
- 59 Blackbaud Community All-Stars Discussions
- 20 Blackbaud Raiser's Edge NXT® Online Giving EAP
- Diocesan Blackbaud Raiser’s Edge NXT® User’s Group
- 2 Blackbaud Consultant’s Community
- 43 End of Term Grade Entry EAP
- 92 EAP for Query in Blackbaud Raiser's Edge NXT®
- 38 Standard Reports for Blackbaud Raiser's Edge NXT® EAP
- 12 Payments Assistant for Blackbaud Financial Edge NXT® EAP
- 6 Ask an All Star (Austen Brown)
- 8 Ask an All-Star Alex Wong (Blackbaud Raiser's Edge NXT®)
- 1 Ask an All-Star Alex Wong (Blackbaud Financial Edge NXT®)
- 6 Ask an All-Star (Christine Robertson)
- 21 Ask an Expert (Anthony Gallo)
- Blackbaud Francophone Group
- 22 Ask an Expert (David Springer)
- 4 Raiser's Edge NXT PowerUp Challenge #1 (Query)
- 6 Ask an All-Star Sunshine Reinken Watson and Carlene Johnson
- 4 Raiser's Edge NXT PowerUp Challenge: Events
- 14 Ask an All-Star (Elizabeth Johnson)
- 7 Ask an Expert (Stephen Churchill)
- 2025 ARCHIVED FORUM POSTS
- 322 ARCHIVED | Financial Edge® Tips and Tricks
- 164 ARCHIVED | Raiser's Edge® Blog
- 300 ARCHIVED | Raiser's Edge® Blog
- 441 ARCHIVED | Blackbaud Altru® Tips and Tricks
- 66 ARCHIVED | Blackbaud NetCommunity™ Blog
- 211 ARCHIVED | Blackbaud Target Analytics® Tips and Tricks
- 47 Blackbaud CRM Higher Ed Product Advisory Group (HE PAG)
- Luminate CRM DC Users Group
- 225 ARCHIVED | Blackbaud eTapestry® Tips and Tricks
- 1 Blackbaud eTapestry® Know How Blog
- 19 Blackbaud CRM Product Advisory Group (BBCRM PAG)
- 1 Blackbaud K-12 Education Solutions™ Blog
- 280 ARCHIVED | Mixed Community Announcements
- 3 ARCHIVED | Blackbaud Corporations™ & Blackbaud Foundations™ Hosting Status
- 1 npEngage
- 24 ARCHIVED | K-12 Announcements
- 15 ARCHIVED | FIMS Host*Net Hosting Status
- 23 ARCHIVED | Blackbaud Outcomes & Online Applications (IGAM) Hosting Status
- 22 ARCHIVED | Blackbaud DonorCentral Hosting Status
- 14 ARCHIVED | Blackbaud Grantmaking™ UK Hosting Status
- 117 ARCHIVED | Blackbaud CRM™ and Blackbaud Internet Solutions™ Announcements
- 50 Blackbaud NetCommunity™ Blog
- 169 ARCHIVED | Blackbaud Grantmaking™ Tips and Tricks
- Advocacy DC Users Group
- 718 Community News
- Blackbaud Altru® Hosting Status
- 104 ARCHIVED | Member Spotlight
- 145 ARCHIVED | Hosting Blog
- 149 JustGiving® from Blackbaud® Blog
- 97 ARCHIVED | bbcon® Blogs
- 19 ARCHIVED | Blackbaud Luminate CRM™ Announcements
- 161 Luminate Advocacy News
- 187 Organizational Best Practices Blog
- 67 everydayhero Blog
- 52 Blackbaud SKY® Reporting Announcements
- 17 ARCHIVED | Blackbaud SKY® Reporting for K-12 Announcements
- 3 Luminate Online Product Advisory Group (LO PAG)
- 81 ARCHIVED | JustGiving® from Blackbaud® Tips and Tricks
- 1 ARCHIVED | K-12 Conference Blog
- Blackbaud Church Management™ Announcements
- ARCHIVED | Blackbaud Award Management™ and Blackbaud Stewardship Management™ Announcements
- 1 Blackbaud Peer-to-Peer Fundraising™, Powered by JustGiving® Blogs
- 39 Tips, Tricks, and Timesavers!
- 56 Blackbaud Church Management™ Resources
- 154 Blackbaud Church Management™ Announcements
- 1 ARCHIVED | Blackbaud Church Management™ Tips and Tricks
- 11 ARCHIVED | Blackbaud Higher Education Solutions™ Announcements
- 7 ARCHIVED | Blackbaud Guided Fundraising™ Blog
- 2 Blackbaud Fundraiser Performance Management™ Blog
- 9 Foundations Events and Content
- 14 ARCHIVED | Blog Posts
- 2 ARCHIVED | Blackbaud FIMS™ Announcement and Tips
- 59 Blackbaud Partner Announcements
- 10 ARCHIVED | Blackbaud Impact Edge™ EAP Blogs
- 1 Community Help Blogs
- Diocesan Blackbaud Raiser’s Edge NXT® Users' Group
- Blackbaud Consultant’s Community
- Blackbaud Francophone Group
- 1 BLOG ARCHIVE CATEGORY
- Blackbaud Community™ Discussions
- 8.3K Blackbaud Luminate Online® & Blackbaud TeamRaiser® Discussions
- 5.7K Jobs Board