Business intelligence 客製化企業集團戰情中心
 通用於業界代表之ERP系統 包括( 鼎新 TIPTOP / 甲骨文 Oracle ERP / SAP ERP )
本人至今在BI商業智慧領域(應用開發導入)已有近五年的經驗 提供您優化的解決方案

重點在於開發與建置系統之費用 : 完全免費

經驗分享:



隨著各大企業陸續導入集團全球化運籌管理中心,著眼在開發與整合企業資訊系統 (ERP/WorkFlow/SCM/CRM/EIP/EDI)Global Data Center 利用許多軟件技術配合應用開發工具達成異質數據庫同步整合,提供 Realtime 的決策分析數據與異常警示分析 Drill down / Rollup 由上而下,由小而大 的上下垂直整合平台,提供經營管理決策的最佳解決方案

BI 的價值在於精確分析有效的數據(數字化/圖形化) 並應著重於提供未來(也可說預測)資訊,才能準確有效定出如 (商品定價策略 / 最佳成本CD / 供應商協同 / 利潤分析)的企業經營決策



開發建置方面,經由 ETL / OLAP 過程轉化為 企業戰情中心 (資料倉儲系統) 

-- 實務上應為導入E-LT為更加快速有效

 

WorkFlow 導入方面 一般普遍使用 RACI 模型定義來做標準導入方式 

-- 實務上應用則可隨著企業組織來做優化修正... 
business intelligence
business intelligence business intelligence

jeffreyhu 發表在 痞客邦 留言(1) 人氣()


<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="black" fontSize="12"

     verticalAlign="middle" horizontalAlign="center" color="#000506" creationComplete="init()">

    

    <mx:RemoteObject id="lo" destination="ObjectDAO" result="handleResult(event)" fault="handleFault(event)">

        <mx:channelSet>

            <mx:ChannelSet>

                <mx:channels>

                    <mx:AMFChannel 

                        uri="http://127.0.0.1:8400/spring/messagebroker/amf"/>

                </mx:channels>

            </mx:ChannelSet>

        </mx:channelSet>

    </mx:RemoteObject>

    <mx:RemoteObject id="remoteObjectUpload" destination="fileUploadService"   fault="Alert.show(event.fault.message);">

        <mx:channelSet>

            <mx:ChannelSet>

                <mx:channels>

                    <mx:AMFChannel 

                        uri="http://127.0.0.1:8400/spring/messagebroker/amf"/>

                </mx:channels>

            </mx:ChannelSet>

        </mx:channelSet>

    </mx:RemoteObject>

    

    <mx:Script>

        <![CDATA[

            import mx.rpc.events.ResultEvent;

            import mx.rpc.events.FaultEvent;

            import mx.controls.Alert;

            import mx.collections.ArrayCollection;

            import mx.utils.ObjectProxy;

            import mx.utils.ArrayUtil;

            

           

            [Bindable]public var sql:String;

            [Bindable]public var dp:ArrayCollection = new ArrayCollection();

   [Bindable]

private var selectedFiles:Array = new Array();


private var selectedFileReferences:Array = new Array();


private var fileRefList:FileReferenceList;


private function browseFiles(event:MouseEvent):void

{

fileRefList = new FileReferenceList();

fileRefList.addEventListener(Event.SELECT, selectFiles);

fileRefList.browse();



}


private function selectFiles(e:Event):void

{

for each(var fileRef : FileReference in fileRefList.fileList)

{

selectedFiles.push(fileRef.name);

selectedFileReferences.push(fileRef);

fileRef.load();

}

dataGrid.dataProvider = selectedFiles;

}


private function uploadFiles(e:MouseEvent):void

{

for each(var fileRef : FileReference in selectedFileReferences)

{

remoteObjectUpload.doUpload(fileRef.name, fileRef.data);

}

}


            private function init():void{

            }



            private function handleResult(event:ResultEvent):void{

                dp = ArrayCollection(event.result);

     trace(event.result);

                trace("回傳資料");

            }

    private function handleFault(event:FaultEvent):void

    {

                Alert.show(event.fault.message, "錯誤警示");

            }

    

      private function serviceDAO():void

    {

             sql =" CALL DS.update_items_status('DS01') ";

             lo.callProcBySQL(sql);


var batchSQL:Array = new Array();


batchSQL[0] = " delete from xx.testdata  where groupname='1' ";

             batchSQL[1] = " update xx.testdata set member1 = '測試更新1' where groupname='1' ";

             batchSQL[2] = " update xx.testdata set member1 = '測試更新2' where groupname='2' ";

             batchSQL[3] = " update xx.testdata set member1 = '測試更新3' where groupname='3'";

            

             lo.updateBatch(batchSQL);

            

            

            }

        ]]>

    </mx:Script>

    <mx:Panel height="364" width="592" title="測試視窗" horizontalAlign="center" verticalAlign="middle">

        <mx:VBox>

            <mx:ApplicationControlBar dock="true" width="551">

                <mx:Button label="CALL !!" click="serviceDAO()"/>

            </mx:ApplicationControlBar>

            <mx:DataGrid height="255" width="551" dataProvider="{dp}" id="dg">

                <mx:columns>

                    <mx:DataGridColumn headerText="資料成員一" dataField="MEMBER1"/>

                    <mx:DataGridColumn headerText="資料成員二" dataField="MEMBER2"/>

                    <mx:DataGridColumn headerText="資料成員三" dataField="MEMBER3"/>

                    <mx:DataGridColumn headerText="資料成員四" dataField="MEMBER4"/>

                    <mx:DataGridColumn headerText="資料成員五" dataField="MEMBER5"/>

                </mx:columns>

            </mx:DataGrid>

        </mx:VBox>

         <mx:Button label="Browse Files" click="browseFiles(event)" />

<mx:DataGrid id="dataGrid" width="200">

<mx:columns>

<mx:DataGridColumn headerText="Selected files"/>

</mx:columns>

</mx:DataGrid>

<mx:Button label="Upload Files" click="uploadFiles(event)"/>

    </mx:Panel>

</mx:Application>

jeffreyhu 發表在 痞客邦 留言(0) 人氣()

 
 
ObjectDAOImpl.java 
 

package com.vo;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.List;  

import org.springframework.dao.DataAccessException;

import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback; 

import org.springframework.jdbc.support.lob.LobCreator; 

import org.springframework.jdbc.support.lob.LobHandler; 

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class ObjectDAOImpl extends JdbcDaoSupport  {


private LobHandler lobHandler;


public LobHandler getLobHandler() {

   return lobHandler;

}


public void setLobHandler(LobHandler lobHandler ) {

this.lobHandler = lobHandler;

}

@SuppressWarnings("unchecked")

    public boolean deleteBySQL(String sql) {

        //Display SQL command

        System.out.println("正在執行 刪除SQL命令...start");  

        System.out.println(sql); 

        try

           {

        int i = this.getJdbcTemplate().update(sql); 

        System.out.println("影響記錄筆數:"+i); 

           } 

           catch (Exception e) 

        {

           e.printStackTrace();

           System.out.println("執行 刪除SQL命令...failed"); 

           return false;

     }

            System.out.println("執行 刪除SQL命令...done"); 

            return true;

    }

    

    @SuppressWarnings("unchecked")

    public boolean  updateBySQL(String sql){    

           //Display SQL command

           System.out.println("正在執行 更新SQL命令...start"); 

        System.out.println(sql); 

        try

           {

        int i = this.getJdbcTemplate().update(sql); 

        System.out.println("影響記錄筆數:"+i); 

           } 

           catch (Exception e) 

        {

           e.printStackTrace();

           System.out.println("執行 更新SQL命令...failed"); 

           return false;

     }

            System.out.println("執行 更新SQL命令...done"); 

            return true;

      }

    

    @SuppressWarnings("unchecked")

    public boolean insertBySQL(String sql)

    {

        //Display SQL command

        System.out.println("正在執行 新增SQL命令...start"); 

        System.out.println(sql); 

        try

           {

        int i = this.getJdbcTemplate().update(sql); 

        System.out.println("影響記錄筆數:"+i); 

           } 

           catch (Exception e) 

        {

           e.printStackTrace();

           System.out.println("執行 新增SQL命令...failed"); 

           return false;

     }

            System.out.println("執行 新增SQL命令...done"); 

            return true;

   }

    

@SuppressWarnings("unchecked")

public List<?> getAll(String sql){

        //Display SQL command

System.out.println("正在執行 查詢SQL命令...start");

System.out.println(sql);

        //Jdbc Template

System.out.println("執行 查詢SQL命令...done");

        return this.getJdbcTemplate().queryForList(sql);

    }


/** 

  * 事務處理,批量更新String[] String是SQL語句 

  */  

public boolean updateBatch(final List<String> sqlList){

 //Display SQL command

   System.out.println("正在執行 批次更新SQL命令...start");

   try

       {

        for (String sql:sqlList) {

         this.getJdbcTemplate().update(sql);

         System.out.println(sql);

           }

       } 

       catch (Exception e) 

   {

       e.printStackTrace();

       System.out.println("執行 批次更新SQL命令...failed");

       return false;

}

        System.out.println("執行 批次更新SQL命令...done");

        return true;

}

@SuppressWarnings("unchecked")

    public boolean  callProcBySQL(String sql) {

         //Display SQL command

        System.out.println("正在執行 內儲程序 CALL PROCEDURE...start"); 

         System.out.println(sql); 

         try

         {

        this.getJdbcTemplate().execute(sql);

         

     } 

         catch (Exception e) 

     {

         e.printStackTrace();

         System.out.println("執行 內儲程序 CALL PROCEDURE...failed"); 

         return false;

  }

        System.out.println("執行 內儲程序 CALL PROCEDURE...done"); 

  return true;

    }


@SuppressWarnings("unchecked")

    public boolean  updateLobBySQL(String sql,String fileName,final byte[] data) throws IOException {

         //Display SQL command

try{

   final InputStream blobIs = new ByteArrayInputStream(data);

        System.out.println("正在執行 新增/更新 BLOB/CLOB 欄位...start"); 

         System.out.println(sql); 

        

        this.getJdbcTemplate().execute(sql, new AbstractLobCreatingPreparedStatementCallback(this.lobHandler)

        { 

       protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException, DataAccessException

       {

      lobCreator.setBlobAsBinaryStream(ps, 1, blobIs, (int) data.length);            

       } 

        });

         

          blobIs.close();

          

  }

  catch (Exception e) 

    {

        e.printStackTrace();

        System.out.println("執行 新增/更新 BLOB/CLOB 欄位完成...failed"); 

        return false;

  }

  System.out.println("執行 新增/更新 BLOB/CLOB 欄位完成...done"); 

        return true;

    }

}


jeffreyhu 發表在 痞客邦 留言(0) 人氣()

 
applicationContext.xml
 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" 

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

       xmlns:flex="http://www.springframework.org/schema/flex" 

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xmlns:p="http://www.springframework.org/schema/p" 

       xmlns:aop="http://www.springframework.org/schema/aop"

       xmlns:jee="http://www.springframework.org/schema/jee"

       xmlns:task="http://www.springframework.org/schema/task"       

       xsi:schemaLocation=" 

   http://www.springframework.org/schema/beans 

   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 

   http://www.springframework.org/schema/flex 

   http://www.springframework.org/schema/flex/spring-flex-1.0.xsd

   http://www.springframework.org/schema/context

   http://www.springframework.org/schema/context/spring-context-3.0.xsd

   http://www.springframework.org/schema/task 

   http://www.springframework.org/schema/task/spring-task-3.0.xsd

   http://www.springframework.org/schema/aop 

   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

   http://www.springframework.org/schema/tx 

   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

     http://www.springframework.org/schema/jee

       http://www.springframework.org/schema/jee/spring-jee-3.0.xsd

   ">

<!-- dataSource for Oracle JDBC 驅動 -->  

<bean id="dataSource" destroy-method="close">

<!-- 設定 JDBC DB DRIVER 驅動介面 --> 

        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

        <!-- 設定 JDBC DB URL 遠端主機連接路徑  --> 

        <property name="url" value="jdbc:oracle:thin:@192.168.2.21:1521:topprod"/>

        <!-- 設定 DB LOGIN USERNAME  --> 

        <property name="username" value="ds"/>

        <!-- 設定 DB LOGIN PASSWORD  --> 

        <property name="password" value="ds"/>

        <!-- DBCP 連接池啟動時的初始值 -->  

        <property name="initialSize" value="1"/>  

        <!-- DBCP 連接池的最大值 -->  

        <property name="maxActive" value="100"/>  

        <!--  最小空閒值.當空閒的連接數少於閥值時,連接池就會預申請去一些連接,以免來不及申請 -->  

        <property name="minIdle" value="1"/>  

        <!-- 最大空閒值.當經過一個高峰時間後,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->  

        <property name="maxIdle" value="10"/>  

</bean>

<!-- 交易管理模式 注入   JDBC --> 

<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">   

<property name = "dataSource" ref="dataSource"/>   

</bean>   

<!-- 交易管理模式 注入   JDBC --> 

<bean id="transactionTemplate"> 

    <property name="transactionManager" ref="transactionManager"/>

</bean> 

<!-- 配置一個JdbcTemplate實例,並將這個「共享的」,「安全的」實例注入到不同的DAO類中去 -->  

<bean id = "jdbcTemplate"  class = "org.springframework.jdbc.core.JdbcTemplate">   

     <property name = "dataSource" ref="dataSource"/>   

</bean>

<!-- Flex Message Broker -->

<flex:message-broker services-config-path="/WEB-INF/flex/services-config.xml"/>



<bean/>



<bean id="_messageBroker " />   



<bean> 

<property name="mappings" value="/messagebroker/*=_messageBroker" /> 

</bean>

<!-- BLOB/CLOB 操作類  注入   JDBC --> 

<bean id="defaultLobHandler" lazy-init="true" />

   

<context:annotation-config />

<context:component-scan  base-package="com" />

<!--  

<tx:annotation-driven transaction-manager="transactionManager" /> 

-->

  

<bean id="DAOTarget">

  <property name="dataSource" ref="dataSource"/>

   <property name="lobHandler" ref="defaultLobHandler" />   

</bean>

<bean id="ObjectDAO">

    <property name="transactionManager" ref="transactionManager"/>

    <property name="target" ref="DAOTarget"/>

    <property name="proxyTargetClass" value="true"/> 

    <property name="transactionAttributes">    

      <props>

        <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>

        <prop key="get*">PROPAGATION_SUPPORTS</prop>

      </props>

    </property>

      <flex:remoting-destination/>

  </bean>

  

</beans>


jeffreyhu 發表在 痞客邦 留言(0) 人氣()

 
 
crossdomain.xml
 
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 

<cross-domain-policy>

<site-control permitted-cross-domain-policies="all" />

<allow-access-from domain="*" />

<allow-http-request-headers-from domain="*" headers="*" />

</cross-domain-policy>



jeffreyhu 發表在 痞客邦 留言(0) 人氣()

 
web.xml
 
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

    <!-- The front controller of this Spring Web application, responsible for handling all application requests -->

    <servlet>

        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/applicationContext.xml</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <!-- Map all /messagbroker requests to the DispatcherServlet for handling -->

    <servlet-mapping>

        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

        <url-pattern>/messagebroker/*</url-pattern>

    </servlet-mapping>   

</web-app>

jeffreyhu 發表在 痞客邦 留言(0) 人氣()

1
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。