자체 공급업체를 MFT에 추가
본고에서 나는 어떻게 더 많은 클라우드 저장 플랫폼을 추가하는지 설명하고 싶다.
다음은 우리가 토론하고자 하는 내용입니다.
참조: Dropbox
필요한 인터페이스
FT
MFT는 양방향 파일 전송을 제공하여 클라우드 저장소에서 파일을 다운로드하거나 업로드할 수 있습니다.
MFT에 대한 설명을 보려면this video on Learning.InterSystems.com
참조: Dropbox
자체 MFT 어댑터를 작성하기 전에 기존 MFT 어댑터를 실행합니다.Dropbox를 선택했습니다.
기본 액세스 권한
우선 Dropbox 액세스를 구성해야 합니다.
App Key
과App Secret
http://localhost:57772/csp/sys/oauth2/OAuth2.Response.cls
http://localhost:57772/csp/sys/sec/%25CSP.UI.Portal.MFT.Connection.zen?isNew=1
상호 운용성
이제 새로운 연결을 사용하도록 상호 운용성 제품을 구성해야 합니다.
Dropbox에서 로컬 디렉토리로 파일을 수신하려면 다음과 같이 하십시오.
Get Access Token
EnsLib.MFT.Service.Passthrough
/inbox/
EnsLib.File.PassthroughOperation
작업.EnsLib.File.PassthroughOperation
파일을 Dropbox에 업로드하려면 이 절차를 반대로 수행해야 합니다.
C:\\temp\in\
EnsLib.MFT.Operation.Passthrough
/sent/
작업.EnsLib.File.PassthroughService
C:\\temp\out\
에서 파일을 ,
의 BP 또는 BO로 보내기EnsLib.MFT.Operation.Passthrough
폴더에 있는 파일이 C:\\temp\out\
Dropbox 폴더로 업로드됩니다.보다 포괄적인 지침은 MFT First look 을 참조하십시오.
직접 액세스
상호 운용성 B/B는 직접 액세스할 수 있는 패키지입니다.자신의 어댑터를 작성할 때, 예상대로 작동하는지 확인하기 위해 직접 접근을 사용하는 것이 가장 좋다.다음은 파일 정보를 얻는 예시 방법이다
ClassMethod dropboxInfo(file = "/1.txt")
{
// Establishing Dropbox connection
set mftConnectionName = "Dropbox"
set mftConnection = ##class(%MFT.API).GetConnection(mftConnectionName, .sc)
write:$$$ISERR(sc) $System.Status.GetErrorText(sc)
// Getting information about file
// Some other methods: GetFileInfo GetFolderInfo CreateFolder DeleteFile GetUser ShareFolder UnshareFolder DownloadStream UploadFile
set sc = $classmethod($$$EnsCoreMFTAPIClass,"GetFileInfo", mftConnection, file, .itemInfo)
write:$$$ISERR(sc) $System.Status.GetErrorText(sc)
// Displaying information about file
#dim itemInfo As %MFT.ItemInfo
zw itemInfo
}
--MFT 커넥터
MFT 제공 프로그램은 두 부분으로 구성되어 있습니다.자신의 공급자를 만들려면 그것을 실현해야 합니다.
기술 API(연결)
연결은 요청과 분석 결과를 보내는 것을 책임진다.확장해야 합니다
/sent/
.다른 방법은 필요에 따라 다시 적재할 수 있는데, 이 세 가지 방법은 필수적이다.또한 저는 Yandex를 위해 다음과 같은 세 가지 방법을 만들었습니다.
논리 API
API를 사용하고 연결을 사용해서 요청을 실행합니다. API는 확장
%SYS.MFT.Connection.Base
하고 %MFT.API
패키지에 주재해야 합니다. (잠시 후에 이 수요를 어떻게 해결하는지 토론할 것입니다.)재부팅해야 하는 방법은 다음과 같은 네 가지로 나눌 수 있습니다.메시지
생성/제거
공유
부하
GetFileInfo GetFolderInfo GetFolderContents
CreateFolder DeleteFolder DeleteFile
ShareFolder UnshareFolder UnshareFolderAll
UploadStream 다운로드 스트림
이런 방법들은 말하지 않아도 알 것 같다.그러나 이 방법의 목적이 명확하지 않은 것 같으면 댓글로 물어보세요.%MFT에도 문서가 있습니다.API 클래스.나는 왼쪽에서 오른쪽으로 이 방법을 실현하는 것을 건의합니다. 당신도 공유 방법을 뛰어넘을 수 있습니다.이것은 우리에게 반드시 실현해야 할 8가지 방법을 가져다 주었다.
또한 클라우드 하드 드라이브 공급업체에 사용자 관리(팀 등)가 있는 경우 다음을 통해 관리할 수 있습니다.
마지막으로, GetRequestId 메서드를 사용하여 경로를 ID로 변환해야 합니다. 그렇지 않으면 경로를 되돌려야 합니다.
모든 공급자에게 동일한 방법 외에도 어댑터 작성을 시작할 수 있는 코드 세그먼트가 있습니다.
/// Get the form of id for a file or folder that is most efficient for subsequent calls.
/// GetRequestId will return either an id of the form "id:<id>" or a full path depending on which is more efficient.
/// This method is included to allow the id for future requests to be saved in the most efficient form.
ClassMethod GetRequestId(connection As %SYS.MFT.Connection.Base, itemInfo As %MFT.ItemInfo) As %String
{
Quit itemInfo.GetPath()
}
/// Retrieve the %MFT.UserInfo for current user
ClassMethod GetUser(connection As %SYS.MFT.Connection.Base, username As %String, Output userInfo As %MFT.UserInfo) As %Status
{
Set userInfo = ##class(%MFT.UserInfo).%New()
Set userInfo.Username = connection.Username
Quit sc
}
/// Retrieve the %MFT.UserInfo specified by the service defined Userid.
/// If the user does not exist, then $$$OK is returned as status and userInfo is returned as "".
ClassMethod GetUserById(connection As %SYS.MFT.Connection.Base, userid As %String, Output userInfo As %MFT.UserInfo) As %Status
{
Quit ..GetUser(connection, userid, .userInfo)
}
/// Return the list of all currently defined users for this team or enterprise.
ClassMethod GetUserList(connection As %SYS.MFT.Connection.Base, Output userList As %MFT.UserList) As %Status
{
Set sc = $$$OK
Set userList = ##class(%MFT.UserList).%New()
Set sc = ..GetUser(connection, "", .userInfo)
Quit:$$$ISERR(sc) sc
Do userList.Users.Insert(userInfo)
Quit sc
}
/// Create a new user.
/// Unable to do it in Yandex
ClassMethod CreateUser(connection As %SYS.MFT.Connection.Base, userInfo As %MFT.UserInfo) As %Status
{
Quit $$$ERROR($$$MFTBadConnection)
}
/// Delete new user.
/// Unable to do it in Yandex
ClassMethod DeleteUser(connection As %SYS.MFT.Connection.Base, username As %String) As %Status
{
Quit $$$ERROR($$$MFTBadConnection)
}
/// Delete the user that is specified by the id.
ClassMethod DeleteUserById(connection As %SYS.MFT.Connection.Base, userid As %String) As %Status
{
Quit $$$ERROR($$$MFTBadConnection)
}
/// Unshare a folder from everyone, user is ignored
ClassMethod UnshareFolder(connection As %SYS.MFT.Connection.Base, path As %String, user As %String) As %Status
{
Quit ..UnshareFolderAll(connection, path)
}
/// MountFolder is a Dropbox specific method to mount a shared folder that was shared by a different user.
/// MountFolder is treated as a NOP for all other services.
ClassMethod MountFolder(connection As %SYS.MFT.Connection.Box, folderName As %String) As %Status
{
// A NOP if not Dropbox
Quit $$$OK
}
/// UnmountFolder is a Dropbox specific method to unmount a shared folder that was shared by a different user.
/// UnmountFolder is treated as a NOP for all other services.
ClassMethod UnmountFolder(connection As %SYS.MFT.Connection.Box, folderName As %String) As %Status
{
// A NOP if not Dropbox
Quit $$$OK
}
/// Update the specified remote file with the contents of the specified local file.
/// filePath must be a file path. An id may not be specified.
/// If replace is true, then an existing file of the same name will be replaced.
/// The default is to return an error if a replacement is attempted.
ClassMethod UploadFile(connection As %SYS.MFT.Connection.Base, localFilePath As %String, filePath As %String, replace As %Boolean = 0, Output itemInfo As %MFT.ItemInfo) As %Status
{
Set stream=##class(%FileBinaryStream).%New()
Set stream.Filename=localFilePath
Quit ..UploadStream(.connection,stream,filePath,replace,.itemInfo)
}
/// Download the specified remote file and store at the location given by localFilePath.
/// filePath may be a file path.
ClassMethod DownloadFile(connection As %SYS.MFT.Connection.Base, filePath As %String, localFilePath As %String) As %Status
{
Set stream=##class(%FileBinaryStream).%New()
Set stream.Filename=localFilePath
Quit ..DownloadStream(.connection,filePath,stream)
}
기타 데이터
다른 범주는 다음과 같은 정보를 전송하는 데 사용됩니다.
%MFT
는 파일이나 폴더에 대한 상세한 설명입니다. 이 설명이 필요합니다.설치
API가%MFT 패키지에 있어야 하기 때문에, 전용 데이터베이스에서 대상 네임스페이스(또는%SYS)에 코드를 매핑하는 데 매핑을 사용합니다.이렇게 하면 시스템 간 IRIS를 안전하게 업데이트할 수 있으며, 우리의 업무는 덮어쓰지 않을 것이다.흥미로운 것은 이 예에서 우리는 클래스를 목표 이름 공간에 불러오기만 하면 된다는 것이다.
우선, 우리는 우리의 코드를 다운로드해야 한다. 이렇게 해야 한다.
%MFT.ItemInfo
write $System.Status.GetErrorText(##class(MFT.Installer).Install())
MFTLIB
패키지의 매핑을 %MFT.Addons
데이터베이스%SYS.MFT.Connection.Addons
네임스페이스에 추가%SYS
MFTLIB
(https, UseSSL=1의 경우 개발의 경우 Веб-сервисы
http://Host:Port/csp/sys/oauth2/OAuth2.Response.cls
http://localhost:57772/csp/sys/oauth2/OAuth2.Response.cls
, Яндекс.Диск REST API
ID
Pass
write $System.Status.GetErrorText(##class(MFT.Yandex).Install(Login, ID, Pass, Host, Port, UseSSL))
인증을 완료합니다.http://Host:Port/csp/sys/sec/%25CSP.UI.Portal.MFT.ConnectionList.zen
Get Access Token
과write $System.Status.GetErrorText(##class(MFT.Yandex).ConfigureProduction(yandexSource, fileDestination, fileSource, yandexDestination))
-Yandex.파일을 다운로드할 디스크 폴더는 로컬 대상 폴더에 저장됩니다.yandexSource
및fileDestination
- 파일을 Yandex의 로컬 폴더에 업로드합니다.디스크fileSource
로 끝나야 합니다(즉, 디스크 루트의 yandexDestination
는 /
out
을 시작하고 생산을 시작한다./out/
에 파일을 추가하여 작동 방식을 확인합니다.ClassMethod Install(username As %String, clientId As %String, clientSecret As %String, host As %String = "localhost", port As %Integer = {$get(^%SYS("WebServer","Port"), 57772)}, useSSL As %Boolean = {$$$NO})
{
New $Namespace
Set $Namespace = "%SYS"
Do:'##class(Security.SSLConfigs).Exists(..#SSLConfig) ##class(Security.SSLConfigs).Create(..#SSLConfig)
Set sys = ##class(%SYS.MFT.Connection.Addons.Yandex).%New()
Set sys.Name = "Yandex"
Set sys.Service = "Addons.Yandex"
Set sys.ApplicationName = "Yandex"
Set sys.SSLConfiguration = ..#SSLConfig
Set sys.Username = username
Set sys.URL = ..#URL
$$$QuitOnError(##class(%SYS.MFT.Connection.Addons.Yandex).CreateClient(sys.Name, ..#SSLConfig, clientId, clientSecret, ,host, port,,useSSL))
Quit sys.%Save()
}
참고 서비스 값: MFT.Production
.서비스 이름이 yandexSource
에 추가되면 논리 API 클래스의 이름이 생성됩니다.패키지를 직접 수정할 수 없기 때문에 하위 패키지를 추가할 수 있습니다.결론
MFT는 필요한 클라우드 공급업체를 지원하기 위해 쉽게 확장할 수 있는 유용한 기술입니다.
링크
Reference
이 문제에 관하여(자체 공급업체를 MFT에 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/intersystems/adding-your-own-provider-to-mft-2407텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)