2014年8月15日

將資料透過 COM 的方式連結到 Outlook 新郵件中

有時候資料輸入到系統中,想要 E-mail 給其他人員確認某些資料時,
希望能夠在 Oulook 的新郵件中預設帶出帶出剛剛輸入的資料,就不需要重複再輸入一次。
通常應用程式相互溝通串連時,都有提供 COM 的方式連結,
因此我們就可以利用這個功能來自動產生新的郵件。
可以參考之前的文章使用 COM 方式實現 Excel 資料匯入匯出的功能

只要用文字變數,再將內文轉換成 HTML 的語法,就可以實現將 TIPTOP 的資料帶到 Outlook 新增郵件中。
這樣使用者只要修改一下內容,或是修改要寄送的人員,再發送郵件就可以了。

另外的方式就是想要寄送郵件都是由使用者的 Outlook 來寄送的話,不是透過 TIPTOP 的 SMTP 的方式,
另方面可以讓使用者的信箱有寄件備份的記錄,
可以做到背景產生新郵件,並且自動發送就會有寄件備份的紀錄了。
也可以做到產生連絡人或是行事曆、會議等功能,算是另一項系統整合的方法了吧。

說明一下 COM 的指令如下用法:
1. CreateInstance:The CreateInstance function creates an instance of a registered COM object.
2. CallMethod:The CallMethod function calls a method on a specified object.
3. GetProperty:The GetProperty function gets a property of an object.
4. SetProperty:The SetProperty function sets a property of an object.
5. GetError:The GetError function gets a description of the last error which occurred.
6. ReleaseInstance:The ReleaseInstance function releases an Instance of a COM object.

再套到 Outlook 開啟新郵件的語法如下:
// 新增連結
   CALL ui.interface.frontcall("WinCOM","CreateInstance",["Outlook.Application"], [outapp])
// 開啟新的郵件
   CALL ui.interface.frontcall("WinCOM","CallMethod",[outapp, "CreateItem(olMailItem)"], [outit])
// 開啟畫面
   CALL ui.interface.frontCall("WinCOM","CallMethod",[outit, "Display"], [outcon])
// 郵件的內容
   CALL ui.interface.frontCall("WinCOM","SetProperty",[outit, "HTMLBody","<HTML><BODY>郵件內容</BODY></HTML>"], [result])
// 郵件主旨
   CALL ui.interface.frontCall("WinCOM","SetProperty",[outit, "Subject","郵件主旨"], [result])
// 副本收件者
   CALL ui.interface.frontCall("WinCOM","SetProperty",[outit, "cc","張世勳 4shiun@gmail.com"], [result])
// 收件者
   CALL ui.interface.frontCall("WinCOM","SetProperty",[outit, "to","張世勳 4shiun@gmail.com"], [result])
// 密件副本收件者
   CALL ui.interface.frontCall("WinCOM","SetProperty",[outit, "bcc","張世勳 4shiun@gmail.com"], [result])
// 傳送郵件
   CALL ui.interface.frontCall("WinCOM","CallMethod",[outit, "Send"], [outcon])
// 關閉連結
   CALL ui.interface.frontcall("WinCOM","ReleaseInstance",[outapp],[result])

2014年8月6日

如何直覺式知道 axmi221 其他地址和客戶聯絡人有沒有內容 ?

過去的文章可以用一個圖示就知道有沒有附件的資料-增加相關文件圖示
方便查詢時就不需要每個都按相關文件去查看。

那如果是 Action 呢? 能不能知道 Action 串連的程式有沒有資料。
舉例: axmi221 客戶基本資料能不能直覺式就看出來有沒有其他地址和客戶聯絡人呢?

其實也是可以的,在 Action 可以動態加上 image 的圖示就可以了,
沒辦法改變 Action 的文字顏色或是背景的顏色。
Genero 已經有預設一些圖示提供給 TIPTOP 可以直接宣告來使用,
想要看有那些圖示,請參考:/u1/genero/gas/pic/ 資料夾的 png 檔。



再來就是依範例加上此段程式就可以啦。有資料的時候就會顯示圖示,沒有資料的話就不會顯示圖示。
這樣就方便使用者可以很直覺的知道有沒有輸入資料了。

     # 有客户其他地址時顯示符號
     LET l_cnt = 0
     SELECT COUNT(*) INTO l_cnt FROM ocd_file WHERE ocd01 = g_occ.occ01
     IF l_cnt > 0 THEN
        LET w = ui.Window.getCurrent()
        LET n = w.findNode("MenuAction","customer_address1")
        CALL n.setAttribute("image","information")
     ELSE
        LET w = ui.Window.getCurrent()
        LET n = w.findNode("MenuAction","customer_address1")
        CALL n.setAttribute("image","")
     END IF
    
     # 有客户聯絡人時顯示符號
     LET l_cnt = 0
     SELECT COUNT(*) INTO l_cnt FROM oce_file WHERE oce01 = g_occ.occ01
     IF l_cnt > 0 THEN
        LET w = ui.Window.getCurrent()
        LET n = w.findNode("MenuAction","customer_contact")
        CALL n.setAttribute("image","information")
     ELSE
        LET w = ui.Window.getCurrent()
        LET n = w.findNode("MenuAction","customer_contact")
        CALL n.setAttribute("image","")
     END IF