- %Net.FtpSessionを使用してFTPサーバーを操作する
- データをxls形式にアップロードする簡単な方法
- 役に立つヒント
FTPサーバーを操作します。
Webサービス? いいえ、聞いていません。
3日目に、当社はHeプロダクションコンプレックスとのストリーミングデータの同期を整理しました。 顧客のIT部門はFTPサーバーの使用を主張しましたが、他の交換方法は激しく拒否されました。
必要なもの:
s ftp = ##class(%Net.FtpSession).%New() – FTP ftp.Timeout = – ftp.Connect(, , , ) – FTP ftp.SetDirectory() – FTP ( ) ftp.List( , ) – , , ftp.Binary() – ftp.Retrieve(, .GlobalStream) – ftp.Delete() – ftp.Append(, ) - ftp.Logout() – FTP
FTPサーバーからファイルをインポートする例(ファイルはマスクによって選択されます)。
ClassMethod FTPGetFiles(ftp, fileName) As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.SetDirectory("/TestDir") // s fileName = "????????t??????vK*.xml" // d ..ParserDir(ftp, fileName) s fileName = "????????a??????yK*.xml" d ..ParserDir(ftp, fileName) } q ftp.Logout() } /// , ClassMethod ParserDir(ftp, fileName) As %Status { s file = "" sx = 1 s file(x) = "" // d ftp.List(fileName, .stream) q:'$IsObject(stream) while 'stream.AtEnd { // s file = stream.ReadLine(1, .sc, .eol) if ( file = $C(10) ) { // sx = x + 1 s file(x) = "" } else { // s file(x) = file(x) _ file } if $$$ISERR(sc) { w "ERROR" q } } // d ftp.Binary() // s key = $ORDER(file(""),1) while ( key '= "" ) { // s fName = $E(file(key), 40, *) if ( $L(fName) > 0 ) { #dim GlobalStream As %GlobalBinaryStream; // fName. - FTP CP1251 d ftp.Retrieve($zcvt($zcvt(fName,"I","CP1251"),"O","CP1251"),.GlobalStream) #dim status As %String; // if ( $F(fName,"s") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Shipment", parser) } elseif ( $F(fName,"d") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Disposal" ,parser) } if ( status ) { d ftp.Delete(fName) } } s key = $order(file(key),1) } q ftp.Logout() }
ファイルをFTPサーバーにエクスポートする例
/// FTP ClassMethod RunExport() As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.Binary() // s st = ##class(%SQL.Statement).%New() d st.%PrepareClassQuery("%File","FileSet") s rs = st.%Execute("/usr/cachesys201221/csp/sm/export_xml","*.xml","Size,Name") while rs.%Next() { // , d ftp.Delete(rs.%GetData(6)) // s stream = ##class(%FileBinaryStream).%New() // 1 - s stream.Filename = rs.%GetData(1) // - "done" if ( ftp.Append(rs.%GetData(6),stream) = $$$OK ) { d ##class(%File).Rename(rs.%GetData(1), ##class(%File).GetDirectory(rs.%GetData(1)) _ "done/" _ rs.%GetData(6)) } k stream } } d ftp.Logout() k ftp q $$$OK }
データをxlsx形式にアップロードします。
隣人の悲しみほど楽しいものはありません。
午前中、オフィスに着いた同僚が私に微笑んだことをよく覚えています。少しうれしいことなく、Mozilla Firefoxの新しいバージョンのリリースについて報告しました。 それは、データをエクスポートして当社のソフトウェア製品で優れているというタスクが、visual-Cで記述されたライブラリを使用するブラウザプラグインを使用して解決されたためです。 FireFoxアプリケーションのセキュリティポリシーを変更した後、せいぜい、SDKのバージョンを変更し、DLL(およびプラグイン全体)を再構築し、せいぜい、DLLとJSページパーサーのコードを書き換える必要がありました。 ユーザー間でプラグインを更新する必要があることを思い出したくありません。
しかし、3日目に、私たちの路上でExcel形式にエクスポートする簡単な方法としてCookieが付いたトラックが引き継がれました。
- htmlデータテーブルを取得(フォーム)します
- テーブルをテキストファイルに保存し、拡張子をxlsに変更します
- ファイルを開きます。警告プレートの[はい]をクリックすることを忘れないでください。 Excelはテーブルを完全に認識しました。 必要に応じて、セルにcssスタイルを渡し、データ形式を指定できます。
例
#server(TestProject.MakeExcelFile($("#table_to_excel").html(), "PriceList"))# ClassMethod MakeExcelFile(Data As %String, FileName As %String) As %Status { s FileName = "/tkf/reports/" _ FileName _ "_Excel.xls" s stream = ##class(%Library.FileCharacterStream).%New() s FP = $$GetFilename^%apiCSP(FileName) if ( $L(Data) = 22 ) { d stream.CopyFrom(Data) } else { d stream.Write(Data) } d stream.SetAttribute("Content-Length",stream.Size) d stream.SetAttribute("ContentType","application/excel") d stream.SetAttribute("Charset","UTF8") d stream.SetAttribute("ContentDisposition","attachment; filename=" _ $p(FileName,"/",4)) d stream.LinkToFile(FP) d stream.SaveStream() s oid = stream.%Oid() &js<window.location="#url(%25CSP.StreamServer.cls?STREAMOID=#(..Encrypt(oid))#)#";> q $$$OK }
たとえば、
フォントサイズでセルを設定したり、数値形式タイプを指定したりできます。
<style>.toText{ mso-number-format:\"\@\"; } </style> <td class=”toText”> </td>
役に立つヒント
略語
COSには、次のような演算子の短縮バージョンがあることを誰もが知っているわけではありません。
セット= s
Do = d
書き込み= w
キル= k
終了= q
...
ほとんどの場合、略語は次のようなドキュメントに反映されます。
タイピング
COSは厳密な型付けのない言語ですが、時には#dim構造が作成されたために、事前に型付けを行うことが有用であるか、必要な場合さえあります
例:
SQLの$ CLASSNAME
まれですが、非常に現実的なケースです-クエリを作成するとき、クラス名(SQLの$ CLASSNAMEのアナローグ)を表示する必要があります。これらの目的のために、すべてのクラスに固有の隠しフィールドx__classnameを使用できます。
例:
Letters Extends%Persistentの共通の祖先から継承する2つのクラスAとBがあります。 x__classnameフィールドを選択に含めます。
キャッシュバージョン-UNIX用キャッシュ(x86-64向けRed Hat Enterprise Linux)2012.2.1(ビルド705U)2012年10月24日水曜日14:32:01 EDT。