Synchronize XSD from an InfoPath document with a SharePoint project for server-side XSD validation
In order to implement server-side XSD validation against an InfoPath form submission, I had to pull the XSD from the InfoPath document archive (XSN file) and use that to update an embedded resource in a SharePoint solution project (including automated checkout/checkin in TFS). I was able to do it using a batch file.
Pretty specialized need, but maybe somebody could make use of it someday ;).
Note: If you want to use this code, you'll have to combine some of the lines that were too long to display.
@echo off
rem ***********************************************************
rem This batch file is used to extract the XSD files from each
rem of the InfoPath forms, and copy them into the source tree
rem Download and install the Microsoft CAB SDK from
rem https://support.microsoft.com/kb/310618 to c:\cabsdk
rem ***********************************************************
rem IMPORTANT: Set these values to your system. Do not include
rem trailing slashes, and include values in quotes if necessary
set CABSDK_PATH=c:\cabsdk\bin
set ROOT=C:\projects\projectname
set TFS_USERNAME="domain\user.name"
set TFS_PASSWORD=password
rem These should be relatively fixed
set FORMS_ROOT=%ROOT%\Project.Namespace\12\TEMPLATE\Layouts\infopathForms
set XSD_ROOT=%ROOT%\Project.Namespace\12\Resources
set TF_PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
echo.
echo ********* InfoPath Form 1 *********
echo.
set FORM_PATH=%FORMS_ROOT%\Form 1\Form1.xsn
set XSD_PATH=%XSD_ROOT%\Form1.xsd
set RETURN=FINISH
goto UPDATE_SCHEMA
:FINISH
goto FINISH_BATCH
:UPDATE_SCHEMA
echo Checking file out...
"%TF_PATH%\tf.exe" edit "%XSD_PATH%"
/login:%TFS_USERNAME%,%TFS_PASSWORD% /noprompt >/nil
echo Extracting file...
del myschema.xsd
"%CABSDK_PATH%\extract.exe" "%FORM_PATH%" myschema.xsd >/nil
echo Replacing file...
copy myschema.xsd "%XSD_PATH%" >/nil
echo Checking file in...
"%TF_PATH%\tf.exe" checkin "%XSD_PATH%"
/login:%TFS_USERNAME%,%TFS_PASSWORD% /noprompt
/comment:"Automated checkin from XsdExtractor script" >/nil
goto %RETURN%
:FINISH_BATCH