鏈枃浠嬬粛浜嗗浣曚嬌鐢ㄥ綰跨▼鏉ユ瀯寤鴻交閲忕駭 Batch 妗嗘灦錛屽皢澶ч噺鐨勬暟鎹縼縐誨埌 IBM DB2 Content Manager 8.3 涓傞氳繃鏈枃鐨勫涔狅紝璇昏呭彲浠ヤ簡瑙e浣曢氳繃浣跨敤澶氱嚎紼嬭皟鐢?IBM DB2 Content Manager API 鏋勫緩鐨勬鏋舵潵鍚姩錛屾殏鍋滐紝鎭㈠錛屽仠姝紝鏀劇紦絳夋搷浣溿?/p>
鍦ㄧ敤 API 瀵煎叆澶ч噺鏁版嵁鐨勮繃紼嬩腑錛屽鏋滄病鏈夋鏋跺緢闅炬湁鏁堢殑瀵規暣涓繃紼嬫帶鍒訛紝浠呬粎閫氳繃鏃ュ織鏉ュ垎鏋愯В鍐抽棶棰樻繪槸寰堟氮璐規椂闂達紝騫朵笖鏁堢巼涓嶅お鐞嗘兂銆?/p>
鏈枃鐨勫唴瀹規斁鍦ㄤ簡濡備綍浣跨敤澶氱嚎紼嬪拰閰嶇疆鏂囦歡鏉ユ瀯寤?Batch 妗嗘灦鏉ュ鐞嗗ぇ鏁伴噺瀵煎叆鐨勯棶棰樸?/p>
闅忕潃 IBM DB2 Content Manager錛堢畝縐?IBM CM錛変駭鍝佺殑涓嶆柇鎴愮啛錛岃秺鏉ヨ秺澶氱殑鍐呭綆$悊緋葷粺闇瑕佽縼縐誨埌 IBM CM 涓潵錛岃繖浜涢渶瑕佽縼縐葷殑鏁版嵁閫氬父棣栧厛鎶婄粨鏋勫寲鐨勫唴瀹瑰鍒版枃鏈枃浠朵腑錛屼笌涔嬬浉瀵瑰簲鐨勫浘鍍忓拰 pdf 鏂囦歡閫氬父鏀懼湪瀵瑰簲鐨勬枃浠跺す涓紝鍥懼儚鍜?pdf 瀵瑰簲鐨勬枃浠跺す璺緞涔熼氬父瀛樻斁鍦ㄦ枃鏈枃浠朵腑錛岀劧鍚庤縼縐葷▼搴忛亶鍘嗘枃鏈枃浠訛紝鎶婂搴旂殑 Item 榪佺Щ鍒?IBM CM 涓傝繖浜涢渶瑕佽縼縐葷殑鏁版嵁閫氬父閮芥湁鍑犵櫨 G錛屽浣曟湁鏁堢殑鎺у埗榪佺Щ榪囩▼鏄竴涓緢澶х殑鎸戞垬錛屽洜姝ゆ垜浠繀欏繪瀯寤轟竴涓交閲忕駭鐨?batch 澶勭悊妗嗘灦鏉ユ帶鍒舵暣涓暟鎹殑榪佺Щ鍛ㄦ湡錛岃褰曞鐞嗚繃紼嬩腑鐨勯敊璇紝淇濊瘉鏁版嵁鐨勪竴鑷存с?/p>
鍚屾椂錛屽湪鐢?API 瀵煎叆鏁版嵁鐨勮繃紼嬩腑錛岃瀵煎叆鏁版嵁鎬繪槸鍗冭竟涓囧寲錛屾棤鏁堢殑鏄犲皠瀵煎叆鏁版嵁鍜?DB2 Content Manager 鐨勯」錛屽鑷村伐浣滃彉寰楀鏉傦紝鍚屾椂浣跨殑璁捐鍜屼唬鐮佸啑浣欙紝騫朵笖浣塊噸鐢紝緇存姢鍜屾墿灞曞飽姝ヤ負鑹伴毦銆?/p>
涓轟簡鍏嬫湇鎵鎻愬埌鐨勬寫鎴橈紝榪欎釜 batch 妗嗘灦蹇呴』瑕佹湁浠ヤ笅鍔熻兘錛?
瑕佷嬌妗嗘灦鏈変氦浜掓э紝鎴戜滑蹇呴』鏈変笁涓釜綰跨▼錛氬鎴風綰跨▼錛屾湇鍔$綰跨▼錛屽伐浣滅嚎紼嬨傚鎴風綰跨▼璐熻矗鍙戝嚭宸ヤ綔鎸囦護錛屾湇鍔$綰跨▼鎺ュ彈榪欎簺鎸囦護騫惰皟鐢ㄥ伐浣滅嚎紼嬫潵鍋氬疄闄呯殑宸ヤ綔銆傚浜庡鎴風鍜屾湇鍔″櫒浜や簰錛屽湪娌℃湁 web 鏈嶅姟鍣ㄦ敮鎸佺殑鎯呭喌涓嬶紝鎴戜滑鍙互閲囩敤涓縐嶅彜鑰佷絾鏄緢鏈夋晥鐨勫仛娉曪細socket 緙栫▼銆?Java socket 瀵硅薄鐨?accept 鏂規硶浼氫竴鐩撮樆濉炵洿鍒板鎴風鏈夌▼搴忚緭鍏ワ紝褰撳鎴風鏈夋柊鐨勫懡浠よ緭鍏ョ殑鏃跺欙紝鏈嶅姟鍣ㄧ浠?socket 涓鍑哄懡浠わ紝鐒跺悗鎵ц鍛戒護銆備笅闈㈡槸紺轟緥紼嬪簭錛孋lient.java 浠h〃瀹㈡埛绔▼搴忥紝Server.java 浠h〃鏈嶅姟鍣ㄧ紼嬪簭錛學orker.java 浠h〃宸ヤ綔紼嬪簭 ,Config.java 浠h〃緋葷粺涓竴浜涘弬鏁伴厤緗?/p>
娓呭崟 1. 瀹㈡埛绔▼搴?/strong>
package com.ibm.batch.sample; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import org.apache.log4j.Logger; public class Client { private Config config = null; public void setConfig(Config config) { this.config = config; } private Logger logger = Logger.getLogger(Client.class); public void sendCommand(String command) { Socket socket = null; OutputStream out = null; BufferedWriter writer = null; try { // establish the connection with server. socket = new Socket(config.getHost(), config.getSocketPort()); out = socket.getOutputStream(); writer = new BufferedWriter(new OutputStreamWriter(out)); // send the command to server writer.write(command); writer.flush(); } catch (IOException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e); } } } |
package com.ibm.batch.sample; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import com.ibm.batch.sample.util.ResourceUtils; public class Server { private Config config = null; private boolean processing = true; private Worker worker = null; public void setConfig(Config config) { this.config = config; } public static void main(String[] args) { Server server = new Server(); // create the work thread Worker worker = server.createWorker(args); worker.start(); server.receiveAndExecuteCommand(); } private Worker createWorker(String[] args) { Worker worker = new Worker(); this.worker = worker; return worker; } /** * receive the command from client and execute the command. the method is * keeping running until client send the 'stop' command. * * @throws Exception */ public void receiveAndExecuteCommand() { ServerSocket serverSocket = buildSocketConnection(); // loop until client send 'stop' command while (processing) { Socket socket = null; try { socket = serverSocket.accept(); String commandLine = readCommandFromSocket(socket); executeCommand(commandLine); } catch (Exception e) { throw new RuntimeException(e); } finally { ResourceUtils.closeSocket(socket); } } } private void executeCommand(String commandLine) { // TODO Auto-generated method stub } /** * read the command from the socket * * @param socket * @return */ private String readCommandFromSocket(Socket socket) { InputStream in = null; BufferedReader bufferedReader = null; String commandLine = null; try { in = socket.getInputStream(); bufferedReader = new BufferedReader(new InputStreamReader(in)); commandLine = bufferedReader.readLine(); } catch (IOException e) { throw new RuntimeException(e); } finally { ResourceUtils.closeInputStream(in); ResourceUtils.closeReader(bufferedReader); } return commandLine; } /** * build the socket. * * @return */ private ServerSocket buildSocketConnection() { // prepare the socket for client to connect. ServerSocket serverSocket; try { serverSocket = new ServerSocket(config.getSocketPort()); } catch (java.net.BindException e1) { throw new RuntimeException("Socket port already in use.", e1); } catch (IOException ioe) { throw new RuntimeException(ioe); } return serverSocket; } } |
package com.ibm.batch.sample; import org.apache.log4j.Logger; public class Worker extends Thread { Logger logger = Logger.getLogger(Worker.class); /** * the main method for create item function. */ public void run() { createItem(); } /** * do the real job */ private void createItem() { } } |
澶ф暟閲忕殑鏁版嵁榪佺Щ涓鑸槸鍦ㄥ懆鏈垨鑰呮櫄涓婅繘琛岋紝浣嗘槸濡傛灉瀹㈡埛鐨勫巻鍙叉暟鎹お澶э紝鍦ㄥ懆鏈垨鑰呮櫄涓婃暟鎹彲鑳藉鐞嗕笉瀹岋紝涓轟簡涓嶅獎鍝嶇敓浜х幆澧冪殑鎬ц兘錛屾垜浠繀欏昏兘澶熷湪瀹㈡埛鐨勫伐浣滄椂闂存殏緙撳鐞嗘垨鑰呴檷浣庡鐞嗙殑棰戠巼錛屾妸 cpu 絳夎祫婧愯緇欏鎴風▼搴忥紝涔熷氨鏄澶勭悊綰跨▼ worker 鐨勫伐浣滃彲浠?suspend 鎴栬?slowdow 銆備負浜嗚 worker 綰跨▼鐭ラ亾闇瑕?suspend 褰撳墠澶勭悊錛屾垜浠彲浠ュ湪 worker 鍐呴儴璁劇疆涓涓竷灝斿彉閲?isSuspend錛屽綋紼嬪簭鍦ㄥ驚鐜垱寤?CM item 鐨勬椂鍊欙紝鎴戜滑姣忔閮藉垽鏂竴涓嬭繖涓竷灝斿彉閲?isSuspend錛屽綋鍏朵負 ture 鐨勬椂鍊欙紝紼嬪簭灝辮皟鐢ㄧ嚎紼嬬殑 wait 鏂規硶涓柇褰撳墠綰跨▼鐨勫鐞嗭紝wait 鏂規硶榪樺彲浠ユ帴鍙椾竴涓互寰涓哄崟浣嶇殑鏃墮棿鍙傛暟錛屽綋鏃墮棿鍒拌揪 wait 鎸囧畾鐨勬椂闂寸殑鏃跺欙紝紼嬪簭緇х畫鍒涘緩 CM Item 銆備負浜嗗綰跨▼涔嬮棿鐨勫彉閲忓彲瑙佹э紝鎴戜滑蹇呴』鎶?worker 鐨?isSuspend 鍙橀噺鍜?suspendTime 璁劇疆涓?volatile 銆傚悓鐞嗘垜浠緗竴涓竷灝斿彉閲?isSlowdown 浠ュ強 slowdowTime 銆傜ず渚嬬▼搴忓涓嬶細
package com.ibm.batch.sample; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.apache.log4j.Logger; import com.ibm.batch.sample.util.ResourceUtils; public class Worker extends Thread { Logger logger = Logger.getLogger(Worker.class); private volatile boolean isSlowdown = false; private volatile Double slowdownTime; private volatile boolean isSuspend; private volatile Double suspendTime; public void setSlowdown(boolean isSlowdown) { this.isSlowdown = isSlowdown; } public void setSlowdownTime(Double slowdownTime) { this.slowdownTime = slowdownTime; } public void setSuspend(boolean isSuspend) { this.isSuspend = isSuspend; } public void setSuspendTime(Double suspendTime) { this.suspendTime = suspendTime; } public boolean isSlowdown() { return isSlowdown; } public Double getSlowdownTime() { return slowdownTime; } public boolean isSuspend() { return isSuspend; } public Double getSuspendTime() { return suspendTime; } protected Object semaphore = new Object(); private Config config; public void setConfig(Config config) { this.config = config; } |
/** * the main method for create item function. */ public void run() { BufferedReader reader = null; try { reader = getFileReader(); String oneLine = null; while ((oneLine = reader.readLine()) != null) { if (isSlowdown()) { sleep4GivenTime(); } if (isSuspend()) { suspend4SomeTime(); } createItem(oneLine); } } catch (Exception e) { throw new RuntimeException(e); } finally { ResourceUtils.closeReader(reader); } } /** * current thread sleep for some time,the unit is minute. */ protected void sleep4GivenTime() { try { Thread.sleep((long) (slowdownTime.doubleValue() * 1000)); } catch (InterruptedException e) { // do nothing } } |
/** * suspend working for given time. */ protected void suspend4SomeTime() { synchronized (semaphore) { try { Double suspendTime = getSuspendTime(); if (suspendTime != null) { double suspendTimeDouble = suspendTime.doubleValue() * 60 * 1000; semaphore.wait((long) suspendTimeDouble); } else { semaphore.wait(); } } catch (InterruptedException e) { // tell user that the processing started logger.info("suspend is over,system is continue processing ."); } } } /** * do the real job * * @throws Exception */ private void createItem(String oneLine) throws Exception { } private BufferedReader getFileReader() throws FileNotFoundException { String fileName = config.getFileName(); File processingFile = new File(fileName); BufferedReader reader = new BufferedReader(new FileReader( processingFile)); return reader; } } |
鍦ㄧ▼搴忔殏鍋滃鐞嗕互鍚庯紝鎴戜滑鍙互鎻愬墠緇堟 suspend錛岃妗嗘灦緇х畫澶勭悊錛屼篃灝辨槸妗嗘灦蹇呴』鏈?resume 鍔熻兘銆傛垜浠皟鐢?Worker.java 瀵硅薄涓婄殑 notify 鏂規硶鏉ュ疄鐜拌繖涓姛鑳斤紝紺轟緥濡備笅錛?/p>
娓呭崟 7.Resume
public class Worker extends Thread { /** * resume the working. */ public void continueWorking() { cleanSuspend(); synchronized (semaphore) { semaphore.notify(); } } } |
鏈夋椂鍊欑敤鎴峰洜涓轟竴浜涘師鍥狅紙渚嬪淇敼閰嶇疆鏂囦歡錛夋兂鍋滄紼嬪簭鐨勬墽琛岋紝鎵浠ユ鏋跺繀欏繪湁 stop 鐨勫姛鑳斤紝浣嗘槸 stop 鐨勬椂鍊欐垜浠繀欏繪敞鎰忚褰曠▼搴忓鐞嗗埌鐨勮鏁幫紝榪欐牱瀹㈡埛鍐嶅紑濮嬫墽琛岀殑鏃跺欒兘澶熶粠涓婃鎵ц鐨勬柇鐐圭戶緇墽琛岋紝涔熷氨鏄鏋跺叿澶囦簡 re-start 鍔熻兘錛岃繖鏄?batch 紼嬪簭蹇呴』鍏峰鐨勪竴縐嶅緢閲嶈鐨勫姛鑳斤紝re-start 鍔熻兘鏈夊縐嶅疄鐜版柟娉曪紝鎴戜滑榪欓噷閲囧彇涓縐嶇畝鍗曠殑鏂規硶錛屽湪 stop 鐨勬椂鍊欙紝鎶婂綋鍓嶅鐞嗙殑璁板綍鍒頒竴涓枃鏈枃浠朵腑鍘伙紝涓嬫鍚姩鐨勬椂鍊欎粠涓婃鏈鍚庡鐞嗙殑瀵硅薄寮濮嬭繘琛屽鐞嗐傛墍浠ユ垜浠湪 Worker.java 涓鍔犱竴涓?keepProcessing 甯冨皵鍙橀噺錛屽湪寰幆鍒涘緩 CM Item 鐨勬椂鍊?, 鎴戜滑姣忔閮藉垽鏂竴涓嬭繖涓兼槸鍚︿負 true錛屽鏋滀負 false 鐨勮瘽錛屾垜浠氨鍋滄寰幆澶勭悊錛屽湪 Worker.java 涓繕瑕佸鍔犱竴涓?moveReaderToLastProcess 鏂規硶錛屾妸 reader 閲嶆柊瀹氬悜鍒頒笂嬈″鐞嗙偣銆?/p>
娓呭崟 8. 鍋滄鍜岄噸鍚?/strong>
public class Worker extends Thread { private volatile boolean keepProcessing; public boolean isKeepProcessing() { return keepProcessing; } public void setKeepProcessing(boolean keepProcessing) { this.keepProcessing = keepProcessing; } /** * the main method for create item function. */ public void run() { BufferedReader reader = null; try { long lastProcessedRow = config.getLastProcessedRow(); reader = moveReaderToLastProcess(lastProcessedRow); String oneLine = null; connectToCM(); while (((oneLine = reader.readLine()) != null) && isKeepProcessing()) { if (isSlowdown()) { sleep4GivenTime(); } if (isSuspend()) { suspend4SomeTime(); } createItem(oneLine); lastProcessedRow++; } logCurrentProcessingLine(lastProcessedRow); } catch (Exception e) { throw new RuntimeException(e); } finally { ResourceUtils.closeReader(reader); } } private void logCurrentProcessingLine(long lastProcessedRow) { config.setLastProcessedRow(lastProcessedRow); } /** * move current reader position to last process postion * @return * @throws IOException */ private BufferedReader moveReaderToLastProcess(long lastProcessedRow) throws IOException { // get the file reader BufferedReader reader = getFileReader(); // move the reader to the start row -1. int count = 0; while (count < lastProcessedRow-1) { reader.readLine(); count++; } return reader; } } |
鍒氭墠鎴戜滑璋冪敤鐨?createItem 鏂規硶鏄洿鎺ユ姏鍑哄紓甯哥殑錛屼絾鏄繖鏍風殑澶勭悊瀹為檯涓婃槸閿欒鐨勶紝鍥犱負鍦?batch 澶勭悊榪囩▼涓紝鎴戜滑涓嶅笇鏈涘湪澶勭悊鏌愪竴涓?item 鍑洪敊瀵艱嚧鍓╀綑鐨?item 涓嶅啀澶勭悊錛屾墍浠ユ垜浠湪 catch 閲岄潰瀵瑰紓甯歌繘琛屽垎綾誨鐞嗭紝鎴戜滑 catch 浣忛潪媯鏌ュ紓甯革紙runtime exception錛夛紝閫氬父闈炴鏌ュ紓甯告槸涓嶅彲浠ユ仮澶嶇殑錛屾墍浠ユ垜浠洿鎺ユ姏鍑猴紝璁╃▼搴忕粨鏉熷鐞嗐傚浜庡叾浣欑殑寮傚父錛屾垜浠彧鏄湪鏃ュ織涓褰曚笅鏉ワ紝騫朵笉鎶涘嚭銆傚湪鍏ㄩ儴澶勭悊緇撴潫浠ュ悗錛岀敤鎴峰彲浠ユ鏌ユ棩蹇楁潵榪涜鐩稿簲鐨勫鐞嗐傜ず渚嬩唬鐮佸涓嬶細
public class Worker extends Thread { /** * do the real job * * @throws Exception */ private void createItem(String oneLine) throws Exception { try { //create the item from one line }catch (RuntimeException e) { throw e; }catch (Exception e) { logger.error(e.getMessage(),e); } } } |
涓嬮潰鐨勫唴瀹規斁鍦ㄤ簡濡備綍浣跨敤閰嶇疆鏂囦歡鏉ュ鐞嗗鍏ョ殑闂銆?/p>
閫氳繃璋冪敤鍜岃繍琛?API 鏉ュ鐞嗘暟鎹殑瀵煎叆錛屾垜浠鍏堝畾涔変竴涓熀鏈俊鎭殑閰嶇疆鏂囦歡錛岀敤鏉ュ埗瀹氳繛鎺ョ殑淇℃伅錛屽叾浠栭厤緗枃浠剁殑鐩綍錛屽伐浣滅殑鐩綍絳夋湁鍏沖鍏ラ渶瑕佺殑鍙傛暟銆傜劧鍚庡畾涔夊鍏ユ暟鎹拰 DB2 Content Manager 鐨勯」鐨勬槧灝勯厤緗枃浠躲傞厤緗枃浠跺畾涔夌粨鏉熷悗錛屾垜浠氨鍙互璋冪敤錛★及錛╂潵鍚姩鐩稿簲鐨勫鍏ユ祦紼嬶紝鍦ㄧ▼搴忚繍琛岃繃紼嬩腑錛屽彲浠ュ姩鎬佺殑鏇存敼閰嶇疆錛屼粠鑰屾湁鏁堢殑澶勭悊瀵煎叆鐨勪換鍔°?/p>
鍦ㄥ紑鍙戣繃紼嬩腑錛屾偍鍙互鐏墊椿鍦板畾涔夊悇縐嶉厤緗枃浠朵互渚垮疄鐜板縐嶅鍏ヨ鍒欙紝鍚屾椂鍦ㄧ▼搴忚繍琛屼腑榪涜鏁版嵁鏍¢獙錛屼互闃叉鍐椾綑鍜岄潪娉曟暟鎹閿欒瀵煎叆銆?/p>
涓嬮潰鐨勪竴浜涢厤緗拰浠g爜紺轟緥錛屼互姝や粙緇嶄簡濡備綍瀹氫箟閰嶇疆鏂囦歡錛岀劧鍚庣鐞?API 鏉ュ畬鎴愬鍏ョ殑浠誨姟銆?/p>
瀹氫箟鍩烘湰淇℃伅閰嶇疆鏂囦歡錛氬湪璇ユ枃浠朵腑錛岄』鍏堣瀹?IBM DB2 Content Manager 鐨勪竴浜涜繛鎺ュ弬鏁幫紝 濡傦細
contentManagerDatabase=iCMnlsdb // 瀹氫箟璋冪敤鐨勬暟鎹簱鍚嶅瓧 contentManagerUsername=iCMadmin // 瀹氫箟鐢ㄦ埛鍚? contentManagerPassword= password // 瀹氫箟榪炴帴瀵嗙爜 contentManagerSchema=ICMADMIN // 瀹氫箟鍏蜂綋鐨?schema |
鎮ㄥ彲浠ュ湪浠g爜涓敤浠ヤ笂鍙傛暟鏉ュ疄鐜板 IBM DB2 Content Manager 鐨勮繛鎺ワ紝浠g爜紺轟緥錛?/p>
DKDatastoreICM dsICM = new DKDatastoreICM(); // 鍒涘緩榪炴帴 dsICM.connect("iCMnlsdb", "iCMadmin", "password", "SCHEMA=ICMADMIN"); |
榪橀渶鎸囧畾鍝釜鏂囦歡澶瑰瓨鏀炬槧灝勬枃浠訛紝浠ュ強闇瀵煎叆鐨勬暟鎹枃浠訛紝濡傦細
mappingFilePath=config/rapid/mapping // 鏄犲皠鏂囦歡璺緞 dataFileFolder=config/rapid/data // 鏁版嵁鏂囦歡璺緞 |
涔熷彲瀹氫箟涓浜涘弬鏁版潵澧炲己璇ュ鍏ョ殑嫻佺▼鎺у埗錛屽錛?/p>
runPhase=2 // 鎸囧畾鏄浜岄樁孌靛鍏ワ紝鍦ㄥ鍏ユ椂闇鏇存柊宸叉湁鐨勬暟鎹?/pre> |
瀹氫箟鏄犲皠鏂囦歡錛氳閰嶇疆鏂囦歡涓昏鐢ㄤ簬灝嗙敤鎴鋒兂瑕佸鍏ョ殑鏁版嵁鏄犲皠鍒?IBM DB2 Content Manager 鐨?Item Type 涓紝鎮ㄥ彲鑷敱瀹氬埗璇ユ枃浠訛紝浣跨敤鎴烽伒寰偍瀹氫箟鐨勮鑼冮『鍒╁畬鎴愭暟鎹縼縐匯傚錛?/p>
C001.del=c01 C002.del=c01 |
璇ュ畾涔変腑 C001.del 鍜?C002.del 鏄渶瑕佸鍏ョ殑鏁版嵁鏂囦歡錛宑01 鏄搴旂殑 Item Type 鍚嶅瓧銆傝繖縐嶅畾涔夋柟娉曞彲瀹炵幇灝嗗涓暟鎹枃浠跺鍏ュ悓涓涓?Item Type 涓?/p>
鍏蜂綋鐨勫搴斿叧緋誨涓嬶細
position=1|name=COMPANYNAME position=2|name=COMPANYID position=3|name=INPUTVALUE position=-1|name=SPECIALVALUE|value=C1 |
榪欎釜鏄犲皠鍏崇郴鍙嶆槧浜嗘暟鎹枃浠朵腑鍒楁暟鍜?Item Type 涓?attribute 鐨勫叧緋伙紝濡傜涓鍒楀湪 Item Type 涓唬琛ㄤ簡鍚嶅瓧涓?COMPANYNAME 鐨?attribute 銆傛偍涔熷彲瀹氫箟涓浜涚壒孌婅鍒欙紝濡傚皢 position 璁句負璐熸暟錛屼互渚垮弽鏄犺鍒楁槸涓涓壒孌婄殑 attribute, 瀹冪殑鍊兼槸鍥哄畾鐨勩?姣斿灝?position 璁句負 -1 鏃訛紝鍚嶄負 SPECIALVALUE 鐨?attribute 鐨勫兼繪槸涓?C1 銆?/p>
鑻ユ偍鎯沖疄鐜板皢涓涓暟鎹枃浠跺鍏ュ涓?Item Type 涓紝鍙湪鏁版嵁鏂囦歡涓姞鍏ヤ竴涓壒孌婂垪錛屽湪鏄犲皠鏂囦歡涓寚瀹氳鍒楃殑鍒楁暟錛屼互鍙婂綋璇ュ垪鐨勫煎拰澶氱 Item Type 鐨勬槧灝勫叧緋匯傚錛?/p>
C003.del(position:3) |
榪欐牱錛孋003.del 灝變笉鏄崟涓鐨勫搴斾竴涓?Item Type錛岃屾槸鍏堝幓鍙栫涓夊垪 INPUTVALUE 鐨勫鹼紝鍐嶅幓瀵瑰簲琛ㄤ腑鏌ユ壘鍒板叧鑱旂殑 Item Type 銆傝瀵瑰簲琛ㄥ彲璁炬垚錛?/p>
Value1=c01 Value2=c02 |
鑻ョ涓夊垪 INPUTDOCID 鐨勫間負 Value1 鏃訛紝鍏跺搴旂殑 Item Type 涓?c01錛屽悓鏍風殑褰撳間負 Value2 鏃訛紝浼氬皢璇ヨ鏁版嵁瀵煎叆鍒?c02 鐨?Item Type 涓?/p>
璋冪敤 API 瀹屾垚鎿嶄綔鐨勪唬鐮佺ず渚嬶細鍦ㄧ紪鍐欎唬鐮佽繃紼嬩腑錛岄渶瑕佽皟鐢?DB2 Content Manager 鐨?API 鏉ュ畬鎴?Item Type 浠ュ強瀹冨寘鍚殑 attribute 鐨勫垱寤恒備笂鏂囧凡緇欏嚭浜嗛氳繃鍙傛暟鏉ヨ繛鎺?Content Manager 鐨勬柟娉曪紝涓嬮潰鐨勭ず渚嬩唬鐮佺敤寰楀埌鐨?DKDatastoreICM 鏉ュ疄鐜板叿浣撶殑鎿嶄綔錛?/p>
娓呭崟 10. API 璋冪敤
// Create an item / DDO / Root Component DKDDO ddo = dsICM.createDDO("S_withChild", itemPropertyOrSemanticType); //createDDO(<Overall Item Type>, <Item Property / Semantic Type>); // Adding Multivalue Attributes to DDOs, multiple type can be used, //here just give some example ddo.setData(ddo.dataId(DKConstant.DK_CM_NAMESPACE_ATTR,"S_varchar"), "this is a string value"); //string ddo.setData(ddo.dataId(DKConstant.DK_CM_NAMESPACE_ATTR,"S_date"), java.sql.Date.valueOf("2001-08-12")); //date ddo.setData(ddo.dataId(DKConstant.DK_CM_NAMESPACE_ATTR,"S_double"), new Double("123")); //double |
閫氳繃鏈枃鐨勪粙緇嶏紝鐩鎬俊鎮ㄥ澶氱嚎紼嬫瀯寤虹殑 Batch 妗嗘灦瀹炵幇澶ч噺鏁版嵁榪佺Щ鐨勮繃紼嬶紝鍜岄氳繃閰嶇疆鏂囦歡鐨勭鐞嗙殑 API 瀹炵幇鏁版嵁瀵煎叆鐨勮繃紼嬩篃鏈変簡涓瀹氱殑浜嗚В鍜屽涔犮傛偍鍙伒媧誨湴瀹炵幇涓瀵逛竴錛屼竴瀵瑰錛屽瀵瑰絳夊悇縐嶆槧灝勫叧緋伙紝鎮ㄤ篃鍙互鍒╃敤澶氱嚎紼嬫潵瀹炵幇鍏朵粬鐨勫姛鑳界殑寮鍙戯紝緙栧啓鍑烘洿鍔犲瘜鏈夊垱閫犳х殑杞歡銆?/p>
瀛︿範
鑾峰緱浜у搧鍜屾妧鏈?/strong>