![]() |
ADOS Developer's Site - XML Stadium |
![]() |
![]() |
|
![]() |
【サンプルスクリプト】HelloWorld †概要 †基本中の基本、HelloWorld!をHestiaCommanderのコンソールへ表示します。 設定 †
ソースコード(HelloWorld.py) †1:import sys,java 2:from com.ados.hestia.scripts import ScriptSession 3: 4:print "Hello World!" 5: 6:svm.setStatus("HelloWorld finished") 7:svm.setState(ScriptSession.STATE_FINISH) 解説 †1-2: 必要なライブラリのインポート 引数テスト †概要 †スクリプトの引数についてのサンプルです。 設定 †
パラメータ †
ソースコード(ArgumentTest.py) †01:from com.ados.hestia.scripts import ScriptSession 02: 03:print "textfield: ",textfield 04:print "choosetextfield: ",choosetextfield 05:print "integerfield: ",integerfield 06: 07:# binary field will be mapped to IStore object 08:try: 09: id = binaryfield.getID() 10: size = binaryfield.getSize() 11: print "binaryfield.getID(): ",id 12: print "binaryfield.getSize(): ",size 13:except NameError: 14: print "binaryfield was not defined." 15: 16:svm.setStatus("Finished") 17:svm.setState(ScriptSession.STATE_FINISH) 解説 †03-05: 引数を画面表示 受信したメッセージをXML保存 †概要 †受信したメッセージを指定したディレクトリへ保存します。 設定 †
パラメータ †
ソースコード(FileUtil.py) †01:from java.util import Calendar 02:from java.util import GregorianCalendar 03:from java.io import File 04:from org.apache.commons.io import FileUtils 05:sepstring = File.separator 06: 07:""" 08:sample definition of storing data directory name 09:you can customize here as you like 10:root: root directory to store 11:pc: PayloadContainer 12:""" 13:def storeDirectory(root,pc): 14: sc = pc.getServiceContent() 15: current = GregorianCalendar() 16: pipid = sc.getPIPID() 17: pipver = sc.getFullVersion() 18: docid = sc.getDocumentIdentifier() 19: partnerduns = pc.getPartner() 20: eisduns = pc.getEIS() 21: year = current.get(Calendar.YEAR) 22: month = current.get(Calendar.MONTH)+1 23: day = current.get(Calendar.DAY_OF_MONTH) 24: hour = current.get(Calendar.HOUR_OF_DAY) 25: minute = current.get(Calendar.MINUTE) 26: second = current.get(Calendar.SECOND) 27: msecond = current.get(Calendar.MILLISECOND) 28: return "%s%s%04d.%02d.%02d%s%s.%s" % (root,sepstring,year,month,day,sepstring,eisduns,partnerduns) 29: 30:def mkdir(directory): 31: fdir = File(directory) 32: FileUtils.forceMkdir(fdir) 解説(FileUtil.py) †01-04: 利用コンポーネントインポート ソースコード(XMLUtil.py) †01:import java 02:import FileUtil 03:from java.io import File 04:from java.io import FileWriter 05:from java.io import BufferedOutputStream 06:from java.io import FileOutputStream 07:from com.ados.hestia.sdk.rnbm.access import XMLBuilder 08:from com.ados.hestia.sdk.rnbm.access import XMLReader 09:from org.apache.commons.io import CopyUtils 10:""" 11:Write ServiceContent to Writer object 12:sc: ServiceContent Object 13:writer: java.io.Writer object 14:""" 15:def write(sc,writer): 16: reader = XMLReader(writer,sc) 17: reader.read() 18: writer.flush() 19: writer.close() 20: 21:""" 22:Create ServiceContent from Stream Object 23:stream: java.io.InputStream 24:pipid: PIP ID (e.g. 0C1) 25:pipver: PIP Version (e.g. R01.02.00) 26:return ServiceContent 27:""" 28:def read(stream,pipid,pipver): 29: reader = java.io.BufferedReader(java.io.InputStreamReader(stream)) 30: builder = XMLBuilder() 31: return builder.build(reader,pipid,pipver) 32: 33:""" 34:Store PayloadContainer to specified directory with $DOCID.xml 35:if Container has Attachments, $DOCID directory will be made and 36:XML and attachments will be stored. 37:pc: PayloadContainer 38:directory: store root directory 39:""" 40:def store(pc,directory): 41: sc = pc.getServiceContent() 42: attachcount = pc.getAttachmentCount() 43: docid = sc.getDocumentIdentifier() 44: FileUtil.mkdir(directory) 45: if ( attachcount != 0 ): 46: ats = pc.getAttachments() 47: directory = directory + FileUtil.sepstring + docid 48: FileUtil.mkdir(directory) 49: filename = directory + FileUtil.sepstring + docid + ".xml" 50: wr = FileWriter(File(filename)) 51: write(sc,wr) 52: for i in range(0,attachcount): 53: attach = ats.__getitem__(i) 54: attachname = directory + FileUtil.sepstring + attach.getName() 55: istream = attach.openSharedStream() 56: ostream = BufferedOutputStream(FileOutputStream(attachname)) 57: copiedsize = CopyUtils.copy(istream,ostream) 58: istream.close() 59: ostream.flush() 60: ostream.close() 61: else: 62: filename = directory + FileUtil.sepstring + docid + ".xml" 63: wr = FileWriter(File(filename)) 64: write(sc,wr) 解説(XMLUtil.py) †15-19: write()関数定義。ServiceContent, Writerオブジェクトを引数としServiceContentをWriterオブジェクトへ書き出す。 ソースコード(DownloadXMLMain.py) †01:# -*- coding: utf-8-dos -*- 02:# Time-stamp: <2005-10-04 20:25:09 someone> 03:""" 04:Change any Sessions to accept and save xml 05:values from HestiaCommander: 06:svm: com.ados.hestia.scripts.ScriptSession 07:sapi:com.ados.hestia.scripts.ScriptAPI 08:values from Script Description: 09:rootdir: root directory to store 10:""" 11:import XMLUtil 12:import FileUtil 13:import java 14:from jarray import array 15:from com.ados.hestia.utils.db import WhereDescriptor 16:from com.ados.hestia.sdk.session import Session 17:from com.ados.hestia.sdk.session import SessionKey 18: 19:# Initialize Session with "init", "starttime", "totalpips" value 20:if (svm.getObj("init") == None): 21: init = 1 22: svm.regObj("init", init) 23: totalpips = 0 24: svm.regObj("totalpips", totalpips) 25: print "Received messages will be stored into "+rootdir 26: 27:# get ScriptProcessor from ScriptAPI 28:processor = sapi.getSessionProcessor() 29: 30:wd = WhereDescriptor() 31:wd.addCondition(Session.STATE_WAIT_ACCEPTANCE, SessionKey.SESSION_COLUMN_STATUS, \ 32: WhereDescriptor.AND, WhereDescriptor.EQUAL) 33:wd.addCondition(Session.SESSION_TYPE_RESPOND, SessionKey.SESSION_COLUMN_TYPE, \ 34: WhereDescriptor.AND, WhereDescriptor.EQUAL) 35: 36:# Do Query with 37:# SESSION_COLUMN_STATUS == STATE_WAIT_ACCEPTANCE and 38:# SESSION_COLUMN_TYPE = SESSION_TYPE_RESPOND 39:keies = processor.getSessionEntries(SessionKey.SESSION_COLUMN_START_DATE, wd) 40: 41:lenpips = keies.__len__() 42: 43:# set accept status to all sessions 44:for i in range(0, lenpips): 45: key = keies.__getitem__(i) 46: session = sapi.getSessionProcessor().getSessionEntry(key) 47: payload = session.getPartnerMessage() 48: storedirectory = FileUtil.storeDirectory(rootdir,payload) 49: XMLUtil.store(payload,storedirectory) 50: session.acceptPartnerMessage() 51: sapi.getSessionProcessor().updateSession(key, session) 52: totalpips = totalpips+1 53: 54:svm.setStatus(" PIPs:"+totalpips.toString()) 解説(DownloadXMLMain.py) †HelloWorld, 引数テストと異なり、当スクリプトはsvm.setState()によるスクリプトの明示的な終了をしていない。この場合、スクリプトは定期的に起動される。*1 20-25: スクリプト初期化。処理済みPIP数をScriptSessionへレジスト*2 XMLをアップロードし送信 †概要 †ブラウザからXMLをアップロードし送信します。 設定 †
パラメータ †
ソースコード(UploadXML.py) †01:# -*- coding: utf-8-dos -*- 02:# Time-stamp: <2005-10-04 20:25:09 nmoto> 03:from com.ados.hestia.sdk.rnbm.access import XMLBuilder 04:import java 05: 06:# class definition 07:class UploadXML: 08: def __init__(self,scriptsession,scriptapi): 09: self.scriptsession = scriptsession 10: self.scriptapi = scriptapi 11: self.processor = scriptapi.getSessionProcessor() 12: 13: def handleMessage(self,eisduns,partnerduns,servicecontent): 14: # set standard fields to ServiceContent 15: self.scriptapi.setStandardFields(servicecontent, eisduns, partnerduns) 16: 17: # create PayloadContainer 18: payloadcontainer = self.scriptapi.packToContainer(eisduns, partnerduns, servicecontent) 19: 20: # create and register session 21: session = self.scriptapi.createSession(payloadcontainer) 22: self.sessionkey = self.processor.registerSessionEntry(session) ソースコード(UploadXMLMain.py) †01:# -*- coding: utf-8-dos -*- 02:# Time-stamp: <2005-10-04 20:25:09 nmoto> 03:""" 04:Upload XML and send messages over Session. 05:values from HestiaCommander: 06:svm: com.ados.hestia.scripts.ScriptSession 07:sapi:com.ados.hestia.scripts.ScriptAPI 08:values from Script Description 09:xmlinstance: uploaded file handle(IOStore) 10:partner: partner DUNS(String) 11:eis: eis DUNS(String) 12:pipid: pip id(String) 13:pipver: pip full version(String) 14:""" 15:import XMLUtil 16:from UploadXML import UploadXML 17:from com.ados.hestia.sdk.session import Session 18:from com.ados.hestia.scripts import ScriptSession 19: 20:print "Processing store:"+xmlinstance.getID()+" with [EIS:"+eis+"] [Partner:"+partner+"]" 21:upxml = UploadXML(svm,sapi) 22: 23:filestream = xmlinstance.openSharedStream() 24:servicecontent = XMLUtil.read(filestream,pipid,pipver) 25: 26:if (servicecontent != None): 27: print "ServiceContent created from uploaded file" 28: upxml.handleMessage(eis, partner, servicecontent) 29: print "Successfully create new session" 30: svm.setStatus("Finished") 31: svm.setState(ScriptSession.STATE_FINISH) 32:else: 33: svm.setStatus("Cannot build ServiceContent") 34 svm.setState(ScriptSession.STATE_ERROR) 解説 †03-05: 引数を画面表示 |
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |