2017-01-31 3 views
0

사용자가 BuildingBlocks를 더 편리하게 분류하고 필터링하고 사용할 수 있도록 VBA에서 Word 2013 용 사용자 지정 BuildingBlock 관리 시스템을 만들었습니다.네트워크를 통해 Word BuildingBlocks를 오프라인 지원으로 동기화

블록은 관리 시스템 코드가있는 .docm 파일에 첨부 된 .dotm 템플릿 파일에 저장됩니다. 후자의 콘텐츠는 전 세계적으로 수시로 업데이트되며 각 사용자의 로컬 사본에는 개별 콘텐츠가 포함될 수도 있습니다. 모든 사용자는 다른 모든 사용자가 자동으로 사용할 수있는 새 블록을 만들 수 있어야합니다. 또한 로컬 블록 작업은 언제든지 가능해야하며 (온라인, 오프라인), 블록 생성/삭제에만 네트워크 연결이 필요합니다. 변경 로컬 전에

Local and network files

접근 로컬 작업 파일의 각각의 개방에 지역에 네트워크에서 스토리지 파일을 복사이었고, 다음은

는 그래픽 연결을 설명하려고 시작되었습니다. 변경 직후 네트워크 파일이 업데이트됩니다. 그렇게하면 다른 사용자의 변경 사항이 가장 적합하게 덮어 쓰여지지 않고 (같은 시간에 발생하는 경우에만) 모든 사용자가 작업 할 블록의 최신 모음을 갖게됩니다.

문제 : 내가 사용 파일을 덮어 쓸 수 없습니다 - 작업 파일이 .dotm 블록 스토리지의 파일을 참조로, 그것은 배경에 오픈됩니다. 템플릿이 temporarly 중 하나가 작동하지 않습니다 Disattaching : 나는

ActiveDocument.AttachedTemplate = ""

를 사용하려고했지만이 불안정 중요하며 내가 테스트 시스템 (다른 구성)에 처리되지 않습니다. 왜 그런지 모르지만 그런 해결책에 의지 할 수는 없습니다.

질문 : 이 방법이 궁금하십니까? 모범 사례가 있습니까?

감사합니다.

답변

0

이 주제에 관심이있는 모든 분께 :이 문제에 대한 해결 방법을 만들어야했습니다.

빌딩 블록을 저장하는 템플릿을 덮어 쓰기 위해 닫아야하므로 작업 파일을 닫은 후에 일괄 스크립트 일괄 스크립트를 작성했습니다. 마지막 작업으로 돌아가거나 작업을 마무리하기 위해 일괄 처리 파일은 임시 파일을 생성하고 교환 인수를 사용하여 작업 파일을 열어 읽을 수 있습니다. 다음은 배치 파일입니다.

@echo off 
:: Batch file for updating the local libraries [referenced as library and cat files in the following] 
:: Parameters: 
:: %1 - caller file path 
:: %2 - update scenario 
:: %3 - local tool dir path 
:: %4 - library file name 
:: %5 - cat file name 
:: %6 - network library dir path 
:: %7 - tooldata folder name 

SET n=0 
SET f=0 

IF "%~1"=="" (
    echo No arguments passed. 
    Goto NoArguments 
) 

:: Build local and remote paths to the libraries 
SET LocalLib=%~3%~4 
SET LocalCat=%~3%~5 
SET NetworkLib=%~6%~4 
SET NetworkCat=%~6%~5 

:: Wait for a maximum of 16 sec until the local library gets released. 
:: If its still in use afterwards, abort the copy actions. 

:Loop 
SET /A n=n+1 
IF %n% EQU 10 (
    Goto FileNotClosed 
) ELSE (
    2>nul (
    >>%LocalLib% echo off 
) && (SET f=1) 
    IF %f% EQU 0 (
    Ping 1.1.1.1 -n 2 -w 1 | find /V "Ping" > nul 
    Goto Loop 
) ELSE (
    Goto StartCopy 
) 
) 

:StartCopy 
:: Calling document is closed so it should be save to copy the network libraries to the local destination 
xcopy %NetworkLib% %LocalLib% /y /q 
xcopy %NetworkCat% %LocalCat% /y /q 

:FileNotClosed 
:: Finally write results of the actions to a xargs.txt file 
@echo scenario=%~2>"%~3%~7\xargs.txt" 
IF %f% EQU 0 ((@echo success=0)>>"%~3%~7\xargs.txt") ELSE ((@echo success=1)>>"%~3%~7\xargs.txt") 

:: Reopen the caller file 
%1 

:NoArguments 

이 솔루션에서 발생하는 문제는 파일을 닫을 때 작업 파일에서 생성 된 모든 데이터가 손실된다는 것입니다. 그래서 사용자 폼/빌딩 블록 데이터를 추가 임시 파일에 저장해야했습니다.

예를 들어 새로운 빌딩 블록을 만들면 다음과 같이 작동합니다. 사용자가 필요한 모든 정보를 작업 파일 대화 상자에 입력합니다. 완료되면 데이터가 임시 파일에 저장되고 updater.bat가 시작되고 작업 파일이 종료됩니다. 업데이터는 가장 최근의 파일을 복사하고 작업 파일을 다시 시작합니다.이 파일은 bizaid .txt 파일에서 업데이트 결과를 읽고, 작성을 완료하고, 로컬 파일을 네트워크에 다시 업로드하고, 엉망진창을 정리합니다.