주간 내보내기 서비스에서 추출한 첨부 파일 세트에서 특정 파일을 파내는 방법

3538 단어 Salesforcebat
기술 블로그보다는 일기입니다.
원래 어째서 그런 일을 할 필요가 나왔는가 하면···.

AppExchange의 A 앱 ⇒ B 앱 환승을 위해 데이터 마이그레이션하고 싶습니다.



Salesforse 커스텀 객체로 데이터를 축적해 나가는 A사로부터
마찬가지로 커스텀 오브젝트에 축적해 가는 B사씨로의 환승을 하게 되었습니다.
다행히 데이터는 2만건 미만이지만 귀찮은 것이 첨부의 이미지 파일.

만약을 위해 B사 씨에게 「A사씨로부터 이행된 사례는 가지고 있지 않습니까 네?」라고 자료를 물어봐도
불행히도, 자세한 것은 아니다.
개발에 확인한다고 말하면서, 이쪽으로 조사해 버리는 것에.

일단, A사씨는 「첨부 파일」즉 Attachiment 에 화상을 넣어, 본문 레코드에 끈다.
B사는 「콘텐츠 문서」ContentsDocument 에 화상을 보존하고 있는 것을 알았습니다.

회사 전체의 본문 레코드를 몰래 이사하고 싶기 때문에,
첨부 파일은 "주간 내보내기 서비스"기능을 사용하여 다운로드하기로 결정합니다.

주간 내보내기 서비스에서 데이터 추출



이미지를 다운로드하고 싶으므로 아래 설정에 체크를 넣고,


개체만 선택하고 내보내기 일정의 날짜와 시간이 될 때까지 기다렸습니다.

하지만 모든 오브젝트에 묶는 모든 파일이 토해지는군요! !

마지카-···. 50MB를 넘는 Zip이 수십 개 완성된다-----!
그리고 어떤 Zip에 어떤 파일이 들어 있는지 Attachiment CSV에도 쓰지 않습니다.
일람표의 텍스트도 만들어주지 않고
전부 전개해도 좋지만, 하지만 수천이라는 이미지 파일 손으로 찾고 싶지 않고 ...
라고 생각해 Bat화하는 흐름에.

Zip 중에서 소정의 파일명을 픽업하는 Bat



특히 대상 파일 이름이 attachiment 파일로 깨지기 때문에,
어디서 Zip에서 압축을 풀어야 하는지를 찾는 방법을 생각해 봅시다.
그건 그렇고, 매크로는 무겁고 좋지 않았습니다. (그렇다면)

그래서 Bat화를 시도했습니다만.
배포하지 않고 Zip 그대로 검색하는 명령은 설치가 필요한 것만 발견했습니다.Unzip 또는 7zip 의 이용이 필요해, 아래는 Unzip의 커멘드를 사용해 쓴 Bat 파일.
Zip 내용을 제외한 명령을 for 문으로 오로지 돌립니다.
※정말은 보다 우아한 방법도 있어요-반드시(゜-゜)

실제로, 나중에 나열된 파일 이름을 기반으로
폴더 복사를 반복하는 처리를 더하여 사용했습니다.
완성형의 공개는 언젠가 할지도 정도로.

토리마, 2만 켄 정도라면 노트북에서도 어떻게든 움직일거야.

그 후, 콘텐츠 시스템의 이식은
또 하나의 Bulk 업데이트용 Bat도 만들고 업로드 작업했습니다.
(거버나 제한이라든지 매너적으로는 자주 이용하지 않으면 안될지도 모릅니다만)

콘텐츠의 업로드를 데이터 로더로 하려고 하면 1회 1000건까지의 제한이 있어 어색하기 때문에
1000건 미만으로 목록과 잘라 자동으로 업로드하는 사람입니다.
익숙하지 않기 때문에 첫번째는 조금 고생했지만
한 번 만들어 버리면, 나중에는 현관 뿐이므로 이행 작업 점점 어려워졌습니다.

데이터 로더의 커맨드 라인 사용은 편리할 것 같으므로, 앞으로 제대로 정리하고 싶네요.
Trailblazers의 형이 이미 쓴 것 같습니다.
@echo off

rem ------------------------------ 
rem 実行前準備作業フォルダのパスを記入

set folderpath=C:\Users\うにゃうにゃ\Documents\
set filepath=SmartViscaf__image_id__c.txt
rem ------------------------------

echo filepathの値:%filepath%
echo folderpathの値:%folderpath%

rem フォルダ内のZip一覧を作成
dir %folderpath% /O /B > %folderpath%ziplist.txt
echo ziplist maked

rem Unzipのフォルダへ移動
cd C:\Program Files (x86)\GnuWin32\bin

rem 一覧記載のZipをすべて検索するループ
for /f %%a in (%folderpath%ziplist.txt) do call :forcall %%a

goto :sub

:forcall
rem For文内でやりたい処理

rem 拡張子:文末3桁の切り出して大文字でそろえる
set ext=%*
set ext=%ext:~-3%
set ext=%ext:z=Z%
set ext=%ext:i=I%
set ext=%ext:p=P%

rem 操作フォルダのパス設定
set zippath=%folderpath%%*

rem 吐き出しファイル名
set listname=list-%*.txt
set listname=%listname:.IP=%

rem 拡張子がZipなら処理実行
if "%ext%" == "ZIP" (

    rem Zip内のファイル名すべて書き出す
    unzip -l %zippath% > %folderpath%temp.txt

    echo temp%* maked

    rem ファイル名で該当するものを最終的な一覧に書き出す
    for /f "tokens=6 delims= " %%a in (%folderpath%temp.txt) do call :makefilelist %%a

)

goto :eof

:makefilelist
rem For文内でやりたい処理 2
set filename=%*
set filename=%filename:Attachments/=%
echo ファイル名摘出:%filename%


for /f %%b in ( %folderpath%%filepath%) do (
    if "%%b" == "%filename%" (    
        echo %filename% >> %folderpath%%listname%

    )
)
goto :eof

:sub
rem '''終了処理
del %folderpath%temp.txt
del %folderpath%ziplist.txt

pause

좋은 웹페이지 즐겨찾기