[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

【サンプルスクリプト】

HelloWorld

概要

基本中の基本、HelloWorld!をHestiaCommanderのコンソールへ表示します。

設定

NameDescriptionPublic
HelloWorld.pyHello WorldYes

ソースコード(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: 必要なライブラリのインポート
4 : コンソールへの "Hello World!"表示
6 : スクリプトセッションのステータス文字列設定
7 : スクリプトセッションの状態設定

引数テスト

概要

スクリプトの引数についてのサンプルです。

設定

NameDescriptionPublic
ArgumentTest.py引数テストYes

パラメータ

NameDescriptionOptionalTypeList Of Values
textfieldテキスト値NoText
choosetextfield選択可能テキスト値NoLista;b;c;d;e;
integerfield選択可能数値NoInteger1;2;3;
binaryfieldファイルYesBinary

ソースコード(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: 引数を画面表示
08-13: ファイルアップロードコンポーネントの情報を画面表示。未指定の場合は冷害が発生するため13行以降にて例外Catch
16-17: スクリプトセッションのステータス文字列、状態設定

受信したメッセージをXML保存

概要

受信したメッセージを指定したディレクトリへ保存します。

設定

NameDescriptionPublic
DownloadXMLMain.py指定されたディレクトリへのXML保存Yes
FileUtil.py保存XMLのファイル名決定等ユーティリティNo
XMLUtil.pyHestia SDKを利用したServiceContentのread,writeNo

パラメータ

NameDescriptionOptionalTypeList Of Values
rootdirXML Download directoryNoText/store

ソースコード(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: 利用コンポーネントインポート
05: ディレクトリ区切子
07-12: コメント
13-28: storeDirectory関数定義。ディレクトリ名とPayloadContainerよりファイル名を生成し返却する。

ソースコード(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オブジェクトへ書き出す。
28-31: read()関数定義。InputStreamオブジェクト、PIPID、PIPVersionを引数としServiceContentオブジェクトを生成する。
40: store()関数定義。PayloadContainerオブジェクト、保存ディレクトリを引数とし、XMLおよび添付ファイルを保存する。

ソースコード(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
28: セッションプロセッサオブジェクトの取得(セッションの取得に利用)
30-34: セッションオブジェクト取得条件の構築。ここでは35行目に示される条件を構築している。
39: セッションプロセッサから条件にマッチするセッションを取得
44: 取得したセッションオブジェクト分のループ処理
47-48: セッションオブジェクトおよびPayloadの取り出し
49: XMLの保存
50-51: セッションのAcceptおよび更新

XMLをアップロードし送信

概要

ブラウザからXMLをアップロードし送信します。

設定

NameDescriptionPublic
UploadXMLMain.pyXMLアップロードメインYes
UploadXML.pyXMLアップロードサブNo

パラメータ

NameDescriptionOptionalTypeList Of Values
xmlinstanceアップロードするXMLNoBinary
partner取引先DUNSNoText
eis自社DUNSNoText
pipidPIP IDNoText0C1;3A4;
pipverPIP VersionNoTextR01.02.00;V02.00.00

ソースコード(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: 引数を画面表示
08-13: ファイルアップロードコンポーネントの情報を画面表示。未指定の場合は例外が発生するため13行以降にて例外Catch
16-17: スクリプトセッションのステータス文字列、状態設定


*1 起動間隔はサーバオプションより設定する
*2 次回以降のスクリプト起動でも参照可能

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Tue, 20 Jun 2006 13:27:16 JST (4655d)

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.